diff --git a/.genignore b/.genignore
index 858ae1b..43cea29 100644
--- a/.genignore
+++ b/.genignore
@@ -1,5 +1,7 @@
pylintrc
+docs/docs.json
+docs/overview.mdx
# Owns retry response classification (408/429/5XX + transient inner error.code on 400s).
# Speakeasy has no overlay/hook surface for the 400-inner-code case, so this file is
# hand-maintained; genignore stops `speakeasy generate` from overwriting it. -- Claude
-src/openrouter/utils/retries.py
\ No newline at end of file
+src/openrouter/utils/retries.py
diff --git a/.github/workflows/docs-nav.yaml b/.github/workflows/docs-nav.yaml
new file mode 100644
index 0000000..fc4c815
--- /dev/null
+++ b/.github/workflows/docs-nav.yaml
@@ -0,0 +1,32 @@
+name: Docs navigation
+
+permissions:
+ contents: write
+ pull-requests: write
+
+on:
+ workflow_dispatch:
+ pull_request:
+ paths:
+ - "docs/sdks/**"
+ - "scripts/gen-docs-nav.sh"
+ - ".github/workflows/docs-nav.yaml"
+
+jobs:
+ gen-docs-nav:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v5
+ with:
+ ref: ${{ github.event.pull_request.head.ref }}
+ token: ${{ secrets.GITHUB_TOKEN }}
+
+ # jq is preinstalled on GitHub-hosted ubuntu runners.
+ - name: Regenerate docs navigation
+ run: scripts/gen-docs-nav.sh
+
+ - name: Auto-commit docs.json navigation
+ uses: int128/update-generated-files-action@v2
+ with:
+ commit-message: "Chore: regenerate docs navigation"
diff --git a/.gitignore b/.gitignore
index d18d69d..69aa47c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,7 +16,6 @@ __pycache__/
# Speakeasy generation artifacts (generated in OSS repo, not here)
.speakeasy/*.lock
.speakeasy/*.openapi.yaml
-/docs
# Environment
.env
.env.local
diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock
index da660a6..52eceb3 100644
--- a/.speakeasy/gen.lock
+++ b/.speakeasy/gen.lock
@@ -1,56 +1,56 @@
lockVersion: 2.0.0
id: c48cf606-fb42-4a45-9c23-8f0555307828
management:
- docChecksum: e7ae838af3f89aafec730d6f56a6264b
+ docChecksum: 1b3480b82990a39f968571a292695e01
docVersion: 1.0.0
- speakeasyVersion: 1.680.0
- generationVersion: 2.788.4
- releaseVersion: 0.10.8
- configChecksum: 8243c4a0e55e45da047a1d60c75a497d
+ speakeasyVersion: 1.787.0
+ generationVersion: 2.914.0
+ releaseVersion: 0.11.3
+ configChecksum: 9580963049895d84eccfc135025854cb
repoURL: https://github.com/OpenRouterTeam/python-sdk.git
installationURL: https://github.com/OpenRouterTeam/python-sdk.git
published: true
persistentEdits:
- generation_id: 941715a1-02fc-4177-a705-0f0a75de97ec
- pristine_commit_hash: d3f06b10deb99bed3a70737944b76cb45ba18876
- pristine_tree_hash: 7e30bc063f631c35e1645f8790acc79f301f383f
+ generation_id: 00a7dc9a-a2f7-46bb-898f-e804c87aa438
+ pristine_commit_hash: 22206487f7eccf058be8483fb016c65abc71aef9
+ pristine_tree_hash: c724440db515750df210411562157b40257083ef
features:
python:
acceptHeaders: 3.0.0
- additionalDependencies: 1.0.0
+ additionalDependencies: 1.1.0
additionalProperties: 1.0.1
- constsAndDefaults: 1.0.5
- core: 5.23.14
+ constsAndDefaults: 1.0.7
+ core: 6.0.33
defaultEnabledRetries: 0.2.0
deprecations: 3.0.2
devContainers: 3.0.0
downloadStreams: 1.0.1
- enumUnions: 0.1.0
- envVarSecurityUsage: 0.3.2
+ enumUnions: 0.1.1
+ envVarSecurityUsage: 0.3.3
flatRequests: 1.0.1
flattening: 3.1.1
- globalSecurity: 3.0.4
+ globalSecurity: 3.0.7
globalSecurityCallbacks: 1.0.0
globalSecurityFlattening: 1.0.0
- globalServerURLs: 3.2.0
+ globalServerURLs: 3.2.1
globals: 3.0.0
groups: 3.0.1
ignores: 3.0.1
- methodArguments: 1.0.2
- methodSecurity: 3.0.1
+ methodArguments: 1.1.1
+ methodSecurity: 3.0.3
multipartFileContentType: 1.0.0
- nameOverrides: 3.0.1
- nullables: 1.0.1
- openEnums: 1.0.1
- pagination: 3.0.7
- responseFormat: 1.0.1
- retries: 3.0.3
- sdkHooks: 1.2.0
- serverEvents: 1.0.11
+ nameOverrides: 3.0.3
+ nullables: 1.0.2
+ openEnums: 1.0.4
+ pagination: 3.0.10
+ responseFormat: 1.1.0
+ retries: 3.0.7
+ sdkHooks: 1.3.0
+ serverEvents: 1.1.1
serverEventsSentinels: 0.1.0
serverIDs: 3.0.0
- unions: 3.1.1
- uploadStreams: 1.0.0
+ unions: 3.1.7
+ uploadStreams: 1.0.3
trackedFiles:
.devcontainer/README.md:
id: b170c0f184ac
@@ -76,6274 +76,6310 @@ trackedFiles:
id: 3aed33ce6e6f
last_write_checksum: sha1:d70160e42e737f03bca79873bae8e91ae2b585d1
pristine_git_object: 9c1506b8f539140db04b239d7a84d8b599747932
- docs/components/aabenchmarkentry.md:
- id: f90294cbb4a3
- last_write_checksum: sha1:86a3b23d00014cdee0eea44dcdbaf965117a6e35
- pristine_git_object: f4d05c6ca2c90f231fc59abd56b907a02fcd3dc1
- docs/components/action.md:
- id: 6b3978ee918f
- last_write_checksum: sha1:9d4cd420c5cd5ea25837e2c6db447d5ecb600b7a
- pristine_git_object: 937ac471f7118c9064b2db116df9cf68f1b6b288
- docs/components/actionenum.md:
- id: 608bbbe865bb
- last_write_checksum: sha1:b7b7984fc2930c3a7be17c2f731e9ced7f8432c5
- pristine_git_object: 80966ca1792422be02beb5f879d9f15e0ec9388b
- docs/components/actionfindinpage.md:
- id: 88f0962aff68
- last_write_checksum: sha1:6cb79624f6c2ecba637c70ba8a95904e43d598f6
- pristine_git_object: e9eb5e8cbb42c0c7b6cdd00591453bc23a579d90
- docs/components/actionopenpage.md:
- id: 0956df8f10e4
- last_write_checksum: sha1:88d726e5b59287d1ff171621cbf0d16ea9d5d9da
- pristine_git_object: 0401058dca54568c8f2e686e4e82e0f40e0445cf
- docs/components/actiontypesearch.md:
- id: b9d4385f8dbc
- last_write_checksum: sha1:b47e07eb215799391aa85eb26fdd81b3ad21ba0f
- pristine_git_object: 094a1e844d3476ba189a4a88987d4507efdda2a6
- docs/components/activityitem.md:
- id: 3a8beda39814
- last_write_checksum: sha1:c91cff73639d4b52bea337fc8110c840684b247f
- pristine_git_object: 9cbfb1a7ebd05af4ffa7a514dc1348ef4637efb1
- docs/components/activityresponse.md:
- id: b97e402ef453
- last_write_checksum: sha1:8e2b1926246a5204656dc0e027ced41e5ab8509b
- pristine_git_object: 3e901718f78569d175db37fb6bdbc84733dd8d61
- docs/components/advisornestedtool.md:
- id: afec78271fac
- last_write_checksum: sha1:ca6504064c6d1e18c50d38edb7ee9ab8749caa06
- pristine_git_object: d830783b9c4bd36787ad3532b11a2b8a297d01c7
- docs/components/advisorreasoning.md:
- id: a6a4f2f081cf
- last_write_checksum: sha1:44835b03d48275fbd0ee12badc399462037a2f12
- pristine_git_object: 123091224cbc4d87e2e01748e013618f2d142632
- docs/components/advisorreasoningeffort.md:
- id: 8b65bf21bf5d
- last_write_checksum: sha1:ae1a31169657770ac54bd15b8b9ba99dec447546
- pristine_git_object: 8828292d4f0692af00fefc00ae0a702cb151d2f1
- docs/components/advisorservertoolconfig.md:
- id: 9a630ec9486f
- last_write_checksum: sha1:b01e3db43dd70ddca3a7bb093b99f5b14c669835
- pristine_git_object: 82c8b8f26dd010e9502b80219619f2c7f12dff95
- docs/components/advisorservertoolopenrouter.md:
- id: e66ed24a0e81
- last_write_checksum: sha1:20e9d09f8361ef7b1ffced630df13d9deebb2f98
- pristine_git_object: 2ce9d23560ba11d80bf42cc7eca4abe081bdb669
- docs/components/advisorservertoolopenroutertype.md:
- id: 9bc4e9782bad
- last_write_checksum: sha1:ae6778a1388bee3203a3f740a01dd8eace116b2e
- pristine_git_object: 0a78aa653885b941e7c1f9be4e21ccc50db2ee51
- docs/components/allowedtools.md:
- id: b6010d1cddfb
- last_write_checksum: sha1:db3b637b995692cfa85a489b704a63156138c8cd
- pristine_git_object: 3dd69cca1b0896871de5a651e005d4675e74ec99
- docs/components/allowedtoolsunion.md:
- id: 751852518b1f
- last_write_checksum: sha1:8ab3ad15765921302f2c9a9a02953069e7fdac9d
- pristine_git_object: 1be45074b7fd2f1e42db30f70cb43874f6ff1afc
- docs/components/always.md:
- id: 60d5b0ff8f83
- last_write_checksum: sha1:04684b9e3eea071da9938b3e1deed152f845a0e2
- pristine_git_object: a7a7fd1155f474f4c45ce17e4d678ad2736153b2
- docs/components/annotationaddedevent.md:
- id: 7639957f7faf
- last_write_checksum: sha1:fb9a7f6efa4a47ea2b1c6a48c55c087c21fa11e0
- pristine_git_object: 6f92c1051f01c485787e89f13ad00c7ca0822ab8
- docs/components/annotationaddedeventtype.md:
- id: 11b3c6c877d0
- last_write_checksum: sha1:4d8fae9c0de452c9ee796eeab63d242e4feb8497
- pristine_git_object: 4840df7f7005389811fae7c8868ad8d6c1efcd18
- docs/components/anthropicadvisormessageusageiteration.md:
- id: 33186ccd38ac
- last_write_checksum: sha1:85b1ab8c5a0caba0d812a49020e86c3e4e4e9a08
- pristine_git_object: fb1fb2c3c092a43a6f03f4b264d71641bd0e7446
- docs/components/anthropicadvisormessageusageiterationtype.md:
- id: f57e902db2d1
- last_write_checksum: sha1:dddea52debf78713faf29d2538ebb770389ec3e5
- pristine_git_object: c91caf36632b4be80f9ee056c70353060066eb7a
- docs/components/anthropicallowedcallers.md:
- id: 11ad7b23165a
- last_write_checksum: sha1:25cf3f22c4aec1a2dad1c12dd83d5ac9681386c5
- pristine_git_object: ecfedca4e0825576bdd7ade82c36d416f7f0283c
- docs/components/anthropicbase64imagesource.md:
- id: 1aa7be30aebe
- last_write_checksum: sha1:0b5b8ed525a2efc9ce8760fd79282e0175cd1c61
- pristine_git_object: 85d0122f3a306415f68e26dbe052aaf5f153d250
- docs/components/anthropicbase64imagesourcetype.md:
- id: e35e0048c55b
- last_write_checksum: sha1:82843d316fcdcabb7fbe6e9781dde48f2baec3f1
- pristine_git_object: e99893ec8fc73701b7fdc60c27c659be2947b024
- docs/components/anthropicbase64pdfsource.md:
- id: f2ead8ca2f15
- last_write_checksum: sha1:0e3075d067fe20ac0a554c202025556804227a23
- pristine_git_object: 449a1ae4fd04b9641e7ad4d912b6ca5421dcbabf
- docs/components/anthropicbase64pdfsourcemediatype.md:
- id: a92d0e282b96
- last_write_checksum: sha1:5920e0ae269db4de27b028d04d17358fcc8ab6b6
- pristine_git_object: d35634238584b5e9cba674d0b27d851030b5596c
- docs/components/anthropicbase64pdfsourcetype.md:
- id: fc9f8018ae71
- last_write_checksum: sha1:168c5078830470f8526ad3c685fb9f53627f1874
- pristine_git_object: 956f981204ca21136c0b80cf77f4704a2213c446
- docs/components/anthropiccachecontroldirective.md:
- id: 3bdd9daf51d9
- last_write_checksum: sha1:c69886ea262e4d88ee0d17e0be62a7fba60a8b4b
- pristine_git_object: d71a660204cd918ac8ab609da5f70d9f51a5b6f0
- docs/components/anthropiccachecontroldirectivetype.md:
- id: a20a54545fe3
- last_write_checksum: sha1:467772e8b5b227b4e80b0600d3ed275aeb2ea210
- pristine_git_object: a08e83446faeb323ccbeb06f7da8ceed71fa3c11
- docs/components/anthropiccachecontrolttl.md:
- id: 980004cae93f
- last_write_checksum: sha1:6f66927f536c351dcfbb940672511bd8a6fdd1a0
- pristine_git_object: 32e8fd42002d9379fa207d0867b428c443a63a42
- docs/components/anthropiccitationcharlocationparam.md:
- id: e6f0e4e63d86
- last_write_checksum: sha1:4e103661aefac7bd891ed1267ae3d2a4b2067c45
- pristine_git_object: 8f0ca485c09e0ef01003409e30c4931fbf83663e
- docs/components/anthropiccitationcharlocationparamtype.md:
- id: d9f370ac77a9
- last_write_checksum: sha1:e9b7f7396709855c9179aef1c819fdd638f67471
- pristine_git_object: f74ca0a4f0e9bca084a782888a50123e04ab2c2e
- docs/components/anthropiccitationcontentblocklocationparam.md:
- id: 7783fc4a6eaa
- last_write_checksum: sha1:f36e22562bb4023e73088b9dfa705570279817c0
- pristine_git_object: 09b26e1e3a62c09594521ae196f897eb497e9164
- docs/components/anthropiccitationcontentblocklocationparamtype.md:
- id: c3817aa89a42
- last_write_checksum: sha1:c7894f9e4c722f29fde2eb60f9db8853ebfe8de7
- pristine_git_object: fedc00b8854ae3314a0e9c4eea84e74a5c13feb3
- docs/components/anthropiccitationpagelocationparam.md:
- id: cd261e1abdb6
- last_write_checksum: sha1:81d6d355c0b31fdf6c65695ebb00d4371455478a
- pristine_git_object: 71b26a211f327ab00717c3d3a02d24c379cae51b
- docs/components/anthropiccitationpagelocationparamtype.md:
- id: 0bb92f6478bc
- last_write_checksum: sha1:d9db36db8211a392d288b220ddcff29037f1c84c
- pristine_git_object: 33d9a680811877051f6e366e318b9e6a63fa48cf
- docs/components/anthropiccitationsearchresultlocation.md:
- id: 9b412016e8d2
- last_write_checksum: sha1:715d3733c885b37e50258f7bdbad0a9dd8efc9f6
- pristine_git_object: 67126480c4965f56ddb273b164b479bd963155bc
- docs/components/anthropiccitationsearchresultlocationtype.md:
- id: 2f4d80537d5e
- last_write_checksum: sha1:e7638187480edacbe9bedfad7e4bff252544b97d
- pristine_git_object: a6fd8db4f698fa09bfb1e7edd8256e336db3b6e3
- docs/components/anthropiccitationwebsearchresultlocation.md:
- id: 02c13281dbef
- last_write_checksum: sha1:85742ad3ff04613e6d4fa8d24e41d09012e387da
- pristine_git_object: 0c80eb2994207d1b01eba6ba706b21b0fbc59b7d
- docs/components/anthropiccitationwebsearchresultlocationtype.md:
- id: 9a62f0c12dea
- last_write_checksum: sha1:d6f2b7a37400b47dc5fe09582e4a1c386efd5f64
- pristine_git_object: 1d4dc34466805c06bef9a5ea0d4b3e2658d8fbca
- docs/components/anthropiccompactionusageiteration.md:
- id: 0fdb4605a989
- last_write_checksum: sha1:56320c5757e6070820d812140e08b55844c0c387
- pristine_git_object: 12fda13cd239b66019e9d6ecba71731b99241816
- docs/components/anthropiccompactionusageiterationtype.md:
- id: 05adaf701f26
- last_write_checksum: sha1:73792e3e037989d145d95059d9926d9cca0b09fa
- pristine_git_object: 8b38e51d69691041d5c05c3fd3f6b7e0d400fce9
- docs/components/anthropicdocumentblockparam.md:
- id: 0c8300a9f979
- last_write_checksum: sha1:96771cf30db36eb18111c9600fda87cb6e446ec2
- pristine_git_object: 69175cafdd4cc3b1ae3399af114af0fe597d9272
- docs/components/anthropicdocumentblockparamcitations.md:
- id: 4f8b596d5f87
- last_write_checksum: sha1:4de5b2108ca20987efb24eea43fd094267ed7778
- pristine_git_object: 11eef596d001cefd55d4259b88588584d417b7e3
- docs/components/anthropicdocumentblockparamcontent1.md:
- id: f03af31809d7
- last_write_checksum: sha1:022157f8549ece930f6fcade0b5b1aa005026ed2
- pristine_git_object: af922ffbec0764739c11f30f142a39888f97e4a9
- docs/components/anthropicdocumentblockparamcontent2.md:
- id: f8f62b828928
- last_write_checksum: sha1:ff03664b45c3d4b1a7648d1b13f14a6c3c7ab2ee
- pristine_git_object: 04e088ebbad5b5f732f4a3c6b8c217e9820e6853
- docs/components/anthropicdocumentblockparamsourceunion.md:
- id: 5c379a9fad3f
- last_write_checksum: sha1:ce2097d0c60ee06bb288cffbd35c08abdf82aa84
- pristine_git_object: 35e11f2c264a42ca6a1fd3097f4274d30713e993
- docs/components/anthropicfiledocumentsource.md:
- id: 404551567ab3
- last_write_checksum: sha1:ae8085f6b541beb16934bbe169f900c7e62c8920
- pristine_git_object: 1b071e7e1ea6deac4a5d11b83d0b2fbc52e285c0
- docs/components/anthropicfiledocumentsourcetype.md:
- id: 4943d732eea5
- last_write_checksum: sha1:d858a91a7c0b7c4d91e1e6dc29dcef939a59577f
- pristine_git_object: aeaa9e766bc8129e0b632d620d9cc5a442c2f2ee
- docs/components/anthropicimageblockparam.md:
- id: e76a99fa0c70
- last_write_checksum: sha1:d135899831112faaca1da7b2ca7b0f1b623dffcd
- pristine_git_object: 34937846b769de97535e499d17a4889a9cf92dec
- docs/components/anthropicimageblockparamsource.md:
- id: 05e225739d47
- last_write_checksum: sha1:b93f27120a3451f97098f6319540ee224b424d44
- pristine_git_object: 54510ebaf02ff39dc219c6a1e57cecad30fda517
- docs/components/anthropicimageblockparamtype.md:
- id: 7fe673bf1e0f
- last_write_checksum: sha1:2ea54ee8d7c469893dcc847af983787b757b34f3
- pristine_git_object: ccaa7efa4ff1414d656a398a06d90208fc87c866
- docs/components/anthropicimagemimetype.md:
- id: 40911ee4de83
- last_write_checksum: sha1:99fd6c56ced25fb3ffc7aef739db6801c2cfdfb2
- pristine_git_object: 4e1c68d63548a7f98e134278109d89e5576964e8
- docs/components/anthropicinputtokensclearatleast.md:
- id: 5c23b6fac443
- last_write_checksum: sha1:aedbf281d2f6af56fbca2137a7890f797feded16
- pristine_git_object: d47f90c38cadee0fef9aa16a94ee5bf6b8fe5ea7
- docs/components/anthropicinputtokensclearatleasttype.md:
- id: 78c870e2bd06
- last_write_checksum: sha1:ffd632983f9e6ec1d67f7fa50ebb3eadc75c3726
- pristine_git_object: c59676ab120e5564d220b25b88f00747d629239c
- docs/components/anthropicinputtokenstrigger.md:
- id: 082aaa1c24ef
- last_write_checksum: sha1:b08b557ecebf3db71a4ee119f59ca35f70719d79
- pristine_git_object: e0539b55e212a918b770d6047bbf9489067a187c
- docs/components/anthropicinputtokenstriggertype.md:
- id: c1ed4899ff43
- last_write_checksum: sha1:c30ae212332ee1793cfdf928f5529f02f57fba08
- pristine_git_object: 07b76dbfef3ae2fa73a2c8a347aaec4a2c2db250
- docs/components/anthropiciterationcachecreation.md:
- id: 3a99c1a33f1b
- last_write_checksum: sha1:c6fd763c2cebfbba0a36f8f6200ff6974f702e4b
- pristine_git_object: 55371b59cf7faa5425c4207b1adb658830bbd7d8
- docs/components/anthropicmessageusageiteration.md:
- id: 161b60719de5
- last_write_checksum: sha1:6620e05e3214198239b7dc56b085630726d6b21b
- pristine_git_object: 3cb3b43e9fbd0f5cab636b5b48b0c80dedae1839
- docs/components/anthropicmessageusageiterationtype.md:
- id: 3d6e1d90edab
- last_write_checksum: sha1:9f6d1c4cf939adcd22b792d57ab41cde2c1b18a9
- pristine_git_object: 7ba4b3470290a6518ddc33a5675daf4a486871b3
- docs/components/anthropicplaintextsource.md:
- id: 889fb950c676
- last_write_checksum: sha1:d8887a9e5aed15b708e69d8073fa6a5563afca5b
- pristine_git_object: 91a973132165591134f99356fec017d76958868f
- docs/components/anthropicplaintextsourcemediatype.md:
- id: 199cf01caaa8
- last_write_checksum: sha1:ed698e5b4b7ef9272ebe94ec4a44d91a1be84e03
- pristine_git_object: f190256a5e75ee4213a8ef59031a8f7fbaaaacbf
- docs/components/anthropicplaintextsourcetype.md:
- id: f1fea7c1e4fc
- last_write_checksum: sha1:a75442b716b22fd61eb4ae5ad622d5e203a80d11
- pristine_git_object: a60119897087817d12c9de7d2cd2b588b8bed031
- docs/components/anthropicsearchresultblockparam.md:
- id: ad63a45ac881
- last_write_checksum: sha1:6788bc9ab1df588426a9fdec928f3a4220bc9847
- pristine_git_object: e1de3630f6b3f8c1c24dc7ac74bea2190f0091f2
- docs/components/anthropicsearchresultblockparamcitations.md:
- id: da531f9a0e74
- last_write_checksum: sha1:cd7ea4104da6e477e8d58334747f0bbf67724eeb
- pristine_git_object: f6d6cab0bafe8ed896497dbfd33abc45cac5ea54
- docs/components/anthropicsearchresultblockparamtype.md:
- id: 727f596d14b6
- last_write_checksum: sha1:8aac220d2c56349083d624947756e5d459df3b50
- pristine_git_object: 89be471a605fb0c9061d62cd853fa70cea52d88f
- docs/components/anthropicspeed.md:
- id: 3391bd502330
- last_write_checksum: sha1:40c366feb39d4306823c71e112b2c9fb40adca9e
- pristine_git_object: b523006e867a12653a8e462cd2158e4ff6a5a33f
- docs/components/anthropictextblockparam.md:
- id: 5dc491a109ed
- last_write_checksum: sha1:53c890398ec305cb94ef47dc91ede516284903c0
- pristine_git_object: 7324375b8e283a1edf97985d2e71aaa1a2412aa2
- docs/components/anthropictextblockparamtype.md:
- id: f9227c63989c
- last_write_checksum: sha1:af1cdb8600c227ecdc48bfb520d51f38ba523694
- pristine_git_object: 36b869568067045bfd1fa66fb45cbd965b8c1e23
- docs/components/anthropicthinkingdisplay.md:
- id: b272b36eff65
- last_write_checksum: sha1:2b8212e5dfbd0f121109ed012672f9428b6ac843
- pristine_git_object: 0898b8c4b0f49475fa1499b2c74cc3a834c92890
- docs/components/anthropicthinkingturns.md:
- id: 09d0931e9ea8
- last_write_checksum: sha1:2ff92a75d19d513a164ee38de112bd899d5cfbc6
- pristine_git_object: f859cfcc0a4b6c371aa208c8adde675c6ac18ba1
- docs/components/anthropicthinkingturnstype.md:
- id: 534b0531d1f7
- last_write_checksum: sha1:f610815ab5817acb5b889e5ce1b998f1ad3fe0a4
- pristine_git_object: 4dbe66c64d7ac07a435d31df28575db92ced1af3
- docs/components/anthropictooluseskeep.md:
- id: 940cf391e4a5
- last_write_checksum: sha1:639a5695d2f842fcf63f8e441f0f471179a8efa9
- pristine_git_object: 9cfdf90d5fc6af4eba6de5ab47e3795ad92be48b
- docs/components/anthropictooluseskeeptype.md:
- id: eb234b2636cf
- last_write_checksum: sha1:84a9338dcd3827d9cbcf17766e64983370e8e869
- pristine_git_object: c34dd00b62cc9a2b74d236527255bef573f15757
- docs/components/anthropictoolusestrigger.md:
- id: ab2d3ea6c316
- last_write_checksum: sha1:7866497896bca2a295eace8397a3899d8cb85325
- pristine_git_object: f4397121d0f229341668e1cd81d8cf0ce55ef097
- docs/components/anthropictoolusestriggertype.md:
- id: 45a733d909af
- last_write_checksum: sha1:474ee631bb8dcae59c70180e496431be478cae5f
- pristine_git_object: 675f7fd5e9133893bf44dc86bcd92d1f6dfaad61
- docs/components/anthropicunknownusageiteration.md:
- id: 7cd2d2aa995f
- last_write_checksum: sha1:47e54d3e8225cc69c125c2ab45d0377d8407c36a
- pristine_git_object: 2f341aed854466929fc7e8c909b771fb276447b0
- docs/components/anthropicurlimagesource.md:
- id: 8ff15dedbdfe
- last_write_checksum: sha1:bab99b78bdc564a6d16910aec71cfc8a15fe5a91
- pristine_git_object: 139e448ddb9237ffcca950e40d750dce6367600b
- docs/components/anthropicurlimagesourcetype.md:
- id: b1d4d917a454
- last_write_checksum: sha1:31607f39efc2073e73c78f328a5b4db255d88d1b
- pristine_git_object: d1130c155fb98d564ce9ca8df112ce9d538c2990
- docs/components/anthropicurlpdfsource.md:
- id: 9e25fcc944c4
- last_write_checksum: sha1:e22910f7eebbe515947593dd6bea1f9705a58389
- pristine_git_object: 30b6984257ffadc3792856e44840173ddbdc440d
- docs/components/anthropicurlpdfsourcetype.md:
- id: 2fbeab80f950
- last_write_checksum: sha1:8db23a874bd09d9757276589bd1b4d2ab77180e4
- pristine_git_object: 3757423de0c85933d0aadd6bb331862c69b6fbde
- docs/components/anthropicusageiteration.md:
- id: 9d04ae0634ed
- last_write_checksum: sha1:4fcbd0ad911126d09cb0d1c2deb31274f0cfc437
- pristine_git_object: 0bf1cc48ee7ff861dcd371c0e73aea1cadb50942
- docs/components/anthropicwebsearchresultblockparam.md:
- id: 719c1c8395a3
- last_write_checksum: sha1:21e1935215988acd172e194ff764e3b4c7680733
- pristine_git_object: 15a52b0301ae18a16f8190f2a6af5d51ec70f885
- docs/components/anthropicwebsearchresultblockparamtype.md:
- id: f46b2c29a660
- last_write_checksum: sha1:3dd6995ff527a0b47e416024d6d1ef8b512dd5cc
- pristine_git_object: 3f1d82e5332699814368a1dc232c2ce3b975c6d8
- docs/components/anthropicwebsearchtooluserlocation.md:
- id: a1a27b73b162
- last_write_checksum: sha1:13cd42950dc5cfd9eb59b038eda215d4bc70511b
- pristine_git_object: 4dab8dcb5e68dd2a213e0801a746c0f6814a08fd
- docs/components/anthropicwebsearchtooluserlocationtype.md:
- id: 9f4ae9375a85
- last_write_checksum: sha1:383159e247a79336120befe7f34d876dc2e93b24
- pristine_git_object: 21c0a2b3ee378c2301f8f82385193e3f6bfc0f01
- docs/components/apierrortype.md:
- id: 036063e21392
- last_write_checksum: sha1:860373546a5bd66c47bb4f976e92cc512727b51a
- pristine_git_object: 10664241eafdb8ba666faebf62e4285f452450e7
- docs/components/apitype.md:
- id: "0e0508573603"
- last_write_checksum: sha1:36f315a2ffdb3a935abab8832ca98d89e2945a14
- pristine_git_object: 5b0cd61ddd2b151fddc82d0073d760c88432e4cf
- docs/components/applypatchcallitem.md:
- id: 3b65f71849fb
- last_write_checksum: sha1:9b9efa229a6801da2ecd6fe16526adce76039dab
- pristine_git_object: 1a5242abe7b4b84a334e40104f1f8e37d102ac76
- docs/components/applypatchcallitemtype.md:
- id: af492b652e95
- last_write_checksum: sha1:ce150433d6fc023d92c4c92bfa151748dfe79976
- pristine_git_object: 46cff3bed1ac629620c343236e022c9dcbcd3262
- docs/components/applypatchcalloperation.md:
- id: 8f8084ad5328
- last_write_checksum: sha1:29f32405863a6a0e2f32a01cbbe7e2e0af88dd62
- pristine_git_object: 8898fd5e301a696c6874b4c1793559eaa7dcdc61
- docs/components/applypatchcalloperationdiffdeltaevent.md:
- id: d3415d4a1b9b
- last_write_checksum: sha1:11bd720248016d0471a3f0a77472d4ab0e5bd1e7
- pristine_git_object: 8909a6bf68ccef93331486c47e2dbc6f2fff5e2e
- docs/components/applypatchcalloperationdiffdeltaeventtype.md:
- id: 54634e44c46c
- last_write_checksum: sha1:9a44a4cc508e7168e88735a3364842f11fc7d16a
- pristine_git_object: e6617985996f698f0aab9cc8a02b1afd96f34486
- docs/components/applypatchcalloperationdiffdoneevent.md:
- id: 97b9df6f879c
- last_write_checksum: sha1:74b5dc299f320882312db1990eb8906c2ee4ced5
- pristine_git_object: 341163b35457a4d5a7e55dbc4f3a8ca3a7ade543
- docs/components/applypatchcalloperationdiffdoneeventtype.md:
- id: 102f8c5ccfcc
- last_write_checksum: sha1:0e1dd7f57e56d0ec76b803608fc89adb542bc40c
- pristine_git_object: d4dbd0e072f04d2c0044d1cc06a34d4edf7b77e0
- docs/components/applypatchcalloutputitem.md:
- id: 5c1f50f02008
- last_write_checksum: sha1:c0f25cda15d3a3bc4e7503e78a6f397d738fc160
- pristine_git_object: 76eca926b0d9ba9ce9c6cc35e90f563e01553c4c
- docs/components/applypatchcalloutputitemstatus.md:
- id: 23ec4ce36067
- last_write_checksum: sha1:8ae4e87b085331254ff882190f1cddebb64b6928
- pristine_git_object: 7a4608be7dabb77f98399f19ddaa5ea53432934b
- docs/components/applypatchcalloutputitemtype.md:
- id: ab607dca3dbe
- last_write_checksum: sha1:ee760d4d4960bfc69f60962903a7158289f055ee
- pristine_git_object: 3e5acbd34e8eca78b6b1c32acdc60ad2c3f22a94
- docs/components/applypatchcallstatus.md:
- id: 0815abe9f197
- last_write_checksum: sha1:d0154ff9c6255e336a968f3eb8c9fb676f2ecd24
- pristine_git_object: c9a787f93df86fbdd02f560b747515ec8192658d
- docs/components/applypatchcreatefileoperation.md:
- id: 1bf665d7cdbc
- last_write_checksum: sha1:d068e946561d4d7775ec8f2b0207d7fffeabf814
- pristine_git_object: 89ed40ddcaa58553b10dd2767f2631bb8c9cc28a
- docs/components/applypatchcreatefileoperationtype.md:
- id: 41871f7376bc
- last_write_checksum: sha1:55185b7ce0ff3eae63d3989fdb595a86f23ee3f2
- pristine_git_object: d646e0e54e4f47462493e58e3ee1ff6d619b7639
- docs/components/applypatchdeletefileoperation.md:
- id: 40d6fde26cbf
- last_write_checksum: sha1:d829b902122dc74ad25ada3917856a201070b0cb
- pristine_git_object: 83c9024dc8f3b428d24aa3fced87798a5ea2a391
- docs/components/applypatchdeletefileoperationtype.md:
- id: cb682dc15349
- last_write_checksum: sha1:d4c6cb96275e1819ac0703cc44b8dba8712906f7
- pristine_git_object: a0bfcdc7a06806ff8775e750ac01a7ab4dfbe59c
- docs/components/applypatchengineenum.md:
- id: 88d286d64cf9
- last_write_checksum: sha1:b710dae26b4346f93329c939e328235b8677943d
- pristine_git_object: 3e03035f0b1030d9cdfdd0cf05e01448a0bfea8f
- docs/components/applypatchservertool.md:
- id: 924a4805520a
- last_write_checksum: sha1:f87ee16357b393e199bf0a4ba74e02130f1f243b
- pristine_git_object: 704ebe93904414764ac0d52dcfa8bc76c1eaebe2
- docs/components/applypatchservertoolconfig.md:
- id: 39d0b010aed8
- last_write_checksum: sha1:176cb9dd525944dccab1963fd0517e5ea7930668
- pristine_git_object: 1714a7e3f21ab477a69713d0d9b94fff88c3a774
- docs/components/applypatchservertoolopenrouter.md:
- id: 8a6bdee0a3c2
- last_write_checksum: sha1:c7dea8ecdb297517e90269bc561eac02bbacd3f7
- pristine_git_object: 573443f89fdc94aa39f5e49168c1edeae66b7338
- docs/components/applypatchservertoolopenroutertype.md:
- id: 5ce7a9b8308e
- last_write_checksum: sha1:eba1ac2d9ac43d1eeda60227b6a3bc6498dc1e79
- pristine_git_object: 44cfe93954107c960d527a15270e8a8107263363
- docs/components/applypatchservertooltype.md:
- id: 3638a8a53d67
- last_write_checksum: sha1:c3139367515e9c0b3dd3109065594824e704c35f
- pristine_git_object: 60aec019e3cecb47bfd388f0e049af9956b6acc8
- docs/components/applypatchupdatefileoperation.md:
- id: 05b222344186
- last_write_checksum: sha1:9cf38c7b0ed8b008b65ee81b4fb86f2e11c0ff06
- pristine_git_object: 232996de25b6fc032afbd39b7af2c04f5dd4e6c5
- docs/components/applypatchupdatefileoperationtype.md:
- id: 1c510d2ad88d
- last_write_checksum: sha1:8fa2595e6a0f4990fc23af82c2c6778e2f23e706
- pristine_git_object: 3580dc449d51835a55f1cd1b9ec2f84faf394972
- docs/components/apprankingsitem.md:
- id: dd9228e6412b
- last_write_checksum: sha1:a25193e5feb4c1ab3010ce853805edfc7ce7b1e2
- pristine_git_object: 8f517a9e02edd21641d769df7eee2423428a0c60
- docs/components/apprankingsresponse.md:
- id: daffc9eb5d56
- last_write_checksum: sha1:a41fa7227e40925975146770e943096a3bf85fe2
- pristine_git_object: 937e19bc9d50abaabfe5afea7e86762b675bc4b2
- docs/components/architecture.md:
- id: 40a5f2f0b4f3
- last_write_checksum: sha1:1edafecb76992fb1ef8201d9686a011a805431f2
- pristine_git_object: 335e0104f7f12774a22886876bde455234e7ea9b
- docs/components/audiourl.md:
- id: 1ad9b13da86b
- last_write_checksum: sha1:9614979c76c9624def8aeecc503aa736c99240a0
- pristine_git_object: 1b3a9c8f1dae9f5706c0a288413b318d16b889f2
- docs/components/autorouterplugin.md:
- id: ebc3c78144c1
- last_write_checksum: sha1:273b6a12737f4b69a14e7bea5ec4f629e6fd6206
- pristine_git_object: ff583fa52683b456bdf7b395d2c88168beaa89cc
- docs/components/autorouterpluginid.md:
- id: a871b7b2af66
- last_write_checksum: sha1:f9df41065f2d4eaf35a8d24a54a3824d17e12284
- pristine_git_object: 350b1e9c7a237364a36740e7737db408de1fba50
- docs/components/badgatewayresponseerrordata.md:
- id: f01b062274e6
- last_write_checksum: sha1:7dc1fd7cde5f6810da4b468ecbfa6c5a68d402c6
- pristine_git_object: 9de5a8934d6aa351f1c5647ce6357e77461ae279
- docs/components/badrequestresponseerrordata.md:
- id: 89775285bd72
- last_write_checksum: sha1:0d82f0aafdf520817e65888918fb7ac0d70e12dc
- pristine_git_object: c36a56e67887463f6f0d3cb9ccf2a3080e6135d7
- docs/components/baseinputscontent1.md:
- id: fd111ee7994f
- last_write_checksum: sha1:06ee5dcc9c33e964906b33ab02bf44de85b7c670
- pristine_git_object: 857c7fa0790891fd854c6116abce0929e03c8039
- docs/components/baseinputscontent2.md:
- id: 5dec0fa82eb2
- last_write_checksum: sha1:c7e158b4269d0ad5effc325530330773e5dac5fe
- pristine_git_object: 3a50f11305760fd431ab50a1f7ff3d63057ff4dd
- docs/components/baseinputsmessage.md:
- id: f6cc4cee483a
- last_write_checksum: sha1:10e3d02668d65f254c848bfb8e9603db5f12ae0a
- pristine_git_object: 132bedb83903245839c7780b0dbffbc399d87b01
- docs/components/baseinputsphasecommentary.md:
- id: fd174d25ec7e
- last_write_checksum: sha1:2aad888ade690360b53ed260c4bfe8b6fea83b25
- pristine_git_object: 26a04fe1e4dc3b16cab331bd47489d46e66195f9
- docs/components/baseinputsphasefinalanswer.md:
- id: b59751ca8a83
- last_write_checksum: sha1:83259dbbbe232731691b441e22f1a62f6e86acf3
- pristine_git_object: dac05a7d487a806d2441f022014b50f748b2c40a
- docs/components/baseinputsphaseunion.md:
- id: 3fca8902e06f
- last_write_checksum: sha1:444f1e8657f8980481945c5ce12802f763097d98
- pristine_git_object: b61ff963ac10ae9caf973c21430f5f46f255ce7b
- docs/components/baseinputsroleassistant.md:
- id: 3856d979d190
- last_write_checksum: sha1:5cd5965071cffb1ffc1b642e671c38509aade865
- pristine_git_object: b761d8327effaaad85ef1142cfa44ac02f1614b8
- docs/components/baseinputsroledeveloper.md:
- id: 6c6fdfa52ca0
- last_write_checksum: sha1:0a37384391e1b01b871a7e949677e9669dd2ca70
- pristine_git_object: b0343ac922881cbab9a12dfc13f25c9d4fb03ac2
- docs/components/baseinputsrolesystem.md:
- id: b72d6c1fdcb2
- last_write_checksum: sha1:bad507026a59cd1249d12d743e1e3a32802dc290
- pristine_git_object: 705081649384c7934924ba076f662972bb3c585f
- docs/components/baseinputsroleunion.md:
- id: f86db5bfaae1
- last_write_checksum: sha1:0d8bdfdd670d40b3b27df27a1d583bccf8dea24a
- pristine_git_object: e0bcefa062a8eb8a69115ff9d9132664dc266272
- docs/components/baseinputsroleuser.md:
- id: 1b2272afb28d
- last_write_checksum: sha1:d847535256c934d2a0cf996bdefb40c37e6ec407
- pristine_git_object: 323c14b40df675719ed15a22b0603c05de3c19c5
- docs/components/baseinputstype.md:
- id: db4b15943a1c
- last_write_checksum: sha1:89b2a0462a9d5d4d177d62768229e2088dc88406
- pristine_git_object: 3ede5b958cfa644256657638490affa94899d0b9
- docs/components/baseinputsunion.md:
- id: b93f8e6d22a2
- last_write_checksum: sha1:d1699f886c2801cb4e96b6e1710c7415e6283589
- pristine_git_object: 2d7597f6a1250fa1b35dc5853f25a0ce1cdfb286
- docs/components/baseinputsunion1.md:
- id: 3b291815d087
- last_write_checksum: sha1:9802e7fee7ddae373d1e3f0e0e9679218b2dab3b
- pristine_git_object: 5d49ac1145e668327a3426952a99d7a4edde0d80
- docs/components/basereasoningconfig.md:
- id: c161e7a17271
- last_write_checksum: sha1:4f3c5e5dda570bb87ec7e2deff31e2372f36b833
- pristine_git_object: 031166f6d79ea3ef1781e95468197271da98738f
- docs/components/bashservertool.md:
- id: ca16c4ffaf49
- last_write_checksum: sha1:c58ad9237fb0b45cf8f3212f165a60fcfa24ca65
- pristine_git_object: d24e01fccba6a930d8313c098a73a61dbd2d2ad1
- docs/components/bashservertoolconfig.md:
- id: a51aee28eb24
- last_write_checksum: sha1:c7c8a07f0a845419436066869a7401be4a825b1a
- pristine_git_object: e6fda611bda8baf16dd2883a69ac44b3e0f0d745
- docs/components/bashservertoolengine.md:
- id: 8199d8ef5ded
- last_write_checksum: sha1:1a4c1975344f3f83bc9b5434f5390986c256ab25
- pristine_git_object: e566f077eec6e66b359e126de105488c6fa338bb
- docs/components/bashservertoolenvironment.md:
- id: 3894aa22282b
- last_write_checksum: sha1:e0903f06288b97c5df4fbb615ad75e32482d4b70
- pristine_git_object: 9e1772e06f6eb18b4646d301a3da18e2fa372638
- docs/components/bashservertooltype.md:
- id: e6ed8eddbb24
- last_write_checksum: sha1:4b8db8f915f099b89698c93a9dd86fdde32f0d29
- pristine_git_object: 39e37fdadaf320fbd499c345f02b0f248331fa98
- docs/components/billable.md:
- id: e56cdac5d413
- last_write_checksum: sha1:98491069a5b43aebf322444078f4484e619feb1d
- pristine_git_object: 37795867a108149fc17bf3eef278a974b555b979
- docs/components/booleancapability.md:
- id: 41eaf33722f3
- last_write_checksum: sha1:cd411f5fcbd4d577fa2fce0e25585f23c36d4d40
- pristine_git_object: fdb413c61dcecb4b3a9a746774ca51dbb46907c5
- docs/components/booleancapabilitytype.md:
- id: ecb8a3396553
- last_write_checksum: sha1:51460435490021c79f8cbea257d7321e15b7b743
- pristine_git_object: 7b69b91002c3e38e6751e581211d9fa17e209ff2
- docs/components/bulkaddworkspacemembersrequest.md:
- id: 12cbe93243c4
- last_write_checksum: sha1:5bc0f5067f2fdd1a05409b18ec723b8b2acb4026
- pristine_git_object: 021221840a6dee060a6d38db651561e5cedf5fc5
- docs/components/bulkaddworkspacemembersresponse.md:
- id: d3aab5e7eed9
- last_write_checksum: sha1:37171ea7c4582693d05a06f6ebeb19a129cf6a51
- pristine_git_object: 41c1638401d9354a1024e72a47d50110d24b71f5
- docs/components/bulkassignkeysrequest.md:
- id: 66e9231f0c3c
- last_write_checksum: sha1:7c4564346bbe9f2692053bb1d518972a9db5ad0e
- pristine_git_object: dc3200c166b6953272e09ebda3f938eae4bb96a4
- docs/components/bulkassignkeysresponse.md:
- id: b27f665882ba
- last_write_checksum: sha1:da6afebdf00235e49b1fc387209eb8b8b2f6d6e4
- pristine_git_object: 37b82b9e69b9eeb3f3c00b981003b0616420b61a
- docs/components/bulkassignmembersrequest.md:
- id: 6cb19834162c
- last_write_checksum: sha1:b66155e4a06bd57879d4431d5631e3d3cbd3f343
- pristine_git_object: 9248f05c534c6b12831004e409d160a66021b8e8
- docs/components/bulkassignmembersresponse.md:
- id: 04b004029650
- last_write_checksum: sha1:64d50ed55132163d6d6337f53e7a97f7fbbdacbd
- pristine_git_object: 2d6897c459041c7d09ec0260ec7fe56efaa4584e
- docs/components/bulkremoveworkspacemembersrequest.md:
- id: e265be6b6db8
- last_write_checksum: sha1:a72176adae768afd731c2ccbad121c82ea3c163d
- pristine_git_object: 370a7447730e57693615aa1dd96d48cef546117a
- docs/components/bulkremoveworkspacemembersresponse.md:
- id: 36a1e8be9e5c
- last_write_checksum: sha1:994efa56174f14f87605bb3e19eefcdad0aea8b7
- pristine_git_object: 3769f7b5f970db9324d32ec681a30dcee2b0a6ad
- docs/components/bulkunassignkeysrequest.md:
- id: 6d254be079fd
- last_write_checksum: sha1:c61da3563e04a493e6b1b72e0f8e5f3f6f6075e8
- pristine_git_object: ea9b9b2a75f9cfcdf15f61b6112e5dbebba26449
- docs/components/bulkunassignkeysresponse.md:
- id: edef516726d1
- last_write_checksum: sha1:184f26fac34f1215c9db3fd5b7472f430fef5692
- pristine_git_object: 5ed2cfdc8e2c73c6216a95dfbe56a03a7e647ce5
- docs/components/bulkunassignmembersrequest.md:
- id: 0f45518f8ff5
- last_write_checksum: sha1:6c1c57a7a3b5b54c7e0d4abcc4ba94ea4cd918c2
- pristine_git_object: 98e6c00fa67575f503236d92f26a9aa0024cab3c
- docs/components/bulkunassignmembersresponse.md:
- id: 77eb83663414
- last_write_checksum: sha1:119b447d7ce2042404b3879a5445640d90e67cc2
- pristine_git_object: b0ce35cdbca7e49ed6691f87c2481ad9060df225
- docs/components/by.md:
- id: 1bcedb5155b3
- last_write_checksum: sha1:e71a7e5b233d761921f330ae499a73024aa4a0a5
- pristine_git_object: 557c891217e953757e8385a4b54a50d4528ea91a
- docs/components/byokkey.md:
- id: 9834cbadc071
- last_write_checksum: sha1:a5d63ecfc3e6048e9b4ca699a0c2383bc0106b84
- pristine_git_object: b4b8d797251e82804d823c25a93aa5116e292d5f
- docs/components/byokproviderslug.md:
- id: 73e588243967
- last_write_checksum: sha1:6e85a868fdbea9db4233014f2f01ba5c86a51b65
- pristine_git_object: 6ba1aa86c9a3c4f6fce12927c1efc8b798432f01
- docs/components/caching.md:
- id: 87fa8b1ac535
- last_write_checksum: sha1:cd5e0704dcc4beb29c8e173b7d73365c27b1cb8e
- pristine_git_object: 4108245a8918a4015e5bd610fd87e8e5f4741ce8
- docs/components/capabilitydescriptor.md:
- id: b50896c38c8d
- last_write_checksum: sha1:08c9bd8d8829a298de0f531b0c1c4d8e0e0f6199
- pristine_git_object: 5d58663d481701b702e326aa62e86f93295c2f78
- docs/components/chatassistantimages.md:
- id: f1f776b0c4ae
- last_write_checksum: sha1:05697e4bc0690cabd72965d01519102c149f6363
- pristine_git_object: 65fba0e5aa8cc676943df05509edf21169feaedc
- docs/components/chatassistantimagesimageurl.md:
- id: 5dab9ae6518f
- last_write_checksum: sha1:d74a4619d0195e1a410c747bd094e738ba439186
- pristine_git_object: ef9412d5a9edda1a0d572a7204f643c57e95c1cb
- docs/components/chatassistantmessage.md:
- id: 873a0a8e5d40
- last_write_checksum: sha1:8197b175489cb3351551bff144a0caa89e32aadb
- pristine_git_object: 3fe2de5bdaf311a915b0bccf9137e73c1d3b4d07
- docs/components/chatassistantmessagecontent.md:
- id: ae1f4d3d6315
- last_write_checksum: sha1:0ad5b85eade6a1da7eb7360e87915672ac875c0c
- pristine_git_object: 0338df6ce3691baa59f2fbaa3673c53782438dc4
- docs/components/chatassistantmessagerole.md:
- id: 1d183e17e37c
- last_write_checksum: sha1:dfee23784edcc32fea5312998be7e26070b0148d
- pristine_git_object: 07389e76411f893ce1cdc65d5eabb2afb0131355
- docs/components/chataudiooutput.md:
- id: aba7fc0396f7
- last_write_checksum: sha1:b5f27e597e7134983b98e14545fede46887941ab
- pristine_git_object: e03643e858971e11e14cc707090beed5d15d6ba5
- docs/components/chatchoice.md:
- id: 5e50b0331a4d
- last_write_checksum: sha1:96e3532ccbb9cda1b65a1bad04f369aed44cb222
- pristine_git_object: 6b070a2242dd4d7244870a516e08d3f14d121223
- docs/components/chatcontentaudio.md:
- id: 4a23b47cbaea
- last_write_checksum: sha1:29b487b16de9cea2c4c804ae1f44fafe9c9cd54c
- pristine_git_object: 7e3a7178076f7ccbc618b84b7930bb73d3922a4b
- docs/components/chatcontentaudioinputaudio.md:
- id: 04ffe283799a
- last_write_checksum: sha1:10a609317556d4a8845da27336ed885d17407ff4
- pristine_git_object: 9e1410bdaafb74192f4a845ad0a4198a18810e65
- docs/components/chatcontentaudiotype.md:
- id: 273a8f11e91e
- last_write_checksum: sha1:44f9af0fb93c1f3b918a6d3c9d4c73f302a7b162
- pristine_git_object: 231efb3e968c2f996556140accea135db41e761b
- docs/components/chatcontentcachecontrol.md:
- id: f61f7d9f11ca
- last_write_checksum: sha1:56218bc22096b0f3996a30ed7eaa85e689e90795
- pristine_git_object: ae26e674dab87ffa7258e439cadd9b30e8d67122
- docs/components/chatcontentcachecontroltype.md:
- id: 6c25585d34d7
- last_write_checksum: sha1:b18c1e7bf7282bbd6c441d6a48e355c87396b9bc
- pristine_git_object: a3776be07310a6e3b87f21d95c2c4701cf15422a
- docs/components/chatcontentfile.md:
- id: 80de41516310
- last_write_checksum: sha1:8c396bb847ab8ad5508f1c87d3e572a6b9d8739c
- pristine_git_object: ef68fec62398324b5b9a7446c520a09e786964b9
- docs/components/chatcontentfiletype.md:
- id: 7ae1de2bd191
- last_write_checksum: sha1:65db830e9452261b3abfb55e0c0592babb3f8efa
- pristine_git_object: c8f291f2fcb753680e87c704099b0c6b8a731000
- docs/components/chatcontentimage.md:
- id: 4c6bbbb8fa9e
- last_write_checksum: sha1:ca67df0dbc8d559d37e4319d1b4270e52ea4315e
- pristine_git_object: 79909c48a34888496f9051cf33899ca1b9a7b4fc
- docs/components/chatcontentimagedetail.md:
- id: 3f26a1053cda
- last_write_checksum: sha1:296d52deb9b5223ed17cfb8ff3300727e671e001
- pristine_git_object: 1c2cfb3ab7c7f2226e3c00c65af8fb9b79ca7740
- docs/components/chatcontentimageimageurl.md:
- id: 7c66172651cc
- last_write_checksum: sha1:035c15e90cd89d8a8f20a27e28cf19551df62ecd
- pristine_git_object: 9915ffe26c36a6a8ad5054389f960f7ea3c4e7bf
- docs/components/chatcontentimagetype.md:
- id: b92a4757efe6
- last_write_checksum: sha1:ce2d8002a22bf03477cbbd88c68fc4eace9b392b
- pristine_git_object: 61eaf66e23031854c913dea6315deb99722b3098
- docs/components/chatcontentitems.md:
- id: 1629a00cba7c
- last_write_checksum: sha1:7ec4eb320950d35184011c923e033b93b674c7d3
- pristine_git_object: 67154a8559b4f5a715c26c3b85a07bfe1a7eb088
- docs/components/chatcontenttext.md:
- id: 7cb138e038e3
- last_write_checksum: sha1:a728e8137eb44ac9ca1a564f5d6ed16ed3cf5417
- pristine_git_object: 2857fcee25f5173c05ec2bf7952e89e6d00a0bca
- docs/components/chatcontenttexttype.md:
- id: ac89efae2559
- last_write_checksum: sha1:dbe556bf72491a11746413bfb84d277623ed6df5
- pristine_git_object: cc7444ce57ed92f8df7b4856c431b41205b7b082
- docs/components/chatcontentvideo.md:
- id: 644f016407a5
- last_write_checksum: sha1:80f59ac3d39149719952eef2275d27fc2e83330e
- pristine_git_object: 8ddf46e867fef8a82c8dfec15eeddcf16959e94d
- docs/components/chatcontentvideoinput.md:
- id: 2801ab923042
- last_write_checksum: sha1:04fe85c81976c0f9e99d1bace10b18315b62d17e
- pristine_git_object: aef6e2276e69e312b9860410f6aaf1ef7dffbe74
- docs/components/chatcontentvideotype.md:
- id: 24eadd19337b
- last_write_checksum: sha1:4cc42fbb361efc7c51d7d8c6f86dd467c0e02269
- pristine_git_object: e02c721f5d783706b7df11e51aedcd9f2d9b730d
- docs/components/chatdebugoptions.md:
- id: b4052a7b59a9
- last_write_checksum: sha1:53b4488f82bbe11533870cbf08e961a3cc6d5412
- pristine_git_object: 710b14712a04c14746fce608ff3b3cd96189cc69
- docs/components/chatdevelopermessage.md:
- id: fcc03e0bec28
- last_write_checksum: sha1:86e0978d5a7dd8d39b2d68cbc5e8ed6482573800
- pristine_git_object: 873f3a0d1cbd72f1e45bc05386143c205a60a368
- docs/components/chatdevelopermessagecontent.md:
- id: f57f34c0f41d
- last_write_checksum: sha1:859f5db02c1ac1c5c893f93107d074d7da784ed1
- pristine_git_object: ef6fe747a7b86fdabf34f6a98011ad57a1693582
- docs/components/chatdevelopermessagerole.md:
- id: cb0b7aee170d
- last_write_checksum: sha1:ef2c0cd397238ed0c1a2342e7df7d2897d07b749
- pristine_git_object: 7a9721cc9e1635c150b1e08d7524689224801c8b
- docs/components/chatfinishreasonenum.md:
- id: 4a1c7f940839
- last_write_checksum: sha1:07de46813ca84e3b5496ad99c6ac4b7f144089aa
- pristine_git_object: 3942c0e03d4faffa564408ab97f99118f4453af6
- docs/components/chatformatgrammarconfig.md:
- id: 69a089aa92bf
- last_write_checksum: sha1:ac3e56e48a49cfd32c1203acc2a0f247dbad11b5
- pristine_git_object: b97e1fefdbd33922d0c361f5cbdb86abe71c985c
- docs/components/chatformatgrammarconfigtype.md:
- id: "7259142727e4"
- last_write_checksum: sha1:06930e28075aa9b4beaace531e8d1e3488956fa0
- pristine_git_object: d61542a3c61384c4b8c656abef985a5761e758ad
- docs/components/chatformatjsonschemaconfig.md:
- id: d5d317f8b57e
- last_write_checksum: sha1:f474c44931872d1ebbe3571ea4c965efed988a3b
- pristine_git_object: eac1cb101f3b105ef17f8855329ee26d61bfa714
- docs/components/chatformatjsonschemaconfigtype.md:
- id: 5db00c47f9b6
- last_write_checksum: sha1:d17911eacf2093ef10378e87c40d7a6eae45643d
- pristine_git_object: 333b76340853f522f1714f7b095253adefb76f7e
- docs/components/chatformatpythonconfig.md:
- id: cc476e39e9cd
- last_write_checksum: sha1:681ca703cd97c8c6b030d9b5111add5cae834fe0
- pristine_git_object: abf14ca7dea07178243c14ff9816a3e419d54bbd
- docs/components/chatformatpythonconfigtype.md:
- id: c405940549f0
- last_write_checksum: sha1:c7ee086855db30229efe13e92d6dc17ef1920971
- pristine_git_object: 784aaadd1afcd818796aac8afc70b7dedfb5567f
- docs/components/chatformattextconfig.md:
- id: 89ee5a2469dc
- last_write_checksum: sha1:483320204323bdc311782fa32f852f8bcfb1d62f
- pristine_git_object: 99ff3e59a97c5636431c293afb905920e9c1bdc3
- docs/components/chatformattextconfigtype.md:
- id: b0d90b0d7b5e
- last_write_checksum: sha1:52d4933926a4cb6186898585195f4bce168af8bd
- pristine_git_object: f3a972b60a63cdb55670cc56cc92eae40578aa87
- docs/components/chatfunctiontool.md:
- id: 3c79deefdcc0
- last_write_checksum: sha1:f156ebb35822963a3bde0d64fc7204ef683c6ff0
- pristine_git_object: 419a1b6800384c276581afe7f59d4e52efc75e90
- docs/components/chatfunctiontoolfunction.md:
- id: 0de29ccfd817
- last_write_checksum: sha1:0a25d1c9b64f1da2513e9153682848cf41f324b2
- pristine_git_object: 87d7d1ab7d1ed8bd79b7526ae1fab28e5d853c33
- docs/components/chatfunctiontoolfunctionfunction.md:
- id: 40ba7785b09a
- last_write_checksum: sha1:3de4648516e0edfce65f56430f79ac4993acc798
- pristine_git_object: ac0ce600775accc75afd84515c3d97bdcee221c5
- docs/components/chatfunctiontooltype.md:
- id: fd79c1a8150a
- last_write_checksum: sha1:8180672d9c029ff2e0d2d3b3ae74f20562b6f939
- pristine_git_object: f3b7513915d711c6b839126e6fed13f51a5cb5ca
- docs/components/chatjsonschemaconfig.md:
- id: 27016a1430b7
- last_write_checksum: sha1:327875efdcf556fd73b309ef4d1da40e9b18fc86
- pristine_git_object: 36d33ca4a2734cb6dc70cb3cec5e047548a97f70
- docs/components/chatmessages.md:
- id: 27dc2c8c0d23
- last_write_checksum: sha1:0a7de1bb1dba5911955257c068e7f91394a9721b
- pristine_git_object: ba81886fb54754ea89b2f09c5289d3974a47c442
- docs/components/chatnamedtoolchoice.md:
- id: b55b10cbe381
- last_write_checksum: sha1:b20618c87389e2c42263292d0d7e0df08dc554c6
- pristine_git_object: 9a1ef4281b35618582c50551c2c241a2995783dd
- docs/components/chatnamedtoolchoicefunction.md:
- id: ce1786a50c32
- last_write_checksum: sha1:b2b6c14545d0b4e23bc4dc9422b356a314620472
- pristine_git_object: 6af3c9eb4e7e2218625d18c08e33dde5c7d389d7
- docs/components/chatnamedtoolchoicetype.md:
- id: d4856ca12d1c
- last_write_checksum: sha1:c5c5e63ee722467cd13522dc7e36775b905e9a5f
- pristine_git_object: 771cf4cae80fd6bd62f1cbb971bb50d6ed5066f8
- docs/components/chatreasoningsummaryverbosityenum.md:
- id: 4ea66a561f98
- last_write_checksum: sha1:62ddd3b78bfafb2b0bc20663a7fe2d3f2a88f1e7
- pristine_git_object: ca73483767de32b3d83b7f9e2741011e26ac8e59
- docs/components/chatrequest.md:
- id: 5e0fa9a2cb13
- last_write_checksum: sha1:a0f55b1bb0073e6cbdc69d687115729737a9cf3e
- pristine_git_object: 6c832606b0e983d2efd7cc6e3bec98d70e7fc603
- docs/components/chatrequesteffort.md:
- id: 244b6cbbd2e1
- last_write_checksum: sha1:f9ce1e4a1c3f705b673808b35750af7b71b158ca
- pristine_git_object: 26c09f0c5ae097d1373b8e5c721a4606765d5c99
- docs/components/chatrequestplugin.md:
- id: 24a908f99472
- last_write_checksum: sha1:0d96c14c2f1675e1bc3cdea7b70a82385a5bc117
- pristine_git_object: 5f3019fbd856a6aed5fb45e2762764e1b4d878ab
- docs/components/chatrequestreasoning.md:
- id: dbec0ff3ecbc
- last_write_checksum: sha1:f749dd845cea3d45a0fd3f4a39e3f1edb5f8f54e
- pristine_git_object: baa1fb1a1f855f0ea648d44b8cb4c52185efe77d
- docs/components/chatrequestreasoningeffort.md:
- id: d91e84590d64
- last_write_checksum: sha1:b72a0292fdffaf77b2531a155ca00d6d46405746
- pristine_git_object: 475f655086e1ec97e9b7aadc35ea4977da9e32dd
- docs/components/chatrequestservicetier.md:
- id: deaf591bec38
- last_write_checksum: sha1:8fa53b0f868c99934b83719b7c0b6b44b1f960eb
- pristine_git_object: 13ae40be5e3c883f88789c3b5b74a3b2da4c85c2
- docs/components/chatresult.md:
- id: 212b0f66efd0
- last_write_checksum: sha1:f40df693ad2d2d8e156aacb218af394f675bfb89
- pristine_git_object: 41f82f9576591d048a504f29ca19b148ccca02bc
- docs/components/chatresultobject.md:
- id: 668504931d18
- last_write_checksum: sha1:6d550246aa007a5be94a9788ae4cfdfb75006980
- pristine_git_object: d05e8b4f60163be62354a7f84ac449e87b7418ae
- docs/components/chatsearchmodelsservertool.md:
- id: 2367c4988883
- last_write_checksum: sha1:7965c368b95d094d3ed3ca92f2d3fae05581b1ec
- pristine_git_object: e2c29bd6f6cd3b031681abde5393975a0ce38cf8
- docs/components/chatsearchmodelsservertooltype.md:
- id: 028b0f0740f1
- last_write_checksum: sha1:8067bf2a2a0d89edebb08ffb5ac35ba1294ffba2
- pristine_git_object: ea4df9be592b40d566202d1d044275e526c7ab8f
- docs/components/chatservertoolchoice.md:
- id: 794df1f53445
- last_write_checksum: sha1:357170063031a93ddafb3e65f0de406499099af5
- pristine_git_object: 908413b3196f8d331aebba8b86e327ae43d314bc
- docs/components/chatstreamchoice.md:
- id: 4267d8be7145
- last_write_checksum: sha1:0c16659042a36e7c30fa688275537718582a41b8
- pristine_git_object: 690d74b67239bf7f423039652aea3741c831137e
- docs/components/chatstreamchunk.md:
- id: 404d264ea22c
- last_write_checksum: sha1:a5e9c58b21127bf93139cfb1b0a1276b141daaa7
- pristine_git_object: deabe169649ad00df0ca40ba1d018bce72cd8c5e
- docs/components/chatstreamchunkerror.md:
- id: 5a682faf2e52
- last_write_checksum: sha1:11c574387ad732a510f5dbdb23228b9756ab2809
- pristine_git_object: e8fe9aa61113231613df47d0cdf54c2fedc15134
- docs/components/chatstreamchunkmetadata.md:
- id: acc0cb830ced
- last_write_checksum: sha1:b8cdf1dd8825c832a9162d42d6c776394cb09212
- pristine_git_object: d1ac1cb7d60159e5f2438f0aca87623b232533be
- docs/components/chatstreamchunkobject.md:
- id: 5393918d9606
- last_write_checksum: sha1:0765d94b3d01c811155dce29c20c2ae4bd4abd0e
- pristine_git_object: e5c9b9a5c9a9d0604893f8b014d7857aa9d74c1a
- docs/components/chatstreamdelta.md:
- id: 6a802bee8f3a
- last_write_checksum: sha1:787fe3b23c098d8787d094f852be2e464f484964
- pristine_git_object: 8788248cd6f5a1456300916fd01b0b25856c0a88
- docs/components/chatstreamdeltarole.md:
- id: bd41a2e6e1ba
- last_write_checksum: sha1:4382019bbc25043a562225a2d54f07d282c65968
- pristine_git_object: 03d5ac5ab133efae7ae05733395324c136247357
- docs/components/chatstreamingresponse.md:
- id: 2b5d703d7b01
- last_write_checksum: sha1:a897660437d6d71c4fe70d71cccccbe3e0be042d
- pristine_git_object: 26e54c468befcb6070a54bd3560bb8128fa36024
- docs/components/chatstreamoptions.md:
- id: b01e4aa7d192
- last_write_checksum: sha1:0f21f4cb7a3f28135b4117e20dcf829ea08ded52
- pristine_git_object: ade029eea68f198e2d9ca9cb1f377a595f641f35
- docs/components/chatstreamtoolcall.md:
- id: c82d4d57b836
- last_write_checksum: sha1:1ad1d687a17804028b837bedc036ae96f1cb5027
- pristine_git_object: 35fe73ea17c5b3b3f97d33ec3f8685758c0aa5c0
- docs/components/chatstreamtoolcallfunction.md:
- id: e68f1b506665
- last_write_checksum: sha1:08bc633195508081d4187ce0995e923f3469b1a6
- pristine_git_object: e623029905e1a87a0162baa4272920d6ab59b13f
- docs/components/chatstreamtoolcalltype.md:
- id: 1e3b82103eae
- last_write_checksum: sha1:817c13c26f8493d94658fe6a9e11faf25d3520e7
- pristine_git_object: c78e0564c6a19e3eb9cff4edf0c2e4d86b166a2f
- docs/components/chatsystemmessage.md:
- id: 19ce58721eeb
- last_write_checksum: sha1:947fa8f1aa59ca02e4280b2eaca951ffe4944aa0
- pristine_git_object: 578937800f24e000af91a085871c7af5c5382844
- docs/components/chatsystemmessagecontent.md:
- id: 0e4b073ca405
- last_write_checksum: sha1:e3a97a8cdfa3ffa72fa16afc0ad2a74e128b2d56
- pristine_git_object: 687802523e0accb62dd2628352d2291055e5bae8
- docs/components/chatsystemmessagerole.md:
- id: a89f62ff7bde
- last_write_checksum: sha1:79746fbaa483f2c7ba052fb28d1c6d0f3b7bc9a4
- pristine_git_object: 93ea0289f870442b5f7565843744993466933dd9
- docs/components/chattokenlogprob.md:
- id: 562b5ff8dc1a
- last_write_checksum: sha1:471424d53f8a2cecf5097751cc8786f8e1abf6f2
- pristine_git_object: 968793a35e58df8ce0cd6f026c8c8e55497ae035
- docs/components/chattokenlogprobs.md:
- id: cc600497da20
- last_write_checksum: sha1:6581a4b05f8c01ca27a0f24a76d81c704f5c54d1
- pristine_git_object: 5c1d509d7e80c65e63344ee815a982b3a321c122
- docs/components/chattokenlogprobtoplogprob.md:
- id: 2fdca99b1741
- last_write_checksum: sha1:1c6fbd6ef782acc70ef41a7136c54de4e95be374
- pristine_git_object: d6898ef9225f786433f4b61a2e1b8bfa25755d4b
- docs/components/chattoolcall.md:
- id: 5d5bc660b9d0
- last_write_checksum: sha1:3034cd053bf9a0b12953f57186c89b0e338dca5e
- pristine_git_object: bd8a1576abda8f7a5e2f22d6a3fc7c88ccd2b16d
- docs/components/chattoolcallfunction.md:
- id: 2b1fbca75a92
- last_write_checksum: sha1:6619b61e01a0fe5a19cc8f55a8549215ad2e8dbb
- pristine_git_object: 3ab94e4e0c6210ee4d97f1017fb1ada38d21a3ab
- docs/components/chattoolcalltype.md:
- id: 4c4350539598
- last_write_checksum: sha1:36c09bd5863038de76c0ec7c3f24f6fedc4a380a
- pristine_git_object: a24314cfbba98628733e2f38affb7005f96dee0e
- docs/components/chattoolchoice.md:
- id: aa08787a976b
- last_write_checksum: sha1:d2c8ce107197a1c4642c9df6bb307ae3fd3924ff
- pristine_git_object: 0ffd588e856e8877a6300baa94e25b73ea5af735
- docs/components/chattoolchoiceauto.md:
- id: af8f56546bde
- last_write_checksum: sha1:14e1710cab46ac216073ae11ee4e4d9e9c089500
- pristine_git_object: 472a5d20fba64f1f5a3c7711ce42ecae04482d6b
- docs/components/chattoolchoicenone.md:
- id: 7d985a62b156
- last_write_checksum: sha1:5a3cbf83e0fef9a06240465cc19de740c13f44a0
- pristine_git_object: 60dae8bdf01d7af50cdd65afaadcb34e920bc596
- docs/components/chattoolchoicerequired.md:
- id: 908350fa4aeb
- last_write_checksum: sha1:d808c58b96055dd251730ecbff41e0cd4dcf9f28
- pristine_git_object: 7b5f0cc697cfd542198018b03ac66b1b69488cc7
- docs/components/chattoolmessage.md:
- id: fa2c15e2086b
- last_write_checksum: sha1:b76200e3e214b73991d1361a5708a8c8efc9c5cd
- pristine_git_object: c4ebf7c551f87f0aeb79cceb328002d3b1402b4d
- docs/components/chattoolmessagecontent.md:
- id: 8e2cb8de51fd
- last_write_checksum: sha1:27c24922d9a1cc80988e9734222f5ba5fbc58e48
- pristine_git_object: 8824ed8db3e40daf47afbfcbb66b5027225a133b
- docs/components/chattoolmessagerole.md:
- id: 5e945be05bab
- last_write_checksum: sha1:4d16b0060f643b401568841e198ba97486bee7ed
- pristine_git_object: 7eb1791a9153498d5ffffc6b67d3668df59000c2
- docs/components/chatusage.md:
- id: 72cd0c41ec64
- last_write_checksum: sha1:144cb3e4e6a71d58327acf0ff8498eed396ade84
- pristine_git_object: 1d06874f274e6752279eeff823c9a05b8ee97735
- docs/components/chatusagecompletiontokensdetails.md:
- id: fd8b3b9b7ae5
- last_write_checksum: sha1:16c853c63f5304e52cbf897cb4f67e9d35d3b97b
- pristine_git_object: e3ccb3e879887bc2406c08c4321435c986a04309
- docs/components/chatusageprompttokensdetails.md:
- id: c8b56480e08a
- last_write_checksum: sha1:28bbd1adcb38e0e57cc2b20e5ed0f26269e39675
- pristine_git_object: 14e30cda6c43cb27d0316b8d1450c63943115467
- docs/components/chatusermessage.md:
- id: 4ab205b0030b
- last_write_checksum: sha1:4c87fbc12f54bb5b58526949e3f8ea9c161f8cdf
- pristine_git_object: 8c298e426888aac7d44cba52583bc82c8ea70132
- docs/components/chatusermessagecontent.md:
- id: 0cb3b5d5cd65
- last_write_checksum: sha1:a4881f57d2a2f0d1746de22507bc4b3733753849
- pristine_git_object: d741f370d8ef3715587a8f8ed92bf67284e61c90
- docs/components/chatusermessagerole.md:
- id: f4bb7c635d9f
- last_write_checksum: sha1:e99a81c25906e98176a509f4b21a0f339b3758d5
- pristine_git_object: 95203396fad26d48c76b23f3481b6167291500e5
- docs/components/chatwebsearchshorthand.md:
- id: 97a5522cf188
- last_write_checksum: sha1:63c5ad3a1edaaef6037105e24f8b06b282584f9e
- pristine_git_object: bd02fe0c8672dbe905c312c0802db1948ddada42
- docs/components/chatwebsearchshorthandtype.md:
- id: ec8d82e4169d
- last_write_checksum: sha1:11a35b858e9630405ffdde10c89e60ed33fbed45
- pristine_git_object: de2f86e7af6cc072ccd2af6d71e3babc9b554c4e
- docs/components/citation.md:
- id: 127c4a332a7e
- last_write_checksum: sha1:e0964662c49bb4a2d589a04f1b3f73fefce5c127
- pristine_git_object: e6b0a3add5711b51b8a8927aeb61183d6b4d4732
- docs/components/cleartoolinputs.md:
- id: 6073ea42150b
- last_write_checksum: sha1:d157848b2ac2abe2c8ebdfb54edc270d7ad3c097
- pristine_git_object: af8f2b61c9e4ea4e96d7d0f1b1d7e9e2d6ae9842
- docs/components/code.md:
- id: a224ebbe4cc9
- last_write_checksum: sha1:f505e84ac9a4367e1ffda1f6e03c72c24c15ecbc
- pristine_git_object: 86a85544261f8234a7d916e33599270b9d90b059
- docs/components/codeinterpreterservertool.md:
- id: 289a7f7a2d12
- last_write_checksum: sha1:a14f6246a36a1c36e73d3c3d42abf9e79bf162df
- pristine_git_object: ede02254b80a4d7af3f3c0413ac36fd363676a60
- docs/components/codexlocalshelltool.md:
- id: 196880556b4d
- last_write_checksum: sha1:56d679292f799f432181fac6ee5d024f74727d0e
- pristine_git_object: 9a90670a85d5cf910d6c23e57e95342abbcd2a18
- docs/components/codexlocalshelltooltype.md:
- id: 6b76cb92f8f3
- last_write_checksum: sha1:e0bda1e8fea9942f8831ec3876344728e8d2d404
- pristine_git_object: 043aac356e529af550220ec56161439b65d49321
- docs/components/command.md:
- id: 53e85119ed43
- last_write_checksum: sha1:eae4f9ff22f1fb6c5139b9e44a35d0238388a2ea
- pristine_git_object: 3c45dd0765fa97b40928a609a6bbc0e6092be0fa
- docs/components/compactionitem.md:
- id: 5c6d406968ec
- last_write_checksum: sha1:0314cc2f54c07b7d07da0a815dac19ffef673d33
- pristine_git_object: 76160f0750ffc10ef9d07a2f8d6652f05670cf18
- docs/components/compactionitemtype.md:
- id: 1033dd974aab
- last_write_checksum: sha1:ba3f1ccb85f1193a2523c96199a7e15a4923e5ef
- pristine_git_object: 3616c45038b37d4adc7f0d643f7159853915586d
- docs/components/compoundfilter.md:
- id: 6c881867d341
- last_write_checksum: sha1:0afec796142bbf1dd29d5ae73e6926bfc46c7ab6
- pristine_git_object: aff15cd55b07298e0fbaa37ad89cee8d26b1cd0b
- docs/components/compoundfiltertype.md:
- id: 8c913408500a
- last_write_checksum: sha1:f08429d6fdf07f9d65321a8d00a72c6286ab1dc6
- pristine_git_object: 162ed7159ef543f8b418b2325c75eea6467dd3a9
- docs/components/computeruseservertool.md:
- id: 68115b3d3921
- last_write_checksum: sha1:2a8d605be8897d6f4e019fa046ef5a123dcb2adf
- pristine_git_object: cf1bfb52d4bbeebe8744cf8426a0fb16c2d5386f
- docs/components/computeruseservertooltype.md:
- id: 5957ac538f35
- last_write_checksum: sha1:bf2c675ddac5469378b4a378a42496a3ec3bfd82
- pristine_git_object: cdc92b8cc5e1cb558b421a5a2bb8dff51ceda0ba
- docs/components/conflictresponseerrordata.md:
- id: c80474d05fa2
- last_write_checksum: sha1:7f53e1736241725b06f21a327b45458fabb1f66a
- pristine_git_object: fb319b9ed8d41dd5eead7536827cf74057ce877e
- docs/components/connectorid.md:
- id: 5a583b8644f9
- last_write_checksum: sha1:61bb2013d883cf53f9fc103eb33c6415454ebd57
- pristine_git_object: 673ad13dbcc84df8ccf4c10d4b722e711873a37d
- docs/components/container.md:
- id: 9045d956881a
- last_write_checksum: sha1:0076c1028f5a416afde20f940e4f989247819fc8
- pristine_git_object: df1116376f912e55b36fa745a431175679413024
- docs/components/containerauto.md:
- id: 89a8dc079e5d
- last_write_checksum: sha1:1504c81161683ff417806ddb74839797e7a08b91
- pristine_git_object: df63209599b11bcc887019d5cfc0997071fe8137
- docs/components/containerautoenvironment.md:
- id: 52c0ed2293d7
- last_write_checksum: sha1:7a0b71d5f90e067604db29ef21a35bea0d6be805
- pristine_git_object: 8e2b41b11c55627a8adc4def9bbe017dd52da0cf
- docs/components/containerautoenvironmenttype.md:
- id: 305bc5e52c06
- last_write_checksum: sha1:69cec3929d9355f96b85ea3c92de48506ac77778
- pristine_git_object: e1db56e5c72e2203821d6d58dedf8b29870def8b
- docs/components/containerreferenceenvironment.md:
- id: f7cc9a458e0f
- last_write_checksum: sha1:09a4b2ccb2514619ac6732d1dcbf0b69cba7d874
- pristine_git_object: 9870ca09ffcabe1dc8f8fc04658459bc39a078e0
- docs/components/containerreferenceenvironmenttype.md:
- id: e82f2f03aa56
- last_write_checksum: sha1:608da106f742bd3f5cbbbca53b28f4e44d59d097
- pristine_git_object: 11dd67a5802cde4b49bca63d9f7dc25c94bef20c
- docs/components/containertype.md:
- id: beda1b89c7a4
- last_write_checksum: sha1:f513446b0c8b1cb3a34ed6721bd716536ffbae47
- pristine_git_object: 9be5b3ce474de60fa8116325313e5a8d9ebe188d
- docs/components/contentcompaction.md:
- id: 3af2bc3b0e06
- last_write_checksum: sha1:4cfd8c00866128aae53872143819cf939110cc4d
- pristine_git_object: 2f7fa669eda8b3b01348cfdb99db9bb410759f24
- docs/components/contentfilteraction.md:
- id: c9b7c26b9524
- last_write_checksum: sha1:363f70d11cc87b49cf7d5ba82f4c4d7063a2a5dd
- pristine_git_object: 43ee22f394d068eed9cdda45a655a1f64fdab84e
- docs/components/contentfilterbuiltinaction.md:
- id: 55a04916d7d4
- last_write_checksum: sha1:1e6e0ebc1b88dbef7029f951368198e20e1cedd3
- pristine_git_object: 4f71cc021888a043f920cd5ae1abad2e34a99056
- docs/components/contentfilterbuiltinentry.md:
- id: 82426635e713
- last_write_checksum: sha1:ab50d8f260f82c675c617d873c3ef08aafdbe548
- pristine_git_object: a9c6ddb1aca79dbf1feffa26235c888c60c9d67c
- docs/components/contentfilterbuiltinentryinput.md:
- id: d165305608b4
- last_write_checksum: sha1:cea1961d568d8087828b4467affb87f66a99014b
- pristine_git_object: ce557a77f7b40573881741aa169d33eddddd7ca4
- docs/components/contentfilterbuiltinslug.md:
- id: 0ce8d26d9c87
- last_write_checksum: sha1:320e33dee158ab882b3728194d266fa1369a83a8
- pristine_git_object: 823e41ff1b867856201745c4d059f6965ebd013f
- docs/components/contentfilterentry.md:
- id: 856c24c8dad0
- last_write_checksum: sha1:4c604fed1ea84146d5430b5cd449237664655c24
- pristine_git_object: 9b7b6c8c4a83d7c39f6640cdc1b366736c49f38e
- docs/components/contentpartaddedevent.md:
- id: 46c34edca7cc
- last_write_checksum: sha1:d92174df5be607cd3c387504774864c6c80e7899
- pristine_git_object: a89190b31c4f1e480719f22ceaacbee7a1c0de5c
- docs/components/contentpartaddedeventpart.md:
- id: 65797fea2a6a
- last_write_checksum: sha1:6f3b68d1a22f7d690e3ea2ce1db2af74750f4953
- pristine_git_object: 7101e0275aa7778c408e1237bb0a829f7eaed2b4
- docs/components/contentpartaddedeventtype.md:
- id: 72bab8b5ffda
- last_write_checksum: sha1:d1effe2f7a73919d65a99f7ac4f3f8d0b80b645b
- pristine_git_object: fa5229a68a69489db870b32e5cb58e5e9e707ec0
- docs/components/contentpartaudio.md:
- id: 8a560472a48d
- last_write_checksum: sha1:61e491954ac68750f578f0a4a697bcc7b6a961f5
- pristine_git_object: e79df2f7ba710d059051b6ec8a098dde12b1269c
- docs/components/contentpartaudiotype.md:
- id: b2efae4d5bc1
- last_write_checksum: sha1:33d0fed2a66734d0ba9a707933bef225171d3d73
- pristine_git_object: 368673e2a7e2ecbfc4de294485eee16641e25b45
- docs/components/contentpartdoneevent.md:
- id: 4c409e055805
- last_write_checksum: sha1:5d6a3d850c8a4571937b891efd7ff368c8f11f7d
- pristine_git_object: 7cccc9ecd85b2c6c18b792c8a361ac62ea10bf0a
- docs/components/contentpartdoneeventpart.md:
- id: 4e2036cbdd2f
- last_write_checksum: sha1:461683c3f5f96c458c5d88e87b7876138b1ae22d
- pristine_git_object: a09231a3c3e312214f1885f870edbd945be78d5a
- docs/components/contentpartdoneeventtype.md:
- id: "859167485170"
- last_write_checksum: sha1:f35a10d5fc1856fbbf28ee1f64ab43d288c8328b
- pristine_git_object: 53a335d9b3cd971a3b24e4759234f987e3499679
- docs/components/contentpartimage.md:
- id: 04fd5d4395fa
- last_write_checksum: sha1:22e4320a6ba2134948a97ffe35280304b4880fad
- pristine_git_object: bd630073495ea820141ad7bca9cc137612f044ec
- docs/components/contentpartimageimageurl.md:
- id: 6352f603f663
- last_write_checksum: sha1:71d48852b6dfb295d658462e07c52684e2e59431
- pristine_git_object: 06ae1d1add91be985a996ba8e8356cc9c0b970d2
- docs/components/contentpartimagetype.md:
- id: 7b799c2f4203
- last_write_checksum: sha1:77ad88cf178e7ba6ec27eb2ab17bad7473668a6b
- pristine_git_object: a63a040363df5d6da9d336daeb354a87a73e531f
- docs/components/contentpartinputaudio.md:
- id: 649dc80c9a9e
- last_write_checksum: sha1:04c4a3da8b685d3d0119b54c8416c667354b5796
- pristine_git_object: edd07bf97cbb02004082f9c976601fa5cfc0d116
- docs/components/contentpartinputaudiotype.md:
- id: 93b19b8d50a5
- last_write_checksum: sha1:7bd25fa498c5d21320ab03ee7a5d932d136fa4dd
- pristine_git_object: 9feb3fcb787c42aa9f06ff2b48463d167771ed66
- docs/components/contentpartinputfile.md:
- id: dfb6b2c0e96f
- last_write_checksum: sha1:76b6c74e1f390f5bdc54b8060ac110fcc67eefe1
- pristine_git_object: f7f021677830ff6da9ef89f61de7e3a9811e9a64
- docs/components/contentpartinputfiletype.md:
- id: fb7732ac8299
- last_write_checksum: sha1:685e7d57fd27c0e12f82471e3d5853d83f2ff7f9
- pristine_git_object: 60a5682a9cac3cbc856150074dfcd30d70a8e185
- docs/components/contentpartinputvideo.md:
- id: 4632198b7a38
- last_write_checksum: sha1:43f358673ca2a9e4d4fbf7b0bef946419abdda06
- pristine_git_object: 27bb8b259a2a81cb33ebc0c9a2a62b7ac94422cf
- docs/components/contentpartinputvideotype.md:
- id: eac3808e492d
- last_write_checksum: sha1:4f9b77cb1c6a8a9d437e44062956bcf0888f3814
- pristine_git_object: 8be0a0534737efc557c6f76a868ce6cf5df50481
- docs/components/contentpartvideo.md:
- id: 3aaf4fab5336
- last_write_checksum: sha1:f6daab262230e2e3e5c2f5318b6892ad4b6e7a3a
- pristine_git_object: fd7a521e982988dcacd65a6453a06971da877df7
- docs/components/contentpartvideotype.md:
- id: e866f7da5684
- last_write_checksum: sha1:824caf53883b556d4e9f99d5f496b706e4d48f00
- pristine_git_object: 662faaacea82d1fb30c586c41ffdc6a762e83a1f
- docs/components/contentredactedthinking.md:
- id: 2fa87a82460f
- last_write_checksum: sha1:8229af2ad4a4f3603a2d56f0b347bdac60dd7c2d
- pristine_git_object: 3a10ef6b60553edc02a7659b2d28ecde3c57a3ae
- docs/components/contentservertooluse.md:
- id: 55cbcc554f4c
- last_write_checksum: sha1:246897cb594e8ec400e6c992d983c4b91a53cef0
- pristine_git_object: 719c5c83b9f740852f975fe24b47d3bb5092cf0a
- docs/components/contentthinking.md:
- id: 002f8107eb0f
- last_write_checksum: sha1:ced629b961cf70a6dbdce17f3de6e10896e3e995
- pristine_git_object: 9dd65faba7e52845e146cc3ca2a91c740811d564
- docs/components/contenttoolreference.md:
- id: f915e52eb876
- last_write_checksum: sha1:241547b6d5dbdc93b1282c8b30cadb323519caf0
- pristine_git_object: 96317dd62fa0acb84665487aaec2c311ee5a3e9b
- docs/components/contenttoolresult.md:
- id: 6caf8d6dc5ca
- last_write_checksum: sha1:3341ac4cfae9cfa81f93eaeeb94065ec6ac0d3f2
- pristine_git_object: 66c04d5affa308882a67aa4266ca40e085a47e53
- docs/components/contenttooluse.md:
- id: 91e0b67ed688
- last_write_checksum: sha1:a3f367058973195fe24b2d2ec81ce4d61f695354
- pristine_git_object: 6d667fee3e78addcc6c5ffe6b127ec9c5bbd3a96
- docs/components/contentwebsearchtoolresult.md:
- id: 21b6cbd88f3f
- last_write_checksum: sha1:cc5e51f4ab8d2ef457e2d232eacdca41c951e9c8
- pristine_git_object: c459891fa9663572de7c9c9d13981b0324ce6353
- docs/components/contentwebsearchtoolresulterror.md:
- id: b503fcb137c2
- last_write_checksum: sha1:a6b0053559c6950de9b437c5dfb246b0e18d71d4
- pristine_git_object: e45ae52bbe07a24d3ccbe2ca9e8d7e427fbbe946
- docs/components/contextcompressionengine.md:
- id: de089ca4a588
- last_write_checksum: sha1:4dee80dba0a801d9d6aec487235a39d548744372
- pristine_git_object: aa78a36053e7d254e90281ce6432b84221badc36
- docs/components/contextcompressionplugin.md:
- id: ad9a51a0a85d
- last_write_checksum: sha1:40459f7417d59618b7e2f8b16f1a9c879d1d8396
- pristine_git_object: 2f8c52d5776546ba81a9a789baf6e74981792507
- docs/components/contextcompressionpluginid.md:
- id: 1946fe4536f3
- last_write_checksum: sha1:918d605b019529584735b29b008e465a4f798af5
- pristine_git_object: 4922c8b3bb952f712fcc0cf414dd5b505ed2c4a4
- docs/components/contextmanagement.md:
- id: 3c24bff89193
- last_write_checksum: sha1:c192b583fdb25964c6def320c39284410a010bfe
- pristine_git_object: b021b5ed7cfb487dce08a1c9637c0fb95d16ba94
- docs/components/contradiction.md:
- id: 395878b36283
- last_write_checksum: sha1:2ea135646f838c852beef96adc47ab28a0f903a9
- pristine_git_object: 1a94d757e5ad641098da32fda8e9818fe36c134b
- docs/components/costdetails.md:
- id: 2e3d81b7a646
- last_write_checksum: sha1:b2748fc0cf305791446f5f217947d82bd74a8350
- pristine_git_object: 58a1aa8485130f8b49c633dfef0439b83a5f239c
- docs/components/createbyokkeyrequest.md:
- id: 0c8feda5c201
- last_write_checksum: sha1:327a07d0a93672ad5375f65847ab9f8f0f6c44f5
- pristine_git_object: 1471fe23196b46168cda4247bc2983be9d8d67bc
- docs/components/createbyokkeyresponse.md:
- id: 7c06d88245c4
- last_write_checksum: sha1:6940b0c65045f9895d77a7c055711d0f79bda2f9
- pristine_git_object: 7a94cf8a73af0ae307a5072042c1f7f4af73052f
- docs/components/createguardrailrequest.md:
- id: 5144188aed43
- last_write_checksum: sha1:8a11b2066f551934b763946fca65db412e89dd47
- pristine_git_object: 62ac84a3acae321227bc87beb6a58b052265f53f
- docs/components/createguardrailresponse.md:
- id: 94a5ed00d7b9
- last_write_checksum: sha1:19f8c9b602dcb84d30e58efed998366600e3d9aa
- pristine_git_object: 7206ed2c684bac18cbcf7f9f88e81d8e4116511b
- docs/components/createobservabilitydestinationrequest.md:
- id: 9ce757a7dbff
- last_write_checksum: sha1:edc26309fb23380bd6041cb69daa38088775a66d
- pristine_git_object: 46466a54ac5b141cfb957e1e803c111bde4ca63c
- docs/components/createobservabilitydestinationrequesttype.md:
- id: 348f2067aba4
- last_write_checksum: sha1:b7251d408da77edcbd2bf88540cfd269b3cdfc11
- pristine_git_object: cd6531c3fc9ec74e2fd07347cbb22a5196e1be4c
- docs/components/createobservabilitydestinationresponse.md:
- id: "732380376136"
- last_write_checksum: sha1:418b458c99152d2bf294f3039cbc3650249c0d2c
- pristine_git_object: 52ef8aec72bb9cb3b53f99f40f6f24d786306f4f
- docs/components/createpresetfrominferenceresponse.md:
- id: 3e5b6070cb8b
- last_write_checksum: sha1:1881eb7fbe758eff1b9ead38aaee739a23b27482
- pristine_git_object: 05ff3c8bdee72a89821947233ad2b07e344ccf63
- docs/components/createworkspacerequest.md:
- id: c81e27cca23b
- last_write_checksum: sha1:02a8d08050dfad4c7aa30c136376492597a280b2
- pristine_git_object: 6a27face512625b803b3019961e92fb93507c07c
- docs/components/createworkspaceresponse.md:
- id: 32307c6ed876
- last_write_checksum: sha1:06da8a383b790b50e9112e715bc27193b773e412
- pristine_git_object: f8016bd9b1a1836738e1f4811999a96dabf244ec
- docs/components/customtool.md:
- id: ff0ec1b8ea8b
- last_write_checksum: sha1:16c97cc21733bf9ec827d3fd259f205f78ec88ed
- pristine_git_object: 30dd86addf398fc81df2ef8e2caf4e1f0b013b4a
- docs/components/customtoolcallinputdeltaevent.md:
- id: aa74a9239e4a
- last_write_checksum: sha1:4e4fc3e68dc1fc5b2d06480df23b7b300976efac
- pristine_git_object: 4f602b0e61488f794f97b0d9bcceb46b7e93afb3
- docs/components/customtoolcallinputdeltaeventtype.md:
- id: 65bad1b92e5e
- last_write_checksum: sha1:028f27c1b938af3e8ccc9234cf28b296eda87778
- pristine_git_object: 1029c1bf974c37ad107d5eb589eede4fc1066f29
- docs/components/customtoolcallinputdoneevent.md:
- id: 97d597082345
- last_write_checksum: sha1:221fc723d1c277e5210b8a4c9b050ababaadd58f
- pristine_git_object: 691db8e9a97f4ea4ddf07f51464ad7a20900ed9a
- docs/components/customtoolcallinputdoneeventtype.md:
- id: 1909dec217d4
- last_write_checksum: sha1:67020dd1f2231c0fd73324d8d01ca9272fdbe2cb
- pristine_git_object: 088afd273160b71d1eff1495bd50bdee784dc706
- docs/components/customtoolcallitem.md:
- id: ae7a6ef3060d
- last_write_checksum: sha1:bb1d924cd9719ea627615ac328b110f3ed090b65
- pristine_git_object: a4bf10f7c9de3955d685b74a84bd573fcb799cb5
- docs/components/customtoolcallitemtype.md:
- id: 43c75f922ac8
- last_write_checksum: sha1:038cc5d06f5d69a4a2d1318eac6994d25b97d693
- pristine_git_object: 45ae18528e90d2780fc584798ca68c59aa139914
- docs/components/customtoolcalloutputitem.md:
- id: 7fd804624ea4
- last_write_checksum: sha1:59c60228c9cfdf9aaf7849308986561f3f6a3362
- pristine_git_object: 9bddd1f51bfa27f3beceae0ec2c0bc961031abe5
- docs/components/customtoolcalloutputitemdetail.md:
- id: 9060d746d744
- last_write_checksum: sha1:48b8d9387e689ac4d1011b18ee47b6b50e68f172
- pristine_git_object: 269dcd5c4827764641f5480b124354a9d4c86220
- docs/components/customtoolcalloutputitemoutputinputimage.md:
- id: 644e4613d935
- last_write_checksum: sha1:fa09dc89aa8e38719991328d9a3a3a728a6ad7d9
- pristine_git_object: f535d0464a8cd17fc6141bbe314d84ed9fb54412
- docs/components/customtoolcalloutputitemoutputunion1.md:
- id: 72bb55707f72
- last_write_checksum: sha1:05a9d4f91756451143d0dd75d551cae5dd572a5e
- pristine_git_object: 9061394039ad4daeb84740e333554e6828ef8299
- docs/components/customtoolcalloutputitemoutputunion2.md:
- id: ca10033f3ed9
- last_write_checksum: sha1:213c956b2fc511b952bd8f3416fdef20336c4081
- pristine_git_object: 6750f9d41f77ec38d8554a2c880ae9e0daab8357
- docs/components/customtoolcalloutputitemtypecustomtoolcalloutput.md:
- id: e6ba19bbdb9a
- last_write_checksum: sha1:435ef3f664fa25e832e09d4b7fd23bec43711962
- pristine_git_object: 1f833f8904c45c28f378a297e912f2413b0ba6b8
- docs/components/customtoolcalloutputitemtypeinputimage.md:
- id: 1923f15f8775
- last_write_checksum: sha1:39bad5280dd7abd36a784c4a27eb6d12c53fccdd
- pristine_git_object: e4811f464b43800ab8274e2ef256140b79f2a265
- docs/components/customtooltypecustom.md:
- id: 5fabd69a4a9d
- last_write_checksum: sha1:900733b615df411575d56ac31008d2059e75e1be
- pristine_git_object: 173b9852b2b997cdbd6308ccfc7c8aa3659dea04
- docs/components/dabenchmarkentry.md:
- id: ec28e83091da
- last_write_checksum: sha1:d0b6bd3f94972b0d6051fb9518e8eb3a1768a844
- pristine_git_object: eec6060113f1177659279ced122473f4ab031a69
- docs/components/datacollection.md:
- id: cacd95d2ebf9
- last_write_checksum: sha1:1d9eb4c12467860d5ef9edceb6456a4b9d6de643
- pristine_git_object: a07c6e2e56cf9bca27530a9f9940b4d439680a0c
- docs/components/dataregion.md:
- id: 8c2ef2f3a21f
- last_write_checksum: sha1:455503307853c4dee6a8c3d5b790f4e84c1fd5cc
- pristine_git_object: 79b026c46fa27af5cc8c8e384498b11bee1bf5c2
- docs/components/datetimeservertool.md:
- id: 2b884f7c46b0
- last_write_checksum: sha1:60984916e1dc1df81001d9ff7b1f394ef4895498
- pristine_git_object: f6abe0a5d59c59b6766f180d41d6bf65ae836a1a
- docs/components/datetimeservertoolconfig.md:
- id: 5d74f1cb3030
- last_write_checksum: sha1:cccb4abbdbd8d33ab18eda21dcb71579ae6ac57e
- pristine_git_object: 30af011662994a116fd52e1d8b8a446b760c1184
- docs/components/datetimeservertooltype.md:
- id: 8d84fb41685d
- last_write_checksum: sha1:fcfbe6740c505b263b90f7de5281d4f506922b05
- pristine_git_object: 870296bd3335da46ecdf4ec1722a3d47037a09c9
- docs/components/debug.md:
- id: 26a3872bbe78
- last_write_checksum: sha1:49855ba9878e3a8cab4e48176c1638475824b111
- pristine_git_object: 57d0211ffc7883793b06207fd2909f05117f42e1
- docs/components/debugevent.md:
- id: fc88265fcb2e
- last_write_checksum: sha1:5797649b9dec8e67a019a339786d29067bc6c1d0
- pristine_git_object: 190177ccf64727feae565ad9930ca71cf0c5bc1f
- docs/components/debugeventtype.md:
- id: 8e17e2235c87
- last_write_checksum: sha1:981773f91d37ee4d920a01c457995b4fe2085f69
- pristine_git_object: c70c1ce547e7a377caca25eac9e55d5cac10c165
- docs/components/defaulteffort.md:
- id: 08dabde07c1d
- last_write_checksum: sha1:0a1d4ee947c22010f9bb2cb66a52a0bbb2011e00
- pristine_git_object: 871219eaf7153f1027be70d26b1f667444a6fb17
- docs/components/defaultparameters.md:
- id: a84477afcaec
- last_write_checksum: sha1:a20e8b576e341dbcdb91884b8fc83cf4316ab106
- pristine_git_object: 6941215fa82fae36a554f184e99595e51bf4b150
- docs/components/deletebyokkeyresponse.md:
- id: 9fab8fd95bbe
- last_write_checksum: sha1:2c8376b694e91d8fe5f3c0e85575ad1c5defab8d
- pristine_git_object: 706faaa13d94b66a414d772044077cb1444bce45
- docs/components/deleteguardrailresponse.md:
- id: 78770374c8ed
- last_write_checksum: sha1:1ceae5a23d706b158b011b234d968a0fd495d2fc
- pristine_git_object: 7e0a483e6690842ba12d2a9349a9e2f0c79df8c9
- docs/components/deleteobservabilitydestinationresponse.md:
- id: fa521d2a3c76
- last_write_checksum: sha1:ce3c41c91454e83f9729bea4ad1c312e0ab7f5c1
- pristine_git_object: 34f13a0d5e0bc6c7513533d2417896d605d54626
- docs/components/deleteworkspacebudgetresponse.md:
- id: 340d3cd85ee6
- last_write_checksum: sha1:c481c04da913cb0c725684810d53ad636a33b7ef
- pristine_git_object: a44597c43a8a7fcee3154698d083b2ba85d1e6ea
- docs/components/deleteworkspaceresponse.md:
- id: df0fb6410027
- last_write_checksum: sha1:e5eebf42ba059f27a266fee18c032e193fa382e6
- pristine_git_object: ba3c2bfda961110864cb08434398c94c698415f5
- docs/components/easyinputmessage.md:
- id: a4927c37a92c
- last_write_checksum: sha1:9da1d4db9cd27f00a6b95f2bfd770e3e1f3755f0
- pristine_git_object: 336ef7a7bb1df419370af586eec43e774bf4730b
- docs/components/easyinputmessagecontentinputimage.md:
- id: f7937c5f8c6e
- last_write_checksum: sha1:dfddbfbcce4b0309937f0369bb4768fd4382b043
- pristine_git_object: 22ad82113e1744c08340678e760a4d3f7e0ffeaa
- docs/components/easyinputmessagecontentunion1.md:
- id: 50fcb3e4383f
- last_write_checksum: sha1:f3b0bfbd846036a751a5fafe0027d24fff1e8562
- pristine_git_object: 3fb9f574e248def2e7c13338b69a0836fd6da635
- docs/components/easyinputmessagecontentunion2.md:
- id: 193c6ccf9019
- last_write_checksum: sha1:cf3577d0972e3655d0c7fef93a74a8ed784d53f6
- pristine_git_object: fece542858a307b4381b49dd8a48438f6e5412a1
- docs/components/easyinputmessagedetail.md:
- id: c61a76d3f5f7
- last_write_checksum: sha1:6b39918f586956910ec295b1554f7d60344644e1
- pristine_git_object: d16be2523383510ef5e70821cc9fcd80952b1520
- docs/components/easyinputmessagephasecommentary.md:
- id: 876e7cf3c1bd
- last_write_checksum: sha1:a66361bbf2c77f4c9ead65c37687136d44fa5b25
- pristine_git_object: 846fa3d7f29f5596cbb820c82fa875ea588ad285
- docs/components/easyinputmessagephasefinalanswer.md:
- id: e2b7b0975fdf
- last_write_checksum: sha1:1db0189759242106720ead985ff968db6cbb9ae4
- pristine_git_object: d0c4674078bfa1854cbf535108d1f2fc8a26ade2
- docs/components/easyinputmessagephaseunion.md:
- id: 2ce458f59101
- last_write_checksum: sha1:5690e18679ce08a4b04a78dc587d3b3e7c32e583
- pristine_git_object: 4a8e7c3c8cc52dc3d9884123cf113c3190d3092b
- docs/components/easyinputmessageroleassistant.md:
- id: 15af073bfe56
- last_write_checksum: sha1:6af3b2b38d768de19419a6c132b8eee9be68987c
- pristine_git_object: 1cdc687996389411002e50056bfb400b5d5bae0d
- docs/components/easyinputmessageroledeveloper.md:
- id: ee99f8ad364e
- last_write_checksum: sha1:59b505361d5c941946e7926038d5b7741cdf3c22
- pristine_git_object: 08832892c5f6bbc65a0363c98b05ba1a1ec056f8
- docs/components/easyinputmessagerolesystem.md:
- id: 1b7599d2a1f1
- last_write_checksum: sha1:bbd687187332af48fb13463bd21806379906dce4
- pristine_git_object: 26c830aec4d74672afd9711cd45687d6825647da
- docs/components/easyinputmessageroleunion.md:
- id: baca15eca8c5
- last_write_checksum: sha1:c22891423c0530830f933da1a8eb6fcb7068d185
- pristine_git_object: 682ab99f7710f31fc792375f41c66c1a634c8bd8
- docs/components/easyinputmessageroleuser.md:
- id: 6c844fdcf70c
- last_write_checksum: sha1:21736cdf62fc202adf26bf1939e029f452dfcf83
- pristine_git_object: 7b275a9261e22e64da7c7f53e5b998e13af51a1f
- docs/components/easyinputmessagetypeinputimage.md:
- id: 896085ad02a8
- last_write_checksum: sha1:7aaf19dc8344080ebe7b67569b48a02f96a05b5a
- pristine_git_object: a40bf8aac133d7fd1111fa688bdff6a419d9b7cc
- docs/components/easyinputmessagetypemessage.md:
- id: 09c9ddf2d237
- last_write_checksum: sha1:4890beaae899a0be186dd053e4f83f5e9c7f2688
- pristine_git_object: 39df84285df422ec938376eea073fcc200fa0335
- docs/components/edgenetworktimeoutresponseerrordata.md:
- id: 27d848813ab0
- last_write_checksum: sha1:eff07929141781909a39ca2793f1afa963169f7d
- pristine_git_object: f460fe48e034fa2d47ca347e7c4ab3a9846a0663
- docs/components/edit.md:
- id: 2f41d0745c51
- last_write_checksum: sha1:21f4b7a31212dac0a40f81fdae3485ce5fbc4831
- pristine_git_object: 3cddc0c341c102b23d127274a3c41b6719d7b9bf
- docs/components/editclearthinking20251015.md:
- id: 4d12fd9d95ec
- last_write_checksum: sha1:908d355f57932e8aeae02bb9b21fb16711abe301
- pristine_git_object: dd0296e4ee080bb6127b2af9d3b6f7b8850a4eb7
- docs/components/editcleartooluses20250919.md:
- id: 7c5b2e32875c
- last_write_checksum: sha1:c6f8db148f629df94f9a2a73e8c98e7406ce7200
- pristine_git_object: 1f8001583309f3486dad8456d6ef1e76ebea1208
- docs/components/editcompact20260112.md:
- id: 47c6b6fa38ec
- last_write_checksum: sha1:59a918b462ee2cd67c496deefb681b3375ed2b50
- pristine_git_object: 7b6f31523dbc6e02700d5d2aaccc39fae9644229
- docs/components/edittypeinputtokens.md:
- id: 099ed6a1de82
- last_write_checksum: sha1:41580565bc483b2ca1cdb981e15d324f8060f504
- pristine_git_object: 8463c0cdd55e1d75e23e3d7362f0dbfeca1985c0
- docs/components/endpointinfo.md:
- id: 98e0e75e1121
- last_write_checksum: sha1:5563b32279aeafa2725d1547df1d0f517e53789d
- pristine_git_object: aa455ebb10ec0c722ed3c38824d82c0689507663
- docs/components/endpointsmetadata.md:
- id: 9b403c20b7a4
- last_write_checksum: sha1:805465cf28357e16abc156888f5bbf305612e0f6
- pristine_git_object: 83eba1215ad932ffe98dccc5b1b5c24fd79a8ae3
- docs/components/endpointstatus.md:
- id: 8643237270dc
- last_write_checksum: sha1:945606bc29cd884375a5c9404786df5e726e67a0
- pristine_git_object: dd8900571dc033720f7ae045e3ea0592d4588c4c
- docs/components/enumcapability.md:
- id: 03f3a8a22c9d
- last_write_checksum: sha1:3e87b13cadc0c69789c6a5f9e0d5163501615711
- pristine_git_object: ab110208b2603a762628911c9952a34dce75a38a
- docs/components/enumcapabilitytype.md:
- id: eb85df42d2a1
- last_write_checksum: sha1:c86722cdb14ed7a6de6574259b4a44fbcfb3f104
- pristine_git_object: 4c3f22bb88bfc6e30be791285a94861ae272c39c
- docs/components/environment.md:
- id: 29e78fad01ee
- last_write_checksum: sha1:532d3cc7bb12231a96be78b25f9b5b06e1db3218
- pristine_git_object: e58da65457bd71885289a77f054ae63189dc77d9
- docs/components/errorcode.md:
- id: 8444c861d257
- last_write_checksum: sha1:8afa60d8ed19ab173c806f80bbe6fee0f40daf5a
- pristine_git_object: 5b63fd329f8a981b755b8ed175c70cccbe951608
- docs/components/errorevent.md:
- id: 85ad990558e2
- last_write_checksum: sha1:b5a4361d18eceeeb7238df66b32e53ce42aa9888
- pristine_git_object: fd68584a7de95958595c0463e26176397b63a479
- docs/components/erroreventtype.md:
- id: c66a1a2560ef
- last_write_checksum: sha1:75e5cd528e6faeee349e685da1810190643ae17d
- pristine_git_object: b3410e67c37edd66f60b0f2364e0d858abe3bd88
- docs/components/event.md:
- id: 4bd48e5ca177
- last_write_checksum: sha1:943311c8ce583f0b6395a3a71b3c2c8d3ca1d533
- pristine_git_object: 951557e29494624a811928ce287ea536a39d14c2
- docs/components/failedmodel.md:
- id: 352428b99ca5
- last_write_checksum: sha1:92ead534bbde5d3029a41bcdae5d381d85ece301
- pristine_git_object: 01f5aaa2523583fb5c7d1f575a62f28f8c716760
- docs/components/fieldt.md:
- id: 80d3b62a3bde
- last_write_checksum: sha1:c9ed5fc7d8bb28083fa40f14788adeb694770c89
- pristine_git_object: 2589ece524306e237bbd57cb749e469856e5c1e2
- docs/components/file.md:
- id: 6148b0bfb103
- last_write_checksum: sha1:6ed22bc8b67721e109d726be38bcfac96f0fd327
- pristine_git_object: d2a2e85810efa44f6870d4a06de5ed01d59f97ed
- docs/components/filecitation.md:
- id: e234751883c3
- last_write_checksum: sha1:4fb72c563ad7da362b188942bc2910e59a8518ee
- pristine_git_object: f03ca158d04793c033ec7bbd629e2c453a94edff
- docs/components/filecitationtype.md:
- id: 41e6446acd3e
- last_write_checksum: sha1:8cf5b7140dee926145642fe455df0538a8c95e53
- pristine_git_object: 787e2546ba435d92d0736bb1d4d6e212e0128ad7
- docs/components/filedeleteresponse.md:
- id: 0fe19548775f
- last_write_checksum: sha1:d889c371acdacb8ae1aa1e0ee20bef8f592ade22
- pristine_git_object: 04da1d71610c42c2225c2ca3707b1c8bc0520be7
- docs/components/filedeleteresponsetype.md:
- id: b347190ca7f4
- last_write_checksum: sha1:7e9b2ded8643e7c4dbe2a633860188dbeedeea01
- pristine_git_object: ac0edebfe2e2699b264443c620d1cef047e572c5
- docs/components/filelistresponse.md:
- id: b9d88cd4c0e1
- last_write_checksum: sha1:eb0f24dd3ded6f96256133a77622b91e5dcb283e
- pristine_git_object: 2346d99debb688213acb2a17af75272ac7949688
- docs/components/filemetadata.md:
- id: 8383f1928110
- last_write_checksum: sha1:23768b29ef2fa1152ce490ca08a9c02a24eb2223
- pristine_git_object: 19e14b3dedc2d2d167c0206290ef3ceeea718dc1
- docs/components/filemetadatatype.md:
- id: 5ee442ed458a
- last_write_checksum: sha1:2c89256b349b9c8c7b974dc71fa800e24fec89d7
- pristine_git_object: ca7fa8ca35f95843a6d0417467eac7b82f355f67
- docs/components/fileparserplugin.md:
- id: 5f9fdad1c2b2
- last_write_checksum: sha1:27fcde21e502bc5014e94a324bf470c98acb4b99
- pristine_git_object: 6f72d585cf0b39f99832fa706b97de383d46fec9
- docs/components/fileparserpluginid.md:
- id: 9c8bc71e8b09
- last_write_checksum: sha1:63680b47375eacbf235654cabe90c7f643fb9c35
- pristine_git_object: 094f3b3dec61e80e62232e8b670d66d645a041d4
- docs/components/filepath.md:
- id: 6fc21505064a
- last_write_checksum: sha1:87d59e2c0528cdd4eeb90a7585faf89ce6b1b5e4
- pristine_git_object: cc41f2d3c5a100880e59ff8417b1b01e75519890
- docs/components/filepathtype.md:
- id: b9cccc74dfb3
- last_write_checksum: sha1:bfdc1ffdd6ad62790b1b902de7f1e6f1e81fbca6
- pristine_git_object: 8edc6ad003bcd068e3362ed1d4f658a756a01328
- docs/components/filesearchservertool.md:
- id: 4a63087d0118
- last_write_checksum: sha1:3713c32b626ffd11e485e37d2d37b25e8feb12f8
- pristine_git_object: 0315adc688c60198e04b04c516e0d8ac69009900
- docs/components/filesearchservertoolvalue1.md:
- id: bc1f3e9addd7
- last_write_checksum: sha1:d37518968240e5e99c3a8539489eb364c64c0c44
- pristine_git_object: 7f367fe902c643ad5a973deb76af02dc38647336
- docs/components/filesearchservertoolvalue2.md:
- id: 087cdb1e4407
- last_write_checksum: sha1:bd9a21d7465dbfb696ec8c0d4d09ef7ee2d34143
- pristine_git_object: 9ad11d360b2d30f737b0560c61b321b748f04e63
- docs/components/filters.md:
- id: bb43ec42351f
- last_write_checksum: sha1:c982cec79f513d3c3836d401762a7b7131d307e2
- pristine_git_object: 89463d7dbf25d5d3cc6e1a7467cdc5f6bffdd513
- docs/components/filterstype.md:
- id: 7a1c1e739033
- last_write_checksum: sha1:355e43e7bfb04a8119a571ead3b12904526669ac
- pristine_git_object: 9dda683e8bedae58b8a21bebc362926b200e2126
- docs/components/filtersunion.md:
- id: 3c6d0f38cff4
- last_write_checksum: sha1:620288ec601a850106f4c32100227dfb0cd04d1e
- pristine_git_object: 6ae299b869ca32481b9dd115daba724809216f87
- docs/components/forbiddenresponseerrordata.md:
- id: 2b182274133d
- last_write_checksum: sha1:5905ebd01d68fd89d4b109895b76799ed95dbe24
- pristine_git_object: 37e2199b4865f7bc7bd7daa2ac5065133d51cd3c
- docs/components/format_.md:
- id: a1f82a6f0081
- last_write_checksum: sha1:a2868ca356a3322f9ab3b2122ecb1cde9e0436d6
- pristine_git_object: 96e07e7e317890e42522caddb5751f6988dfb112
- docs/components/formatenum.md:
- id: a9b19c5518ff
- last_write_checksum: sha1:59d36b41317eda9e9c3b054e6dbc2e555f39c2fa
- pristine_git_object: bed999ac8af6e73a75012a8608ccf532a7d01169
- docs/components/formatgrammar.md:
- id: 56dad240b6c3
- last_write_checksum: sha1:e4d95b6a414a3db953ed65edaf349628c18a1621
- pristine_git_object: 1077254507fff502cd57644a666e34fe564a4106
- docs/components/formatjsonobjectconfig.md:
- id: 0cb152015017
- last_write_checksum: sha1:3e223b7d266045f2db2515cea9bc4fc9a836eca0
- pristine_git_object: 5b1c7eb54d8a9d396109030e9cdc04f2960b8fe3
- docs/components/formatjsonobjectconfigtype.md:
- id: eee3beaba7a2
- last_write_checksum: sha1:318e4df1870ed93c8ad8677ff991ad7d4ea5a5cd
- pristine_git_object: f95e5f5749d25c1564372fadde296cd3fb537b36
- docs/components/formatjsonschemaconfig.md:
- id: 86caad7af281
- last_write_checksum: sha1:07692f66b93bc2e88ae48dfb705d7b10ab1bbe97
- pristine_git_object: 372f0a15c0e42328970f27ec028b38353ac31cd5
- docs/components/formatjsonschemaconfigtype.md:
- id: 439973dacfcd
- last_write_checksum: sha1:345a2c5fc424bf78d4f64f383dc093c38388d467
- pristine_git_object: 01324649b2e7b8884defc43431c6177a1e0d372b
- docs/components/formats.md:
- id: c761f516dad9
- last_write_checksum: sha1:54e6afc0e00ec99173c873796b9405b947cdc559
- pristine_git_object: 24d071e213966744d695d859d1dfb70eda47c560
- docs/components/formattext.md:
- id: 0a1f9222d5bf
- last_write_checksum: sha1:be86d45052064473ed516ec583e637c2027707c3
- pristine_git_object: 80dd1f8a2feeab11fe78a02cdfbd68fe8bfcf6c9
- docs/components/formattextconfig.md:
- id: a79b2b3cbebc
- last_write_checksum: sha1:f2c2bc3e4417f8299c61b87e5f817e805491227a
- pristine_git_object: a37f8950d3ddf8320b21467f43b60f4f4719ea60
- docs/components/formattextconfigtype.md:
- id: d81ed62bda6a
- last_write_checksum: sha1:c806b9523a4109d4342d237d3fec2f9856594f5a
- pristine_git_object: 5d831e0c8984838ae115cd74cc114f95fdfcdeaf
- docs/components/formattypegrammar.md:
- id: a6275e70cf35
- last_write_checksum: sha1:81c6de4becbbdb9e642c24d20976d4879592fcfa
- pristine_git_object: cededf38a907fd264a938cdb941bc41182153b56
- docs/components/formattypetext.md:
- id: 978549ce5d07
- last_write_checksum: sha1:caec39e3db4ac9be861e1d30d08e58e543220344
- pristine_git_object: 7d38cb838f31c6c6be5015fe284f22623ea120f7
- docs/components/frameimage.md:
- id: ebc112d05933
- last_write_checksum: sha1:e65d5a74b177f6d9e11c7786c1e492f17d6567a4
- pristine_git_object: 9d97afed6794b71ca949550406fc8dcb70777588
- docs/components/frameimageimageurl.md:
- id: f7f8b989e5cc
- last_write_checksum: sha1:601f7bdfa4a294d4813b4757cbddd68a2ede75fb
- pristine_git_object: d625c734e9d919fcf3e08c48cd851dc569b8f05a
- docs/components/frameimagetype.md:
- id: 5a90ea1e4cde
- last_write_checksum: sha1:d78505a7ce5a303af6eb4fd6dbb98d9cb8893148
- pristine_git_object: 696f2e3d541778996e3228e9caca8d9b06d06dbf
- docs/components/frametype.md:
- id: 1b935b46e543
- last_write_checksum: sha1:8783b4abfd4eb3636c10f63970d052f8d68ded5f
- pristine_git_object: 42690f69f107daa185fec7d36323bad56a51c266
- docs/components/functioncallargsdeltaevent.md:
- id: 029525b7c073
- last_write_checksum: sha1:5c00a1ef2b1b3a7c474a4d7bce8cd099b30a68a1
- pristine_git_object: 02751bac36979d78e23fadb1f1ca5b0309ef6b38
- docs/components/functioncallargsdeltaeventtype.md:
- id: f3f34894a1a4
- last_write_checksum: sha1:36466a5504f92ad63dbea7a289128918efbf8f7f
- pristine_git_object: ecaf5b58a63e2b1d6f7034aeb39b5fd8930432d0
- docs/components/functioncallargsdoneevent.md:
- id: 3a2081d69643
- last_write_checksum: sha1:e718ba7e7c1ee82212725064bc96e0c13c3772b0
- pristine_git_object: 1e19ee10fb40a907c871ac1ebb145d4b73e2ed86
- docs/components/functioncallargsdoneeventtype.md:
- id: 0a537a121286
- last_write_checksum: sha1:ecd15044cea3777ff481256819feac67f7643566
- pristine_git_object: 3f4c91d5bbe63c375f8ba938bfa6b620355c82c3
- docs/components/functioncallitem.md:
- id: 728446a82c6b
- last_write_checksum: sha1:305e2150f29e5d112d0cb1393d992af191fe206f
- pristine_git_object: 264caf51ad826572ceddc91ba4a3ed61a8a14a78
- docs/components/functioncallitemtype.md:
- id: c7b1c1ec212b
- last_write_checksum: sha1:995a373197e8ee246d7127595dfdd1c77a913dfe
- pristine_git_object: 7640481023ffc48c27a7e7417451fecbc661c205
- docs/components/functioncalloutputitem.md:
- id: 5bdb39338207
- last_write_checksum: sha1:055ae81522a43ce32bc2826944bbc0f71a19aac2
- pristine_git_object: 70980ff71ad1d40d3883760dd03e08e441cae5d0
- docs/components/functioncalloutputitemdetail.md:
- id: 2cb02374b48c
- last_write_checksum: sha1:f6dd8efe5930ce437012cc96a61f0b7db0483a91
- pristine_git_object: 110493d3ee8ba69d0eaaa462e3b33151253f86c9
- docs/components/functioncalloutputitemoutputinputimage.md:
- id: 9570df9b26d2
- last_write_checksum: sha1:67e5c38e6c836a97ad000cd964d11c506798dc55
- pristine_git_object: bc92a71bab1c01f60ca7934ede4fb6b88c0e60a8
- docs/components/functioncalloutputitemoutputunion1.md:
- id: f029cb33f764
- last_write_checksum: sha1:46f8e24dfc769f4df47be4cc6b411879f68d51dc
- pristine_git_object: 11055d5492955153e6be80801a6666d37f1f7c90
- docs/components/functioncalloutputitemoutputunion2.md:
- id: 1737d9834676
- last_write_checksum: sha1:edde5e34d278f6fc8068d42e94e42d4fdad355e2
- pristine_git_object: a91fd7c0fd6924e7c7870c94d40753f552fc6c04
- docs/components/functioncalloutputitemstatus.md:
- id: 153450590b13
- last_write_checksum: sha1:0cdf893ee7a70253229b92fd906df2e9b179047e
- pristine_git_object: 46b4b6b4fd4063952ba22957347c34dd8fa5eb49
- docs/components/functioncalloutputitemtypefunctioncalloutput.md:
- id: 88a512c5f9ce
- last_write_checksum: sha1:611201e2dbd2c8fe1c501b5365bc06367bc5370c
- pristine_git_object: 2f4629220306ced5674a9ef70dbcbce1f908b93a
- docs/components/functioncalloutputitemtypeinputimage.md:
- id: 543fcbf66e1d
- last_write_checksum: sha1:9f50972404864a7c4686908509d318dde68651cd
- pristine_git_object: 0bf236695ac6d09e19cb2ca87f83bb34a0113aef
- docs/components/fusionanalysisresult.md:
- id: 8c86ee99328a
- last_write_checksum: sha1:2a166476b05f68c04e6fb4949f27a962943f1cdc
- pristine_git_object: 53b057d410c3f7490e0da572a57b07db911391ed
- docs/components/fusioncallanalysiscompletedevent.md:
- id: 5b7a4d83d4e0
- last_write_checksum: sha1:bd617220cf760bf81c01a18adb78d10372ddf4f2
- pristine_git_object: 8eb755e30bf34cca76c6315ebd591347a0dd4331
- docs/components/fusioncallanalysiscompletedeventtype.md:
- id: 2b0435cf2967
- last_write_checksum: sha1:0241b666501b6046cf3321c6e62bd2c2ad1d9969
- pristine_git_object: 62106911a72fe5f9073664beefc122107092c047
- docs/components/fusioncallanalysisinprogressevent.md:
- id: 0550b58a7e71
- last_write_checksum: sha1:78729ef0b7372c67a30d022d735d8632e1fba58f
- pristine_git_object: aaeecf4137a284543e5c2adfed54c9d293e9c754
- docs/components/fusioncallanalysisinprogresseventtype.md:
- id: 55fc502d3f1b
- last_write_checksum: sha1:e4416f12218da7f6e92d673debb751cd8ad77b80
- pristine_git_object: f5c21afc5cb3677c5cd687488117aa7ba5cb65fa
- docs/components/fusioncallcompletedevent.md:
- id: cf22fb075b16
- last_write_checksum: sha1:1e30eb4648e216a062f218fd3885fd5518921520
- pristine_git_object: 6dbeb8bc626a7822828750991bba4bd10a2fb98d
- docs/components/fusioncallcompletedeventtype.md:
- id: 8a0e4946fdae
- last_write_checksum: sha1:fb3ef6a1c064c753ab6ab6556c820602a6e2cf88
- pristine_git_object: dbbe741801b75bca7de8d06343a1a634758b9203
- docs/components/fusioncallinprogressevent.md:
- id: 9baa590f99b2
- last_write_checksum: sha1:ce4879cc7b5f64faded639ec0eb0bde916ec3c69
- pristine_git_object: d6396b2dcdbee534f9515c27404addaea1012def
- docs/components/fusioncallinprogresseventtype.md:
- id: b4c5a955b632
- last_write_checksum: sha1:dab95c6a1b23bfdcad72d7719f5b2bc537ffe695
- pristine_git_object: 5df508e6604b9c2e73a07935d72c73b7e50bceea
- docs/components/fusioncallpaneladdedevent.md:
- id: 8239222fc899
- last_write_checksum: sha1:99563629a6779204ffe74de0414028e91b44a496
- pristine_git_object: dc1a92a698bd534179e7c57a2ebebe285e208703
- docs/components/fusioncallpaneladdedeventtype.md:
- id: 33dd6036fa92
- last_write_checksum: sha1:ee2b9f1dce5c427af965aff39f427c56d75857a8
- pristine_git_object: c0cdad85e349e97ba6539949d42ae1ebeba4baa3
- docs/components/fusioncallpanelcompletedevent.md:
- id: 200b419a678b
- last_write_checksum: sha1:a03b9876673503bd862d682e5c8812de38c79736
- pristine_git_object: a30e56268babe44c68bd08fafb999f79b876919a
- docs/components/fusioncallpanelcompletedeventtype.md:
- id: ddcf55c427d4
- last_write_checksum: sha1:ee2875ea36681b9f87422a412a55640dfb2b7cfb
- pristine_git_object: 9d8eb7d80104ac2a896ffd585933d2702ef7eeb4
- docs/components/fusioncallpaneldeltaevent.md:
- id: 73f8d7888706
- last_write_checksum: sha1:13928ef29e3239f778988938918dd695b7f687fe
- pristine_git_object: d890c8ff75166aeeaa7c294395219d70f61a7a54
- docs/components/fusioncallpaneldeltaeventtype.md:
- id: 5ee73664dfb6
- last_write_checksum: sha1:7192854ec113f5b4da058bee896e1c00b14b7b7d
- pristine_git_object: dc3e2d9f3238464086cdc4efb9d2468ac487465a
- docs/components/fusioncallpanelfailedevent.md:
- id: 96daaa50cfec
- last_write_checksum: sha1:c3971988e20c318c9446e0fc666e8232d566c07e
- pristine_git_object: 1c1a14da28ce6aef8e986136393858a1f80191f5
- docs/components/fusioncallpanelfailedeventtype.md:
- id: 4afbcf43cf7e
- last_write_checksum: sha1:ad578b2955f5df25be2cc4997ccd099eda9c2ea9
- pristine_git_object: 1ba418075f3c76be85aa03ba96d7768faaadd489
- docs/components/fusioncallpanelreasoningdeltaevent.md:
- id: d37f7d4f3e82
- last_write_checksum: sha1:70d4179cdb0344c90d2029d56b5ce1b3125e5482
- pristine_git_object: 09cfca812ff624c2b6dcd765cc1aa47e8db905c8
- docs/components/fusioncallpanelreasoningdeltaeventtype.md:
- id: e77150716d35
- last_write_checksum: sha1:a20cc76c99f6085708c8b55531839073e1f1df85
- pristine_git_object: a25e9ac103e67f0c8ec9f3026619be4e98c39e32
- docs/components/fusionplugin.md:
- id: a8f51a52a342
- last_write_checksum: sha1:f08846e4a17e516b76d2d9d444d651d85b7242c4
- pristine_git_object: cba78bf21100a55f17809c0c9cd346a6842e665d
- docs/components/fusionpluginid.md:
- id: 4e5b1c34b883
- last_write_checksum: sha1:111b144dc73f68ccc99f40d23de78fd47126b323
- pristine_git_object: b3de5efcf0d7dad28e612d41b523ce26bf0de245
- docs/components/fusionplugintool.md:
- id: f4728cca243c
- last_write_checksum: sha1:5afcf82da033e264ea0c0f23be39dd329edc7397
- pristine_git_object: 6e9d365f8f2f48bd6e425c4bc196d5572b5c9828
- docs/components/fusionservertoolconfig.md:
- id: bc9b9f7ae08b
- last_write_checksum: sha1:f50ee0787ba40078c29904a0c97f917e58abf6c0
- pristine_git_object: 6140333143c3a5aeb6dd45e26c5f2b0bcf508c2e
- docs/components/fusionservertoolconfigeffort.md:
- id: 897b52512b1c
- last_write_checksum: sha1:2bb8798736eeb5504615ae93293601042af679cd
- pristine_git_object: 3e3f9ac35f973801cf9cc5be1ac29e9916074377
- docs/components/fusionservertoolconfigreasoning.md:
- id: 349d14075b51
- last_write_checksum: sha1:9c650a736d7b96f193e6d24da5e82b7aa24ba39e
- pristine_git_object: ec0db8d390b9f00eec0c100ac61b73d1c101b289
- docs/components/fusionservertoolconfigtool.md:
- id: e36dcb42d4eb
- last_write_checksum: sha1:68b2cbc4451e083ae2cd07587498bfc14598cf5a
- pristine_git_object: 6e75f5b19f8c7a68d3eb50a2d0cf0c1f668be262
- docs/components/fusionservertoolopenrouter.md:
- id: 8862a760f37d
- last_write_checksum: sha1:c419e86213da1be43c98705c826b344894f583cc
- pristine_git_object: 7373389f8fd797c77ead1056462dfe1f75a4f56e
- docs/components/fusionservertoolopenroutertype.md:
- id: 58ee513b0cad
- last_write_checksum: sha1:2ec57cd7447b8eecdbe6fec744c22edb3a817999
- pristine_git_object: c7121728c6509e3d02a0b431431f133067ca057d
- docs/components/fusionsource.md:
- id: 8e98a9da51e2
- last_write_checksum: sha1:3e0611061189a883bfd2c1fad738798debb71e9a
- pristine_git_object: 59ff3c09fff96145b369a5fe5165618810fa1076
- docs/components/generationcontentdata.md:
- id: 1085c488fd3a
- last_write_checksum: sha1:186d3e8118f6d393d524a91e2ac06772a7eaf818
- pristine_git_object: 8bad571af50a9bc78e4ccc4b3f1d1911aac8c3b4
- docs/components/generationcontentdataoutput.md:
- id: e4651dfa179c
- last_write_checksum: sha1:3cedede3c273cc7bdd2971e7cd252f487729770b
- pristine_git_object: 6847cf3f3a47d2911badcc90a5723a96f22f106d
- docs/components/generationcontentresponse.md:
- id: b2bded35fce6
- last_write_checksum: sha1:4f347840c969a60a734230601882eb01b4d64aaf
- pristine_git_object: fb8acc9bc1fcee02384155f50ab24ac160d35af6
- docs/components/generationresponse.md:
- id: ba81b6e0c164
- last_write_checksum: sha1:e7362ecc7f743d516fbb13fb0045739cb6e33eec
- pristine_git_object: 20c523d806b2dae5c3c425f2020a5e5ab6079774
- docs/components/generationresponsedata.md:
- id: 1059d258bbf8
- last_write_checksum: sha1:34b65674cc84376d4019c145dd268e0c07febe2b
- pristine_git_object: adfce3816bd7be4cf1f5eea4c4542cb56a0a08b0
- docs/components/getbyokkeyresponse.md:
- id: c07fd08fb110
- last_write_checksum: sha1:9b19d2ed29c6fd4784ae04f15f3db9f2ce9c0da6
- pristine_git_object: 14fa3aed58f927ad4e2a3597543bdbedf68ced17
- docs/components/getguardrailresponse.md:
- id: eac79c96805c
- last_write_checksum: sha1:a5792b6249490092c478f0199380daf6ef485367
- pristine_git_object: 41f44a1990323a2dd358b674c4d7e7964925b06a
- docs/components/getobservabilitydestinationresponse.md:
- id: 3e7a05d3c27a
- last_write_checksum: sha1:c53f2f769d9b31fdb8e21b57048d561ab7bd2fe1
- pristine_git_object: 839f8079d681be608c2d2b46768ca55280541588
- docs/components/getpresetresponse.md:
- id: adb3d7caca1d
- last_write_checksum: sha1:d2bf386f2ae89de89839d2368126e9cd0e196bea
- pristine_git_object: 370f2ad11a292a3c49622677cacb48e759646742
- docs/components/getpresetversionresponse.md:
- id: 20be9010ec38
- last_write_checksum: sha1:6c94d80df6e0364dba08997953820b1951742554
- pristine_git_object: ec593457949b8fdca5b6ff511ed59c0913e9398f
- docs/components/getworkspaceresponse.md:
- id: b65ac2b42215
- last_write_checksum: sha1:f4bd96439e0ae998bb2712b603f3a94638e398ff
- pristine_git_object: 96104ecd0f4117d4004ba5b2f7c488988ca40f2a
- docs/components/group.md:
- id: fc829526a4e3
- last_write_checksum: sha1:cf17cb7f4935d2c4190eff29c8e4df89297360a8
- pristine_git_object: 77588dd2feeb0c67a8b63bc64bc4f3a441aa0d08
- docs/components/guardrail.md:
- id: ce84902d4cc2
- last_write_checksum: sha1:703d808359a8ee2aeb67ec7896072310213c8bf1
- pristine_git_object: cd9c5b1ff0ced7e4d5a0514d215256a8a95d33d4
- docs/components/guardrailinterval.md:
- id: 79efeedcb880
- last_write_checksum: sha1:3c071c14943c7b26474847eee46925ae884a8a6b
- pristine_git_object: fb07147177ab7ffc9d291d2ab17bcf4f32d96d89
- docs/components/ignore.md:
- id: 854b9623c0dd
- last_write_checksum: sha1:7382df94bafcb659bed252f3f3e45fa23ccb430e
- pristine_git_object: 5f7870871ac61bf7e1a1f6d4998a7353518f3bbb
- docs/components/imageconfig.md:
- id: 0b156eedfb3c
- last_write_checksum: sha1:09e8882a3b53c99f85610eaddf2cb8ab788527d4
- pristine_git_object: ae78526d566a4cc55996515044cebeb36166f7fe
- docs/components/imageendpoint.md:
- id: 128d4f4eda2b
- last_write_checksum: sha1:775911a83810fc45a4107c5c1cf6e2677ec23788
- pristine_git_object: d062f647fd27433d0a106eafc0ea17553a468fd8
- docs/components/imagegencallcompletedevent.md:
- id: c26bc1b3854e
- last_write_checksum: sha1:487f2664906ce2bf995e5f33739ea14944d4a20b
- pristine_git_object: 3c63b103fbe070c5c901a3d99d1b864e344255f2
- docs/components/imagegencallcompletedeventtype.md:
- id: a74ad0e7b9ae
- last_write_checksum: sha1:3cc41a971955015c2fdfb46f303ae6882b450b3e
- pristine_git_object: de12c9ae201cb4226a48f20f9c19e528bb8089cd
- docs/components/imagegencallgeneratingevent.md:
- id: d24140b27e2d
- last_write_checksum: sha1:a366aafcc5e7c278fd252ec2ba4585b7d2b589ea
- pristine_git_object: f22ecf7e8d7bc563ab49a554f08555ff0a0a61a5
- docs/components/imagegencallgeneratingeventtype.md:
- id: b929dcb09058
- last_write_checksum: sha1:03fed8821dd92b8c233e48725562ef2eec92b34e
- pristine_git_object: 620ac466453fb5b61f2bb0f3ba4881c538418830
- docs/components/imagegencallinprogressevent.md:
- id: ee60aae70dd9
- last_write_checksum: sha1:561f3a9452f4127979615db84078dc87e78b0828
- pristine_git_object: 463bb94421491851e756c463c9148ad08a0f185e
- docs/components/imagegencallinprogresseventtype.md:
- id: 51942aa68303
- last_write_checksum: sha1:57cbecd6dd9f7a5bedf779ac06fdecd4cc8fea50
- pristine_git_object: 407c29cdf87ad5ddc32e64d3f68c3785161157a0
- docs/components/imagegencallpartialimageevent.md:
- id: 3845104b6af7
- last_write_checksum: sha1:ef10048a6590b53dbaed284d1a4f56e167647879
- pristine_git_object: 41f52c3eb3d170146d3d1646b9a2a4602b70f1ff
- docs/components/imagegencallpartialimageeventtype.md:
- id: c007465f6177
- last_write_checksum: sha1:c14e2e12eb49cf4445fdda2e2f400a8ea849d058
- pristine_git_object: 841d9210013aa9eac24702237c16d0aca12a985f
- docs/components/imagegencompletedevent.md:
- id: 43f5718fe2c2
- last_write_checksum: sha1:c69ebcd923faf4b7831c70ca19a62992006804c4
- pristine_git_object: 683545f58a32d3174edc2548652516d446f31cfb
- docs/components/imagegencompletedeventtype.md:
- id: 84e07b20590e
- last_write_checksum: sha1:2c301f011ef720a3d8c561c8823bcfb982934d16
- pristine_git_object: a55fc00acede523cca610d646093deddf558b168
- docs/components/imagegenerationrequest.md:
- id: e9d8e330fcaa
- last_write_checksum: sha1:f0bb2b63837fb668c14bac8f504d656aac257d5a
- pristine_git_object: 4b35a0e9546566dff24eb12c7c8b6a173de63b0c
- docs/components/imagegenerationrequestaspectratio.md:
- id: 4362d9221e46
- last_write_checksum: sha1:42f4b0d20c677cb8eeed1da4be0ba99b3949a092
- pristine_git_object: 5fd5856c0c84516b9cafb31efc69c9dffde3cd6d
- docs/components/imagegenerationrequestbackground.md:
- id: c71873b68e38
- last_write_checksum: sha1:d19360cc58475f3df142bbdf4e0cc05b2e402f8d
- pristine_git_object: e6a05256245f0e61a844854a79e3df7b614660e7
- docs/components/imagegenerationrequestoptions.md:
- id: c0b61720c268
- last_write_checksum: sha1:f9b967e71b8ecc7f3aeb97556d27e00bc09feacc
- pristine_git_object: c8182577e9d32346d37eaf1c0a6e3dde7e5329d7
- docs/components/imagegenerationrequestoutputformat.md:
- id: e2b7dc215866
- last_write_checksum: sha1:bbed0fcaa1458a6d761ae64bd4f6b54a583a801f
- pristine_git_object: 5fb8cd251197d2bab3f86ab91e6e7f2bbe81d9e5
- docs/components/imagegenerationrequestprovider.md:
- id: 2718a263ac9d
- last_write_checksum: sha1:cd79a69707ee0a6040570128b20dc122f9561c37
- pristine_git_object: b61121191366b1bc3021939e983e136588a2ecf8
- docs/components/imagegenerationrequestquality.md:
- id: 1c832458c677
- last_write_checksum: sha1:cb4331f66f1295a6b046c4575e443b9ca84d6939
- pristine_git_object: 4e7aef948aa95a900e52687840862e48882de964
- docs/components/imagegenerationrequestresolution.md:
- id: d1e0d8c6d7ca
- last_write_checksum: sha1:3459b30c68397ab41b467b9c933df24b8922c917
- pristine_git_object: 6da119988a6c4ed655b1ba1698a8e77dc6a3014a
- docs/components/imagegenerationresponse.md:
- id: ad79bc29b985
- last_write_checksum: sha1:adb46b786be5d9b720945c8cb714fd661a86d629
- pristine_git_object: a921a4c4cd5f75c926ba03263469315a14537160
- docs/components/imagegenerationresponsedata.md:
- id: 6a33b08924d8
- last_write_checksum: sha1:e6df003afd8f77d5e98b6720c825818c229d4cee
- pristine_git_object: bd99f56bb2c6f10a7f26e49dc81bf00a6436fe99
- docs/components/imagegenerationservertool.md:
- id: 0ddff7f46134
- last_write_checksum: sha1:02ee9876107578bd27eb9ba811439416b9e76a63
- pristine_git_object: f8fc06e67da93583c9faf5a5e6e5042064c5c2c3
- docs/components/imagegenerationservertoolbackground.md:
- id: e9f2d4d3c83a
- last_write_checksum: sha1:4c13d167e30bd2452b0945864c06a4d29eed747f
- pristine_git_object: 0e17cf5b4827e7a189c3b3ca6d11f778a870b648
- docs/components/imagegenerationservertoolconfig.md:
- id: 4086d42eed1b
- last_write_checksum: sha1:4be4af2bb484ca26d779f052da6a645dcb4d912c
- pristine_git_object: d1bc3aceee221331b9f45bd00bbd8d0ea75a4a73
- docs/components/imagegenerationservertoolconfigunion.md:
- id: 7ba56d56f6bc
- last_write_checksum: sha1:99eb92cf87c2e68e8db530d3ebdaaff6be117587
- pristine_git_object: b9319d587cbf5118b4b12874b67a4a86ec4d1b16
- docs/components/imagegenerationservertoolopenrouter.md:
- id: c5bf0021441a
- last_write_checksum: sha1:01a0ffcf8d7d3c806c1135e73ed4926ca5d05dc9
- pristine_git_object: dce650cbf584a1798754d1610898a9432b544d28
- docs/components/imagegenerationservertoolopenroutertype.md:
- id: 420c811d4561
- last_write_checksum: sha1:6b8ce48b3e662ea3bfd8a9be737e43cd1b051e39
- pristine_git_object: 30c86424343ade04282d92095ea92ebf6635ac81
- docs/components/imagegenerationservertooloutputformat.md:
- id: d7955b88c967
- last_write_checksum: sha1:2478be8f2137bfc7e30dbe5a6a85b57afa2755f9
- pristine_git_object: a020209bb1b86f2ad5d8820bcdf792c2e6a6e56c
- docs/components/imagegenerationservertoolquality.md:
- id: b8b7bc3e3b90
- last_write_checksum: sha1:63f903c60036f9c9a3edbcd830bd57c55328ceeb
- pristine_git_object: 75a4cf8af255afbdad2a25e9291e3afaf880d235
- docs/components/imagegenerationservertooltype.md:
- id: 5d4b6d6b41ce
- last_write_checksum: sha1:125bdc6395723e8fcdd82be5d88e04916b8641fd
- pristine_git_object: 4f8136cbf9a30375a867d359430e0385badbf088
- docs/components/imagegenerationstatus.md:
- id: 20f9a63cfff4
- last_write_checksum: sha1:999c6f63846a5521309becac23012ed04d18f9eb
- pristine_git_object: 22e0541cab57771537bd791307029b628e7151ec
- docs/components/imagegenerationusage.md:
- id: cc38c041200d
- last_write_checksum: sha1:9987bcb7e94ecd6bbe04bcfd6c12313ccbb7ec81
- pristine_git_object: 3e69647aa497f0b7d030d6cde11782c1b0d20a38
- docs/components/imagegenerationusagecompletiontokensdetails.md:
- id: 6a9505656f3e
- last_write_checksum: sha1:3a8ab71ac995be890cd743b4414d964340423719
- pristine_git_object: b11137adab9011a40f4a5df6f340af6137b283a0
- docs/components/imagegenerationusageprompttokensdetails.md:
- id: b3e9b815a8d9
- last_write_checksum: sha1:86c40da9dcd83869181810175843195be4dc264c
- pristine_git_object: bc851c33c247b050c60d463c1c8331be6510e7fa
- docs/components/imagegenpartialimageevent.md:
- id: 7cb3bb2545b0
- last_write_checksum: sha1:cc556150e26bd4466e955c0e71e9b21273f396b0
- pristine_git_object: 4ae2746c47459dab9adb9bfa949a4bb8b4fc58c7
- docs/components/imagegenpartialimageeventtype.md:
- id: 96f18837a787
- last_write_checksum: sha1:4ec9ffdbd40cafee34f51514e57c2fbc02348970
- pristine_git_object: 874960df1e1e77d552ec0c400f4802ef2492ead3
- docs/components/imagegenstreamerrorevent.md:
- id: 7f87611c8219
- last_write_checksum: sha1:b80d7feb4f647b58d24637f811717a9f2cb4da49
- pristine_git_object: 25fa3a5e9bc19b2c7f034b0097434e48e4d6a21e
- docs/components/imagegenstreamerroreventerror.md:
- id: f563003ebf93
- last_write_checksum: sha1:738e09a08778523ee61551fc92dba743e5188512
- pristine_git_object: 05a27840bf348b3b6faa675330c8374272e83089
- docs/components/imagegenstreamerroreventtype.md:
- id: 0960d2a494df
- last_write_checksum: sha1:029b8554dac0fe80200b521707d848102b887a12
- pristine_git_object: 0d7e98938d1d3955a470eb109413d03b2319da40
- docs/components/imagemodelarchitecture.md:
- id: 664721f94572
- last_write_checksum: sha1:b4755ec3785f84b9292c004bb4502eedbac95416
- pristine_git_object: 4c9d858d399c4b690e0ae62268bb93868b204fc3
- docs/components/imagemodelendpointsresponse.md:
- id: 29ef44f50783
- last_write_checksum: sha1:bff6a52c9ef77f4ba2287d7682287e796cb059fd
- pristine_git_object: c10719481269bc587d7116bb9d0e7edad72a657c
- docs/components/imagemodellistitem.md:
- id: 32a773c24ad0
- last_write_checksum: sha1:57ba7d06ca6f0a4aeb770bf0057dce5914e19672
- pristine_git_object: 0402259ab80680643074eda229d5d06b7b0cdcd6
- docs/components/imagemodelslistresponse.md:
- id: aebec95b3fdb
- last_write_checksum: sha1:f45a3bde3fb4753553bd652ea13b39b385b3c1d3
- pristine_git_object: 02cf2f7805c226f04a7137b6a7a5d2172cbcdfdc
- docs/components/imageoutputmodality.md:
- id: c88658d6160a
- last_write_checksum: sha1:6f11a36268e2b1910e5d3f62244a71638b6a4345
- pristine_git_object: 0cd471e8af6f05e30fe6ada9ea442f38e710630e
- docs/components/imagepricingentry.md:
- id: ffea76db0419
- last_write_checksum: sha1:8ac8f6a3131bf6ef1804ebacca11103bba4905d2
- pristine_git_object: 638fcc2a0bed2741bdbaf8472cf6e127dbe21028
- docs/components/imagestreamingresponse.md:
- id: b50cb74438a9
- last_write_checksum: sha1:0bd7f6e18c2e7f51db16b38982320bf915ef23df
- pristine_git_object: fc57cc2c190c12caa1ca878c9545d00a67c72ca7
- docs/components/imagestreamingresponsedata.md:
- id: c072b0eb2c02
- last_write_checksum: sha1:a3e05c53987d0149bdf23251f29f1b433008b818
- pristine_git_object: 78dab52333e65bcadb03fe4d69d176f3259e4561
- docs/components/incompletedetails.md:
- id: 4ce388faaac0
- last_write_checksum: sha1:3aad9a98e1bb15a540b9f8307a1c9524432e7959
- pristine_git_object: 1e12f5f39649bbc28907eb579d26b1dedcd634d9
- docs/components/input1.md:
- id: 8f1c3029546b
- last_write_checksum: sha1:d663edec52736ced26235eef64a7cad9e2d9f321
- pristine_git_object: a6a125b4880fdc36a4a48a71d81d1d85a81390f5
- docs/components/input2.md:
- id: 950f7afb714f
- last_write_checksum: sha1:0f7308af83357715e138b0027cd723278d28b256
- pristine_git_object: 18930bf394330c4853277ad0d38622adfcef1229
- docs/components/inputaudio.md:
- id: 3bad9d0f3bfb
- last_write_checksum: sha1:911ae8d63fb5a0fd4b27d922aa2547cc6e973523
- pristine_git_object: c02836b58a4d4ab93cbd9a35c36d27f334ef405a
- docs/components/inputaudioinputaudio.md:
- id: f60668aee68e
- last_write_checksum: sha1:e9790189c0a3a2b8da358be89ee7f1f7586a70d5
- pristine_git_object: 6d5b50a99994d37b047abb6e1174cb0d43bdf3ab
- docs/components/inputaudiotype.md:
- id: 2a37b5504461
- last_write_checksum: sha1:e1b72ab7561db1859a957f92514258163a207d03
- pristine_git_object: e30ce1f2f857dcfe90b5312c210c9eff895e4886
- docs/components/inputfidelity.md:
- id: 1087f3ef629c
- last_write_checksum: sha1:d3da992f449d7864308543468937167d2884022e
- pristine_git_object: e89ae0570c5bca8f4e633d7914cd6c98f9799c66
- docs/components/inputfile.md:
- id: 3a1680eda22e
- last_write_checksum: sha1:d0acd952ab08dd42dd99a7d27f2cdf0cc6d91f63
- pristine_git_object: c53489e2e5373c9178b87586e4f1bea5a0bd1d88
- docs/components/inputfiletype.md:
- id: 57d39465e429
- last_write_checksum: sha1:1d94b6bf420854cb5e0162391fe5465cf8650b2e
- pristine_git_object: 801a1474178b676683782b4e4672a8ddf9f493f0
- docs/components/inputimage.md:
- id: b1754e9aa099
- last_write_checksum: sha1:190336624dd840a0d84fea1306786060e9356fbb
- pristine_git_object: cfe6e3e41c8ac75a7f00d1a316153d6e7eec587b
- docs/components/inputimagedetail.md:
- id: 582114ff5e40
- last_write_checksum: sha1:ff65ae99531f467abea6eee220d81819a4cea473
- pristine_git_object: 53e9e69e72a640f83938080aeb4a8a230731313c
- docs/components/inputimagemask.md:
- id: 014a4ddc9ad5
- last_write_checksum: sha1:7ff0dcc8b47b7cccff30255b13d2f4b585e6919c
- pristine_git_object: 4d706bed030726f9c15f37a426d6c66c4a186c05
- docs/components/inputimagetype.md:
- id: 2c928cbad52d
- last_write_checksum: sha1:3f986842d8fd5fb4aeced61a2e4e896f41b7ac76
- pristine_git_object: 75b828e8fba8d581e1631636b8085053324aff0c
- docs/components/inputmessageitem.md:
- id: bb421a6ae354
- last_write_checksum: sha1:fcb7fb6853f06f80c3cfae7df8c64ebe671f2b12
- pristine_git_object: b46d160554cf4cbb18d57d2bad9f79c1f7c94e6d
- docs/components/inputmessageitemcontentinputimage.md:
- id: 70760d9b88c0
- last_write_checksum: sha1:daf5093e17f232d4de16fe5a408bfe83c552d00c
- pristine_git_object: ddecd697f62414bfc9936cfb8d309f5a658bf9fa
- docs/components/inputmessageitemcontentunion.md:
- id: 4dd45b0284ef
- last_write_checksum: sha1:64419cd96a6d964d9bfe20b93055b904e5413ded
- pristine_git_object: 39a5d724f55933275a35c44457a7482c049d9e18
- docs/components/inputmessageitemdetail.md:
- id: 66296c9a1130
- last_write_checksum: sha1:15df515837fa341b102965c1b8d3dff2d0e154aa
- pristine_git_object: d1a50afa15eb7ac7c9faf7171b34e2a011b5e173
- docs/components/inputmessageitemroledeveloper.md:
- id: b5ea7f626a52
- last_write_checksum: sha1:42799b848928abc8f7bb0cc45b938455185b71e7
- pristine_git_object: af27ecd86bff337d214dded9c4dc6aee9b10c918
- docs/components/inputmessageitemrolesystem.md:
- id: b455984ef53b
- last_write_checksum: sha1:78e155484c35194713b7e087ce30e39ef4aa8e93
- pristine_git_object: 269cc21c5be70fe452b993eebf2ea6592e7fabaf
- docs/components/inputmessageitemroleunion.md:
- id: 7867f828233b
- last_write_checksum: sha1:a9d10d93b9c8cd93d07ab7e76453a86c9e011bd2
- pristine_git_object: 30281f667cff516e10138072e42a9370e795811e
- docs/components/inputmessageitemroleuser.md:
- id: e4d0a822ece5
- last_write_checksum: sha1:8ffea2a7d44e93388b0e1a3479172275ab563674
- pristine_git_object: 19f763241ce5220068564d2fa911f92418c6e50a
- docs/components/inputmessageitemtypeinputimage.md:
- id: e797722ddb03
- last_write_checksum: sha1:2bd6756f814a1b2f7d046262f4b57c7b8c9b422f
- pristine_git_object: f0ed7e8d295765b452944dac88fcd1fad7c6dc17
- docs/components/inputmessageitemtypemessage.md:
- id: 0436b12c1362
- last_write_checksum: sha1:4b69cbaafeba5995449e82c1251950aec92df46b
- pristine_git_object: 0067fb5a43ef95cbd0668a352796fca20775a912
- docs/components/inputmodality.md:
- id: 375f3c4c080b
- last_write_checksum: sha1:ad0e655fe0df9024e77ae3a38e661b9334df4038
- pristine_git_object: 89bdc2a7f9ee3a48b82c74784f1e4f9e92ede8ae
- docs/components/inputreference.md:
- id: 4eb4f5d578b4
- last_write_checksum: sha1:a943967aa59f83948c9bb16c9355ec8658a59087
- pristine_git_object: 05a7762de9c81c85b752d59106ad27612b26a0b4
- docs/components/inputschema.md:
- id: c81747846fc7
- last_write_checksum: sha1:32cd93061ec2ed84b683062279196534fc738777
- pristine_git_object: 6f0a4143dbf2295985c2cde0ef898fbdae2764dd
- docs/components/inputscontent1.md:
- id: d52cc340ee2c
- last_write_checksum: sha1:3e4174c983a5d960128277273803e49d756775d0
- pristine_git_object: f5c901ca339e9717e70f32f01272344f000d4115
- docs/components/inputscontent2.md:
- id: dc0736cbbf99
- last_write_checksum: sha1:ff08bc1cde46e84a744d200629cfc665ba5ebeaa
- pristine_git_object: 709bf3192502fa94aca1fde8215ffd2a37cc9198
- docs/components/inputsmessage.md:
- id: 0e40015668d3
- last_write_checksum: sha1:0b70f907021e023a752b54a4790317182b88b17a
- pristine_git_object: c877c12a1f97249a6d200d501eb624eb14f19563
- docs/components/inputsphasecommentary.md:
- id: 9cc8146c29b5
- last_write_checksum: sha1:d44cdba85419f8611b4c79f2224be891c8dbd532
- pristine_git_object: e2a50cc9f83ad02c19215729642047cbd8e2fdc2
- docs/components/inputsphasefinalanswer.md:
- id: d81f0a021950
- last_write_checksum: sha1:26c66f68ec5de53712c3d6a348cd2a159f784da5
- pristine_git_object: 813f34cbb6340aaaa5ba5f0eec487b21d003aa73
- docs/components/inputsphaseunion.md:
- id: 701c7007c43f
- last_write_checksum: sha1:01db82bdae5561df16d38e251fe2fe8125a3148b
- pristine_git_object: 8a1a58aab6b1819a1261787a613bca096bb20ef8
- docs/components/inputsreasoning.md:
- id: ab39ad335ef0
- last_write_checksum: sha1:bc111d320a72e69202054a799a2346617c9c0179
- pristine_git_object: d5842a9778e75c8e0660fb33286a99faca2f98ec
- docs/components/inputsrole.md:
- id: 94a7950b131d
- last_write_checksum: sha1:d0df3609fd57ec61d9bde5cd2538ec462a3cd654
- pristine_git_object: 32122175f04d4bcb126f37b10cca3cbfc5fca3c7
- docs/components/inputsstatuscompleted1.md:
- id: 36f2138f068f
- last_write_checksum: sha1:720715e983f7676004c7478c842b027e9ec9cbd0
- pristine_git_object: 5862d8e18c1ae30d0d965ed86c855bf3289022c8
- docs/components/inputsstatuscompleted2.md:
- id: 93adf4fdab40
- last_write_checksum: sha1:7ed56974f3cff07070e2fe4337814a68063bf45e
- pristine_git_object: a07c2f65f49b4d7d3e6872140900eece8d188d63
- docs/components/inputsstatusincomplete1.md:
- id: 735939d076c0
- last_write_checksum: sha1:cba77aec0c5dbd0fe9c12fb4dd0f49b7b4df91c9
- pristine_git_object: 3837df3a8bc1b189b45f74f0eab4aba57310cd9d
- docs/components/inputsstatusincomplete2.md:
- id: 12a3211df3f8
- last_write_checksum: sha1:dc8608363049ffad64fa23265957a93a8cdc181e
- pristine_git_object: aba2e584245805266c57f5cef8884d2b57b6f6bf
- docs/components/inputsstatusinprogress1.md:
- id: 2c5f05df8d58
- last_write_checksum: sha1:fc5a666e9141f0b0812befffb1f678d7fe5c85c0
- pristine_git_object: 8d1328b930fe6cb8e00d2a42f1921853a8327e45
- docs/components/inputsstatusinprogress2.md:
- id: 916087479cf9
- last_write_checksum: sha1:059769fdc810a93c50dd1ab9fb8f32141ee9f5f0
- pristine_git_object: 65cae77f8608f8c8106ed0343e36695e9c713cc6
- docs/components/inputsstatusunion1.md:
- id: b10ed37973a8
- last_write_checksum: sha1:b676bd8f48fae807c6c9fbe876e0d0dcb138e789
- pristine_git_object: 233d4105a20743daa18490d7db3a50397beb3e3b
- docs/components/inputsstatusunion2.md:
- id: b77e7b47bfa8
- last_write_checksum: sha1:5292e7642249f595de569eeac0b61a777f62b6a7
- pristine_git_object: 2aa50a3a98fa1fab0cf4933e636fd4c0e6cbfe92
- docs/components/inputstypemessage.md:
- id: 4122ab2e0f13
- last_write_checksum: sha1:233bbdffb6e0a7af73cff218ab360c6de5194365
- pristine_git_object: 5e9e171f51063f252324317bc06dc7f8b27fd82c
- docs/components/inputstypereasoning.md:
- id: 3d0c4a7b247b
- last_write_checksum: sha1:1fd2de81fba75957cda0497fd82f58fa02ffc172
- pristine_git_object: 6ea63e29c55c16d4b8820875dae6371025a1422f
- docs/components/inputsunion.md:
- id: 80653539ba08
- last_write_checksum: sha1:2db13039e0309ce08f46dc305a75942bec7db0ee
- pristine_git_object: 404cc4a69bca7b64c9172078420c72359ed9c2d8
- docs/components/inputsunion1.md:
- id: d017aeaed00c
- last_write_checksum: sha1:0d46cb54e49f99f5562c138415c3eba66ca2f853
- pristine_git_object: 1949fa606e4fcd0a4437722016b4207dc1f005ba
- docs/components/inputtext.md:
- id: cf4503b3219c
- last_write_checksum: sha1:af646125dfffda8cb71e15c602fcd4823b85f3ab
- pristine_git_object: 15197976ab1da8e51e6c2ba2588fa7c6bc051c82
- docs/components/inputtexttype.md:
- id: 5060f8d1c11d
- last_write_checksum: sha1:f328a4d2fadde8103bd4fcf6a58fbec034e70e5e
- pristine_git_object: 6181f0da9de76a20735b7b4bd8b174261db61578
- docs/components/inputtokensdetails.md:
- id: 331af539199a
- last_write_checksum: sha1:136d08c7846075581f141aa89c74743a4684585e
- pristine_git_object: 7b6d8235fbeb431c27cec3d689c6d5aa558d8d40
- docs/components/inputunion.md:
- id: e92a20448613
- last_write_checksum: sha1:6caa00eb5847278d7fa4033f863a9719fece403f
- pristine_git_object: 3667170c054053b09d2a34627f2cc1b1ed9cc01f
- docs/components/inputvideo.md:
- id: 5775df94513a
- last_write_checksum: sha1:9096278894b57ece97edefbfcfbbbae5f91fb259
- pristine_git_object: bbe46c3e9304d61be59bd4c93b70b7a43e2b3b04
- docs/components/inputvideotype.md:
- id: 9c33db0fda70
- last_write_checksum: sha1:e66c94b0c71f26f79953275dad240d08d90ff290
- pristine_git_object: 97c20b2bcf688db59cc6c0aadf61e963aa2f9629
- docs/components/instructtype.md:
- id: 5276541098c4
- last_write_checksum: sha1:b0fdb6ec81d9e6d31e0cc0567568e7caeec7334e
- pristine_git_object: 44c350d432bebc6e72a2367be0680dedf398772f
- docs/components/internalserverresponseerrordata.md:
- id: c7d253bbe0f1
- last_write_checksum: sha1:c95fa69b2e5ba1ad8801577e0833513b4045c733
- pristine_git_object: b320ded97617f2a84341aaf23e73be3e0d46546e
- docs/components/itemreferenceitem.md:
- id: df82caccce8e
- last_write_checksum: sha1:d5235ecfa37a370a769c27575da351873551fb98
- pristine_git_object: d9a8c531ca098fc9827e1fd81c35b9a8e4f967fc
- docs/components/itemreferenceitemtype.md:
- id: 42b45a1ce59c
- last_write_checksum: sha1:8c0c439657b24ff5ad081d95b89e0f088547304f
- pristine_git_object: 95aa04d9e921d642faacec6df23bc1761b9265ca
- docs/components/keep.md:
- id: 5b42959d6f28
- last_write_checksum: sha1:139916d09f3d0b5367b1916b6228c0b93d2a0676
- pristine_git_object: 435fda97679d2c1a90a932bf112df1658e87ede4
- docs/components/keepall.md:
- id: a07be2f96b84
- last_write_checksum: sha1:d9bb211f5375ab8e00c20299017920f77fac80f7
- pristine_git_object: 189fa5530d194ca3f723a2dd2b56555706a6f7c3
- docs/components/keepenum.md:
- id: 8622d9684e1b
- last_write_checksum: sha1:44f71e954bec1ef1dfa7c2196c781845ea26bc49
- pristine_git_object: 87a4f284f533b45972c541c20d72382f75d68e95
- docs/components/keeptype.md:
- id: 7cdbc72b8dfe
- last_write_checksum: sha1:6edb68f5bf84647bc6dea0c98803a9ae3953b74f
- pristine_git_object: c75bf25e244e9a2769e774e2de3739fcbc486693
- docs/components/keyassignment.md:
- id: c2be60993728
- last_write_checksum: sha1:4791e8ff5cc6777dd2e130a2b67f019a1f6639ad
- pristine_git_object: cda76fb01c2f5292ea05924127c9b99cca3d2dad
- docs/components/legacychatcontentvideo.md:
- id: 9a2b7bac8c07
- last_write_checksum: sha1:b9618041699ab740ef22e91b9c39e9d1476cb0d1
- pristine_git_object: 0ceb8bfb774aa07d662d8c5206a847205eb15b61
- docs/components/legacychatcontentvideotype.md:
- id: 70e7ece41351
- last_write_checksum: sha1:bec40e9210c450f025f34e42f967fe1fef2c109f
- pristine_git_object: 22ecba2663eaeccadf0d1c0283236d794afb2b09
- docs/components/legacywebsearchservertool.md:
- id: "0e2991237936"
- last_write_checksum: sha1:7cda7bb7347e7e8bbdff74389dfb3fbcf29794cc
- pristine_git_object: fb64d1a9a5f803db2cd4c294baf1f34221cebb93
- docs/components/legacywebsearchservertooltype.md:
- id: c5def381d385
- last_write_checksum: sha1:ea65b6214a79a7125bff8e6cca1f55863f5c1c08
- pristine_git_object: cfa9fd582c4d290d8700f34f092b5fd45d5a1172
- docs/components/listbyokkeysresponse.md:
- id: 2bdc1d5f0f9f
- last_write_checksum: sha1:c6deab84b3fee2d18ad7d91f151ba2a3b233e8a5
- pristine_git_object: 9416c56392444105af3bb6a5fe07b9dd539b7e22
- docs/components/listendpointsresponse.md:
- id: b79a056a7034
- last_write_checksum: sha1:046b22b032ea14ce42886c0b1d2945c2027ab1de
- pristine_git_object: 5a0af7d3c7b3d0f954a2916581f4d006930af3cc
- docs/components/listguardrailsresponse.md:
- id: 90134b3124e9
- last_write_checksum: sha1:c87b19168aaa3552487afd576384b54bae595082
- pristine_git_object: 27d4fc9916f854e7c59a3cebfa3246b0a367a4b8
- docs/components/listkeyassignmentsresponse.md:
- id: ffb305258925
- last_write_checksum: sha1:f74d1b0e4441ec590cee3af3bcc42dcdb0274401
- pristine_git_object: bf0b206bd7a039f2fea3fae71fe276c63a585f52
- docs/components/listmemberassignmentsresponse.md:
- id: b34008c23794
- last_write_checksum: sha1:a80fc686dfb13c7179c1a49808ca9d10fbca0cec
- pristine_git_object: 16092238affd61950df82d45bc46ae0be98df7b3
- docs/components/listobservabilitydestinationsresponse.md:
- id: c5efedc66c10
- last_write_checksum: sha1:1a3398a7358e41acb7bd39f2f9160c229c3054bf
- pristine_git_object: 880f789f057a6ed4e1d2a95b631c00b156b999bc
- docs/components/listpresetsresponse.md:
- id: 0be27e53bbf2
- last_write_checksum: sha1:a9889e2824f16b545cb08c32f8e6d09376886234
- pristine_git_object: 6fb247a8a20861ac1e5baa96697e70a693f2c7dd
- docs/components/listpresetversionsresponse.md:
- id: 01d731017130
- last_write_checksum: sha1:2806be95ad0240547ca73ea89a91c26942409b65
- pristine_git_object: 36226d613ea47b77f7860395f0c7e61455fb74b6
- docs/components/listworkspacebudgetsresponse.md:
- id: c1ef0798c3f3
- last_write_checksum: sha1:cb8d97e6a10dcc44ddd999b4c6ab8a031053013c
- pristine_git_object: bc06290ff114d62147a8997d36ce2ccd8599e24d
- docs/components/listworkspacesresponse.md:
- id: 8cc6fbfc9dfb
- last_write_checksum: sha1:ad9f94ea6eafd3cbd5d2c2dca61b3ac6f0403a1f
- pristine_git_object: c4b9ff0e4cc402706ad28c35f75189aa2478470a
- docs/components/localshellcallitem.md:
- id: 9b7bd8fb3ebb
- last_write_checksum: sha1:0b60897b2b25319e9d06d338322e7dc2a1635c06
- pristine_git_object: 4a81afde0ff55830aec9f41ef22c0adacbfa866d
- docs/components/localshellcallitemaction.md:
- id: d87559af5023
- last_write_checksum: sha1:ffc8b201705a9d30009267245a09a8e10ceb7b58
- pristine_git_object: 0d18c7ca53d43a5d58d6d15c17ce342ba56a06c6
- docs/components/localshellcalloutputitem.md:
- id: 53951495a615
- last_write_checksum: sha1:08612c721fdf42ec25d191963a4a1105b588d6f9
- pristine_git_object: 34491a6ab13f2b5a5ef60acac308721d3e395981
- docs/components/localshellcalloutputitemstatus.md:
- id: 1878f165a6fe
- last_write_checksum: sha1:985386c9a863fffe9d4107bf63d7316095749d32
- pristine_git_object: 18938c8e8923df99b6f11d774c748f4f618ed16b
- docs/components/localshellcalloutputitemtype.md:
- id: 83a5e3ddca07
- last_write_checksum: sha1:2777314d0b96a5f23fab16ef30b055da323e300a
- pristine_git_object: 3419c8a1ae972f04b2ad4689e04bfe8fd592087f
- docs/components/logic.md:
- id: 57db8def283d
- last_write_checksum: sha1:6c1e841dba4660d9498219d6cb534d2988eb0d43
- pristine_git_object: effc42ec4dc4e34d90d0a51be532ec7c923b8384
- docs/components/logprob.md:
- id: 351b5c050527
- last_write_checksum: sha1:fce93846d1c33a013a40764c5e00e6191982bdbf
- pristine_git_object: cc928f671dcbde0ebe7ef10cef976333fa35cd68
- docs/components/maxprice.md:
- id: 15ed956070c8
- last_write_checksum: sha1:dcd7d78e509fde879074c55d18f52f244cd6bb35
- pristine_git_object: fdbe77b802746a777199ba4780a1f2981cc3f7c8
- docs/components/mcpapprovalrequestitem.md:
- id: 0d3537b2e5c8
- last_write_checksum: sha1:d2c00357d59374eee2845918d50ab5125d9583be
- pristine_git_object: 100c830f3d7a41b5f68d22404a7469b051f5c0b9
- docs/components/mcpapprovalrequestitemtype.md:
- id: 5d9fc336efb0
- last_write_checksum: sha1:6094bb015b51c4f3bcdd430abb7e369c746046ec
- pristine_git_object: f7bab5327d14d16a40b9ec16770b77afae586226
- docs/components/mcpapprovalresponseitem.md:
- id: 5dff2e68eccf
- last_write_checksum: sha1:8368ac4bdcd72052d24f1f298d18c31663855b3e
- pristine_git_object: eeacdc0afbc5e4662106aa18ace2b17dbd96d4bc
- docs/components/mcpapprovalresponseitemtype.md:
- id: 75bf622adc93
- last_write_checksum: sha1:88ce33f76415887fe812b880678392b1afcbe494
- pristine_git_object: 94baaa0cabb60a9c9f32633369fbcba2aed03131
- docs/components/mcpcallitem.md:
- id: 96b8cb1e23c1
- last_write_checksum: sha1:e4f227c176f78b32f05d6c2875f5c19e3f17be7c
- pristine_git_object: df7c228d307f76df8b98c7d4b451a3dc314b4cc3
- docs/components/mcpcallitemtype.md:
- id: f764926c4d2f
- last_write_checksum: sha1:675fe43eb73267b7a4944792104051ca1181d2e7
- pristine_git_object: 2e94b45437d96ff1c0188c2b20ae3405dee07e99
- docs/components/mcplisttoolsitem.md:
- id: 0846373595f9
- last_write_checksum: sha1:075e68d99a8ab50e4e6afa007cce282bac44003d
- pristine_git_object: 96141e87f0e250e5c5d8f282ab80b4420db95520
- docs/components/mcplisttoolsitemtool.md:
- id: 96647e6a9ace
- last_write_checksum: sha1:17d0ca88652cd39eabc780107b666fdaac6273e0
- pristine_git_object: 3da39425fbbbd0fdf978e0debee37c55a87f45b4
- docs/components/mcplisttoolsitemtype.md:
- id: 32b1baa29df8
- last_write_checksum: sha1:1117e3345e79f4c8fe1c207eea4a2d057f691e0f
- pristine_git_object: 4a52a0fc4282e3062ce2a1e33a6d35d67a62538f
- docs/components/mcpservertool.md:
- id: fcc92d12bf9a
- last_write_checksum: sha1:edc8bdacc891f72eb9685d076ac2aa2ac18d30f7
- pristine_git_object: 2ce5cd65467cbb0d845210c1b5b77f4121f22ab3
- docs/components/mcpservertooltype.md:
- id: 2090c8ba1a1b
- last_write_checksum: sha1:7a7a827f064395ff5d952fd0dc775258b15f73c1
- pristine_git_object: 9c7e037d6bb5943e473b449b4d072af037e95ada
- docs/components/memberassignment.md:
- id: 760c8ff810ca
- last_write_checksum: sha1:8eb2f8a077dab3774995986b09b13e7e86591de8
- pristine_git_object: d51bb51ada023d10b2dec047bc71375c781a5f23
- docs/components/memorylimit.md:
- id: 6b23dc8e3b8d
- last_write_checksum: sha1:af1899a519c3c3b50871014b17b50153050b59e8
- pristine_git_object: 39f5ae21785874af1f2ef0000e9fcecc000ec8fd
- docs/components/messagesadvisortoolresultblock.md:
- id: 18d8fff56c24
- last_write_checksum: sha1:0208d4d9109008df1000fce573c5dd136444e8a0
- pristine_git_object: cd6353bac3c8b96a396e511817231fa420e95fdc
- docs/components/messagesadvisortoolresultblocktype.md:
- id: 02e41844a8ea
- last_write_checksum: sha1:a6cf799a1fa3dcd873532c14cfa673658ceb32b5
- pristine_git_object: b72f8916b4236118a46566bf81ed1d4c466ed882
- docs/components/messagesfallbackparam.md:
- id: dfcbb7b1e2e6
- last_write_checksum: sha1:53d5e4a1468a7678fe5f0a3b643807c01868c9ae
- pristine_git_object: ef4923e715bbb2fa8a00b2d0ed6025e36280dfa0
- docs/components/messagesmessageparam.md:
- id: 4f67bcb5ba0d
- last_write_checksum: sha1:cf46c4085fd571135f33f1f4eae994d49775d140
- pristine_git_object: ecd70aaf881859bb4278daf64c4037c17e8bcb1b
- docs/components/messagesmessageparamcontentunion1.md:
- id: 2b5a91a8467e
- last_write_checksum: sha1:20e546d85607fc8ad4e24b26e6da61999c262ff0
- pristine_git_object: 0391164a0e8ef60babef6241107a0bf2d3028ba3
- docs/components/messagesmessageparamcontentunion2.md:
- id: b576d21da7e1
- last_write_checksum: sha1:f0a6deb84a19db0e697b052a481f177ab112d074
- pristine_git_object: 1720e24ca4c5af3ae35c83ef1445f81b46d106c3
- docs/components/messagesmessageparamcontentunion3.md:
- id: 42e48c3be6a8
- last_write_checksum: sha1:75c771929d88eda869961468c9a2470f783fdf49
- pristine_git_object: 6f970cbd11d02276f85366f1b01d4668b7084f46
- docs/components/messagesmessageparamcontentunion4.md:
- id: a8daef445a1d
- last_write_checksum: sha1:6459183f4dc6199e6a6b2236003cfd1850bef4fe
- pristine_git_object: 55fbe4432d61150f641ff17e95121ce94549a1c3
- docs/components/messagesmessageparamcontentunion5.md:
- id: a7dde2cbd69e
- last_write_checksum: sha1:2b2f3e0b47a077cee771f036559d9c7e159a2bc2
- pristine_git_object: eb775b558b2d126d0d475d97535850e5d531dfdf
- docs/components/messagesmessageparamrole.md:
- id: 245edebe2504
- last_write_checksum: sha1:5650700d7c0c3863b43c547ae69388d926be1090
- pristine_git_object: 9c1fa31bead2c968a3e198e79b60d4ee2e4e1dcf
- docs/components/messagesmessageparamtypecompaction.md:
- id: 54f1bf128510
- last_write_checksum: sha1:3c10c956aa04f144f82cb2388ac8461aa478535e
- pristine_git_object: d3ca428723c54f1577945e4d187f1803f26f3a7f
- docs/components/messagesoutputconfig.md:
- id: d45ef6ba5aee
- last_write_checksum: sha1:d3e0bbd6267aa8a2630fe270721c1d532fd6f5ac
- pristine_git_object: 5a0d1d11e4dbee6a19a418e7b9e40d0cffbf0a25
- docs/components/messagesoutputconfigeffort.md:
- id: 0ff117d47326
- last_write_checksum: sha1:4241a3e5c5939dd363b1b18131e6b708ef14ddc5
- pristine_git_object: e58b0a368563b3e7d969bb323a719387ab1c72f4
- docs/components/messagesoutputconfigformat.md:
- id: e1fd93b0095b
- last_write_checksum: sha1:6d3007b44926a6e01f5b0e1d1506d6305c1de1e9
- pristine_git_object: b214efce59f8b4cec69fc4acb40c5d0ab192f7ce
- docs/components/messagesoutputconfigtypejsonschema.md:
- id: cb4f82d2edde
- last_write_checksum: sha1:090533fcd15c9c8ef7e25ebce5fb9877e62ac77a
- pristine_git_object: 6a8883bfc55e71980d691e2b9bda395dc40397e0
- docs/components/messagesrequest.md:
- id: e479a7035a9d
- last_write_checksum: sha1:55da58866bcd40c949c5669195633a2064fc1da9
- pristine_git_object: d4322feeca1f49bedfa491fc3401173acdf31cc8
- docs/components/messagesrequestmetadata.md:
- id: 6bbb17fb8289
- last_write_checksum: sha1:59573dcf98c6a520e39df65af105d9550ad91855
- pristine_git_object: debe3767143e4e0d9902d566f07edc0a88f72a74
- docs/components/messagesrequestplugin.md:
- id: 6c74af3351ff
- last_write_checksum: sha1:ae5c77653f405c1074121821ac97ff6a78c2f76f
- pristine_git_object: e5fcef93ae1b6a5edcc8b4263ad71e24340fbefa
- docs/components/messagesrequesttool.md:
- id: aeaf229efe39
- last_write_checksum: sha1:262f202169804143ebf77ed03b365fe789f8894b
- pristine_git_object: d3e4d451e6ffe2cb87b07157954be23c6754089e
- docs/components/messagesrequesttoolunion.md:
- id: e51d7bd17081
- last_write_checksum: sha1:8e080cbf5102f73960172e0c1c63a3aa020d6259
- pristine_git_object: 98cf674943ef36b59b9430c7a299666570390075
- docs/components/metadatalevel.md:
- id: 9f671abd00b9
- last_write_checksum: sha1:6238f82ab3af2fe7bf4a1e3945d5612e59afcde3
- pristine_git_object: febc8ad20cad1050527f99760668d7e0770da391
- docs/components/method.md:
- id: b033f8729bbe
- last_write_checksum: sha1:45a4264bd618111e097084519a5f4d017baf16cd
- pristine_git_object: c1ac578717dab45d7e86236836634ea777e603e8
- docs/components/modality.md:
- id: c06a1698adc6
- last_write_checksum: sha1:9bbac55e2cb009dfd90e129cf3abd35dcab6d2ac
- pristine_git_object: 54561e47866b619fda09c4168acaf5094a5158ad
- docs/components/mode.md:
- id: c4b5ab74eb19
- last_write_checksum: sha1:7e3dbed60e5a5a3f21d179fbc46a596acd3a8d9c
- pristine_git_object: e87cda7a904eb2554c58b6966a50ef581bf1bcb2
- docs/components/modeauto.md:
- id: f43745eb6f43
- last_write_checksum: sha1:5eed0f8eec27adf49aadda8d5403f2c7ae0bb18e
- pristine_git_object: d5bbdc95f658be46eebf13f0ba8b9ae3716f72e2
- docs/components/model.md:
- id: 673ad57400cd
- last_write_checksum: sha1:ea20bf9ca8f49a181142f516f1b36758cf5ceac6
- pristine_git_object: edb000fc276b3eec0dbe0bb1e82c4f5d7a72e8c9
- docs/components/modelarchitecture.md:
- id: 79816051e6e8
- last_write_checksum: sha1:158b04c79b7a32a2d95e3d3fda8fa6da0ab91cd9
- pristine_git_object: 7579049efab554d7f538f7cad1ffd1a8ab1be80a
- docs/components/modelarchitectureinstructtype.md:
- id: 3518ad912450
- last_write_checksum: sha1:e4745000d4820fa66c7b7994e676b061fbf38d96
- pristine_git_object: eabbbe356d5ed319279e02b0aa032253b67e3bb0
- docs/components/modelbenchmarks.md:
- id: a1ad8feb3ff8
- last_write_checksum: sha1:d2404ae535f53140e257391a944052da2f87790a
- pristine_git_object: 84513fb30a065bb405e4b1f9316d91989e9f928f
- docs/components/modelenum.md:
- id: 578e84498f95
- last_write_checksum: sha1:e4c89141e391bb02c8b01ef243e414603937b527
- pristine_git_object: 0698ec66d69f7160750a558282c367f570465187
- docs/components/modelgroup.md:
- id: a6a4b80844c2
- last_write_checksum: sha1:6d5649d0d2ac8d8869fb39158c5dec52db0e8087
- pristine_git_object: 80ef8a09c268ffbbee85d92dce038461b634a71d
- docs/components/modellinks.md:
- id: 74607e6a173d
- last_write_checksum: sha1:445ec227b130763e2509d1a181dd5e3e6d71420a
- pristine_git_object: 317190772f743d2aba63c4dad770827b46688f6a
- docs/components/modelreasoning.md:
- id: 47976b46e5b9
- last_write_checksum: sha1:07deec55fe155257ef07086b6dc2fbc7e012e031
- pristine_git_object: 306c0aeb39047768e6c79975996240584a97525b
- docs/components/modelresponse.md:
- id: 9d48c3f335b1
- last_write_checksum: sha1:442bb6c4d21debbceb5a48a9563b07704983123f
- pristine_git_object: 2ad6e9dc16fa06d03318e98bc540c7aca0d497ed
- docs/components/modelscountresponse.md:
- id: abdad0c1a02a
- last_write_checksum: sha1:50ae205604eddcbdced268b8cd3e1ac06f0dd7c0
- pristine_git_object: 4ad6e6a692b19b29789b7a505fae3df72b3fc19d
- docs/components/modelscountresponsedata.md:
- id: 98e05b6bdddd
- last_write_checksum: sha1:62caa9966f2730ed93eba332041916903d279228
- pristine_git_object: d661997290e487a9d0920293830a81afb8b4a853
- docs/components/modelslistresponse.md:
- id: 37e791d4f265
- last_write_checksum: sha1:63605b3361627fdb35caac3651ca4ac63732cd07
- pristine_git_object: 04b43f59dd2202f1a5fe8b3a890f68010194ec90
- docs/components/moderation.md:
- id: de90083e5402
- last_write_checksum: sha1:d0cd3160a76e89d8749cb27687b1bba3dac5089d
- pristine_git_object: e537afb55f6f683d8e11dd14014db2c808c0a3ef
- docs/components/moderationplugin.md:
- id: 975e1b877c99
- last_write_checksum: sha1:07b0c52842055be65a650b641407ed3b595c980a
- pristine_git_object: ca5adb179586eafff10901ac1900d38e895dea7b
- docs/components/moderationpluginid.md:
- id: c266dcd9ec14
- last_write_checksum: sha1:f72de648ce857abfa35274d8859de5e8f2c58125
- pristine_git_object: 60d7d13289d6543385b236e37b40231d6633e20c
- docs/components/moderequired.md:
- id: 6e564fce1a7d
- last_write_checksum: sha1:16f798521d1221c04b8c39d7e25383c8ffb7be7b
- pristine_git_object: cfecb28d11204fe2cd3d69f1ba16a09212f5cf93
- docs/components/multimodalmedia.md:
- id: f90fdd384c93
- last_write_checksum: sha1:fd51c136be8400ff6d5066913fcb9bb00e0a7c88
- pristine_git_object: c794ca17ca96be1844ccddc71842421048ebcd42
- docs/components/nameadvisor.md:
- id: c6f8d17ae439
- last_write_checksum: sha1:f863ebe74e51efba513aa1fb27864a04cfd3eb09
- pristine_git_object: 4c91db747494811b3a0d17ed4d9cc73102294e42
- docs/components/namebash.md:
- id: 5f5d93c15070
- last_write_checksum: sha1:0461609b759814886c4bad4967d056db8240d23d
- pristine_git_object: ba827ad028bc1bdb1dffded72de5c1dcd939c1b1
- docs/components/namestrreplaceeditor.md:
- id: d78c4bf10ea1
- last_write_checksum: sha1:aec9992e83de12492ff0235ca214a27ca6fb31cd
- pristine_git_object: 6e011f08a45b75fc3777778593e818b9f7a2e9d3
- docs/components/namewebsearch1.md:
- id: be3e365d008c
- last_write_checksum: sha1:97aa65b220803ca7b66f0b9a2b24a52ccaddef1e
- pristine_git_object: c7282ac245b6c28e4bce6c90c94f886f84d6973d
- docs/components/namewebsearch2.md:
- id: ff4b14c13e02
- last_write_checksum: sha1:7af3f01911982e2800072d6ce648a810974dc98e
- pristine_git_object: c0fba3a6251edc39d3c25d4131075783af1db89f
- docs/components/never.md:
- id: 43f2ea5e9932
- last_write_checksum: sha1:e6525fb53deebcdebcb5da707fd9f3250d8f2e9d
- pristine_git_object: 32da565f2b04e672ba9efb037794ae5ee59c837a
- docs/components/notfoundresponseerrordata.md:
- id: fa528f1f7879
- last_write_checksum: sha1:8872a5d706d3a3392ae8c552f54ecc3c6df00f9b
- pristine_git_object: 0ba248529a84feb2bf9d2f519895b3194349d2db
- docs/components/observabilityarizedestination.md:
- id: f513447ea793
- last_write_checksum: sha1:ea4da6fb90cd7f1bd094aa927d5c01028970a4f9
- pristine_git_object: 04544acc47732ace2cf93c40a24734e72ab7fbc8
- docs/components/observabilityarizedestinationconfig.md:
- id: dc1d535079ea
- last_write_checksum: sha1:1288b88f495552b356e2f4ddf71440866c6b4d74
- pristine_git_object: 3e51f13a5a9751ae689488b368edcd4eb47fa408
- docs/components/observabilityarizedestinationtype.md:
- id: 8e8a0fa37466
- last_write_checksum: sha1:ac6b0d3b0f878616a9cfd4c82d3bf5f992176f65
- pristine_git_object: dd7791378e18a915cb10a805e89e87017bb72ef4
- docs/components/observabilitybraintrustdestination.md:
- id: 145a536c10c1
- last_write_checksum: sha1:c722bf7779eb6a1207a482c04220b220d1260357
- pristine_git_object: 7658401bb30993018af48345a173c1a4d68e39f8
- docs/components/observabilitybraintrustdestinationconfig.md:
- id: 0013ee8af3c2
- last_write_checksum: sha1:de7e22f79bd3aefd8ccd34f12249a91192c30571
- pristine_git_object: 484cfcffb3e2bd3fcba725e5b59de99394604248
- docs/components/observabilitybraintrustdestinationtype.md:
- id: 5b2c2f854656
- last_write_checksum: sha1:c3c4308d3d5821e88bb3781ae1f8663c53a2c65f
- pristine_git_object: 07e7f6339ce6df1107447a33fa1c50509d35269f
- docs/components/observabilityclickhousedestination.md:
- id: e0ee8ee1c7fc
- last_write_checksum: sha1:108164edbd7a433b2cf819453d7779d0e27253dc
- pristine_git_object: 35bb6dc5f954d53e03c241c28f4ced53df8b74d7
- docs/components/observabilityclickhousedestinationconfig.md:
- id: dc0c611863b2
- last_write_checksum: sha1:5742331f360f56b17bae994a327e21af364d97f8
- pristine_git_object: 54f09ea3b737efb3030ef9fe066820f6ecb5ebfb
- docs/components/observabilityclickhousedestinationtype.md:
- id: a938251b2fa4
- last_write_checksum: sha1:cd4f6fdb4561ec47d0e40f0a65ba9a28d91d1b7d
- pristine_git_object: babefb65e0bbe0c948836d3451fbcff43a852385
- docs/components/observabilitydatadogdestination.md:
- id: 9f27ace42342
- last_write_checksum: sha1:4d89342bb4f160cdb2cf145c778e73ae771de6a3
- pristine_git_object: 73958b4a7c4b0a92a4cadc8c5fb101f88f37ea5b
- docs/components/observabilitydatadogdestinationconfig.md:
- id: 987756bd3477
- last_write_checksum: sha1:f694e79f3bd3738b4f29e1456c8b4ca48a11d53d
- pristine_git_object: 73edf7915e8800a1972a2d675c57ccf244a5f649
- docs/components/observabilitydatadogdestinationtype.md:
- id: ee1c2137ca39
- last_write_checksum: sha1:69762b3bd3e41b114f27a0352f91fd121c0f99c3
- pristine_git_object: adad4bcc6fd2473b01333d8d853d9bcd8a3ef397
- docs/components/observabilitydestination.md:
- id: b7be8a7cc49c
- last_write_checksum: sha1:86950faedf8774004b61e3023eeceb9dfc85c5be
- pristine_git_object: 266c69e959338f4835f9097a3d9b53537b9a93b7
- docs/components/observabilityfilterrulesconfig.md:
- id: c1b3582ea8bf
- last_write_checksum: sha1:26a5aacdcc8cc84b77f2e0d2100b7dcbbe504510
- pristine_git_object: ab02f08984737f29ab04fc15ffadb9b0b2212014
- docs/components/observabilityfilterrulesconfigvalue.md:
- id: 76c9622dd0a3
- last_write_checksum: sha1:cb515a04863f9c9f42aaa3ae1c0a021c51e45616
- pristine_git_object: b6756482d237df17828ac929ae6d1dfe01b55f17
- docs/components/observabilitygrafanadestination.md:
- id: 869cdaf1858d
- last_write_checksum: sha1:da9f9dd9dd1fc1b4c3318de9bff2feb96ea7e5f6
- pristine_git_object: d69dd20a8129c2235f9610d2570c654ef9dbd462
- docs/components/observabilitygrafanadestinationconfig.md:
- id: 341e8d7c29cc
- last_write_checksum: sha1:3aa831e99f119076781bc7829018f67a208ad811
- pristine_git_object: a66d915a86123b0689301eca4cd9bc9fd5c5ae8f
- docs/components/observabilitygrafanadestinationtype.md:
- id: 31be9564d467
- last_write_checksum: sha1:fa4f96be1a58484ba1f520c1d45944a2f47fbdff
- pristine_git_object: f5c7a1e0a29f54a0b9cbeef9a824515d6601d8ad
- docs/components/observabilitylangfusedestination.md:
- id: d3923d950e4c
- last_write_checksum: sha1:a1aaed454c3a90697ad0192d49c915b195829b89
- pristine_git_object: f36b84ce2ba406668dffa2fd2d882d14caf01ca6
- docs/components/observabilitylangfusedestinationconfig.md:
- id: dc419b3c2b64
- last_write_checksum: sha1:c5b7d73cbe808972878e2def5434a97e3b60fbd6
- pristine_git_object: ba02f48832ac62bb1342d0655ccb060ecb47670b
- docs/components/observabilitylangfusedestinationtype.md:
- id: b23de5f0f74f
- last_write_checksum: sha1:f497c7e5b25c971037b56d868d41af9ad6b77ba4
- pristine_git_object: 96f45ca0c628b3d1d0c74e3638d1f073ce2bb338
- docs/components/observabilitylangsmithdestination.md:
- id: cf543df3b6a2
- last_write_checksum: sha1:98dc21b970bc222388aa9ffed95305a41cc9ad46
- pristine_git_object: 5964867ccd33cfc4cba7ad1f60bc695144763a3d
- docs/components/observabilitylangsmithdestinationconfig.md:
- id: 4a80dd659c6a
- last_write_checksum: sha1:7c11da5b5112b3da24d563a7e161e431baa0facf
- pristine_git_object: 48a0daae8084bb6113c510a2d7ea3393fcea060d
- docs/components/observabilitylangsmithdestinationtype.md:
- id: c3e6e20fbe51
- last_write_checksum: sha1:76181b8b31b0f3ef3bd1f22ce4c5ba8caeee0b47
- pristine_git_object: 1412570ef5ae5d6c16da8d937c30ea7e65d37f87
- docs/components/observabilitynewrelicdestination.md:
- id: ae617fe0603c
- last_write_checksum: sha1:4c94f55f88771ad3aa78dcccff2f4f988a09a747
- pristine_git_object: 205209601c4bef5a65c863a471359505c18a9095
- docs/components/observabilitynewrelicdestinationconfig.md:
- id: 21ca56b40c65
- last_write_checksum: sha1:2a6acb29cc5daa2d4e70591bfe837a95d67db0dc
- pristine_git_object: 1cc3498cfe82f0814d36f606b036e8e43567f454
- docs/components/observabilitynewrelicdestinationtype.md:
- id: 9e1990a0b096
- last_write_checksum: sha1:b97b608eea21250b92ac8048c10c72e3ed2b91a8
- pristine_git_object: 24f27fab589d4b4c65a5e1159e98779e3261a744
- docs/components/observabilityopikdestination.md:
- id: db66b07ae65c
- last_write_checksum: sha1:11106eb2f5a2a2500e063ce36f86c9f2ebc5e182
- pristine_git_object: 049bc01e329dfd27523e7d4cfe1117bdd94dba07
- docs/components/observabilityopikdestinationconfig.md:
- id: b374ed3b47d5
- last_write_checksum: sha1:b92ad6d3083465668ef5abdd0ffcf13adfa83a8e
- pristine_git_object: d4c9ec5338a2366105ea8da32d427da64adb0d7f
- docs/components/observabilityopikdestinationtype.md:
- id: 87b673feb2bf
- last_write_checksum: sha1:93aeb40e16484b72cf9913993a8b9ca334f8e2e9
- pristine_git_object: 2812133c956134ab2d153aa2c89fc896adc58285
- docs/components/observabilityotelcollectordestination.md:
- id: d33bee74e26c
- last_write_checksum: sha1:884a35422f51b33484137f0e28cbf768efef9001
- pristine_git_object: 18e46e87ee9f33ab59f8e509440605dc87b79029
- docs/components/observabilityotelcollectordestinationconfig.md:
- id: 5e5e9562fb09
- last_write_checksum: sha1:bff2120ae00fc563b0cd8eeafd700fd6e29bb014
- pristine_git_object: 3d5f1ba56a0b83b1084363f185cc552ee800aa37
- docs/components/observabilityotelcollectordestinationtype.md:
- id: c78211a83000
- last_write_checksum: sha1:1ad7c1e21ac263d0c7fef5efa4c1107da9772488
- pristine_git_object: cced176b01380b0cbe7a36a91fdfdaebbf34b228
- docs/components/observabilityposthogdestination.md:
- id: ff245b7db549
- last_write_checksum: sha1:4e7f4e1408b112d58221d7ad19aca11d1364413a
- pristine_git_object: 5d4a5f3dea524192974b009b29b0c55a64433516
- docs/components/observabilityposthogdestinationconfig.md:
- id: 005b7ba53ef2
- last_write_checksum: sha1:6f8e601b2e27c8292138258c9d92d26452d77d5f
- pristine_git_object: 417abca41ac81fdc6b0f6b6d6dbe1a916a57f93c
- docs/components/observabilityposthogdestinationtype.md:
- id: a3ce062df326
- last_write_checksum: sha1:63c802ea9b1b3b72ed8a579c47bba035920b8948
- pristine_git_object: 0b292361d17c18c0ea9e2a438e78e73a0e2c4a7f
- docs/components/observabilityrampdestination.md:
- id: a46ae803969b
- last_write_checksum: sha1:f182b20b2cb9495c4d2a081c4a15dd793e43106d
- pristine_git_object: 87f80b72391fe6a8856c6f5aa0ebf121d94e5925
- docs/components/observabilityrampdestinationconfig.md:
- id: ed120fec93c8
- last_write_checksum: sha1:bbe68c9cabede09198294ac44376c5803c86b1d5
- pristine_git_object: 4221a78626b13ad1080354aafac31044d070cd30
- docs/components/observabilityrampdestinationtype.md:
- id: 98ded470a529
- last_write_checksum: sha1:03a8dc497c1e7e75ae4c6fddcccfa608ed9da0ea
- pristine_git_object: a385403b09e1020ece95e1d923b0c058ab228051
- docs/components/observabilitys3destination.md:
- id: 3cfb33f703ab
- last_write_checksum: sha1:f0d785abc3774f44dde87080bba3301dfa2bea57
- pristine_git_object: 1c35568532bc86e115c3f66409df098899aefba9
- docs/components/observabilitys3destinationconfig.md:
- id: 9857e1788ca9
- last_write_checksum: sha1:215caf5c0bb6d845e154f9e4dced38882cf7f30b
- pristine_git_object: 8a79a8c3c2a3a2d8ea03ae10d75ea650bdb9aa44
- docs/components/observabilitys3destinationtype.md:
- id: 99758c95d6ad
- last_write_checksum: sha1:f13f7307321aa61b830d7a6fcbabe801225c0020
- pristine_git_object: 167928ae975633a0f0521efaad58fe82ac9da402
- docs/components/observabilitysentrydestination.md:
- id: c0db66ec1664
- last_write_checksum: sha1:a281546e21d0c77dd4515ce948726f1ce709d27a
- pristine_git_object: ab70b791e92431012b043b32513eba03cc543139
- docs/components/observabilitysentrydestinationconfig.md:
- id: f61819b137bd
- last_write_checksum: sha1:0364b3bebcb1636eb8f2feba923d8ab0ec5bfd30
- pristine_git_object: c76ddf04cc6eaf366ba96d18d13aaf1db28ab6ae
- docs/components/observabilitysentrydestinationtype.md:
- id: e9fe16eaf329
- last_write_checksum: sha1:9be17cdea703a48dfc3cb2e5c709f16a1a97fce7
- pristine_git_object: c579db4a0009cf8bcdcc79c6cfeb563a9e20f6d7
- docs/components/observabilitysnowflakedestination.md:
- id: 01c80b662bd2
- last_write_checksum: sha1:4d94529da2ef11c4b954ea2201a0395261758d74
- pristine_git_object: c7871fbd72b01b20254a217f2f7e7da6ce22ccd1
- docs/components/observabilitysnowflakedestinationconfig.md:
- id: 5863c15e5c2e
- last_write_checksum: sha1:38a96c2cb11b478fa3f8ff4c334a30bb82fc46b0
- pristine_git_object: e42de6dbb36eb49faded0ccb3fb7d0922ec6df64
- docs/components/observabilitysnowflakedestinationtype.md:
- id: ce209a361916
- last_write_checksum: sha1:244a36b33db8f6a3000b998d892f88ee3fc420ae
- pristine_git_object: 4c02a083cdb7c917d8afffdaec5158dce23354eb
- docs/components/observabilityweavedestination.md:
- id: c34a90c15698
- last_write_checksum: sha1:99267a7a9920a8c297b3a712a5081b19b47ab977
- pristine_git_object: bb63ed9473b5c24f4e11dae28c1a874143cb33ba
- docs/components/observabilityweavedestinationconfig.md:
- id: 73228e35948e
- last_write_checksum: sha1:40d75673453e308fea0126f1202efce502f7ed1a
- pristine_git_object: 596b679f81c4ae44c63f3d0d17c73a89c2d74d8f
- docs/components/observabilityweavedestinationtype.md:
- id: 35b8114daf60
- last_write_checksum: sha1:41ae9dddca44856b6ccc2c9d2426af22d4a42e76
- pristine_git_object: f432ecd7ebd47db79545fbfa1643768e4367df74
- docs/components/observabilitywebhookdestination.md:
- id: 51348fbd75c7
- last_write_checksum: sha1:6723112df9dfce824b26b7dfbcfbb32fa041583f
- pristine_git_object: 5a9c0b86372ac36fe5c5be386db6f29bcbb2b6e0
- docs/components/observabilitywebhookdestinationconfig.md:
- id: bdcd4f7adfc0
- last_write_checksum: sha1:42e280c9d149b1e7386c669f3c05bf8b9cd1c60e
- pristine_git_object: 31b46e3b6fce0d020f5a8eabd73cc3f690056d1b
- docs/components/observabilitywebhookdestinationtype.md:
- id: eda8f89f5d4e
- last_write_checksum: sha1:d59b7878f2985f9aa97eb510e8dbec76460a6f22
- pristine_git_object: d0208f5eef93e4ecd0e9a38de258f39e0ed403cc
- docs/components/only.md:
- id: 91bc6779dc0a
- last_write_checksum: sha1:9d9c9f1858695f9fe710f28aecb7c84856c494a7
- pristine_git_object: a62341bd1e17c836ec7539bd7d8e494a1a5184dc
- docs/components/openairesponsecustomtoolcall.md:
- id: ac3aee21895d
- last_write_checksum: sha1:16e629b4a9dacc4644d1efef349c68f02de5ea5f
- pristine_git_object: 4615c033bbf754dd285702b736767aa9f018e24f
- docs/components/openairesponsecustomtoolcalloutput.md:
- id: 898c9ec80afb
- last_write_checksum: sha1:4da2372651911ee10a63df94068e5ec6a91d1f93
- pristine_git_object: 73cb55149d5963cda326d0cea2f2545ea42c1c09
- docs/components/openairesponsecustomtoolcalloutputoutput1.md:
- id: fc80a5761631
- last_write_checksum: sha1:f5d0d55ea31b932e7fd5d8f9d9155aa5061fa86b
- pristine_git_object: 0f2552eebdb34b9c8750204b5644b08d0733dd57
- docs/components/openairesponsecustomtoolcalloutputoutput2.md:
- id: 0722ac09f02b
- last_write_checksum: sha1:562d190855df03f20f41ae0e70b1d981cd5fd56f
- pristine_git_object: b374dc6cbbfea894098c524ab65ba08712228ceb
- docs/components/openairesponsecustomtoolcalloutputtype.md:
- id: 99674dd00609
- last_write_checksum: sha1:b4ccac74cc49ede5eb63dfaa5317b08504c6b561
- pristine_git_object: 8785852bc927f0a78a4012bfb58700a7e2d97a8a
- docs/components/openairesponsecustomtoolcalltype.md:
- id: a842d72e61fc
- last_write_checksum: sha1:5dbe9b6def695cf8ee2f283160b1013094862c6e
- pristine_git_object: 6d718cc235ce1e24ac715a5323871ce0bd766949
- docs/components/openairesponsefunctiontoolcall.md:
- id: 3a1364f8d3e1
- last_write_checksum: sha1:fc16b457b389728471198954cf2a4322e238592e
- pristine_git_object: 15a293510664ad28497a1fe708b58be8402fd287
- docs/components/openairesponsefunctiontoolcalloutput.md:
- id: b3939fe71de2
- last_write_checksum: sha1:1705dc61ae8733d30d88947b6a950f92af935ffc
- pristine_git_object: 60257a07205e3fa2e534d8ef6d920fd658efdb9f
- docs/components/openairesponsefunctiontoolcalloutputoutput1.md:
- id: 890af6bbdcfa
- last_write_checksum: sha1:f098ac07c6c67838bbc6abf901b458c8746244b8
- pristine_git_object: 7496833a959029ec59035966be140759e9ae444f
- docs/components/openairesponsefunctiontoolcalloutputoutput2.md:
- id: 292c63ce0cd0
- last_write_checksum: sha1:84bc2133779253b1a0a3488f5ba0543a69883e8c
- pristine_git_object: add9b33119d4fdcad7c277263487308098682028
- docs/components/openairesponsefunctiontoolcalloutputstatus.md:
- id: b421aa3f6bfb
- last_write_checksum: sha1:387af8f984924903f3617df6fb8a0661a7ecfb52
- pristine_git_object: aef64b38db8bcf226a32822af6232ef1c69f8aa2
- docs/components/openairesponsefunctiontoolcalloutputtype.md:
- id: aa8b177d1ec1
- last_write_checksum: sha1:3b95f762eceb734784551c575cecbdb28fccfafb
- pristine_git_object: 42ae342d0971e385cc996ae3011c45fb8f874377
- docs/components/openairesponsefunctiontoolcalltype.md:
- id: 7b166a0d0b2a
- last_write_checksum: sha1:6c807f62207fb36ccef1da18232aa7c83f9dad5a
- pristine_git_object: d966b3227d4c973ff8986b0a58b3aef89d26523c
- docs/components/openairesponseinputmessageitem.md:
- id: 36f42513d2a7
- last_write_checksum: sha1:d00cb57892a0aa2784a7ebe83d776f317976048b
- pristine_git_object: d71d5fde7f259fd906eca66522d59dc0d55f3caa
- docs/components/openairesponseinputmessageitemcontent.md:
- id: 52e9bf63eda0
- last_write_checksum: sha1:311a3e0fc263a3fd3a627728da28db217333f741
- pristine_git_object: a823b7b02ee8193e9bb4bad239c412b1143577f4
- docs/components/openairesponseinputmessageitemroledeveloper.md:
- id: 0dd13dac0dbd
- last_write_checksum: sha1:d33802c5564ac45feb4905e482d4acc5afdd670a
- pristine_git_object: 0c0c982f77a8dc04c9d343e2e5c4531a00fcc38e
- docs/components/openairesponseinputmessageitemrolesystem.md:
- id: 9a4648fd3cb3
- last_write_checksum: sha1:cf80baa698d6c76a8ebe65a9d0cdac7f302a5e14
- pristine_git_object: 5796e10eba5845d650471b35101c93d8d0944ab0
- docs/components/openairesponseinputmessageitemroleunion.md:
- id: 5e57b5425e20
- last_write_checksum: sha1:898bfd48b6e4f1df20a766d6d2e47bc1f3dcdac5
- pristine_git_object: c1b9743a0a124ac490a4f82d1a190e79ba194c06
- docs/components/openairesponseinputmessageitemroleuser.md:
- id: 55c3e6d597b7
- last_write_checksum: sha1:fc65d52f808697f04bb4066bfd1b18983b48db7c
- pristine_git_object: ee51089659605b755564bd72d62b3bfdc2f00ff8
- docs/components/openairesponseinputmessageitemtype.md:
- id: 82146d08bc72
- last_write_checksum: sha1:a73b2a36c3bf3386aea497899ed43e40424ecbb4
- pristine_git_object: efe2fbfa7bb0202b31459296f739ea767b7ade62
- docs/components/openairesponsesannotation.md:
- id: d8d10fd7804b
- last_write_checksum: sha1:fa57b686a405727f7e305c17d9e97b981aec6ba7
- pristine_git_object: e3b6962893d7ecac7b171ce17969cf935186d256
- docs/components/openairesponsesrefusalcontent.md:
- id: 864502b050dd
- last_write_checksum: sha1:7777af1d85b821b1f8d36d9bde7ac1489853984d
- pristine_git_object: ea13450e264c0b2267746bbc9a3f68d93da246bd
- docs/components/openairesponsesrefusalcontenttype.md:
- id: 0e2415eb75a6
- last_write_checksum: sha1:d934ac9cdb5b1125a8a60b26a25763356a854603
- pristine_git_object: e94bdd22c843ed46bc95f6fa256c23701416f12d
- docs/components/openairesponsesresponsestatus.md:
- id: baeac1c7fc78
- last_write_checksum: sha1:0e6be1f260a62e483e288efcec1b91c255ccac56
- pristine_git_object: a3628447cc8bb14c969544b1b57b4f1e4f82c9c7
- docs/components/openairesponsestoolchoice.md:
- id: e0916138c088
- last_write_checksum: sha1:10ae047eeb5951e67b6e16bfdc61898e79f92b8d
- pristine_git_object: 72b8738f1a2b1e34b51ddd61d3911e585cbcfd14
- docs/components/openairesponsestoolchoiceapplypatch.md:
- id: 4b46229cb2dd
- last_write_checksum: sha1:2efda634d7d7371df066d38f9979ae56da089039
- pristine_git_object: 1f76d7b87d3203e47dbb67b28c992a137671c573
- docs/components/openairesponsestoolchoiceauto.md:
- id: "864322169068"
- last_write_checksum: sha1:4df5b1713e54f2fbcbf4acd91243b19f07898d40
- pristine_git_object: 5a958ab0c25e26ecc1ee4e4663a1cc4a51cf5d78
- docs/components/openairesponsestoolchoicefunction.md:
- id: 98a6be9ff937
- last_write_checksum: sha1:b3227df6ff61d9d10b779ca476d4d4b84ed22145
- pristine_git_object: 9163b3d1e3eb13d3c7b84393c6cac4a0f587c4f8
- docs/components/openairesponsestoolchoicenone.md:
- id: 7e44390a9041
- last_write_checksum: sha1:d6324a5ec32cf87e40ba5cc27f82b8eec52cc291
- pristine_git_object: d5c51acf219cee7536b94051c642e58dd117409a
- docs/components/openairesponsestoolchoicerequired.md:
- id: 1a18707d5f17
- last_write_checksum: sha1:ed310a851eb6b16175ff1aee2f1d51dc1ca63120
- pristine_git_object: 57aefba1d93597b1944cf8ce84a55e6578e1908f
- docs/components/openairesponsestoolchoiceshell.md:
- id: 946027d4a9cd
- last_write_checksum: sha1:b43e5c87f09cf9279dd948c17df532c36426b4e9
- pristine_git_object: 736d8f29a42debb1bdd4026725d9c55fc08467e1
- docs/components/openairesponsestoolchoicetypeapplypatch.md:
- id: a28326e5e717
- last_write_checksum: sha1:a74e5e47b84038bd83004d371925f0aedd9fb0fd
- pristine_git_object: 84d2045ff0a40a02dfc74286f133f0f7214a4f5f
- docs/components/openairesponsestoolchoicetypefunction.md:
- id: bf87379c3667
- last_write_checksum: sha1:9275e8d69c3615686c52f0c7f2607f79bedaa39c
- pristine_git_object: de3caa3f6351a1cefab397803760aabee509a32d
- docs/components/openairesponsestoolchoicetypeshell.md:
- id: e6f9a610204b
- last_write_checksum: sha1:2dc29ea8cf64ac8b97b7db83bef402ab8bbfae53
- pristine_git_object: 32b67ebb8be6202e4a85d3e2a3bffcfa0d227b64
- docs/components/openairesponsestoolchoicetypewebsearchpreview.md:
- id: a0dcc27980f9
- last_write_checksum: sha1:c56012a4d3ef1dcfc993f31529c9f21cd2f2d45b
- pristine_git_object: 93b161b0908d956f47c9068a7107ae892f5244bd
- docs/components/openairesponsestoolchoicetypewebsearchpreview20250311.md:
- id: 60b749aa3da1
- last_write_checksum: sha1:8ee0320e41efba0ab518a0bf6cf91ed50ec3e41a
- pristine_git_object: 3162d396225c6fa3f2597ed4aea08c8b1dc7db22
- docs/components/openairesponsestoolchoiceunion.md:
- id: 0deaf8366a16
- last_write_checksum: sha1:5605d2dafe5ae816fc30294c7e2a4ceebc79a694
- pristine_git_object: 15e1482ab0963c950b350d46284d1d9f75102bcb
- docs/components/openairesponsestruncation.md:
- id: d4ad0cf0c093
- last_write_checksum: sha1:0adf4105f41726d94f43e9b76a7df2bb4cd791f3
- pristine_git_object: aafecaeb79126df177943a9c64776946f4248e2e
- docs/components/openresponsescreatedevent.md:
- id: 75983186e798
- last_write_checksum: sha1:7b04290cb5943d838fbf8d05577d424ee6f4b448
- pristine_git_object: caa28148cf40971bb40b7503e09f38b9c9f1dabd
- docs/components/openresponsescreatedeventtype.md:
- id: 6d8899980bf4
- last_write_checksum: sha1:0365bfe9e0c71ba85fff35c999013eca350d5332
- pristine_git_object: 63afeabd857237b4c953e0f81370652473963ceb
- docs/components/openresponsesinprogressevent.md:
- id: eb1c9597416c
- last_write_checksum: sha1:409affe8297ab4e3189ee766a265dd7baa720dcb
- pristine_git_object: 9ac152a29e39953b4359c1fe0975e7cd5dc64e57
- docs/components/openresponsesinprogresseventtype.md:
- id: 400282eb4448
- last_write_checksum: sha1:284babbdeffb8902ac40086042a646b50cddfa10
- pristine_git_object: e88886f738fef9ad22e5efc74e3e0ea2cd8ceeb3
- docs/components/openresponsesresult.md:
- id: 9795b7de3f92
- last_write_checksum: sha1:90beaa7103cc4f9a333285c90e186ba412fa037d
- pristine_git_object: f41bfcc4855b54c33cd0d4c47eb25b91f6d8fedd
- docs/components/openresponsesresultobject.md:
- id: a8c7f7bc0b24
- last_write_checksum: sha1:3df49df80dda49ea4cb53f913931fd4754769b66
- pristine_git_object: 1ae6c220a9c087af683d65806061ef350e7f1fcf
- docs/components/openresponsesresulttoolfunction.md:
- id: add7bd8ba16c
- last_write_checksum: sha1:e54808564c7f2d988743c781f1049f86e1ebb0c2
- pristine_git_object: 01ce9e3ba45dbad7407fcb075c5a068ae66ed022
- docs/components/openresponsesresulttoolunion.md:
- id: 3da3bd935d27
- last_write_checksum: sha1:07299abfdb408bacaa372bafb3edb4e946fc6108
- pristine_git_object: a284d86e98ad76267fc585c6cc6a9bfdd26c2bf0
- docs/components/openresponsesresulttype.md:
- id: 11e423f51c0a
- last_write_checksum: sha1:aafa032ff25d8adeec0c0bd0d995fdcebecb59b0
- pristine_git_object: 1fd0de22bc2eadd015eb6e04c46eafa3dc992af4
- docs/components/openroutermetadata.md:
- id: 7d5b19c796e5
- last_write_checksum: sha1:dd7b644e0859928b6685ebe073946b2af58a3742
- pristine_git_object: 60461ffa8bfa773b9d15c7698fcac23ece59fb62
- docs/components/openrouterwebsearchservertool.md:
- id: fb93a3700123
- last_write_checksum: sha1:9bea49bbae5d084bf15a20caa095165fcf14a334
- pristine_git_object: 6e90c6e024b0efd7295575650bd79133ffe6a33d
- docs/components/openrouterwebsearchservertooltype.md:
- id: 16e1e8501319
- last_write_checksum: sha1:6d83c960b1b1f5be7be0f0f6f6b71d86fb160cc7
- pristine_git_object: 947a0b4decad7398ad4ddd0ff70a3a8cf95c5e87
- docs/components/operator.md:
- id: 63449f6362da
- last_write_checksum: sha1:11b3d7ad51195be1e48a90e2861633551b9992d5
- pristine_git_object: ffa82a743b58e9352a9dfad57f7a4a94c629944c
- docs/components/order.md:
- id: 16e6ae6962e7
- last_write_checksum: sha1:a060705e562a2f3fc024c4fd8aa80604535b0bc1
- pristine_git_object: b0e21fa3c30d5f4efb71936cd033937d0b0ad8a9
- docs/components/outcome.md:
- id: 86f24b0ddb43
- last_write_checksum: sha1:3275ec6332678a9016e5a383214e19fd480c61ad
- pristine_git_object: ca5a5774555782d3e9ed5e39b4ed539884a3453c
- docs/components/outcomeexit.md:
- id: d57f8d2a43dc
- last_write_checksum: sha1:2d6e2c69f490095a52315878029b2c28d370db14
- pristine_git_object: 8dc8c158446e999d54278fff1f2630afbc9937af
- docs/components/outcometimeout.md:
- id: d585ebd974ed
- last_write_checksum: sha1:2fc4fd683d643841e11834df9987eb2da5b35849
- pristine_git_object: ae2fd6dc6f3f0794e45f798f6b4c99fa2d20a56f
- docs/components/outputadvisorservertoolitem.md:
- id: 6bacdcfb50e4
- last_write_checksum: sha1:c28cbd5979c0c93a8f2199a1b3518e0e4adf581c
- pristine_git_object: e7e5688819022c709d79bbc7b38a2e44059aef8b
- docs/components/outputadvisorservertoolitemtype.md:
- id: 580d3da2d5dc
- last_write_checksum: sha1:edc0472af5f126a9681a09ebd545322ea15411e5
- pristine_git_object: e126a806c9668cfd6ba0400de8338130878b7f85
- docs/components/outputapplypatchcallitem.md:
- id: b300dd735bcc
- last_write_checksum: sha1:a4351bd6de39f88c19f448fae0a1b307ae637656
- pristine_git_object: 5a97bc9076a00ce89e3d78cba834fcdb0aa5ba69
- docs/components/outputapplypatchcallitemtype.md:
- id: 0d574fbb1219
- last_write_checksum: sha1:7bec10beea9f5b12c88ab74e9884d02d0091a637
- pristine_git_object: d63680f8325b6bd06b0b1bbf50256b714486af07
- docs/components/outputapplypatchservertoolitem.md:
- id: 31b40a05f9bf
- last_write_checksum: sha1:018a47d1a2e118ad529f1498488aa1cd7ca1dba5
- pristine_git_object: 1d6f10ab527097cec8a9450b3b8ff2730d0f9454
- docs/components/outputapplypatchservertoolitemtype.md:
- id: 0fc0eefe1f94
- last_write_checksum: sha1:4e7bd5264d2da2fb6fb31d4f17cff1c5f6159e41
- pristine_git_object: 6bcda35808f730436e4fe9e0c6a3411b72c026c0
- docs/components/outputbashservertoolitem.md:
- id: 4835772a8420
- last_write_checksum: sha1:762c035946c6c7d58b272dd7adc66761e772a264
- pristine_git_object: 1008d6ebfa3de7850ae1b0ebc5d6d5c027f58bfd
- docs/components/outputbashservertoolitemtype.md:
- id: b822f3bac2fb
- last_write_checksum: sha1:045b19bd838ba1a8d148a827b700d312ba9cd2ea
- pristine_git_object: 60528d753e2113dfc4ec8b3b97eff63f5b425801
- docs/components/outputbrowseruseservertoolitem.md:
- id: bb331a0a59bb
- last_write_checksum: sha1:4baff51073d1e0b8cb724411a068e1b60dedef64
- pristine_git_object: 240e7d9741e9d6405a5e68c852f041ca4b477327
- docs/components/outputbrowseruseservertoolitemtype.md:
- id: 5443792d20bb
- last_write_checksum: sha1:bf84e13c162b48aa42cd6eeff125a752a3ceaa4b
- pristine_git_object: 09b9d7d6a0d608702fa83d18b5e212b40569fb7d
- docs/components/outputcodeinterpretercallitem.md:
- id: 1e909305d0d7
- last_write_checksum: sha1:255322a6005c7ed1e4f62ebb9dd7e4c40177083e
- pristine_git_object: 992a9971f979141c3da52d3ffd21489e1f2e9ad0
- docs/components/outputcodeinterpretercallitemoutputunion.md:
- id: 20b1004f0b3d
- last_write_checksum: sha1:29fa7ad397141191b331383f8931d77b1bef4000
- pristine_git_object: 458ad8c97d2d4f05dc5858b26b062a48520482f2
- docs/components/outputcodeinterpretercallitemtypeimage.md:
- id: cd44f1bc4365
- last_write_checksum: sha1:1384b3deed86eb61ecbba6e6bfe4db87b95665d0
- pristine_git_object: c2a090dc86cb16e865c1b70f0b93893a25096e1e
- docs/components/outputcodeinterpreterservertoolitem.md:
- id: eaafa674fcfc
- last_write_checksum: sha1:28c0bb8b3f4e1925d63066e6e450945ac1708bfc
- pristine_git_object: ba02a1bc7616be6e0d7dac6e86d73b194055a9d9
- docs/components/outputcodeinterpreterservertoolitemtype.md:
- id: 3ba159197184
- last_write_checksum: sha1:99d08eca63ae6f530d0a0d854662e57210b87e66
- pristine_git_object: c5039dae98620bb96457d264702586d993b89853
- docs/components/outputcomputercallitem.md:
- id: c67aa5789709
- last_write_checksum: sha1:16763c6bd0ef2cba4c98f675bf9bdda65585e172
- pristine_git_object: ad8023fe1cf62670a86cdcd6fc93f81e2365721f
- docs/components/outputcomputercallitemstatus.md:
- id: 2b335f7927f0
- last_write_checksum: sha1:0c167ca5a567467294a48add5f2aaf056ddb81e6
- pristine_git_object: 72afd5f088a1c8fe87c505aed8d524cf160297dd
- docs/components/outputcomputercallitemtype.md:
- id: 93a8202e16fc
- last_write_checksum: sha1:3d997f3397a92ffd8d05ff539073e06c38b0e2bc
- pristine_git_object: 6433a41ff2a718dc451382f1d3a5e616e7c6d5d9
- docs/components/outputcustomtoolcallitem.md:
- id: 5da0a60e34f2
- last_write_checksum: sha1:34f4aee85faefd77cdd9e6768cd6de3ed4e31a41
- pristine_git_object: fdc80b16dc73c80d4d8d2685f128defd32eb1762
- docs/components/outputcustomtoolcallitemtype.md:
- id: 57eeb19002ba
- last_write_checksum: sha1:42be29623e1f16ee8aa483966aa0e2a430b3ed73
- pristine_git_object: 2d44dae494019cf25037f7c36311f1bd0f4903f6
- docs/components/outputdatetimeitem.md:
- id: eccb35ac217b
- last_write_checksum: sha1:426d333d7fa20b3da448c40c5d1d6f0cd6667ebb
- pristine_git_object: a7fa2c93c39329d22f3b7a3a3623b2761e81430a
- docs/components/outputdatetimeitemtype.md:
- id: 442b4d04e81f
- last_write_checksum: sha1:57d010210f56af5a8cd00988ccd7c9032a7799f3
- pristine_git_object: b6680f420d6cad71e6e6012787f21c8fdc11e42f
- docs/components/outputfilesearchcallitem.md:
- id: e1453f81fc58
- last_write_checksum: sha1:adf0a841d4566984111a90563062be453b3fbb87
- pristine_git_object: 6fc2b2bc8f1f69e7cbf45a035b8a2f2db9079011
- docs/components/outputfilesearchcallitemtype.md:
- id: 9879cb2103c5
- last_write_checksum: sha1:f3ed9f8762aa542168e2ccf5a4b7a9dc108dc4c8
- pristine_git_object: a1710707c286ba7a953f582fbd58d43b0ac380c4
- docs/components/outputfilesearchservertoolitem.md:
- id: 00acb647b753
- last_write_checksum: sha1:ebdf1bb2ef2568dbf9e7a4a0d1868f3c89cbcfab
- pristine_git_object: 30874270a4ec1a93e80d5512dd8247e8a0de7d67
- docs/components/outputfilesearchservertoolitemtype.md:
- id: 706d9134f7f4
- last_write_checksum: sha1:2a870670b74028e5d40aac474e3cb64527a740f8
- pristine_git_object: 52d2d39bfacfe9086893c241a4bc4e22f7d13ddc
- docs/components/outputfunctioncallitem.md:
- id: a0b3dcf93469
- last_write_checksum: sha1:30c6f678351da68f90cc92d45d6c477ab0aee6a4
- pristine_git_object: 44d9e070c54b27288d5ff2f73fe97f920c4c5eac
- docs/components/outputfunctioncallitemstatuscompleted.md:
- id: fcce7d103880
- last_write_checksum: sha1:a555c5ed9cfba8bb91a9f3bbfa561a4df06e1d6a
- pristine_git_object: 55c2fb905bc9a38a14dd34831eb948d8506e20e2
- docs/components/outputfunctioncallitemstatusincomplete.md:
- id: 160507e235ae
- last_write_checksum: sha1:3c215f0c5e21eae91fbf5eb26ae468e468e4df9b
- pristine_git_object: cfcd0c34f681f7f3a9ef7c9bd0f896521b097257
- docs/components/outputfunctioncallitemstatusinprogress.md:
- id: 6616c36657a7
- last_write_checksum: sha1:eb94dd69b8444f41acbc8982fa0962a54cd7f78a
- pristine_git_object: 6e112d842e6f4cc7a1778d008ed21b8c1add919e
- docs/components/outputfunctioncallitemstatusunion.md:
- id: a3604a9333be
- last_write_checksum: sha1:bc86be445c5ad7f1761d9c786a7bd448fd0d80aa
- pristine_git_object: 374d455477674e030c8725bb8ffe18d27f22242a
- docs/components/outputfunctioncallitemtype.md:
- id: e4f072d4f1d1
- last_write_checksum: sha1:042aa6381e2b6b199e9ec48f1554f011403525b6
- pristine_git_object: 31066e50f45a2f32c35d0389886757885704ea4a
- docs/components/outputfusionservertoolitem.md:
- id: 886e6be27ec2
- last_write_checksum: sha1:b3758081c485683416158c2f10c228958f60055b
- pristine_git_object: be5e88a6f8bb73b9e2e7aaec2a8b4a84661e480f
- docs/components/outputfusionservertoolitemtype.md:
- id: 93233bb8c5d7
- last_write_checksum: sha1:5e9a0f90c938eaa5fc231859f48f5b9673b6b00b
- pristine_git_object: 60a41c468727f288331bd5b91a547edb2969661c
- docs/components/outputimage.md:
- id: 6f1d41cfe2f6
- last_write_checksum: sha1:5bb1fcc6bb8c49f3e3d1a0171f0cc7d2b661847a
- pristine_git_object: 2f533e0c19456c28e6733a180b3be570c80ed8bc
- docs/components/outputimagegenerationcallitem.md:
- id: e91e03b12978
- last_write_checksum: sha1:9128df964c87da7033866dc035b806b2012ec070
- pristine_git_object: b3f7449eaaaabc75d29f3af78e16ebac44cbc8c4
- docs/components/outputimagegenerationcallitemtype.md:
- id: 0a38d9247096
- last_write_checksum: sha1:9907040d8512c264d437364514ecbe6db6d2f743
- pristine_git_object: d7d592b96122136f2e4becd5edc72b95062d6237
- docs/components/outputimagegenerationservertoolitem.md:
- id: 0a39a1c10949
- last_write_checksum: sha1:794cbf0f99dc7ea2739d94d9ab96e2f3f07bb323
- pristine_git_object: ec9409ff0690e6787b0f464c83aa9cf5753fb4f6
- docs/components/outputimagegenerationservertoolitemtype.md:
- id: e8483d8856aa
- last_write_checksum: sha1:43f034d1b716ef2878be034bb01e836395c7b686
- pristine_git_object: bd9e1fe6213d47f2eb203ae3765551cae69784cc
- docs/components/outputitemimagegenerationcall.md:
- id: 1338bdb69860
- last_write_checksum: sha1:d08ae2d3ad68eadc96ec27786fbe23a32a0aa82e
- pristine_git_object: 735eb058959e7177bd51fc04682f2d2a1a22e61d
- docs/components/outputitemimagegenerationcalltype.md:
- id: da05f040f584
- last_write_checksum: sha1:a7392cdfaa9599c069db92faf4b9f9a87603d29d
- pristine_git_object: d9e663fcae49dba7885223f4f0848aa9f9a23002
- docs/components/outputitems.md:
- id: 92565743132e
- last_write_checksum: sha1:8cf85818cb3bf198bd3a4c00e8e3c3193f187d1d
- pristine_git_object: bf2538cd707ab2f40a4feb4f4aed5f4051f6b66f
- docs/components/outputlogs.md:
- id: 0821eefe9546
- last_write_checksum: sha1:1ff4592093bd2fe28038cc8db28bee6a35025c96
- pristine_git_object: 45b477fbc8bf92fb6e5441bd9d198a90b97a521c
- docs/components/outputmcpservertoolitem.md:
- id: 19fb7f7d6864
- last_write_checksum: sha1:26f0997f15397e0648b85d05331a78e0da84b485
- pristine_git_object: a9e3a8223a8f5e54005a845a858b0c8bfd3b0b7f
- docs/components/outputmcpservertoolitemtype.md:
- id: bd581943f317
- last_write_checksum: sha1:ba58cfc0cbb268628ac3bb09b3f18593093f9f53
- pristine_git_object: 368417c285d7e3dbee81ef64393fe52c24d1ec00
- docs/components/outputmemoryservertoolitem.md:
- id: 77b3b280d389
- last_write_checksum: sha1:7c369c877e6714193c82f7a3d0571e45dc18db41
- pristine_git_object: da0de56911025a180c945516b82b88546adce0fc
- docs/components/outputmemoryservertoolitemtype.md:
- id: 853f37d4ee26
- last_write_checksum: sha1:ae07c21e90f54653e998f6149ca79a1d6e6eae74
- pristine_git_object: 3c78696d67e73f6bea782a99ec4b2dc8bdf43f4a
- docs/components/outputmessage.md:
- id: e0ec2ca7f0e2
- last_write_checksum: sha1:399e00c91eb89ff6741e058f911c57ac0e3a160e
- pristine_git_object: e59886ce15b46ea82f8a9921446187b75b00d4cc
- docs/components/outputmessagecontent.md:
- id: 034f3de27e7b
- last_write_checksum: sha1:39b6fda5c977820fe327628faaa7617ee569c22a
- pristine_git_object: d8ae814ddb4c7da2357ed9778a312a0944b5a331
- docs/components/outputmessageitem.md:
- id: 3d3fe949119b
- last_write_checksum: sha1:52efe2e9127aeedb2853ae259fe606201b7de836
- pristine_git_object: 631ba682b4bfe921f377c517fd89f01affcace53
- docs/components/outputmessageitemcontent.md:
- id: 055891480f4f
- last_write_checksum: sha1:ef754b5f638dffe88175af6a3fb73df886419983
- pristine_git_object: 36ee71813b2fa1da0da2ee6c4880188ec31206ed
- docs/components/outputmessageitemphasecommentary.md:
- id: 2f1503c77ccc
- last_write_checksum: sha1:8c629f06c0932a055eea109b38bf473071093cf5
- pristine_git_object: ee704ed970b26e71a035a038d8cb1f8bb3b08356
- docs/components/outputmessageitemphasefinalanswer.md:
- id: 6c93bcf38b39
- last_write_checksum: sha1:09078742f06217af0cea393cd7d2a0e4066d3fa5
- pristine_git_object: b3b952d68cf5b9d3a1e1bb6d8d4ae106f08893f7
- docs/components/outputmessageitemphaseunion.md:
- id: 9b69d9a64777
- last_write_checksum: sha1:46c661c945174ee33849121e054aa0fe430ad5ec
- pristine_git_object: 2fbdf87dd8ae6021dea0a3d2cd7c2c2f22c71529
- docs/components/outputmessageitemrole.md:
- id: 496e4c217acd
- last_write_checksum: sha1:846641600a4aac901bb19ba994b3cb34dc8c44a7
- pristine_git_object: b732b0a89cbda7fa2db0c466a265487c57b1871b
- docs/components/outputmessageitemstatuscompleted.md:
- id: b6cd1cc8ba33
- last_write_checksum: sha1:7ee1755e9a219db41a2b6ad766dc40bd8f1b701f
- pristine_git_object: b307f80dab02fc912c47e7c97d70ec4c3464aaaa
- docs/components/outputmessageitemstatusincomplete.md:
- id: 180497f5c7c0
- last_write_checksum: sha1:536643179657467fb588fa64b3aa846c4cca0525
- pristine_git_object: 1355b75f2bc66a7d4c3510aa60005d15b93e11e6
- docs/components/outputmessageitemstatusinprogress.md:
- id: eb8612667256
- last_write_checksum: sha1:26786e5b1f4ce86b5ad4141af22e99de9467dbb5
- pristine_git_object: ce9332fdb02355d2c237bd10984e5eb83ab27234
- docs/components/outputmessageitemstatusunion.md:
- id: 7974c9a4d828
- last_write_checksum: sha1:39a2ffd313f8732210cee0aa1debd37ff8f0827e
- pristine_git_object: 63ccd7c1600c54b18d2a18ad0b838cb8f757d02a
- docs/components/outputmessageitemtype.md:
- id: e98758a097b1
- last_write_checksum: sha1:692a033ea8ac6255de686529ddd737a75d84e3a6
- pristine_git_object: f3ed5615b60bea26ae102f1ccbef963d3aceec5a
- docs/components/outputmessagephasecommentary.md:
- id: c416b300e5bc
- last_write_checksum: sha1:d09503d5a12f2fd238464caa256bfbfd61bd0627
- pristine_git_object: 1053c343d0c25c671cb520a01dcf04b6e1b55c5c
- docs/components/outputmessagephasefinalanswer.md:
- id: 3524cc1faba3
- last_write_checksum: sha1:b97064cdbfaaeed77bb2586d5b2e450cef17b013
- pristine_git_object: ce8cf69597eda00ed4f86109c4c6dda5b017428e
- docs/components/outputmessagephaseunion.md:
- id: eefba3f54379
- last_write_checksum: sha1:4c68a072da3fb0febaa33268d70c1dc5cd577624
- pristine_git_object: e5d9815d3538eb3db3f07c9a72ac9a2bbf2fa86a
- docs/components/outputmessagerole.md:
- id: aa0f2e7836a8
- last_write_checksum: sha1:8dd78ef95fa20e779a286470b63d7b2a960eaa16
- pristine_git_object: 21b161672376a909c3c6001faf08384c36def527
- docs/components/outputmessagestatuscompleted.md:
- id: ff40415e6f24
- last_write_checksum: sha1:ea59c934372c4d89b46cf49485a11f7f9db08ad4
- pristine_git_object: 2b0254b54ac965cccf38402134f7f327c666426b
- docs/components/outputmessagestatusincomplete.md:
- id: ca1a9dea3732
- last_write_checksum: sha1:93b7be11330fede3e8059dc9a5fc5eb70d9c9226
- pristine_git_object: 3146b10a819f3b2121590b7037fdea012794d271
- docs/components/outputmessagestatusinprogress.md:
- id: 4ad18865a578
- last_write_checksum: sha1:b61b67d1b11bfdeedffd0fd02bee99169a208d18
- pristine_git_object: eb31df43644e65ccbdf736e2321c9765a7f422b1
- docs/components/outputmessagestatusunion.md:
- id: 7a62142dd1f4
- last_write_checksum: sha1:c7d9cbb0c993a850b86fa903101cc50f1c143ea1
- pristine_git_object: 6dae9adf19e27d54a9155c9bb9214db261155bff
- docs/components/outputmessagetype.md:
- id: 19adca1060a8
- last_write_checksum: sha1:797d31ef56cce6e7e770677288b56b3c3822d941
- pristine_git_object: acbedfe1aca86bfe4d682abcd075b89d872e9e06
- docs/components/outputmodality.md:
- id: 8e1105f01041
- last_write_checksum: sha1:d3c1b4ce81cdf2858288683dacbe426698793a45
- pristine_git_object: 2e0633eee8835d45f782af9a76b1d3d866f70bb6
- docs/components/outputmodalityenum.md:
- id: 9e9b5b751962
- last_write_checksum: sha1:e445a894b182e6fd805d5b9310d13b8a8520349d
- pristine_git_object: c2beec6de41ecb535d9b22a97ad3a21f8e6a2f28
- docs/components/outputreasoningitem.md:
- id: 5196f1ee0df3
- last_write_checksum: sha1:05f08cf1c1d78df5d87acc3ed8e4620e64ef2b78
- pristine_git_object: 9a3cbf8f3f0b118abaa8a41d1983c69d93fa68ef
- docs/components/outputreasoningitemstatuscompleted.md:
- id: 35ed5dfbdcc9
- last_write_checksum: sha1:78a2aa4842aab41e9734429e08c571430162a80e
- pristine_git_object: aae076f344a70dd4a30937cb9b402321ac98af9e
- docs/components/outputreasoningitemstatusincomplete.md:
- id: 43b4ad54e87d
- last_write_checksum: sha1:7e53e549866c95746c3bb33abf6a5b59a72619f5
- pristine_git_object: 6ae953e7faf30ef4b608737c5ab77ca71cacce62
- docs/components/outputreasoningitemstatusinprogress.md:
- id: 2b59b3b21a92
- last_write_checksum: sha1:dba9bb9c65fa08cdcd58c6ebc0c696c8b28e391f
- pristine_git_object: af4394f52256d0437f267b9313add877d21192a1
- docs/components/outputreasoningitemstatusunion.md:
- id: 77e1e7fa2e9f
- last_write_checksum: sha1:34e885561f24e3a3cdb024e6da976c67277e6f00
- pristine_git_object: 5c48772bbfe97445f03818c840d0f434fe4dc42e
- docs/components/outputreasoningitemtype.md:
- id: 2efd271441f7
- last_write_checksum: sha1:36a63bf61d927a595f3e58dd0b607a8937db9ff3
- pristine_git_object: 24800454b81c6b2f9a0180f283d793216bd90384
- docs/components/outputsearchmodelsservertoolitem.md:
- id: 17da96b2505f
- last_write_checksum: sha1:da40a4743d0ae6385588944cac094ce9bd4d14c9
- pristine_git_object: a5e1fb16896dc6841105b7f01e735539b8876a5b
- docs/components/outputsearchmodelsservertoolitemtype.md:
- id: 37be34b271c8
- last_write_checksum: sha1:237762e35b5cf89509bc3bf8b261f174016d3903
- pristine_git_object: dc9df5ca2122a044efa3d2ab1d13b2f957f67d34
- docs/components/outputshellcallitem.md:
- id: 2b7a6e806c6c
- last_write_checksum: sha1:ad433b0adde679d54416e5548bac1aa5d013292e
- pristine_git_object: 8e786ea50f693ede16622d7d87684ac1db7a64a1
- docs/components/outputshellcallitemaction.md:
- id: 19eaf8b17aba
- last_write_checksum: sha1:47eb3c2d6965c15eae4c2ee99aaef31572fb78d2
- pristine_git_object: 0a3260f9afe122b8eb98367040f466ca4a55f7fa
- docs/components/outputshellcallitemtype.md:
- id: af4a54ed40ac
- last_write_checksum: sha1:2d3bde4a84a177b6a8c54ec744e530bc7ff6bace
- pristine_git_object: 8097dfb3c462487cd5419aa2219f755d77f4ea9f
- docs/components/outputshellcalloutputitem.md:
- id: ce29af51f880
- last_write_checksum: sha1:794b4fdb7885b5eb0f60973204d348855dacb370
- pristine_git_object: 1543afc790d7497967d767037fb221c641a18596
- docs/components/outputshellcalloutputitemoutput.md:
- id: b9691ab35413
- last_write_checksum: sha1:35a719a15f8a22866238cc4a725971beaabd575f
- pristine_git_object: d5059f498ec2696b6b66473461365a053b88a007
- docs/components/outputshellcalloutputitemtypeshellcalloutput.md:
- id: 38aa50f0c8ad
- last_write_checksum: sha1:497eff39dfcc79b381adf509b9ba70dd8dfd6832
- pristine_git_object: 9e2ef674ca5e736dda8f47ab6749ebc1df31d475
- docs/components/outputsubagentservertoolitem.md:
- id: d52938a1b53f
- last_write_checksum: sha1:034e536a262bb5162af5d89de941b7781b3e84f8
- pristine_git_object: a136f6241ff64496d53dd20432c465f9af592fde
- docs/components/outputsubagentservertoolitemtype.md:
- id: 4825eb0f554d
- last_write_checksum: sha1:f33d221e6ca447e6ea10c61ba7a2d24b32bedef0
- pristine_git_object: 1fec3b0e22e307a64e258bb1582347b2e675d308
- docs/components/outputtexteditorservertoolitem.md:
- id: 6c114519044a
- last_write_checksum: sha1:7b90b5ce30ff6df03376e337e266dbdadfa751c0
- pristine_git_object: 06f7eccc2b458a3a5bee3f6e5f02b46e6ebb91d1
- docs/components/outputtexteditorservertoolitemtype.md:
- id: 939ee7d54395
- last_write_checksum: sha1:3cfe652a6c4711060fe0d104102950bf3f7a9b35
- pristine_git_object: 78603c1ee2edfe1c78683dfa6d273bf63dc1024e
- docs/components/outputtokensdetails.md:
- id: 5d5eb3509e1a
- last_write_checksum: sha1:f011b1d1a289f1a34210a81d5c144322735aed16
- pristine_git_object: 59bf4277688bf4500a9ac4dfce0e0c33fb4311f9
- docs/components/outputtoolsearchservertoolitem.md:
- id: 5936350a7874
- last_write_checksum: sha1:d7e0189335ea808bc9c65ef6b5f6c8a69b78bce2
- pristine_git_object: ba436ee49f6d0a14368453c8738993847d6b9054
- docs/components/outputtoolsearchservertoolitemtype.md:
- id: ce666db43fa6
- last_write_checksum: sha1:a20dc4692ec094bc22c7689f9ae05aafa2a757fc
- pristine_git_object: 0083cab9d32c4c2364eaafd66c376220aa8ece54
- docs/components/outputwebfetchservertoolitem.md:
- id: 9f1abd1711b9
- last_write_checksum: sha1:3372f2b1174ea8b800fbfee5b643d15b2fd5d872
- pristine_git_object: ece6f16e25f0fefd093bb9f0784d42ccdcd71c7b
- docs/components/outputwebfetchservertoolitemtype.md:
- id: 6e1e0de2a502
- last_write_checksum: sha1:0c7af6f7dce5a92e6c906e8edfd6524b949f0857
- pristine_git_object: a81ab5dff5c808fcaadefd99601f35fdeb765212
- docs/components/outputwebsearchcallitem.md:
- id: 7d5a537f4c7c
- last_write_checksum: sha1:ce3ad0c167fda0e6da21e0630112c740034e5d60
- pristine_git_object: ddb717fe01a0884b0f8e10cf2887a83ab4419160
- docs/components/outputwebsearchcallitemactionsearch.md:
- id: 9f59c4212631
- last_write_checksum: sha1:756994237267ad25b63927f598215f72d7aa88d2
- pristine_git_object: db67ffae60eb48e19b47d5ecbabbe99306a19249
- docs/components/outputwebsearchservertoolitem.md:
- id: f5fdb9904c43
- last_write_checksum: sha1:6b857eb4aec882ee3eea48b4e1a4bfe0e517664c
- pristine_git_object: e82d86378b87dd74cc4e5d7a0f10f06f64aa5174
- docs/components/outputwebsearchservertoolitemaction.md:
- id: b6b0cbb67ab8
- last_write_checksum: sha1:dd3fc92f2817d38d7e18cb0658ec425dbfc08e54
- pristine_git_object: 69be5b430a249f46bee3ff980fb3a43c8562ff00
- docs/components/outputwebsearchservertoolitemsource.md:
- id: d43c7785b97d
- last_write_checksum: sha1:5467399b41fa45234607c9e560ab0f0dada5fab3
- pristine_git_object: c48443daf6a5451f47d77c1530db12b7a6b2cc99
- docs/components/outputwebsearchservertoolitemtypeopenrouterwebsearch.md:
- id: 7e76bc306963
- last_write_checksum: sha1:e4c09750dcccdb30e32b8ed8974770d25d754647
- pristine_git_object: 204598652178d2425622e6d73fe626b86ee0635e
- docs/components/outputwebsearchservertoolitemtypesearch.md:
- id: 00e6e8cd525e
- last_write_checksum: sha1:65019a14aa26f42c0a0e754c17f50cd6ecfb1f2c
- pristine_git_object: 5c652417ae82dd439989abefa6099f0a10f73909
- docs/components/outputwebsearchservertoolitemtypeurl.md:
- id: 505e96bae165
- last_write_checksum: sha1:374b95b67ca2ca964059428006e4cfdfc7dffc60
- pristine_git_object: 0f61afffaa0d269fbc07069264e57b57be5b3e1f
- docs/components/parameter.md:
- id: d1b8871be7f8
- last_write_checksum: sha1:f25835d07a38e32f2ebf37b2e5df67c915bb0112
- pristine_git_object: c00420ef1c6db8f5c63d1372eef3a3f7b2ae63ab
- docs/components/paretorouterplugin.md:
- id: e4afc1e2a656
- last_write_checksum: sha1:8721ee5f64c6bb07fcbc1e3d40c04d9c3969e182
- pristine_git_object: 10c1195d432607fab7047d13fc5019e9b70bc09f
- docs/components/paretorouterpluginid.md:
- id: 353199e41ef9
- last_write_checksum: sha1:811dbbce35aa0fa7c3d55727e0061c1a6e6acc62
- pristine_git_object: 08be131910dd1e6bd88a103b022080eafdc54571
- docs/components/partialcoverage.md:
- id: f09f55d1053c
- last_write_checksum: sha1:0952353ecff862e0cd69170b03b50cb21b859a58
- pristine_git_object: face39408dbf68c7cdada7998daf36d09248a01f
- docs/components/partition.md:
- id: cc74439b2251
- last_write_checksum: sha1:de88a6dedcd65f73fca2bd1913f7cbfd0d62a4ba
- pristine_git_object: 4f49e41600018e4f637c68dff196c78b912f8893
- docs/components/payloadtoolargeresponseerrordata.md:
- id: d18653a5a59a
- last_write_checksum: sha1:67a64e254ca93fa9115fd09bc3a2fb124c9c83cb
- pristine_git_object: 197ba50a74a79f543c5c23f19a91df8848d94a61
- docs/components/paymentrequiredresponseerrordata.md:
- id: 8f708f74af40
- last_write_checksum: sha1:7e562e9713bed00ee0af332eca1ebf936313f667
- pristine_git_object: e083b1f4b2e1470cb72994d1625937a78363e118
- docs/components/pdfparserengine.md:
- id: bdc6d5dc0df4
- last_write_checksum: sha1:c067c380a8f05bec029d6e2ea339e00260e0412d
- pristine_git_object: 8889dadd4b0ab13a4b0505ba1255e1718b51aa67
- docs/components/pdfparserengineenum.md:
- id: dff22b29d290
- last_write_checksum: sha1:4e9e4de38617c4e98f5763fd4891c848867d2b8b
- pristine_git_object: 87a419ab3588dea92d3569bc5b49607d5bf76293
- docs/components/pdfparserenginepdftext.md:
- id: 5324e9930e4e
- last_write_checksum: sha1:7097abc92c7493c8946214f29c0e96b18f4e7c6b
- pristine_git_object: 84226b8778909aec357ac1207cba468a9351cd5c
- docs/components/pdfparseroptions.md:
- id: c0dac3d032e3
- last_write_checksum: sha1:dfd5d9867b4d2d540c6afb3092b22cbcf574c71d
- pristine_git_object: 05a4fc47fb7c6111c9cc2349e5457408fd1eda29
- docs/components/pendingsafetycheck.md:
- id: f8a4b06e4b7a
- last_write_checksum: sha1:6b2ecccf62ced224c6dd5252b3f16aa202feec0b
- pristine_git_object: 1923aac7c5fae150b9dc96ef9ee63797aebd31da
- docs/components/percentilelatencycutoffs.md:
- id: 2e543a8a2907
- last_write_checksum: sha1:8235ed4e1c6c74a0038d35db3e68571f55482537
- pristine_git_object: 6a2c04f7d3c8b6e9f1d5151b92bd08991b836e4d
- docs/components/percentilestats.md:
- id: 1b4159e54240
- last_write_checksum: sha1:33924fa3e9065174b3d235abfe1da6cd8de3a559
- pristine_git_object: 6f47431682a0b8df76b71f7088bd60ae3b719cdf
- docs/components/percentilethroughputcutoffs.md:
- id: 5b84667c97a1
- last_write_checksum: sha1:5dd867ac4a1fecbe3807b8b371f2537ade03f5e4
- pristine_git_object: dff209d8cd956e99615d1cf6e7cd06f072cdbd2e
- docs/components/perrequestlimits.md:
- id: b3e279b3aa17
- last_write_checksum: sha1:4b5e8c0bb453b54a0c31faffca45d3ded875be48
- pristine_git_object: f42074dab36af7d2b068c0b24652b7db672dc0cc
- docs/components/pipelinestage.md:
- id: 54d91561d6e3
- last_write_checksum: sha1:eb2d1e6b1ab6aa6a375476cb90ad5b2802824615
- pristine_git_object: 277bf3d9e447086cc9213f1bb473b18d779a2139
- docs/components/pipelinestagetype.md:
- id: 9097aa0e97fb
- last_write_checksum: sha1:6ad16307547f51c9daefc056485a04a6efc17b36
- pristine_git_object: e7cddd9c2a12ee48a3769d4447bd8583e137cf73
- docs/components/preferredmaxlatency.md:
- id: 0b82201b730d
- last_write_checksum: sha1:5dc1be79949b581650dbecd75ab4afccbf320a8b
- pristine_git_object: ce96e64f8aabbc0085b02cffa107975c43a9284a
- docs/components/preferredminthroughput.md:
- id: a13cf3a5c7fa
- last_write_checksum: sha1:977b30074dde478796286a42649cc8202b712419
- pristine_git_object: fd49bf88b75891b0f2a659a453ff3e3aa0d55ae8
- docs/components/preset.md:
- id: 0aefb22d403b
- last_write_checksum: sha1:572a22442c3302e54968d33a9ffc57f86573f967
- pristine_git_object: 52672af2ac4010cf36f76f492a82ade3d9794f05
- docs/components/presetdesignatedversion.md:
- id: 9771a2a5595c
- last_write_checksum: sha1:a09ae16bdd34ec3b3807cf2a68ea5300923250b7
- pristine_git_object: 2042f67413d167a11ab517dea9c9e6d23093df94
- docs/components/presetenum.md:
- id: 76935ce2d4bd
- last_write_checksum: sha1:2e3fadc44cf2f30bfd2bc9b6de316fcceaa56c69
- pristine_git_object: bd979f0e0a57ec55af8f2e8ce9e5a20b554da79d
- docs/components/presetstatus.md:
- id: e26bd87a2ff6
- last_write_checksum: sha1:e4f17dca20609affa7652ead9964a8ea030115bb
- pristine_git_object: fb67b91f754a279463322dc05429d2fca4401798
- docs/components/presetwithdesignatedversion.md:
- id: 4b8a4543197a
- last_write_checksum: sha1:fab82d4c537672885ce3e9d61da5dfc081aae6fe
- pristine_git_object: 83cb70870a74ea33634483654fa1c03406e5fdb5
- docs/components/preview20250311websearchservertool.md:
- id: 0ba7bd853f96
- last_write_checksum: sha1:40e353bd8eaf5b4d97dd13fe1b0d67a56b2b56d0
- pristine_git_object: f21c73a89373f90d00520ef589e09b92560ffe23
- docs/components/preview20250311websearchservertooltype.md:
- id: 7258d1f3ed79
- last_write_checksum: sha1:8fd6c12c225e6756938f25e97c6818a7477d9408
- pristine_git_object: 16caa8a6f0ac16b49437cb1a95e5c93781d98d01
- docs/components/previewwebsearchservertool.md:
- id: b43bb7090a75
- last_write_checksum: sha1:fd4f36fb90ef38062733747abe1ada012edc59ff
- pristine_git_object: 74fd33a1bd74da96a437fc2f72a450671f70c4e2
- docs/components/previewwebsearchservertooltype.md:
- id: c6073c9ee3eb
- last_write_checksum: sha1:46f579d5f71a87b20d7ca0674004ced55c37121b
- pristine_git_object: acff7387bf13fae0aac386037cc19e5d36f55782
- docs/components/previewwebsearchuserlocation.md:
- id: 36921d9aba44
- last_write_checksum: sha1:ed8c8dfd114b590b5da26a5f340e3d88080ba377
- pristine_git_object: 3d26cf99f11f223344ffbbc2fb8e494419894c43
- docs/components/previewwebsearchuserlocationtype.md:
- id: fa0c85429645
- last_write_checksum: sha1:34d91154dfedd31083714270161a12817191c13c
- pristine_git_object: 685705c19f968d6408d3bfc3d398eddb2ef5e52a
- docs/components/pricing.md:
- id: 15dca753d9eb
- last_write_checksum: sha1:80bb9085218cbe75ef0623b86bc9f52a354b0722
- pristine_git_object: 69ac72cf96ac924243230189563bbe6a6dcdfc6c
- docs/components/promptinjectionscanscope.md:
- id: 285ea7802dcd
- last_write_checksum: sha1:0fff83f064f6699f5a86c5068423c646a9fca69e
- pristine_git_object: 02d5dcdfc5bec22a67a803487f4758df68ba098e
- docs/components/providername.md:
- id: fe24a77d9911
- last_write_checksum: sha1:9251a4df3259e1c6a63e4f7347262abbe0de59a3
- pristine_git_object: 5f381792df185806eb19e6ebabd813a56ab43e86
- docs/components/provideroptions.md:
- id: 48594a6d2d81
- last_write_checksum: sha1:c672b409e17f8ac6aa7af0bde839038550520947
- pristine_git_object: fe43b8f18c5ca25745aa5eb9902aaa1399d96976
- docs/components/provideroverloadedresponseerrordata.md:
- id: c2a8cc4ec6df
- last_write_checksum: sha1:1d206d00dc0d91b5ceec470579c6ce345cc23d29
- pristine_git_object: afebc305bd99e4b9b682bc2b82aadf318767083e
- docs/components/providerpreferences.md:
- id: 22d442ed4785
- last_write_checksum: sha1:08d9e64287a564324af93fcde71fa7d13d05c66d
- pristine_git_object: 2321236ed51accb2e65a5b54c9dd727d720f6bc8
- docs/components/providerresponse.md:
- id: 4574bcbd4144
- last_write_checksum: sha1:de60f413818cc00ed5a4f6bb982c9dc5acc3899f
- pristine_git_object: 09beea2aedab445e726f20fb9a9d3ed5ebb4df25
- docs/components/providerresponseprovidername.md:
- id: 800bab487911
- last_write_checksum: sha1:87cfea6a4b25dd6af2a37db94b098f4657be99fa
- pristine_git_object: 27b5b6256e9b4518068682241ac48ce193fb7cd9
- docs/components/providersort.md:
- id: 290449b1880f
- last_write_checksum: sha1:f15d65e5c226a222c3bfc0b9f55dd9ca0443d415
- pristine_git_object: 82a08f5d68f40b457dcd0685bc0ffaa47daf1922
- docs/components/providersortconfig.md:
- id: 56a828258bd9
- last_write_checksum: sha1:979e7ccd8c9800941dc0d0f905b398e2797cdcc4
- pristine_git_object: 70db18a3a953e992834a54a5744f1a7245d081d0
- docs/components/publicendpoint.md:
- id: 46f345cbc943
- last_write_checksum: sha1:ad470e4c83669a262f2c7ea5dbc308bd33b14a6f
- pristine_git_object: de9798993c11b80d3974f160b2cdf5115bffd9ab
- docs/components/publicendpointquantization.md:
- id: c94b72bd3c23
- last_write_checksum: sha1:e79fcd7d4a2829c2f696b79f050e56f1343a86a4
- pristine_git_object: 7d0edd22dafe693920f18e0c0c99b852c6b3bb57
- docs/components/publicpricing.md:
- id: 9d43651da8ad
- last_write_checksum: sha1:a0307105d112c890670088159350ed59040629a8
- pristine_git_object: 0746b9999a7aa39ce957aef7cf72235cba2f16a8
- docs/components/quantization.md:
- id: 0d17b4a78828
- last_write_checksum: sha1:992ee3fdd0f4e09c9f6e6426c413841fe34a86a5
- pristine_git_object: 7a0574a89d4c7836115ac16571dd32b7d9290914
- docs/components/rangecapability.md:
- id: 790774ea2733
- last_write_checksum: sha1:120397200e2eea9f5f06e4d77329af171e0fd67d
- pristine_git_object: 869b0a3d3c2bdc63a7e617281c1ac343d85b489e
- docs/components/rangecapabilitytype.md:
- id: d1afd4e509b0
- last_write_checksum: sha1:b591fbd5fa30109a985f7f91b136e52e3b1677ff
- pristine_git_object: 2bb5777d79c16416dd0d7ab0539a28f37e77d8cf
- docs/components/ranker.md:
- id: 5a14b8d09a01
- last_write_checksum: sha1:56664aff547bdcede5fb21eec2731a58d393c949
- pristine_git_object: 1257699c91a2cca868fddf12b03767c04fb4fe47
- docs/components/rankingoptions.md:
- id: 9f0f4d6c014e
- last_write_checksum: sha1:0588cedf315010f03ba831bbb382cb1252eb01a9
- pristine_git_object: b1917b130163ab7252e49ce934d82cf8cc463a32
- docs/components/rankingsdailyitem.md:
- id: 284cf2da9639
- last_write_checksum: sha1:f1a0f647bf514a800ee128f9689de2fe2e395011
- pristine_git_object: 54e6cc87d517e482c1ac183ccf82c0140f081d24
- docs/components/rankingsdailymeta.md:
- id: 6e0da9cd4001
- last_write_checksum: sha1:b8d4b19c912849fdb8bcb368ab8fd69e79c8d95c
- pristine_git_object: 29de269bdb6ef7a68d6611ca47122d56c50e63b8
- docs/components/rankingsdailymetaversion.md:
- id: 3d7a17ae95b6
- last_write_checksum: sha1:9e2999b047c2e7ef2828c0d710f7428fd88496f7
- pristine_git_object: 6bf107f0b3c03140e6d4e894204a21564c51eca2
- docs/components/rankingsdailyresponse.md:
- id: f8764b589bb4
- last_write_checksum: sha1:4d31d93b0df4cf990f541cc7f08649f8cb438c43
- pristine_git_object: 6af1ac55add5b53b6066157a854bf82d29d9df0f
- docs/components/reason.md:
- id: f3e06a9de94d
- last_write_checksum: sha1:cf117327a941137c34db136304bf50e4801c996d
- pristine_git_object: 1c21d0457d1c635b8eff2a46144cac5e24840183
- docs/components/reasoningconfig.md:
- id: a2d51e262631
- last_write_checksum: sha1:28bd5e57b7c9fb68e3f9c6e78343dc6c1e4ea3e6
- pristine_git_object: cdd80327b2ef57eb8c50dba3bf85f0b338082883
- docs/components/reasoningdeltaevent.md:
- id: 5d657813c9af
- last_write_checksum: sha1:14999e0c8cf52d33c9e47309e7f82d85ed3e60ab
- pristine_git_object: c523137050564025f9b567f458b80d6c92275bb4
- docs/components/reasoningdeltaeventtype.md:
- id: 4bc6c0ee1182
- last_write_checksum: sha1:8eb7d791510905b901133c42357d712b799ba99c
- pristine_git_object: 8fd61605be2b1caad008dafbc5fbae664c28b7b5
- docs/components/reasoningdetailencrypted.md:
- id: 410e7c90e4d8
- last_write_checksum: sha1:74281a14bbee30728d728e5725c3b96e3b4da4a9
- pristine_git_object: 44d9d2da2d7729732d27d42e72e6af0912b2d7e1
- docs/components/reasoningdetailencryptedtype.md:
- id: 7c94a00c5b1e
- last_write_checksum: sha1:dc3719ca804f71cae4ea2fab5c69e5fdd6ee355a
- pristine_git_object: c574453756cfe8a0b11155d8267ab3d82736c4ef
- docs/components/reasoningdetailsummary.md:
- id: e3376a9e2eee
- last_write_checksum: sha1:52f5acd636cad24a90127d208e9f680f01979333
- pristine_git_object: 1a6e291928060e8df20e9655f6382048eccb031f
- docs/components/reasoningdetailsummarytype.md:
- id: 158ee2616b70
- last_write_checksum: sha1:18e9a212106b11407027d66c899b6e3ed0271344
- pristine_git_object: 6de96b93584ce0fdacd35a8e29907e85e6cc05e9
- docs/components/reasoningdetailtext.md:
- id: 6c40c8515f9f
- last_write_checksum: sha1:ab77e33177aab0a1d50c1b5430990d7eb6006858
- pristine_git_object: 52b113399c11cd4de5bc89875714452e6a788ffd
- docs/components/reasoningdetailtexttype.md:
- id: f1f8a16d1bf2
- last_write_checksum: sha1:fef97ea7ffa115a973e97000d3ae7a79266c8684
- pristine_git_object: 2a56e429c7736198136c527b5a026e9cf674de7b
- docs/components/reasoningdetailunion.md:
- id: 4f4ffac94960
- last_write_checksum: sha1:ee76cb356764894216247d29a2fcb4bbaffeb2b1
- pristine_git_object: 015b016c641583cebc499d826405c71f4e0a86b2
- docs/components/reasoningdoneevent.md:
- id: 610fec27fa67
- last_write_checksum: sha1:8455dddf6f10abbf68cfe0704f6b1ae20c6401c1
- pristine_git_object: 5681555465e949d20ce1e3676757cf8407185a89
- docs/components/reasoningdoneeventtype.md:
- id: 4cf951ef736e
- last_write_checksum: sha1:e2e8bee66451ecf37dc65b38d919318f06899bf1
- pristine_git_object: 31d997aa9e0721cacdebfeb79ce3428d5ec79bf0
- docs/components/reasoningeffort.md:
- id: ea6dba24a061
- last_write_checksum: sha1:53d8315d1f29bca1071672fbe583cad08f1cec81
- pristine_git_object: 225df68e53d3632bcd740e4f821d4f14233be403
- docs/components/reasoningformat.md:
- id: c0483881ee4e
- last_write_checksum: sha1:45038411b97c73c37fa000694770b06d13b0eb4b
- pristine_git_object: 16654f0baf3850c248f3f13175dfc95ea794c8f7
- docs/components/reasoningitem.md:
- id: c9f6a9187222
- last_write_checksum: sha1:9636ff42739babe7771b61dd105dd739ed18cdea
- pristine_git_object: 5f15f758daf56a70ea09d08f2653c3e15aa7a8ee
- docs/components/reasoningitemstatuscompleted.md:
- id: 2b082c1445db
- last_write_checksum: sha1:866fa1bb8b3f8d1d68ff689a2c4f715dfdf4ea70
- pristine_git_object: 32a3e88cdfd13a8f13415ebc4994aca952e5207e
- docs/components/reasoningitemstatusincomplete.md:
- id: d6e7e8ff830d
- last_write_checksum: sha1:aa4a4fab7958b0265b34d96702b574ce8bb8d2c2
- pristine_git_object: 494c5e53f21a6bc34f7eaeec53f3d144c750eb3e
- docs/components/reasoningitemstatusinprogress.md:
- id: 5e35190c8ae4
- last_write_checksum: sha1:9bf16645391f87571b5a2032bf1dab032ac5fd96
- pristine_git_object: 3591f71a2809de9de19096943df7418ed5244978
- docs/components/reasoningitemstatusunion.md:
- id: 2776fa9436bb
- last_write_checksum: sha1:ea654d7c824d785c0c9ce42cca776775fe496f37
- pristine_git_object: c4a9a0e2ceb72cdba4fd6ef72aa7f039050cd1fa
- docs/components/reasoningitemtype.md:
- id: d6495b934f4f
- last_write_checksum: sha1:10fb39eed56fa8e6c87d24fbd4f263fd0a80807a
- pristine_git_object: c14b732036c588a59aee3b04f8bec51d9a58c140
- docs/components/reasoningsummarypartaddedevent.md:
- id: 3297c69f1031
- last_write_checksum: sha1:6b1458b4d5819319e256ebf1517ea582a02cf384
- pristine_git_object: 38e8a644d74f02cd42b032419f88673876aa53e7
- docs/components/reasoningsummarypartaddedeventtype.md:
- id: 3a4846a7c613
- last_write_checksum: sha1:bd6003eeb746078a313b7f27c4560aa2c33ecb29
- pristine_git_object: aa5ebb968e19fb8c96c0fab86ba3f4d8e697c459
- docs/components/reasoningsummarypartdoneevent.md:
- id: aae02dc325d9
- last_write_checksum: sha1:7a63641014b358f068eadd984666a43887188685
- pristine_git_object: 6d17994d8b92e04e8a1578754324f514ca00554c
- docs/components/reasoningsummarypartdoneeventtype.md:
- id: 0630358b5fb6
- last_write_checksum: sha1:ce572a34e1cf9977e00bfca4838093088732772a
- pristine_git_object: 9fec4ad23bad6f3f2e62ef6529859c58f9c70fd7
- docs/components/reasoningsummarytext.md:
- id: c221ba8e3570
- last_write_checksum: sha1:62a0facc4c3afacac9c4bdfddb11387eea43b2ad
- pristine_git_object: 9786305e20e3eafc8a2628e04edbe8981f08ed99
- docs/components/reasoningsummarytextdeltaevent.md:
- id: af44f6e43997
- last_write_checksum: sha1:a6d737a401b8826f8d512af74043b7158c915d02
- pristine_git_object: c76001aa709deb724c766c7b1d8a7b8b080842a9
- docs/components/reasoningsummarytextdeltaeventtype.md:
- id: cd79224d89a4
- last_write_checksum: sha1:4b1ac85310044496ef2b073786fce9a83d922be0
- pristine_git_object: b8d5ba75fbd46032fa02bdacad51a31225ad7fd4
- docs/components/reasoningsummarytextdoneevent.md:
- id: 002e9b6317d6
- last_write_checksum: sha1:e7db0e468f38a4ec8303ac7a824ceffad5621fe7
- pristine_git_object: 1b1a217d8297b120751418ff0cbb86f8a752090d
- docs/components/reasoningsummarytextdoneeventtype.md:
- id: f398db687eb5
- last_write_checksum: sha1:771287f4db2462e770c576c243e836a6991390f9
- pristine_git_object: a241b1f81f3c9c26dea5bbbdc6fa37a19541b712
- docs/components/reasoningsummarytexttype.md:
- id: 7579578d3af3
- last_write_checksum: sha1:bbae6e3bc66ffc4661ac12c300fbc2061588733d
- pristine_git_object: af36e333e2e50af756433ceffb26f2eb08442b61
- docs/components/reasoningsummaryverbosity.md:
- id: b7eebec4d7cd
- last_write_checksum: sha1:4e73d230d13f73db44cb9282a40029154a127565
- pristine_git_object: cc36f39ba426e6e453162f8b7af7c067db604aba
- docs/components/reasoningtextcontent.md:
- id: 4178daf4c506
- last_write_checksum: sha1:029583e3e4ab024e55feffdf6a6949e48bd8ea17
- pristine_git_object: 500d7a1a932018966b1409ca75d0847bef8e1335
- docs/components/reasoningtextcontenttype.md:
- id: 22b777e7bb71
- last_write_checksum: sha1:a43be1428333ef3082148054dcacb73b4b7a4ee4
- pristine_git_object: f3646d44686e7d48c526d8417b0a56db35d7290d
- docs/components/refusaldeltaevent.md:
- id: 9c64cdf1cac4
- last_write_checksum: sha1:8610f12e1fa4af528f2dda1d734b16f70ab70a99
- pristine_git_object: e791265cb95569755e82f8ec8d69885b6e43a27e
- docs/components/refusaldeltaeventtype.md:
- id: 24a36da3d484
- last_write_checksum: sha1:ab1a0ada35eb3123f18f64416ef9c9f1e415681e
- pristine_git_object: 8aadcc15109d8163d6632b1a4ddf87314641e12a
- docs/components/refusaldoneevent.md:
- id: 66de77a0628c
- last_write_checksum: sha1:2536f951d8c10846a6039f163055675ef703dff2
- pristine_git_object: d46662429754f1c006600e8f327244971c8d66d1
- docs/components/refusaldoneeventtype.md:
- id: c4000667a2c8
- last_write_checksum: sha1:2ff86281263010d78e755cdd7289f5daffe05cbf
- pristine_git_object: 7035e9e9bc9752c39ce6152d4691e92a55f34aa4
- docs/components/region.md:
- id: 38a8f57aefad
- last_write_checksum: sha1:a5bda39be649ced37c120ce277841c37985c5db7
- pristine_git_object: 0206a524803bce4112b0a9a88254a0b81dcaeab6
- docs/components/requesttimeoutresponseerrordata.md:
- id: 25804cfd7f36
- last_write_checksum: sha1:fc01cafdce0dc5ea0e3def122b7885ab7afff9ed
- pristine_git_object: 2e062ef576233d063d8117cdb312e2d88846ed33
- docs/components/requireapproval.md:
- id: 4b47c7f7eca3
- last_write_checksum: sha1:4c86c2c85fbc89164db23754f283e5f9bb17e367
- pristine_git_object: 3da3106bc61497cf6f9f7f1b7283516d83c2f958
- docs/components/requireapprovalalways.md:
- id: 55b258963d0c
- last_write_checksum: sha1:ae288dd0e2e6c79d0742ae899b05901c87337137
- pristine_git_object: 327ede05f1747ff4b354d36d5862c8d80def5c10
- docs/components/requireapprovalnever.md:
- id: 0492eb1833e6
- last_write_checksum: sha1:6bca2b6eb5f2a564173ae4a3e468c61e3293a002
- pristine_git_object: 7cd7f146635d6a24361f1b881ccbe4e1828e3abc
- docs/components/requireapprovalunion.md:
- id: b6f5054b7776
- last_write_checksum: sha1:9d6c60556b5dee2b3e581934a7e3d48b60034c57
- pristine_git_object: cc964d62c8f74f43102b289a0613c9b9b928405d
- docs/components/resetinterval.md:
- id: b03f377616f1
- last_write_checksum: sha1:1e7d12b699c50af0d04cce4cb73efe48cf32f49a
- pristine_git_object: 0bb2e7cd4a22f1d0e52d75180639dd9125c0b542
- docs/components/response.md:
- id: 2b40822178c9
- last_write_checksum: sha1:385337549929814b68441066e56ed7daa6183344
- pristine_git_object: 068fed8b0a212f1bdaacafa80310d07fe7ee1935
- docs/components/responseformat.md:
- id: 21aa2dcdc770
- last_write_checksum: sha1:2ea5efe6bbf68d068fdf992ae335cc4fc2fcf7d7
- pristine_git_object: 86cd00504691f2fdc33549cb33e9b07d0c31dd3b
- docs/components/responseformatenum.md:
- id: fef1c313ab3d
- last_write_checksum: sha1:935d113cac8fb79702adb5bc30c7540035ebb4a1
- pristine_git_object: 89912bf57d12ca881110486c0ca69342d38accd4
- docs/components/responsehealingplugin.md:
- id: a9a3b6d3e0c1
- last_write_checksum: sha1:ba75992bae3382339f5f1e654a91da4cdd1f7eda
- pristine_git_object: 0a90c208633e8b379812e7742ccaee711b05d0e4
- docs/components/responsehealingpluginid.md:
- id: af80ec154093
- last_write_checksum: sha1:d5a3b91db105d63b61714b2bc638901d15e0dfca
- pristine_git_object: 27004e94c62657639578572814955300bf60caa4
- docs/components/responseincludesenum.md:
- id: dcdd5e53c3a4
- last_write_checksum: sha1:154df040e05c81e46dd8dd235fff354f41b7c8b5
- pristine_git_object: f69d88622286c505b54c290978c1ecb7b2e1562a
- docs/components/responseoutputtext.md:
- id: ef76a9bd7078
- last_write_checksum: sha1:8705b80d6a3db7ccdac8ed5a0fa63f2daf3a548f
- pristine_git_object: ad73bf9fb78d3bbce3398fa6c89d684b1aea5abd
- docs/components/responseoutputtexttoplogprob.md:
- id: e1cf9d75cdc9
- last_write_checksum: sha1:79094726662b2d0757b9cd79178e63ac4691c1b7
- pristine_git_object: 73e27f231572c70cb205fed1fc8e21674046016a
- docs/components/responseoutputtexttype.md:
- id: eb2bc6b65d8f
- last_write_checksum: sha1:103072feebd30b09d458646db4d0f4350a4c9a5d
- pristine_git_object: 8c8a3d72507b265e29d24e7792edc352487c76ae
- docs/components/responseserrorfield.md:
- id: 0352cb1ba5bd
- last_write_checksum: sha1:19734f3e9954c51112e3219231c2de6df552e3a6
- pristine_git_object: e21193bbab68ee5dfdb0a113e26ba70f82bcab55
- docs/components/responsesrequest.md:
- id: cb5cd99790f3
- last_write_checksum: sha1:ab9017177687f0f272ff43fa0238172d526878ad
- pristine_git_object: 9ea0e1056bd1e0adce85cf9c39af993c1aae5e59
- docs/components/responsesrequestplugin.md:
- id: 20da7be12bb9
- last_write_checksum: sha1:0bb97c99ec4b7fd13321427b9aff9a2d8bb6d288
- pristine_git_object: d9cd71dbad8602ccffe96635c6e0950fccaabc1d
- docs/components/responsesrequestservicetier.md:
- id: 79d0f5c6bdbe
- last_write_checksum: sha1:759cbf960f90a2680f905be11049e8f88cf6ecda
- pristine_git_object: 9eff92befce7294a62c1beab6f47cf037a215885
- docs/components/responsesrequesttoolfunction.md:
- id: 834bf2b22f82
- last_write_checksum: sha1:d7719be37affe12852b150ffaabe6dbfaccf6ae7
- pristine_git_object: 98ae0961e2afdbf95cdc71e2eee23c9c06972889
- docs/components/responsesrequesttoolunion.md:
- id: d6a807777d03
- last_write_checksum: sha1:4a4794e3b931e824f43ff5590e0ed94f539b5140
- pristine_git_object: e57db617fb2807f716ce62195dfc96d5c34e828a
- docs/components/responsesrequesttype.md:
- id: 5bd80a5ef99f
- last_write_checksum: sha1:96aba92528f15b2e26760ec90539b8fd7a0e9cc3
- pristine_git_object: a1b8e6cfcbd056ddb1daf6fcf7f217afde717698
- docs/components/responsesstreamingresponse.md:
- id: 5d93a59c671a
- last_write_checksum: sha1:7fc7227e197939bef3c858dff903899922871187
- pristine_git_object: 49042a626076feb210b0f9ea38404bd7a1fc2d2b
- docs/components/routerattempt.md:
- id: 5444722011a3
- last_write_checksum: sha1:27a4f026961813e1714009c0248e10841ef23c01
- pristine_git_object: fbcb54690c8f245dfd518ff8bf0b86e50c1c464a
- docs/components/routerparams.md:
- id: c76ec52146b5
- last_write_checksum: sha1:1fa168fa76be11fd84bcdcb2beefe3323a2c0c40
- pristine_git_object: a76b529f381742a56fc9b4720016023bb2d84156
- docs/components/routingstrategy.md:
- id: 43ec0d203f4c
- last_write_checksum: sha1:7a52d9b52c61317a0b6c886adc920995550950c3
- pristine_git_object: 42c33d595afcaf94acfb4b04e188af4b5e266ac5
- docs/components/rule.md:
- id: dbcaf58c98fc
- last_write_checksum: sha1:8f3d1a647870ec092677bcff48ded8123b387c9f
- pristine_git_object: 5fda8b8e205bf5bda431c5bad8f32c3e014ed1a0
- docs/components/searchcontextsizeenum.md:
- id: ba037b375d32
- last_write_checksum: sha1:1802fbb5223f07b0db2e7503e12f59647b3608f9
- pristine_git_object: 75d3a14d662e8a753b6f8c02082582d16d854226
- docs/components/searchmodelsservertoolconfig.md:
- id: 4b60c7b1f071
- last_write_checksum: sha1:dc167ab001813af5bc0ae1769fe3f0ea15a75087
- pristine_git_object: a3dc6194e6abc9a0cc62bd9e20b7131fe106ab36
- docs/components/searchqualitylevel.md:
- id: a4e6b74956c7
- last_write_checksum: sha1:027c0155e4ca55866ca5ef9cc4851b3df09f5cb2
- pristine_git_object: 4b8fd627a27f792e0e88e0afe406d7a552143f48
- docs/components/security.md:
- id: beee40001fda
- last_write_checksum: sha1:45b7b8881a6560a468153662d61b99605a492edf
- pristine_git_object: 2e0839d06f821dd97780dc22f202dedf23e4efe1
- docs/components/servertooluse.md:
- id: e304ebc583f7
- last_write_checksum: sha1:99e277666646ff89adce836927c58d9021fa6677
- pristine_git_object: 2532d4cd15c0a21efce64ce42719d6b24aa0a063
- docs/components/servertoolusedetails.md:
- id: b14e315828c5
- last_write_checksum: sha1:2e4e747062c990a502a208c1c90382305e428fe7
- pristine_git_object: fb12e181963bb9eada3294d7a605b076f695ab58
- docs/components/serviceunavailableresponseerrordata.md:
- id: 6d65ecfd7ad3
- last_write_checksum: sha1:c0e9357b45a58f3da2d3520b502cec7dae5f3446
- pristine_git_object: 797c8310a34ec5ac85628fe7d60706221f14e573
- docs/components/shellcallitem.md:
- id: 7c90af9ed20b
- last_write_checksum: sha1:cff1a19c10dae4fc68503ede7de302401bb676e3
- pristine_git_object: 770148e5a9eb0f7d52ffa3f3ebbe0e6396f9d460
- docs/components/shellcallitemaction.md:
- id: 966c83480abc
- last_write_checksum: sha1:c8aa1528fafe1a7130a4b43faf90b6daee3f4e11
- pristine_git_object: 5e0455dc912e22c53d313ed5261530528d5efede
- docs/components/shellcallitemstatus.md:
- id: 3686c616a4ce
- last_write_checksum: sha1:5a462123fffcd6f4b60efe48d529739e32e246f3
- pristine_git_object: 62af9a8bf9f79ebddbec1ddab799b23156fb8315
- docs/components/shellcallitemtype.md:
- id: c193046e306d
- last_write_checksum: sha1:6343b1cd900ef6726449a15a2f4967be36c324d5
- pristine_git_object: 4bc6539fe90491885319b8bf597187c2f15ab8c4
- docs/components/shellcalloutputitem.md:
- id: 7c8d9a8d7145
- last_write_checksum: sha1:7dd6d238883f7e70f5b08b077788bcfa1521aed7
- pristine_git_object: f5c1081bbb1f26458d9ba51c78309185220d53fb
- docs/components/shellcalloutputitemoutput.md:
- id: 3d5419f14a4e
- last_write_checksum: sha1:929da03678fe61046fa1ef3cdb462981d3f90048
- pristine_git_object: 47c542cf09298d5bcd97b860d907f05a51fd17ec
- docs/components/shellcalloutputitemstatus.md:
- id: 4d98e96563c7
- last_write_checksum: sha1:88a3edc33171508aa9d35d9b145c992e00394d33
- pristine_git_object: 84c418c6101b4096a723aa749a226f7f78de644c
- docs/components/shellcalloutputitemtype.md:
- id: "070444798601"
- last_write_checksum: sha1:f210535e0c6e9daf9b7759ac2e39ba968f18acb6
- pristine_git_object: f6d8055010dd9a16f8782e543809c37efdddb93d
- docs/components/shellcallstatus.md:
- id: be740b54a4e1
- last_write_checksum: sha1:2e1f280e6569a2f61d6f01da005a305fa028e783
- pristine_git_object: dad7011f973dd74f1c8861646b144a34e499337e
- docs/components/shellservertool.md:
- id: 3e196aa5ad05
- last_write_checksum: sha1:0019a7a2fb5879826ca7db5b779c3dd8a4fcad68
- pristine_git_object: 3441e6b088fa6b063f308ae20f62fdbe3133c461
- docs/components/shellservertoolconfig.md:
- id: 5554d6e13211
- last_write_checksum: sha1:8b3c2f61e69dd323ee68cbcac927fce1e74b5e5a
- pristine_git_object: ae12ad791cd5fa7a58888f6321be6835d159a849
- docs/components/shellservertoolengine.md:
- id: 993a495122a7
- last_write_checksum: sha1:c8ef15b36c43a587cfc0ceed11e7542bd6515351
- pristine_git_object: 779361af63de499abb699349e9dc72d151c43f22
- docs/components/shellservertoolenvironment.md:
- id: 3f55c90141e0
- last_write_checksum: sha1:504ab93dbacbd06423aa17f3aa53e729c47a2c32
- pristine_git_object: fbeb69293a339d7bddc1e7f874b35cecafdcdbfa
- docs/components/shellservertoolopenrouter.md:
- id: f7717ab697b1
- last_write_checksum: sha1:f73e65cb25fd10686349f4a2c15b58eea55ea82f
- pristine_git_object: 82537f2b5dd34b6a04913a6a5337819cf5e18266
- docs/components/shellservertoolopenroutertype.md:
- id: c4d23c750571
- last_write_checksum: sha1:e6107df8c352862d9ff0991768803cea090ce28d
- pristine_git_object: 0a67ec31e1f41f5f4c47db26bb174a65cde14bd7
- docs/components/shellservertooltype.md:
- id: 2086eb6391e0
- last_write_checksum: sha1:cd5bcb2096f1315814b3e1575d9b61c65a7a707c
- pristine_git_object: f93562afef4e0a5650d347c4e02b69703cef8029
- docs/components/size.md:
- id: e4d18c7f0385
- last_write_checksum: sha1:3ee0ddd204fe2b2758b0ab883a37916d9af2ca43
- pristine_git_object: 4334c6b14cfc9af110ca8818ee954a7048ff7331
- docs/components/sort.md:
- id: 063e11fe2d35
- last_write_checksum: sha1:c8046f6bc1c8c61e823f49c846fe7ee6af3d0cdc
- pristine_git_object: 4b07bd1be51b737783b69c8b3d71725fd4484a25
- docs/components/sourcecontent.md:
- id: cd398c147ce2
- last_write_checksum: sha1:fa4c5eb6413b1b3439019994e24aeb1555b6db0b
- pristine_git_object: d1c78e0ac7ea698f51c656b0e273878f1e434de1
- docs/components/sourcetype.md:
- id: bd6802987652
- last_write_checksum: sha1:4584a8d072c0977ab588a830991c8c0ebe0fc285
- pristine_git_object: 7a5e671a65aae56cebe75e622bd37a6187bd74d6
- docs/components/speechrequest.md:
- id: c5cba48286f8
- last_write_checksum: sha1:956140ea1f1ae63bf64fb9ca7e300c836c2c3eaf
- pristine_git_object: cafc4863b5ddb822f56577f9261d8acc3b23803c
- docs/components/speechrequestprovider.md:
- id: ced2f821fced
- last_write_checksum: sha1:a7776e99fa108cff7503a505629410431b406784
- pristine_git_object: 8ff96a40984f7e52c277dde4e4b84c7f0c2c1446
- docs/components/speed.md:
- id: 90e63e8b808f
- last_write_checksum: sha1:92580f4a6da348806dba53839ecc2c37e28e887b
- pristine_git_object: e6a8e43475b211bb297606475c64371eac0ea9ba
- docs/components/stance.md:
- id: de29c9dfaf9f
- last_write_checksum: sha1:dea71169cc0952b4ccc4b6a9dac2b6ab105d55f5
- pristine_git_object: 99b44b33449f95bc5d476036c9cbd00a29634deb
- docs/components/stop.md:
- id: 0d74a157c3ba
- last_write_checksum: sha1:f1b797e3188274e4411a26f0934c1d455bd85bbb
- pristine_git_object: c36d91088664634eb753f5029f6f5b444fa92b78
- docs/components/stopservertoolswhencondition.md:
- id: 769cf0cd25f3
- last_write_checksum: sha1:58c37fc0bdfa1a3c7db9bcea2361caf5c2a5dbf3
- pristine_git_object: de9322bfef6487670132b126f5fb7ac99729e51e
- docs/components/stopservertoolswhenfinishreasonis.md:
- id: 7e749e31ca25
- last_write_checksum: sha1:be9bacefd9c297b7feb841c18343ce3b2b9fa2f4
- pristine_git_object: 800d87e74e3ff6da39e6294e7f637cf7505aaaf0
- docs/components/stopservertoolswhenfinishreasonistype.md:
- id: dd74a3118de9
- last_write_checksum: sha1:9c71e6b15c1772de990a026ff99339796a74d941
- pristine_git_object: dc28f19962ad5ea449165df1164a6057cd44ee96
- docs/components/stopservertoolswhenhastoolcall.md:
- id: e41cddb64798
- last_write_checksum: sha1:b65b8143157a46355cdcfc22e266e74d41cbc8be
- pristine_git_object: 880c6797f884bea550f85aeae4cdae73eba27a2a
- docs/components/stopservertoolswhenhastoolcalltype.md:
- id: 51be701d2bdd
- last_write_checksum: sha1:0c38bd9e75e755ce69f31b12d58ba27a1831749e
- pristine_git_object: 2e4e6dd94feb03f060a6c5b90c5b9907ed92506d
- docs/components/stopservertoolswhenmaxcost.md:
- id: c15f4ac3297e
- last_write_checksum: sha1:723b21e1a3216ec0c9a6c11eeda2c837d204dc9f
- pristine_git_object: 5f1fcd59c181c18f8d210e6f98e40a77fb342dec
- docs/components/stopservertoolswhenmaxcosttype.md:
- id: 0e8bac1cf9f4
- last_write_checksum: sha1:6dcc9c57204343ce2713796b6178aadd8c579375
- pristine_git_object: ae3b084d1cc40ac1532ff38bb4e1ae3d708684eb
- docs/components/stopservertoolswhenmaxtokensused.md:
- id: 917b0e40081a
- last_write_checksum: sha1:845570febc3bf81b79a9f95644b20f2104a86f14
- pristine_git_object: 08592938585ef5b4d1c4649c7025675d686ff48c
- docs/components/stopservertoolswhenmaxtokensusedtype.md:
- id: d105a1a72d0b
- last_write_checksum: sha1:5a7bfae491cb5701ba74a81d6f5718fdc7294989
- pristine_git_object: d123cf300e4ef8618f532297422dd765c414a518
- docs/components/stopservertoolswhenstepcountis.md:
- id: f62d9180e95b
- last_write_checksum: sha1:2108b3ba7ddf3651fa57f5832d3961d0fa71e8bc
- pristine_git_object: 6a04d819646907264c86bce476e00be165a6936a
- docs/components/stopservertoolswhenstepcountistype.md:
- id: dc639252cd87
- last_write_checksum: sha1:28b4861705aef19b8a99f766614bd9dbdfc9b308
- pristine_git_object: f42ef66eb75dff242524963317e00ead891c5451
- docs/components/storedprompttemplate.md:
- id: 3d993ee9614f
- last_write_checksum: sha1:71634e702b280adfe115e8bd6a2159c9eab2107a
- pristine_git_object: 0b3d0bcfd7082915b45ef9a4a8e74422857dd665
- docs/components/streamevents.md:
- id: bdfd7bf6c2b0
- last_write_checksum: sha1:bc6b66905697ce2589ab6ea247b1e834d6e0bc68
- pristine_git_object: 639fb4cd758757c7978a545c0373526a2fef01df
- docs/components/streameventsresponsecompleted.md:
- id: 072f9ee89867
- last_write_checksum: sha1:9f33add33825fc28ad93f36c26638728fc66712b
- pristine_git_object: 6b54a3a71aa8ab520f1fab362b3161a9127b65a9
- docs/components/streameventsresponsecompletedtype.md:
- id: ae6f4d1c656a
- last_write_checksum: sha1:3b4a811a64fa72506ce33739e0967cc50d7635ca
- pristine_git_object: ddfe3706869b6ba6c789baa92fc9e66080f2a80e
- docs/components/streameventsresponsefailed.md:
- id: ebfa5a8944e2
- last_write_checksum: sha1:92ee353537f9b1e02ef27f619ec94dfbed5c2114
- pristine_git_object: 06831d0d4ca5868c7e58a4f70809573901531fa3
- docs/components/streameventsresponsefailedtype.md:
- id: ce5db8088931
- last_write_checksum: sha1:e6547cd19f15667aa269e864274223eff2479c47
- pristine_git_object: 9125dac025d67a9b69e11924f9a825ac447a25a8
- docs/components/streameventsresponseincomplete.md:
- id: 615fa03678b5
- last_write_checksum: sha1:224c6ff052180c2e89f0e5a80ac298a1721cafd6
- pristine_git_object: 7676de4da6daeebec1424619a24083adcedd4857
- docs/components/streameventsresponseincompletetype.md:
- id: a7ca0c85090b
- last_write_checksum: sha1:bc6e0ac3818e418e766e8fe182a352e58cd3c41c
- pristine_git_object: df61d8e41d68f39dcbf97e315b1c9a6975052d7b
- docs/components/streameventsresponseoutputitemadded.md:
- id: 28063376bbd6
- last_write_checksum: sha1:d84fd33ceae3aec2af312c307dbbda470731dbda
- pristine_git_object: f03926c09d433fc5c50602a4bcf8131a5369d0c7
- docs/components/streameventsresponseoutputitemaddedtype.md:
- id: 2c10b4c3cff6
- last_write_checksum: sha1:a2681759bd42f5d1efcd7418d4696b3e91469ff3
- pristine_git_object: 0b946d656ae917db5b24fe4573ebc44b1dd2d64b
- docs/components/streameventsresponseoutputitemdone.md:
- id: 2f634ca953f8
- last_write_checksum: sha1:fc6ec88f01fb4c233126535ca52f2993b054b9fb
- pristine_git_object: cb73fd1340c48b1f9d67b146d987e9031b35f0e8
- docs/components/streameventsresponseoutputitemdonetype.md:
- id: 1436a667cd8d
- last_write_checksum: sha1:0d87b3b89f440a45cc887362809ea2f183dbebb1
- pristine_git_object: 9549068a77ad8f70f93dd6a911fc90982bb70ef0
- docs/components/streamlogprob.md:
- id: 7a144e910288
- last_write_checksum: sha1:447ce32765ca1afdc8bbe092b3d97fd0b48fd324
- pristine_git_object: dd537cd00feba3ba461fbac6f2070bdfb1c88f47
- docs/components/streamlogprobtoplogprob.md:
- id: b2f58ab0ba4b
- last_write_checksum: sha1:38b5fc345aff1c89059d223f85b31a717aa29257
- pristine_git_object: 4f2e093dd4ace184096b017431053be92051d471
- docs/components/sttinputaudio.md:
- id: a5385ca71d31
- last_write_checksum: sha1:57761225a6dff5c64ce2665b2540217a79ef49fb
- pristine_git_object: 30f9e955a9f6959e2d5ac10ab5217283d6dbb0f2
- docs/components/sttrequest.md:
- id: d8b35448e247
- last_write_checksum: sha1:1fbc9b9122417ac52db79870ca3cab8f066b867b
- pristine_git_object: 5cb4441df65c4a469e4189ff72a3c16e0e2b44eb
- docs/components/sttrequestprovider.md:
- id: 7d5372214ddc
- last_write_checksum: sha1:4e9537032283416751a1fd5cce41513d9c7b6899
- pristine_git_object: 8a0cf5047b57f735a8013388f5103f8a7c21f4c6
- docs/components/sttresponse.md:
- id: b2b5aa72221b
- last_write_checksum: sha1:50d1ac0fd4dd2455318ff68b8329d48c5436beb8
- pristine_git_object: bd49b0c41d764c6854d760cd7a7738e94e6e9df1
- docs/components/sttusage.md:
- id: bda939de1537
- last_write_checksum: sha1:e11351ee3e6d4a0470f28a611080c00e9eed11f0
- pristine_git_object: 8d8525a4e7947322cbc5b35d82f87d76d7157b24
- docs/components/subagentnestedtool.md:
- id: f1ac0bf22f13
- last_write_checksum: sha1:9c9c34831e5d2b73421281ac36cc2100d32d4f45
- pristine_git_object: 52cee326ba52e795dd864616e975da730b397630
- docs/components/subagentreasoning.md:
- id: 28eb0e1a766c
- last_write_checksum: sha1:0a2d377998ebc796f48259f9d81031aa3d62eec0
- pristine_git_object: 3e49330ffc6e7ae403873cfe3e8297ad188bcafa
- docs/components/subagentreasoningeffort.md:
- id: 068a2b1e59c4
- last_write_checksum: sha1:6dbeef8db7e15799fd0f87d4965ba5613a388396
- pristine_git_object: 57b95be94ff3162b0601124a9d6d9b49f49eecaf
- docs/components/subagentservertoolconfig.md:
- id: 07f1740a203f
- last_write_checksum: sha1:3175e6b1db4977f98195f30c6e2391092bc017ff
- pristine_git_object: 45a261d6ce97463045aa6d90765720108722eb99
- docs/components/subagentservertoolopenrouter.md:
- id: 0049c5a944d8
- last_write_checksum: sha1:70d3153bf5ff0d5c78747a6e684a126917fd032d
- pristine_git_object: f695a981599a6e45d91f4e6206010c8602884bb4
- docs/components/subagentservertoolopenroutertype.md:
- id: bf827ad8b352
- last_write_checksum: sha1:fcb3cd3c4edefc7071ed2c71b7801567b1f883cc
- pristine_git_object: f28523e50df8342437db36e0a98bffbfa69fefd0
- docs/components/supportedaspectratio.md:
- id: 435dd9a15912
- last_write_checksum: sha1:25a608572d10d4c76eb9e4f45e16494bea931120
- pristine_git_object: 3601360f723ac37ac09e4b5fcb22b1198089a0c3
- docs/components/supportedframeimage.md:
- id: ee9feca3fec2
- last_write_checksum: sha1:4ae34fbda72b5e31ea60cbd20b1a970bfca30056
- pristine_git_object: b2d0581008abf1dfee20454bfa7f0379d0ac9bfb
- docs/components/supportedresolution.md:
- id: b093756351e8
- last_write_checksum: sha1:1a1922f0e6b53ed4a83ad1877c318e2c0f53fa04
- pristine_git_object: ffb37fabf1622a890eff20193ffc86677a299f2d
- docs/components/supportedsize.md:
- id: 8322ab1a4113
- last_write_checksum: sha1:b037d4ca8c8a904d32ce03c73082ef2e55332d0f
- pristine_git_object: c0f8f57e0192934d7cd0473b66f921b4452c7e27
- docs/components/syntax.md:
- id: 0cf5ab254bc8
- last_write_checksum: sha1:632fc2775ec4066a2b1ee403579ff59bdddb4a91
- pristine_git_object: 4b82eb64344981f49f6a8fa220eb817427f4de78
- docs/components/system.md:
- id: f1ffffdfc6d7
- last_write_checksum: sha1:1eaeac4ce1ea4ea1be7b7cf0a96273b045208e87
- pristine_git_object: 2ce86be589fcdc3d210cd50c2373cd59a5e4c503
- docs/components/taskbudget.md:
- id: bedfcbf92d70
- last_write_checksum: sha1:c7add9b6d8e40f8303dc9575c51f21c333ad8883
- pristine_git_object: 097d7e4af92079998b9d9a1c0f0b0d55e63324e3
- docs/components/taskclassificationitem.md:
- id: 86b268b60a54
- last_write_checksum: sha1:7f07577fdff0a45be7f186d4cebff4227be4c928
- pristine_git_object: e03f5457debc455787309feea466d7cffd97ce31
- docs/components/taskclassificationmacrocategory.md:
- id: 98a4c75f676e
- last_write_checksum: sha1:63c894b788adec15f2df8e0e8dbdf97dc5b94c24
- pristine_git_object: cdfd3111becda570309e4a471c522fa7b02d07f6
- docs/components/taskclassificationmodel.md:
- id: d4b9a4653049
- last_write_checksum: sha1:3ee634a155a1b53602eb617e3afffc09dc18cb68
- pristine_git_object: 741953d15da9a7bcfcbc85ae7bd6ae954d88b96d
- docs/components/taskclassificationresponse.md:
- id: 2d2564e94621
- last_write_checksum: sha1:49ed0f9b59669a390346d22fa5c18e8d09964e07
- pristine_git_object: 285c5cbcef93a7aed10565461c2f6ee71367686d
- docs/components/taskclassificationresponsedata.md:
- id: 8aa33a036184
- last_write_checksum: sha1:1304391a25af40ebc87b37a62653d4775cfa24bd
- pristine_git_object: f674f29f1d324be9237f9d90897c998a78cbe439
- docs/components/textdeltaevent.md:
- id: 339fe3591c0d
- last_write_checksum: sha1:97aed7ba0e23221806738f4ed7819f8aec0db957
- pristine_git_object: 0929ae6c0924c9c18d7251b5a313fa9e1833b20a
- docs/components/textdeltaeventtype.md:
- id: 5974fc3de118
- last_write_checksum: sha1:e1528095a4d640ed17fb13afabb333dddc6d7429
- pristine_git_object: 9cf69c3b33abbe4d7deb38eb9b9c9636c31c45ba
- docs/components/textdoneevent.md:
- id: ff45b02ca7a4
- last_write_checksum: sha1:3d08617548c5be1c7a59cc5acb6694a94c04e013
- pristine_git_object: 6162d84b58909f01fe1f5aba123caf56cd407148
- docs/components/textdoneeventtype.md:
- id: f956af59ac8f
- last_write_checksum: sha1:8e6b985ae16c0f7d56415e3502bdcd73e698c1d6
- pristine_git_object: 5c73058b054429983632f0542af4fc0fb50300c5
- docs/components/textextendedconfig.md:
- id: 669e1815f825
- last_write_checksum: sha1:7751fbe499ffee299268428faa3a3c63a5541796
- pristine_git_object: b876df7514e8427c7eb7bacd42461924d5b0796f
- docs/components/thinking.md:
- id: a93790b9404a
- last_write_checksum: sha1:6a58a4baca88c3412b6ba1fafa59d32cd10ab9b6
- pristine_git_object: 2bc38abbe21e1f575fe29747077211f91c9b0330
- docs/components/thinkingadaptive.md:
- id: 6576c38e3b02
- last_write_checksum: sha1:4e5fdf88d78b04721fdc942c70b67b5f52b41f2c
- pristine_git_object: d6b0d7552450c71e2d0f8a12c4beae592e730574
- docs/components/thinkingdisabled.md:
- id: ec30237cdbca
- last_write_checksum: sha1:73296b3a0ab7efc43f175096d7dafb46eeb96557
- pristine_git_object: 78f2ea53080eb2bf0cfc292e1539429f6e1451a5
- docs/components/thinkingenabled.md:
- id: 28a220a73365
- last_write_checksum: sha1:784cb7e75b383ed2c288716830d701f2563feba8
- pristine_git_object: f8c28844eae476d93d80f9bb89812df998fe7988
- docs/components/timings.md:
- id: 458f7a6290a7
- last_write_checksum: sha1:2fb6a4822a5d3046868380d5d1e4a1a6fd096ce4
- pristine_git_object: dd5a0d0fbd9e962afc1b88cd96cf9f563c356ca3
- docs/components/tokenizer.md:
- id: f1ad3417d8d1
- last_write_checksum: sha1:4223f630f7d880b9288fb654f67817560fb2dbd8
- pristine_git_object: 3811d6eda7bcd0aee90a46b9091b729852d23b10
- docs/components/tooladvisor20260301.md:
- id: c326f487709c
- last_write_checksum: sha1:be03e557eee5ff2bbf363444af62e84848d28db8
- pristine_git_object: 387df6bd3e0fa12bbd9103cb75dc8c4052d1fbac
- docs/components/toolbash20250124.md:
- id: 2d02b2cc59b0
- last_write_checksum: sha1:b997a5d74adaf0799de43bb2e463f618f39a83d4
- pristine_git_object: 368ae7eb1017d84e7d7c5614acedc43c05eae2a2
- docs/components/toolcallstatus.md:
- id: a3331842b25f
- last_write_checksum: sha1:f1385923978aa4292c9db1baf735295706f4f3a2
- pristine_git_object: e3aadb1a488df23daa3344fca333bf3fe7637e4f
- docs/components/toolchoice.md:
- id: 0f8673cd3359
- last_write_checksum: sha1:c0b7546b9f2a2b4dde765c886acf6fa8bf087ed2
- pristine_git_object: 81c1acf0b116c9fbd7160fcc0bec16e4ff4f0bc9
- docs/components/toolchoiceallowed.md:
- id: 515dfd66aa38
- last_write_checksum: sha1:5729b49ee5f1736fc43e8046c57ebe65479b6cae
- pristine_git_object: 89cd22af3eb6da27984126ba7d6fd292ac49617d
- docs/components/toolchoiceallowedtype.md:
- id: 1609bc274da4
- last_write_checksum: sha1:10c591cedf1beea432a9ed7edf540a1fd62f9423
- pristine_git_object: 31f2f939e02ed27bdec9cbae6e3b9fd54b0876f6
- docs/components/toolchoiceany.md:
- id: 329c45e7c745
- last_write_checksum: sha1:0c5e06a797fde8289d1853427a97414cb77cfa6c
- pristine_git_object: 1d97dd327e0378ae7afbd3f2a3f63a94373944f2
- docs/components/toolchoiceauto.md:
- id: b0195e996d2d
- last_write_checksum: sha1:7f423eb8288f1d74b6d5c8529c5827f2d46276ab
- pristine_git_object: c5329d208bd06ba16d83d6b211f5c77c6c4af1d5
- docs/components/toolchoicenone.md:
- id: "609093552207"
- last_write_checksum: sha1:48f0085a77627460207f8334ac08ab44a9a2674a
- pristine_git_object: 3d214f4174c3656770e45e6cb65509f75c1ed335
- docs/components/toolchoicetool.md:
- id: 4b4670f42f5c
- last_write_checksum: sha1:a24cffff41c12ea968de471e69c3830d37c33b4b
- pristine_git_object: add9cee29d2ddbdb99dd6ea55b23bd45fc2a7359
- docs/components/toolchoicetypeauto.md:
- id: 77428d02228f
- last_write_checksum: sha1:afeed4369f26f8d5eac62dfc13766a1c8561d7cd
- pristine_git_object: 90186a165b861b87eba3a4ff1e1a9815e8836336
- docs/components/toolcustom.md:
- id: 5c4157c3303f
- last_write_checksum: sha1:4d555f784044439e3680bdcea3c95a4ca56f9f12
- pristine_git_object: ad300a37c159de397c2411245075845155580b23
- docs/components/tooltexteditor20250124.md:
- id: 87d4527bdea3
- last_write_checksum: sha1:711d221372eb8b269a00db38aa39b8eebe8a3b7b
- pristine_git_object: d32af256dc582c7545bea980275fc7bcf5325e7a
- docs/components/tooltypecustom.md:
- id: abeed67b2d9c
- last_write_checksum: sha1:b31b9b207ca5418d12159dd15f6044310a66f934
- pristine_git_object: 28fae13674075451b3005cd4110d3962e5acf543
- docs/components/tooltypeephemeral.md:
- id: 23f21a98cb49
- last_write_checksum: sha1:6537f1fa1044b6fc1db76fb295c033eaf93509ec
- pristine_git_object: 29a7af8f74b5116ab601ec1a1d962fd0df4bb53c
- docs/components/toolwebsearch20250305.md:
- id: d17a76b3778f
- last_write_checksum: sha1:aec669a083c731392638f96d2ec1e6fe713a4a2b
- pristine_git_object: 7235ad0a64e64abed4a46b445b8fc439a4fe146e
- docs/components/toolwebsearch20260209.md:
- id: 8c37573043e7
- last_write_checksum: sha1:d5a0312ccaaeae431e94f1e1dedad4ffbec938eb
- pristine_git_object: 709358efecf567ac1ea63d19f5e04cdd0ff893e3
- docs/components/toomanyrequestsresponseerrordata.md:
- id: f23681a41b53
- last_write_checksum: sha1:e5b3d8c0bced377d2da5cd4826d4fab9e45df3ec
- pristine_git_object: a957677d324419e4de813b33b88a76667d3ca940
- docs/components/topproviderinfo.md:
- id: c9e56036dd80
- last_write_checksum: sha1:4b25308beba5c14f49058889aabd27bcf025c184
- pristine_git_object: e66d615faf440dba26e666f28cb740a477df6e84
- docs/components/tournamentstats.md:
- id: 0be10d528a1a
- last_write_checksum: sha1:38e369f7141807de906f2af88d0c4956884319c6
- pristine_git_object: b27126b18386e224874a4186e801bb6c4fdcf818
- docs/components/traceconfig.md:
- id: 639fd1f6f967
- last_write_checksum: sha1:560d3f57a9f103eee587ab1f260548161658675f
- pristine_git_object: 95932dccc7672845937b71347c587b6910b3a68b
- docs/components/trigger.md:
- id: 026137ae5dbc
- last_write_checksum: sha1:d5b5ea6e1cc4672c0c3f5ee7be0f496a465f3c6e
- pristine_git_object: 01ff8134eea326b88d94714f12f1f53ac88281ad
- docs/components/triggerinputtokens.md:
- id: d923daf78fe4
- last_write_checksum: sha1:482b299cf9750de13143bc0d53544ccdf9bf0920
- pristine_git_object: d8c29f1015c9da62c444e68582fc8e0fd72e69a7
- docs/components/truncation.md:
- id: d7a54b499339
- last_write_checksum: sha1:3e9994693b154d14afe2e6cf5382ea956dd92c2e
- pristine_git_object: 5a04bd971f948fc59f1f35aedd09406a078c81a4
- docs/components/type.md:
- id: e97521853030
- last_write_checksum: sha1:bbb845cc877102b35f5a5f8bd974a5fbda8358ee
- pristine_git_object: 6eaadffee54251674359022b19b8e7ab020a8a3d
- docs/components/typeadaptive.md:
- id: 415c776df244
- last_write_checksum: sha1:e4d1e4450c22724c3661a14d5b66774ee78e0382
- pristine_git_object: 6103c75608da665a8d3c2408528847d21229f246
- docs/components/typeadvisor20260301.md:
- id: ffd939ffb0b6
- last_write_checksum: sha1:698eec2380c468672bf776f6d606c3a52832b079
- pristine_git_object: 32f33c6aa08f6be52970536b59bd225d5a4d8950
- docs/components/typeany.md:
- id: fd248b591992
- last_write_checksum: sha1:e40950c40b38ba6f4f81b56cf3b98ac9466cf6ea
- pristine_git_object: 459a918b93d9d44647f77836951f555ece286883
- docs/components/typebash20250124.md:
- id: 91dff659ac27
- last_write_checksum: sha1:9bc2ecc5f2d5eb7a0088484ce80e2ce8806b6ab3
- pristine_git_object: fa531097d7e1e2497c4eeb5c47d6811ac5ba1b00
- docs/components/typeclearthinking20251015.md:
- id: ef48de5e490c
- last_write_checksum: sha1:7ab65dd273eb4b0ac10842b5a64fd8377c1a856a
- pristine_git_object: f5c79c944359459d0942765f3621641a28aa00b6
- docs/components/typecleartooluses20250919.md:
- id: 182fff5b5397
- last_write_checksum: sha1:542821bc2faa4046a792684ada71bc82226a93af
- pristine_git_object: 875d6f2b1976376534d27e290ff01b536e958cca
- docs/components/typecodeinterpreter.md:
- id: a0ddc54bdcdc
- last_write_checksum: sha1:0ce1975a7bfeeb5bd2499dfd265528be8481351d
- pristine_git_object: 761e09a30b291600b670f94f41c404f40c81fec6
- docs/components/typecodeinterpretercall.md:
- id: 0753f817b4ec
- last_write_checksum: sha1:1f256664635f1a8ea45367cdd40d5e4f92a46418
- pristine_git_object: bc24fd4a7a4e7c6af170ee257707568d465a3833
- docs/components/typecompact20260112.md:
- id: 92d18a8b1a30
- last_write_checksum: sha1:da9568595613708e28728578ded7f90ff2c4a0aa
- pristine_git_object: 94f469437cbc98cc3260a44c2c021052ad56910c
- docs/components/typedisabled.md:
- id: 89ec4d0fd6e6
- last_write_checksum: sha1:3b077a12247487c47132ea576c581e7a495951bd
- pristine_git_object: 769369775df8f0c985322e7c9c7ff322337c2262
- docs/components/typedocument.md:
- id: 945438b35b55
- last_write_checksum: sha1:78e673159ab6d4f5699bc6a4591f70e2779686f6
- pristine_git_object: c53b6cd016af5118f66afe5c2dd4a014f3afccb8
- docs/components/typeenabled.md:
- id: c2d08c3615d8
- last_write_checksum: sha1:a2b02bbe0b013ba7f62963deffaa63ef0863807a
- pristine_git_object: d3cda22bc8b31d5742d4d064d2ee898283d41d3c
- docs/components/typeexec.md:
- id: 9332f4c34355
- last_write_checksum: sha1:81d4fc42cffcaec7c2e18fc66f0e1dd5a91e8c0b
- pristine_git_object: 4ff9323d12cc4a955ea055d422197294cacb66c2
- docs/components/typeexit.md:
- id: e6da6ba8165a
- last_write_checksum: sha1:597b0df8a353af666d26de06addbfb1ef77b40e1
- pristine_git_object: e3d9e438353136453e5792dd7a71f54f86e06323
- docs/components/typefilesearch.md:
- id: 75b395ec49b7
- last_write_checksum: sha1:80dc01b6e9862ce234d31d6b571ff6b61ab2db2a
- pristine_git_object: 36e3406f0b0d3ff96f949a4cac4b15f9081094f2
- docs/components/typefindinpage.md:
- id: 1ad664e7de56
- last_write_checksum: sha1:10a3f3d7d83ea85fd1e8bb6cd4bb442ddc548e29
- pristine_git_object: 14fa7857b732f987fce03ce6672ef11cec4f06da
- docs/components/typelocalshellcall.md:
- id: c01a4da422b7
- last_write_checksum: sha1:93cf3f4729dd2013bed102155df230927b46ea62
- pristine_git_object: 248bd685cf8ee49668fd66f214dd790fa355af19
- docs/components/typelogs.md:
- id: 2db9d386c665
- last_write_checksum: sha1:bef7fb6f13f0e7078fa25821b7d5787733569a52
- pristine_git_object: fda0dd30852f4d091b1e8d62590ed83bc1839e27
- docs/components/typenone.md:
- id: f5c65d139cc1
- last_write_checksum: sha1:e7e2f691060a401594c6b6827f5097e36226198a
- pristine_git_object: 65af7247aa09fc9ef7deb0f3d88cb5cf0f27a93b
- docs/components/typeopenpage.md:
- id: 3e349476bb3c
- last_write_checksum: sha1:795aceda2ea4559886aa768e536a738a42f49cc7
- pristine_git_object: 37b24080fbf349299ebecd8f7ee42a62c5c84de6
- docs/components/typeredactedthinking.md:
- id: 66da1f8a99f0
- last_write_checksum: sha1:acb0130a119170e4f4433de545b5b7f62edc9906
- pristine_git_object: bcd0eccc17d3fc0720f95d041c1bbe1f9e97bba9
- docs/components/typeservertooluse.md:
- id: 39a145bfa9c0
- last_write_checksum: sha1:a063583667dc896c09ad7a4a409a55ab30e06f39
- pristine_git_object: e44e231f3d6a6e7ef575f446ce3128b55b309b50
- docs/components/typetexteditor20250124.md:
- id: 0c9ccc78eae8
- last_write_checksum: sha1:6cb62ec0d396f6414fbc1d53be2a3d1b7297032d
- pristine_git_object: 40faa5bd85ef933c9aabb75c0cf83fcc48487d01
- docs/components/typethinking.md:
- id: 7d284aad692f
- last_write_checksum: sha1:16c9e397b9cb3d4fe3d7a76a8d6f0a68b3d69b66
- pristine_git_object: 4e3ebaa8ba503a56182e514efda0544b99375522
- docs/components/typetimeout.md:
- id: 5db9cd9d485b
- last_write_checksum: sha1:04a185b298997a51d771bbc2adc017e22876eacb
- pristine_git_object: 2690019f056788b51a8ab206e70a11b4181113ff
- docs/components/typetokens.md:
- id: 6bf6e7a52300
- last_write_checksum: sha1:e4e01d19bc76ff6c141be19dafb8fc8604cf1e04
- pristine_git_object: c8349b0862f0547272bf328b316ad77390eccfc2
- docs/components/typetool.md:
- id: 552d9661651a
- last_write_checksum: sha1:b70fc049771f74855f88ca30a01ac8324a5f516b
- pristine_git_object: 0a511f95f8523ee79f13cd6a943a04099eb6b59c
- docs/components/typetoolreference.md:
- id: 1a0a545b1ed5
- last_write_checksum: sha1:2209200b2a8aea60a1ffadea024ef7d5b9804ed1
- pristine_git_object: 598202dc2075a5eea769929213e5995ccb663472
- docs/components/typetoolresult.md:
- id: 51cc4a5bc7e7
- last_write_checksum: sha1:ce85158b3f5966cd01dc25a2e6fecd4cf49e3b5d
- pristine_git_object: 111cb61d65b8bd4ce815f9b24b1d715d1ba31195
- docs/components/typetooluse.md:
- id: 92ea28c0ab2d
- last_write_checksum: sha1:7b7355f56691372080eaf2fa90e39dbdbb1dbcc0
- pristine_git_object: 6d60b12d2c31f3bed496904947bf2c392ce16314
- docs/components/typewebsearch20250305.md:
- id: cd28bbf34d94
- last_write_checksum: sha1:caaccf4519225800895cf2ba54d76cf16d8f1201
- pristine_git_object: 25066f5c8e75a1bb7b7b547e14821373e47d22e9
- docs/components/typewebsearch20260209.md:
- id: e41c600ae535
- last_write_checksum: sha1:610fa0656c1b9536ec0b0078af995aa30b0efabc
- pristine_git_object: a9713155317f6f816c98df3f8f38dcca62a3ddea
- docs/components/typewebsearchcall.md:
- id: d4647ca78da9
- last_write_checksum: sha1:0abbaba9c6c9a3722f755516331a80d5a1e7aac6
- pristine_git_object: f0a4b732e87cc1880ca26a5c8981552488ebaeeb
- docs/components/typewebsearchtoolresult.md:
- id: f75b0d386cfd
- last_write_checksum: sha1:12aea02e87d46a2d8c58416efa6a8117c586e3b6
- pristine_git_object: 1fac4a2b15c8e3fa13e1a8c7ab3adeb11b9cdebc
- docs/components/typewebsearchtoolresulterror.md:
- id: 1b0e21594b13
- last_write_checksum: sha1:744a99475bea73bedefd3960f4afe9e85a72ff7c
- pristine_git_object: 104a793b64aacf93fbe0cdd341be8642bc5979ef
- docs/components/unauthorizedresponseerrordata.md:
- id: 79b657be05c4
- last_write_checksum: sha1:69e58ae8931fc723bbb4aa1212e50b97a83db709
- pristine_git_object: 1db2a3a9378d0eeb5de39f1d6621e69bbb7e0953
- docs/components/unifiedbenchmarkpricing.md:
- id: 2c0b1127a84f
- last_write_checksum: sha1:536d10a0997b62e031564acc91dd3d1dede8ae6b
- pristine_git_object: 02271ae5d1e6836b02869391fbc7a08df47aaa31
- docs/components/unifiedbenchmarksaaitem.md:
- id: aa98383cedbb
- last_write_checksum: sha1:0c5a943891afc1617252650b539aacda66219cb3
- pristine_git_object: 12ee0f9d6c843cabbeea35693eef407c7727e818
- docs/components/unifiedbenchmarksaaitemsource.md:
- id: a055d68005b2
- last_write_checksum: sha1:a2d31b611ef768ef91be865e6ad137219baa49c0
- pristine_git_object: 9c7155b69b81eb5b72455656962cd477716a5527
- docs/components/unifiedbenchmarksdaitem.md:
- id: 97ff97a53af6
- last_write_checksum: sha1:7e75867184c7835316e3dba6c41f99915d8f66fe
- pristine_git_object: 3b882c36e525b3f547b77796a644d7a533d3e275
- docs/components/unifiedbenchmarksdaitemsource.md:
- id: e45e347cc983
- last_write_checksum: sha1:7d8c239a56a8fcabf6c8633fd174c88d21bd612c
- pristine_git_object: 5690f32ab463b163e96353931423c22499ac17ab
- docs/components/unifiedbenchmarksmeta.md:
- id: eda2de5d8d6b
- last_write_checksum: sha1:defd88dbce795b757a855c25953109f91791ea61
- pristine_git_object: aced020dcc3fcc5c659bca9070063417ec3496d9
- docs/components/unifiedbenchmarksmetasource.md:
- id: 093d733c42fd
- last_write_checksum: sha1:e820ca0846602261b47e18ccca1005042ded4024
- pristine_git_object: bf52e964cd5ad79dde98693f436788f1e7c1a764
- docs/components/unifiedbenchmarksmetaversion.md:
- id: 883a12af05e5
- last_write_checksum: sha1:df710f97d758bb6403da1438fd81221a03142e64
- pristine_git_object: fa7abb7a34e41e9bba65d7e902d1bffbd431a7ba
- docs/components/unifiedbenchmarksresponse.md:
- id: 711086447b69
- last_write_checksum: sha1:6278d07a5e342097572f380e22c0af1c88070a05
- pristine_git_object: 1fa09b414027fbf850446167276ccc554f5446f0
- docs/components/unifiedbenchmarksresponsedata.md:
- id: df6d6262fae1
- last_write_checksum: sha1:42427d4695c2a5c5c66233b358442cd62e55e2e0
- pristine_git_object: 58d4d7d8c3b5943e09024f28b0444097ea6f8bbb
- docs/components/uniqueinsight.md:
- id: 8f721a7538ef
- last_write_checksum: sha1:d1955a3237b8047e074df6a6cf0e158beeac10c0
- pristine_git_object: 3395cb6ae241647ad498206ba1672bc3e4a1f7fc
- docs/components/unit.md:
- id: 0b0f1341f4ee
- last_write_checksum: sha1:b9ff7dec614b495c5512b9228d018dda7d78fdc9
- pristine_git_object: 42e2fb33a744ffbb03cbae27c94401c51f0d83c0
- docs/components/unprocessableentityresponseerrordata.md:
- id: 6a36f0c9d959
- last_write_checksum: sha1:b7adc7ae81b79cb1436c8f85b45283fe52320d81
- pristine_git_object: 9ccd3c05cd75915c70aa542bb16e2a8f77bb91cd
- docs/components/updatebyokkeyrequest.md:
- id: becd5448c41c
- last_write_checksum: sha1:dad56bab9cafa3ab09b991405b99890dd8ed311e
- pristine_git_object: 3ba251530ef4197679144f0450533cfae53896fb
- docs/components/updatebyokkeyresponse.md:
- id: 9c195fcdf7c8
- last_write_checksum: sha1:c1400c74ef85a28d1518dfb7e4155b207f4ccafe
- pristine_git_object: 72b248c783a837f608d0f26e3f5131ec8ef656cd
- docs/components/updateguardrailrequest.md:
- id: 5a0fb143eaab
- last_write_checksum: sha1:7e86cb67d68d86de79ed2a09e5bfa9bade67a524
- pristine_git_object: 8a5ae8e2eee5af62d829b80dc312e799efea2e5a
- docs/components/updateguardrailresponse.md:
- id: 311d3e7a185a
- last_write_checksum: sha1:03a1e96329ab0131421009b3998829ca0ff4d8da
- pristine_git_object: 338512bc5662726c1f9ff37ce027766df603e4ef
- docs/components/updateobservabilitydestinationrequest.md:
- id: 09fc92bba8dc
- last_write_checksum: sha1:bb43e703f91c5eef0a65bbc0c9db3355f0211097
- pristine_git_object: 0112efe4cb80ff21b24f2dcdd2f9cecfdee15fa5
- docs/components/updateobservabilitydestinationresponse.md:
- id: 7551cf74a0b6
- last_write_checksum: sha1:aa6b4016d0db43f9f7c8e1b8e984c3349338eb0b
- pristine_git_object: 6b3b9ab84b3cc98d6648bfbaf48399311ae68a70
- docs/components/updateworkspacerequest.md:
- id: 0fa61bf22fc1
- last_write_checksum: sha1:75b0020fcacd32f5d0a5c286f6aacf5e16629222
- pristine_git_object: 1a32c6cc0ac510fa2bd47a81360731a10e8e46c5
- docs/components/updateworkspaceresponse.md:
- id: c8e4b8fbf004
- last_write_checksum: sha1:4e63930baddcd5f65ac3d196921b1a45447a4fd4
- pristine_git_object: 186cd5625964da06544c8e8c64f2b42d14e4c85b
- docs/components/upsertworkspacebudgetrequest.md:
- id: 57e1c9eb8e8f
- last_write_checksum: sha1:0559515a8ae1582cc6982427af87fd2db1212e07
- pristine_git_object: fe0db6174a474e9a11f1e3fc16b59f4083f01298
- docs/components/upsertworkspacebudgetresponse.md:
- id: 6cee3e174986
- last_write_checksum: sha1:d79979dc9629620dc7d61e88538da20284b70efe
- pristine_git_object: 158cf6425e205280a67416bb0eb07c265e7c244a
- docs/components/urlcitation.md:
- id: 02c4f88e5f51
- last_write_checksum: sha1:ad99ecbc1692453215c8ee9a79fe1ae6a98a52f2
- pristine_git_object: 385629f965d79dc4da084784236a3d9a50072066
- docs/components/urlcitationtype.md:
- id: 7631f8ba867e
- last_write_checksum: sha1:6723ca63815f15e697b2e8ed1febd1bc0da0beca
- pristine_git_object: 2b6e38f54f447f8fc794d3c35c1a0bc690cc4d2e
- docs/components/usage.md:
- id: 15e3eea02540
- last_write_checksum: sha1:2f9b8740c46b8e1a69dc9ad0b891352ded5e70e2
- pristine_git_object: 76a1d443818ff4471133dff00127bfed468f3eea
- docs/components/usagecostdetails.md:
- id: eca6fb6e3ba5
- last_write_checksum: sha1:368d21231a591747d2340e023b6983c195da4aa8
- pristine_git_object: df2c8ace4895ed1a54e919643d4cd3c9187b3d59
- docs/components/userlocation.md:
- id: 29641029acf6
- last_write_checksum: sha1:e2295be925d9064a6125f5ba48a692a345ccd247
- pristine_git_object: e06fd727345b790473b48236b9248418cbf3ca79
- docs/components/variables.md:
- id: ad5d1b284346
- last_write_checksum: sha1:30ebb41e8bac9a8d817b2c0ab0a9e9fded4a73ee
- pristine_git_object: 0698d06289a06a6cfcd35f7069f2ef64a0aa0e25
- docs/components/verbosity.md:
- id: 0a9da5ac382d
- last_write_checksum: sha1:76ec453c1e767ce0f8c76afc0617cdc7ff29b60c
- pristine_git_object: cf10c9e56352e1ef074e794b915639774a0de872
- docs/components/videogenerationrequest.md:
- id: cacead3ac9fe
- last_write_checksum: sha1:5f2a97129c791a736378af0331c8800da3e555d0
- pristine_git_object: 8306cca5a6a8740243cd1bc49409bfd4b8e58891
- docs/components/videogenerationrequestaspectratio.md:
- id: 8183ceeab79d
- last_write_checksum: sha1:8aad3355b02e6578e57dc64355c6e51fcb44f763
- pristine_git_object: 16659f24b21051064e5fc6addbda9ebe73650a01
- docs/components/videogenerationrequestoptions.md:
- id: 6d200b026e3d
- last_write_checksum: sha1:0b25700301c18aa273ec8f564d20e53064296e36
- pristine_git_object: 91b1436ae06dcdd8b699bf8ea4f96c5daea1d027
- docs/components/videogenerationrequestprovider.md:
- id: e2a64e74f555
- last_write_checksum: sha1:f0461ead71e8c146e9ba4fcfd1cdf3383828f125
- pristine_git_object: b7e2128738d513fcbcadf9ffaec2e655c4e26419
- docs/components/videogenerationrequestresolution.md:
- id: 96bb24160b25
- last_write_checksum: sha1:c5180c8900165f2c87fe36de22f6d5e695371dfd
- pristine_git_object: 1af61111d11241b9c536e60ed23ffdcf4a375d33
- docs/components/videogenerationresponse.md:
- id: adbbd66af4bd
- last_write_checksum: sha1:52c73fc2047792e3194f316e3182a96f8c7b85f2
- pristine_git_object: 547f9b54b17ebeedc0c566fcafe94729fe5c451e
- docs/components/videogenerationresponsestatus.md:
- id: 0a331c7f4b7e
- last_write_checksum: sha1:a8ce41f7e0a7705f003de671e29bb7ac7b320676
- pristine_git_object: bcde5432dae5013cab462aac0369c2dff823f87f
- docs/components/videogenerationusage.md:
- id: cb8b5821f432
- last_write_checksum: sha1:58a8026e2941e2f600deedbcb53b3291fc0e1443
- pristine_git_object: 3fa07286f36acbe1da47693095cee40bbed0e017
- docs/components/videomodel.md:
- id: 903775781ac3
- last_write_checksum: sha1:57ceaa8e35d7fa680d60cfde192ccf533f7a287a
- pristine_git_object: 6d5b334bc3301dab11d1d8ec1a436d58cb8fcaac
- docs/components/videomodelslistresponse.md:
- id: 6a46f08aab47
- last_write_checksum: sha1:63812cb97f0ba13e4e9e0e524fb82edccecca061
- pristine_git_object: 45a68af199ccff5747b446511dd9fc1c550a4d34
- docs/components/videourl.md:
- id: 8e3963a8a140
- last_write_checksum: sha1:0417712247858caa6c2f97a88af261c1df28e492
- pristine_git_object: 5bd5dec60112a90b0446b741a0605c8f86810e4b
- docs/components/webfetchengineenum.md:
- id: 7e88b8695736
- last_write_checksum: sha1:72e9ed36b036c9941a4c794792a0c178612b9e68
- pristine_git_object: 3b14fb1be02252d483c5a5aabd9b3925c97acc49
- docs/components/webfetchplugin.md:
- id: 6db78951ca01
- last_write_checksum: sha1:c87f9026861d2440d6fc26fa43683faf6589321b
- pristine_git_object: d14046ff7191801dc0baf1644825501ea7b341cf
- docs/components/webfetchpluginid.md:
- id: 3471fca5a6e4
- last_write_checksum: sha1:fbf3474fe1f77e30179bc491c2a6a232f450dad9
- pristine_git_object: ca2c54ce2cc82f23b39fc813496fd8e227f32d07
- docs/components/webfetchservertool.md:
- id: 16f65007e382
- last_write_checksum: sha1:377497147ada29f671b0713981227fb8e1dbf7db
- pristine_git_object: 2152aba006b34b1d758e75cba8cf141d7af54223
- docs/components/webfetchservertoolconfig.md:
- id: 96f1a4842e80
- last_write_checksum: sha1:f6af2cfd146b482617e9f1f2c2744cd51f3eee49
- pristine_git_object: ef5c85c64b9e12c17694978820702418d272aa76
- docs/components/webfetchservertooltype.md:
- id: 23175d499624
- last_write_checksum: sha1:7072da0ec7dac5426abd235fea4347695ab176ee
- pristine_git_object: ea6c00679c7118ddcb43185fc5f34ee01c148be2
- docs/components/websearchcallcompletedevent.md:
- id: 8c338a61bc9d
- last_write_checksum: sha1:b46bf9e0c87df24c83fba70f4a0ca91648680c22
- pristine_git_object: 7e6a5f174cb429ee9d6b655c2d167b790029f03f
- docs/components/websearchcallcompletedeventtype.md:
- id: 1a502d610554
- last_write_checksum: sha1:56512eed2eaff1c4cddda33efbaeab3dd2322e5c
- pristine_git_object: d62999f7bc2df383fa86043fc57b563175844420
- docs/components/websearchcallinprogressevent.md:
- id: 31189749d1bf
- last_write_checksum: sha1:0f869934eaba165fbd6253c960413f03f9112814
- pristine_git_object: d4701a43a722261c86f9dff43180c8c5ec145a54
- docs/components/websearchcallinprogresseventtype.md:
- id: 15a11ab4c4b7
- last_write_checksum: sha1:f9d645c8458d7246b351f653c7058d343e53f640
- pristine_git_object: 41ae71672238c0c6e34302f7b692ed71d315dde6
- docs/components/websearchcallsearchingevent.md:
- id: b182331a02b6
- last_write_checksum: sha1:7a911e2abc45c00fd91a0c187d3256aa88f50aed
- pristine_git_object: 95d1b4e6cb9d5c649252977d600be9888534af1f
- docs/components/websearchcallsearchingeventtype.md:
- id: 652bc30b0248
- last_write_checksum: sha1:debb8eaed5f86bac53f74f3e61380b2235470795
- pristine_git_object: f1771d0b194da9cadcbe7176c43059189745af44
- docs/components/websearchconfig.md:
- id: 3fcee95e24a6
- last_write_checksum: sha1:a0f40cc1b3eaac5400ef08a41abf4cb3197b63d3
- pristine_git_object: 9d49a0dbf79dd8042939f2b1282863c623a295c9
- docs/components/websearchdomainfilter.md:
- id: 47d067b8286d
- last_write_checksum: sha1:bc0207fdf5478614ee90906ce70c42e57506378d
- pristine_git_object: 49047767ed450538e956901a7a1bab92099a9493
- docs/components/websearchengine.md:
- id: ec8b8ee1236a
- last_write_checksum: sha1:888cad8aaad95b2303bc85a8baa09276ee391607
- pristine_git_object: 8772c8f29a972acaefab0adc329db053ae7dde62
- docs/components/websearchengineenum.md:
- id: c7543e4c8464
- last_write_checksum: sha1:1793a4a3cb9a9517b99a6640640d0afbe791197e
- pristine_git_object: 8a28ed0821e632fce98f29e8041f99d35616017c
- docs/components/websearchplugin.md:
- id: d6baf3aa0a96
- last_write_checksum: sha1:cc37dce50cf180ddb4d6ece96993600f0d73eff2
- pristine_git_object: 9f5b99bc633585ffa43baea8a53d371b05261a1c
- docs/components/websearchpluginid.md:
- id: 0b025727cb2e
- last_write_checksum: sha1:b8da5b1cb0bcc0e2e067e6d09f5e2b51a77d0592
- pristine_git_object: b0913dcfee22f1204335350b9b9bca75db27c821
- docs/components/websearchplugintype.md:
- id: 027b51292738
- last_write_checksum: sha1:4a13256166d1e2f00901f55e8500e66686730b07
- pristine_git_object: a64310784046570184cdec6d848897351c112b30
- docs/components/websearchservertool.md:
- id: 92cff6162ede
- last_write_checksum: sha1:1f082ae55d53189151ae477c9aee041db4c59945
- pristine_git_object: bad50a618e5bd9cea960a2af560e73eb4355c552
- docs/components/websearchservertoolconfig.md:
- id: 03a09e9ae532
- last_write_checksum: sha1:31b03cd6d5d462ac27e385df8d76389921e15aa5
- pristine_git_object: 130714a171340c5f0ec321dfa3f8686313441f39
- docs/components/websearchservertoolopenrouter.md:
- id: 34b36452e3b3
- last_write_checksum: sha1:c3676ba15e24d124c35c69ed20af393f10bc111e
- pristine_git_object: 94a42fd05fbbd0453d936b9ac4b52f97c8ff0d95
- docs/components/websearchservertoolopenroutertype.md:
- id: 709a7a44c3c9
- last_write_checksum: sha1:a2b894302d879e185fdad29ab6911c7a9b72f6ca
- pristine_git_object: d126a4d405d71415b5b467b17810f2d97148d463
- docs/components/websearchservertooltype.md:
- id: e16d860cb061
- last_write_checksum: sha1:505ba5b2c7ccccd75f531f163f5077916e2f1c63
- pristine_git_object: 13b6311489f87d206fe37c2b6446f7b0e8626547
- docs/components/websearchsource.md:
- id: 5b395a085271
- last_write_checksum: sha1:e267ac945598e9f5d6004c17aa4379da17d18f27
- pristine_git_object: 1a71cf6dbff45789196f28a2acbdb0c7a3d199b9
- docs/components/websearchsourcetype.md:
- id: 45feda8e9988
- last_write_checksum: sha1:bbdaeec6e80d646148f777b1cfc403131ad64eec
- pristine_git_object: 4e69352b3dc18b87383f39a643cc04f7f7085752
- docs/components/websearchstatus.md:
- id: b43113e03655
- last_write_checksum: sha1:b94a253e70c37b3c6aebaeb73b9956335e0b97b8
- pristine_git_object: 53303ec32abcff22251468692cf0aaacd746e307
- docs/components/websearchuserlocation.md:
- id: dd5e502d8105
- last_write_checksum: sha1:745b267e89093e0381da08a657f7ed57df85fa18
- pristine_git_object: 678c7653c10d98a575a20208d824170418a1950f
- docs/components/websearchuserlocationservertool.md:
- id: 10b54200c690
- last_write_checksum: sha1:e2121866212d004cb58952bcfe2fc71c1d51245d
- pristine_git_object: b5fe52e94455874fca43426e9802363658284874
- docs/components/websearchuserlocationservertooltype.md:
- id: 9418ba6655a0
- last_write_checksum: sha1:195a53255f2c1f20a1dd978730b9b772c7f2d987
- pristine_git_object: 4a651edf31ac91e41fe187540f9082fe7b28d7d5
- docs/components/websearchuserlocationtype.md:
- id: ac432a0db67a
- last_write_checksum: sha1:6b322242229459f409a83243db53ff8069fe1a3f
- pristine_git_object: 8213d86aa4dea092924605829dce95a1f31b0897
- docs/components/workspace.md:
- id: 0a15ff43e01c
- last_write_checksum: sha1:a44aaefdf977be3defda943f7a0a6b78726a2e10
- pristine_git_object: fc03d550582e7ac86ba51c17bcb5568961b7e631
- docs/components/workspacebudget.md:
- id: 198f3bbc68f1
- last_write_checksum: sha1:11ae43ff3f27368b1df208a59ac59c1a63cf71cd
- pristine_git_object: e81bbc2599570fa6ac128589339ce9fd4ee39780
- docs/components/workspacebudgetinterval.md:
- id: fb5636fcf587
- last_write_checksum: sha1:f76896980f894a79caeafeacb10be4702865fc67
- pristine_git_object: 9e4108b48e17662f6f238eeccbe2c0a5edac6993
- docs/components/workspacemember.md:
- id: 250baf73019f
- last_write_checksum: sha1:d0079b9edc10857c5d2fd55b8122851e235dec21
- pristine_git_object: 31e122462373cfbb603a4e35d88810743e9e585b
- docs/components/workspacememberrole.md:
- id: b6a965f120c4
- last_write_checksum: sha1:3315f44ee8ccfccabfcf89f32cb7d585864593be
- pristine_git_object: 00592d06a5c490ccce759f0b259f756f3f11c104
- docs/errors/badgatewayresponseerror.md:
- id: 32126b40d635
- last_write_checksum: sha1:223852bbefa4599b01ff0e8e716cb7216231c99e
- pristine_git_object: 5bd359e8668e33d05ec94cdde74c51206a047dc7
- docs/errors/badrequestresponseerror.md:
- id: 557cbbed2def
- last_write_checksum: sha1:9ebfd0bd854fb3be7bbc9cbc6a49869f874caa75
- pristine_git_object: 6bb5d84d7ebcf391108ed791db32bebf16e37d2e
- docs/errors/conflictresponseerror.md:
- id: a6291cc4fcfb
- last_write_checksum: sha1:7f65dd130bb9a265070827fd2cbccd34faaef440
- pristine_git_object: cebaddbb10025814671f5f33b8dcdcedc19b5acf
- docs/errors/edgenetworktimeoutresponseerror.md:
- id: 2e06bbd77e57
- last_write_checksum: sha1:5dac0d2c35bc6f172cf34f89be8c8bb50311a722
- pristine_git_object: 3720bcc7c6d7b8e30fb81336aee6e56efc202d55
- docs/errors/forbiddenresponseerror.md:
- id: 7decb227f487
- last_write_checksum: sha1:1ed86d541b2413d207f720c6723cb12231ef9904
- pristine_git_object: 8015439adc3dbb0fa36b2f2d470d518e10d538a3
- docs/errors/internalserverresponseerror.md:
- id: 7e8ff7f684b2
- last_write_checksum: sha1:d2dba8365a2592a3c5b2053e6df9aba954f6ab5c
- pristine_git_object: 5db18a9b30b04f9e85e989cf93af56f0c13205ce
- docs/errors/notfoundresponseerror.md:
- id: 24546e4ae2b1
- last_write_checksum: sha1:3489bbfc7d8524f7bc00416d368d08c88cb693b1
- pristine_git_object: 3f377475b54b415589c2f495c6c46dd424d111c6
- docs/errors/payloadtoolargeresponseerror.md:
- id: 11b7364bb388
- last_write_checksum: sha1:49e52c253b21fafc9c7ed83b392b601a2db2e9d3
- pristine_git_object: 5027338f1f76f8eec7e121e3f89a907c0fec1764
- docs/errors/paymentrequiredresponseerror.md:
- id: 1df8bf21f2ec
- last_write_checksum: sha1:438c021020ba04a6c6356a49b10101f4948290da
- pristine_git_object: 974318969fccd04206b3dfe1e45d9300e11df85e
- docs/errors/provideroverloadedresponseerror.md:
- id: bae15be73247
- last_write_checksum: sha1:c58d85a79ac15626d09d2f13ca2596f4d804fa9a
- pristine_git_object: 7a2e57818215a8202cc331c9e4ea718996fc334c
- docs/errors/requesttimeoutresponseerror.md:
- id: 8d026980f8a1
- last_write_checksum: sha1:3447ecfc92466e9de0e2265e0d084ba9b3edf662
- pristine_git_object: 4029799436c103d71c9d121762666b0c36f8e77a
- docs/errors/serviceunavailableresponseerror.md:
- id: 4673e5ccf763
- last_write_checksum: sha1:5b4c28adfc9b5f12aad217a77536ce413c72ec0f
- pristine_git_object: ac2fed91a62ad9e15c353bc71a90822ddfff2e65
- docs/errors/toomanyrequestsresponseerror.md:
- id: be0bd7d3b18d
- last_write_checksum: sha1:d645a93709eee394d9e70ee740c4feeab9aaf450
- pristine_git_object: 294f69579f46ea917d03236b5c6123c3681819cc
- docs/errors/unauthorizedresponseerror.md:
- id: 500194829c27
- last_write_checksum: sha1:17503cd8d5eeec97b9d674b9a2bdcace9902e5a3
- pristine_git_object: 50d78da46455cb36f7dd14165dea80e77e542717
- docs/errors/unprocessableentityresponseerror.md:
- id: cc0e37e6516e
- last_write_checksum: sha1:dfef75a5f9094b0d9bfab11d7ccfb2bbf371bbb2
- pristine_git_object: 77b55729e28c297a11737222fea74063314f5cee
- docs/models/internal/globals.md:
- id: 9c173b87f41f
- last_write_checksum: sha1:eb08bb4e1e88b4fd1740cd6737a7f5752a101c85
- pristine_git_object: 5b30448a3426ad7642d4e814f231b6970a1ec214
- docs/models/utils/retryconfig.md:
- id: 4343ac43161c
- last_write_checksum: sha1:562c0f21e308ad10c27f85f75704c15592c6929d
- pristine_git_object: 69dd549ec7f5f885101d08dd502e25748183aebf
- docs/operations/arena.md:
- id: a9de99ef2b33
- last_write_checksum: sha1:e512fec90170ea812bad81c221a6537e2ef92f15
- pristine_git_object: 1714dac53f131a38cd5cb11e270e5500b0740280
- docs/operations/bulkaddworkspacemembersglobals.md:
- id: 6cff183f93a1
- last_write_checksum: sha1:39941ebc9a51b0189aed03680e2168e25b7c9692
- pristine_git_object: f4a5325dcf71a943b6b1d01679587f2b0b291fd3
- docs/operations/bulkaddworkspacemembersrequest.md:
- id: d8246fdf3e0b
- last_write_checksum: sha1:156694bd17ba999b2ce0886da7153e7d349beea7
- pristine_git_object: df933fdfe35d136462f083cd40afb3d997171024
- docs/operations/bulkassignkeystoguardrailglobals.md:
- id: 10cab63c9a95
- last_write_checksum: sha1:5c7983931ef784a72f7dfec732eb7809d352c313
- pristine_git_object: 1b45a8531b22e0412e5e23d8d3491930a208f73e
- docs/operations/bulkassignkeystoguardrailrequest.md:
- id: 17f1b1837a1b
- last_write_checksum: sha1:715a1938733348e231c60adeba04a092ab98128f
- pristine_git_object: b179068885d6054fb62a8d980a736de77a79eb4c
- docs/operations/bulkassignmemberstoguardrailglobals.md:
- id: 5d30b7e9c735
- last_write_checksum: sha1:0830f7c17c8ab7961e54910742628de069d22871
- pristine_git_object: b970409d4cd5c37ada32927921add3b2b0f013c2
- docs/operations/bulkassignmemberstoguardrailrequest.md:
- id: 6d6c7e9ae12f
- last_write_checksum: sha1:8aa5702d46c01c87db1df7624b5125ee9bbc8edc
- pristine_git_object: f15474f24f02a38716f8c83f74a501a3dadef26a
- docs/operations/bulkremoveworkspacemembersglobals.md:
- id: eca056a05e51
- last_write_checksum: sha1:eb2295ca61d2b6f430119c3e42a3cda4958b2fea
- pristine_git_object: e2a1edc52f0035b6d0f55403fc5ead2e351f2499
- docs/operations/bulkremoveworkspacemembersrequest.md:
- id: ac8eba8ae2ab
- last_write_checksum: sha1:ca7f3d49baa41f7996bff82eb7a6cae01fb3275b
- pristine_git_object: ee134f45349379dd00569354b8aaa2a6d1aed373
- docs/operations/bulkunassignkeysfromguardrailglobals.md:
- id: "491635767122"
- last_write_checksum: sha1:06e7a6b0f052e73e5cacd480e3bff8ab7756d0b0
- pristine_git_object: 8472ab41760bcb0767280a0af1b4c2ac27ba4ee1
- docs/operations/bulkunassignkeysfromguardrailrequest.md:
- id: fece8f279cf4
- last_write_checksum: sha1:55f7ca24a3fdd43a4699213b51174bb5b235a3b5
- pristine_git_object: eb2cae6eadb71d04625eaaee1b5953397a922aab
- docs/operations/bulkunassignmembersfromguardrailglobals.md:
- id: 0fcd5a2477df
- last_write_checksum: sha1:82475eb0c237f8fa9b1672684bc441c5ef5beb95
- pristine_git_object: 5df6bb6d4a2f35ddeefd0064318d867dbe4f078c
- docs/operations/bulkunassignmembersfromguardrailrequest.md:
- id: 682c7ea4ed8e
- last_write_checksum: sha1:964acf8bb04f507c264602c68c77cc1d59c268d5
- pristine_git_object: 31832c55a3f01279e7609124fe1b02e640f6af51
- docs/operations/content.md:
- id: 33ab0eb04a0b
- last_write_checksum: sha1:c4d2c8081f9275dae2e19c1d5ce3074325a4d5e4
- pristine_git_object: 22aef15930d1f88538534310e6304c0aae726531
- docs/operations/contentimageurl.md:
- id: 8e6b0dcac568
- last_write_checksum: sha1:0a8701c28d0de7adef8ac51053bc5f701a26aca5
- pristine_git_object: 7fedfe3061beb273e5beb8893ad16e0b6feb34ac
- docs/operations/contenttext.md:
- id: 01cceb61d42f
- last_write_checksum: sha1:7e1d73bd30584d55f4b116737c15d7c73cdf6a3a
- pristine_git_object: 522f4978a3c4e1d1c0d197b541fc57e745b7d4e7
- docs/operations/costdetails.md:
- id: 777b240173de
- last_write_checksum: sha1:b2748fc0cf305791446f5f217947d82bd74a8350
- pristine_git_object: 58a1aa8485130f8b49c633dfef0439b83a5f239c
- docs/operations/createaudiospeechglobals.md:
- id: c67d64f11ad7
- last_write_checksum: sha1:a0026b1caf2268dd4a79177fa2bb630eca1498b4
- pristine_git_object: 0fbd4f1ad17604e5e31b457c0e3073d5389539c8
- docs/operations/createaudiospeechrequest.md:
- id: d3139a0713f5
- last_write_checksum: sha1:dd894ff1ac1021c4202c1e8197f2a7b5d7d856d3
- pristine_git_object: c1ca2b7336e47fe365a59cebb643e9a780d44e7e
- docs/operations/createaudiotranscriptionsglobals.md:
- id: b58641464e34
- last_write_checksum: sha1:cfc998017937ba731fbc1584d199b9668d8e08e3
- pristine_git_object: f505a7180aca4ca2240cbecfab2bf5d464c6be34
- docs/operations/createaudiotranscriptionsrequest.md:
- id: 9a2ff1044ad2
- last_write_checksum: sha1:de442d138768324f36e046817b44719ba4ac6274
- pristine_git_object: 8fc1edc9df06004768f5dfa12f1f2fbc5d02dfad
- docs/operations/createauthkeyscodecodechallengemethod.md:
- id: d598c7da9363
- last_write_checksum: sha1:3b81340adcf218991f7829e692e64f484763de2b
- pristine_git_object: cd496b740a0d914d6bf01b0b8c734440719a7126
- docs/operations/createauthkeyscodedata.md:
- id: de024dcd716f
- last_write_checksum: sha1:426b07933182096ad16766e8e7c630d04d841878
- pristine_git_object: 23309c756a702fc275ee80203355ac81a3cc7a9e
- docs/operations/createauthkeyscodeglobals.md:
- id: dc07458757e2
- last_write_checksum: sha1:56a8ab12e43378b06746682f6ff831f9edb18452
- pristine_git_object: ab7e4e55f571f6299de54543c004424e37cd4090
- docs/operations/createauthkeyscoderequest.md:
- id: 7cbb14ff950a
- last_write_checksum: sha1:fc31d57a0b91cb76c150ff359c25b9d4ea239205
- pristine_git_object: 6dc06174a0f72d4b4d0f22bc88a3f8a941e7666f
- docs/operations/createauthkeyscoderequestbody.md:
- id: 402f2065cf8a
- last_write_checksum: sha1:2d5fa5f4aa05e78535b8b90a2d73667b08d38dda
- pristine_git_object: d37c21942ce85a11a1be7d9f8ed11279e2255554
- docs/operations/createauthkeyscoderesponse.md:
- id: 6c92952aa6b6
- last_write_checksum: sha1:9f9f0dd11d268a8bb27e9f6f99ce41da757e23fc
- pristine_git_object: 8951a7ad215a64f23e5510b216b921b5c66d002a
- docs/operations/createbyokkeyglobals.md:
- id: 0a27dcaca263
- last_write_checksum: sha1:9f87d6f4c4d4d6ffb067f3b0ce0903eff44f6f9f
- pristine_git_object: c21b83643818552bb4eb163702160821ece0ec8c
- docs/operations/createbyokkeyrequest.md:
- id: 90ead629163d
- last_write_checksum: sha1:c335d0b21af453917aedfb235e86ed9a9b29329c
- pristine_git_object: 75282c50c48b157cbc9dcd9c06692ad2b1ecba8b
- docs/operations/createembeddingsdata.md:
- id: b2123807ad9d
- last_write_checksum: sha1:0d1867d420c85221d76dad11143ffb836c66cd6c
- pristine_git_object: c473e71e3ebbdd11adb1c7728048ed3f638838f2
- docs/operations/createembeddingsglobals.md:
- id: 57210fb0e38a
- last_write_checksum: sha1:82fd92d8da52017a2e7892b5611af5168fe65a7a
- pristine_git_object: 13b9e13d3c25a43c492fae346593bbbc46b52580
- docs/operations/createembeddingsrequest.md:
- id: e680f1daef8d
- last_write_checksum: sha1:e3c7fe36419ff4d4bbe1863758d36f475aa0172e
- pristine_git_object: 9b7a73a661c2906bd071dabd90a6c273d19e2125
- docs/operations/createembeddingsrequestbody.md:
- id: 1dc1b7920b56
- last_write_checksum: sha1:e47df5a1f79d110f04cc5c032bc51ce06f35db36
- pristine_git_object: 9ea89389ed108b5cd93815054337619e4138231a
- docs/operations/createembeddingsresponse.md:
- id: 1314e0c18f0d
- last_write_checksum: sha1:3585e9e490549efb1a71dfda28e0faa41b79eeea
- pristine_git_object: 4c379be00bda8bdaa67de03470f76141803cd62c
- docs/operations/createembeddingsresponsebody.md:
- id: eb2fea5ac750
- last_write_checksum: sha1:52e719372697ab752bd9913606432527e08cd5bb
- pristine_git_object: 1ff75cb8fa59d2b7b756ea07e9f5849995b62435
- docs/operations/createembeddingsusage.md:
- id: 2dc99973f6c7
- last_write_checksum: sha1:292de8b3a80697b56a961d2eb7f97d54dd29c4ae
- pristine_git_object: 639fb7e305ff27786b6ea858b425e36aaaf20252
- docs/operations/createguardrailglobals.md:
- id: 34f5b2a17330
- last_write_checksum: sha1:a43fb357b9c08974befd14a79da7623e72bc3245
- pristine_git_object: 862c3641250154a3e227d020738f893d316d391a
- docs/operations/createguardrailrequest.md:
- id: 2d8932b329b3
- last_write_checksum: sha1:e03ea14af1abe30c5dc38323a824a91fa817bc2d
- pristine_git_object: 74958a262f7d16b3cd8166b0a80a832d44b3df03
- docs/operations/createimagesglobals.md:
- id: a5e3bc55fcda
- last_write_checksum: sha1:46b4241b2368ab79160dd347eae68445df55d0cd
- pristine_git_object: 5b67f3639d1cf0a543f9f9930d1cae61b423c4e0
- docs/operations/createimagesrequest.md:
- id: cdafaa0c3856
- last_write_checksum: sha1:17f63228061ce2f31c6631edb2536255ffb129b9
- pristine_git_object: 26a6d04520f3711a61a53f121c89e2f4cbd693cc
- docs/operations/createimagesresponse.md:
- id: 42e21d45bf02
- last_write_checksum: sha1:1d13ca55ce05a64da61acdfe71d878d91df777f4
- pristine_git_object: 58bc07e6d75f13d766e336b9f868a8486d52d187
- docs/operations/createkeysdata.md:
- id: 903a6d611ab2
- last_write_checksum: sha1:78eb64a7cc6deeb3959adeb0ca705826f5f47005
- pristine_git_object: e60eaf9f45abcfdba122a7b04d1c66be31af48fa
- docs/operations/createkeysglobals.md:
- id: 15dd52d4443e
- last_write_checksum: sha1:032800ca0e8b56a1819431b9b27fa09a5b4b09c9
- pristine_git_object: 6fea46171bad0253ad1bbf47ffda4eba140b2019
- docs/operations/createkeyslimitreset.md:
- id: d2e99ed5a672
- last_write_checksum: sha1:1fd9511db6c28a2a7c6968ff0157f4e33fcbc982
- pristine_git_object: 5d1659c4ceffd5282b3fe7a4c106fff641af722e
- docs/operations/createkeysrequest.md:
- id: 57f03f411f99
- last_write_checksum: sha1:16e94df473652f8f4438f519ffcf7b8c238559ba
- pristine_git_object: f587de752afc6f5f82d55ba4b80f6d59336db24a
- docs/operations/createkeysrequestbody.md:
- id: 9aee51637cee
- last_write_checksum: sha1:dbd509a932f74e85a237fa1f4a2fab4c78af6c89
- pristine_git_object: e63e997bf3d6eba579db664fba80bd295c145f17
- docs/operations/createkeysresponse.md:
- id: 42bb3427e12b
- last_write_checksum: sha1:e113e49e9b3aa54f0d8021d13be59fc533830a7e
- pristine_git_object: 91744f3dce817f96d0f5bb44af9988f4c54feac2
- docs/operations/createobservabilitydestinationglobals.md:
- id: 5d04001d9dd4
- last_write_checksum: sha1:08ec40545e26db7b90f2d29c087f485bf6cba9bd
- pristine_git_object: f6dbf1e02de879b2f2f5e2873b7ac311a6cd7044
- docs/operations/createobservabilitydestinationrequest.md:
- id: b8af7ad57eab
- last_write_checksum: sha1:ebf76d176db49f6dcd8b7cea933006d671ad04e8
- pristine_git_object: 37828e9e81d70f7df4cef3e34bc3388bf15a2513
- docs/operations/createpresetschatcompletionsglobals.md:
- id: 24849c276ba0
- last_write_checksum: sha1:d8083152fad53bcf5f27f753e07fa4f9d1ef6567
- pristine_git_object: a7fd674b0d04a19c059452656b52579eff342197
- docs/operations/createpresetschatcompletionsrequest.md:
- id: 3793b30f5163
- last_write_checksum: sha1:4733d12274632c718f8eef9e1956d843ffc15e02
- pristine_git_object: 1c5163aaed00356c7c9843adfd6ea25227f2f1b8
- docs/operations/createpresetsmessagesglobals.md:
- id: 26efd69591bf
- last_write_checksum: sha1:f08ae40a0e765f3e2fd372d9ddca086059af24da
- pristine_git_object: 52fb2642e2de1e7583273f5fa8974027612572f8
- docs/operations/createpresetsmessagesrequest.md:
- id: 901c27e4fed4
- last_write_checksum: sha1:1205565ac74a7b732dbea1a3e7a44c5a4e6d20f4
- pristine_git_object: 5d38bb0442f5b580eece56e7a26df6ce5bfe8bf2
- docs/operations/createpresetsresponsesglobals.md:
- id: 4e82c55bd48a
- last_write_checksum: sha1:5013dad752f28dbf0ce175fead64b947ea4501a1
- pristine_git_object: 0a102fb9f72ade6b8c57d2da849dca1e5f890103
- docs/operations/createpresetsresponsesrequest.md:
- id: 44fdbe26701f
- last_write_checksum: sha1:73da0511dc38879192337c75bd21a60bc74d311d
- pristine_git_object: aacd56ad9f5c8e4bad0802a8c6eba00b97e36dbe
- docs/operations/creatererankglobals.md:
- id: 46c967a0d2ba
- last_write_checksum: sha1:9dffe3342695ec66163cb83423f441d527d4e561
- pristine_git_object: 8651948c5053890686a408a39dfe62e1ecb62714
- docs/operations/creatererankrequest.md:
- id: e0a2523b2d23
- last_write_checksum: sha1:2071d69e87661cd661b951bf24ef36a6971e560a
- pristine_git_object: cd88d08f3a6d71c88f56912d5a739b59cff0804d
- docs/operations/creatererankrequestbody.md:
- id: 8456551b3ea1
- last_write_checksum: sha1:80cb06901c4dec44c0a0f77880307235b2695645
- pristine_git_object: 4fa5cb9b85bc3343a9a6b91a425d3dea606a1d15
- docs/operations/creatererankresponse.md:
- id: 1b5f55b55e69
- last_write_checksum: sha1:426209e05c118111316d4486c9cba821bd88ab77
- pristine_git_object: 0b28bf7096289a1ed51ef83ccbd06641efe5fefb
- docs/operations/creatererankresponsebody.md:
- id: f1f58657dfa9
- last_write_checksum: sha1:b845d6dafa286dc879ebc16d32586b061744634c
- pristine_git_object: 57159c5385db02707ad1fc38c701ffea818b0d84
- docs/operations/creatererankusage.md:
- id: 1e5c3b94d7d4
- last_write_checksum: sha1:b868206dafba854b524d1a4f1f2f283628fe28da
- pristine_git_object: 42682414d583eb0c2cb26ec7ebbe302e969d980d
- docs/operations/createresponsesglobals.md:
- id: 9ea14f11bfeb
- last_write_checksum: sha1:9586d395012468f47af06b82c7fd6f71b52bdb9c
- pristine_git_object: 265872cbb44f436ced32612e7d880ad31d3fa41d
- docs/operations/createresponsesrequest.md:
- id: 98a355410675
- last_write_checksum: sha1:944f01fa8b720b943632a555d728c9a76d873671
- pristine_git_object: 87238b0b77a7ad408b560adbccc541afd8fcffaf
- docs/operations/createresponsesresponse.md:
- id: a3d80d6706a3
- last_write_checksum: sha1:b02dd81018eb73c7761a32ead8011abff17d9962
- pristine_git_object: 5c515b1d273af54ccbf5e3d32b1677cbe867a1f2
- docs/operations/createvideosglobals.md:
- id: 356f4c73b7c4
- last_write_checksum: sha1:c639cea73f4e6c596f5b1fe567fa9b0c584caa6d
- pristine_git_object: 5a2167c582c16eb6d2811f5e5af20246798fd110
- docs/operations/createvideosrequest.md:
- id: b8190b2b48e4
- last_write_checksum: sha1:ccf223bd7e2958b01032fffc328ba43f0e6bf260
- pristine_git_object: c9ce4f85e23827bdd48ebb8bf00525343eac73ce
- docs/operations/createworkspaceglobals.md:
- id: bb43600a84d0
- last_write_checksum: sha1:431ed0e1519765d8b94d50ac991a64f6e6241513
- pristine_git_object: 1f46dbb7552fe39db8fdf7209d9d5287f808bfa4
- docs/operations/createworkspacerequest.md:
- id: 9aebad99652f
- last_write_checksum: sha1:26e3648e75871274c27e60ed42715d7434223819
- pristine_git_object: ac92a748a5524ccb683ffb32dce19de3714a0e37
- docs/operations/datacenter.md:
- id: b08a21cce65c
- last_write_checksum: sha1:9f399d250c42bff63295881990961f871a36b8a9
- pristine_git_object: 51549248259fddd4e7822f3ceda9f972adfdef86
- docs/operations/deletebyokkeyglobals.md:
- id: 1d1c3a465a49
- last_write_checksum: sha1:f32106a0fc76aa4d3cb69534d5ce194b89307559
- pristine_git_object: 4c6957088dc54ca56dee767ff12dbefee4699a40
- docs/operations/deletebyokkeyrequest.md:
- id: 0f7d1a3cad77
- last_write_checksum: sha1:31a3faafb0bed58823054afcd7956cf9e3881266
- pristine_git_object: 0ddbc912f8cb861cee8e1806d1324541e0e637de
- docs/operations/deletefileglobals.md:
- id: 47ec2f40c8e9
- last_write_checksum: sha1:06807ac545024567e53306d34c2d065536ec05eb
- pristine_git_object: 9b34d571d0fd52d1dbe1d6c30ff1fce3accb3d34
- docs/operations/deletefilerequest.md:
- id: 9e780e5a62c8
- last_write_checksum: sha1:d402693b03224324a6f71a13b510a7176d53a322
- pristine_git_object: 6fc40ff3b1ec6999d5ee5af3c974a410c7be3ef0
- docs/operations/deleteguardrailglobals.md:
- id: fc24ed3e100f
- last_write_checksum: sha1:303b76381d6ae26e8d39c5470d35bfbbbb5df0df
- pristine_git_object: 8b3caa0462646cb84d12e677169a29c2f535620b
- docs/operations/deleteguardrailrequest.md:
- id: f746c227ab1e
- last_write_checksum: sha1:f2ae275087247cb5df753ba94a6a922304ee7fa5
- pristine_git_object: 14aa025d53ead8b0c2f7d64b4a25bc2424261622
- docs/operations/deletekeysglobals.md:
- id: b6346fb0dd73
- last_write_checksum: sha1:6e15f083ee437e9ed5f60702bdfb893b0b863d53
- pristine_git_object: 0bbd49855930a9f997e1f7a6941e393e4b1dd987
- docs/operations/deletekeysrequest.md:
- id: 604f8b4a8be7
- last_write_checksum: sha1:70312fb7dd966699ade23b4ce1d865ec241ea648
- pristine_git_object: 61b97141c70a2a86eecf5a492e59dcd131ec8f25
- docs/operations/deletekeysresponse.md:
- id: 843ae03c4c33
- last_write_checksum: sha1:3e34ea65b5397e4d1203306e4a08f12023ebfba2
- pristine_git_object: cc7cddbdde6e0f31ddbec25b8a01e7ece0b8e04c
- docs/operations/deleteobservabilitydestinationglobals.md:
- id: 320854972cd5
- last_write_checksum: sha1:cd2b58536565b300ac1b8a1963809a5eabb1bdb2
- pristine_git_object: c4a9578900390adc5977342a0f6872ad5703d5f2
- docs/operations/deleteobservabilitydestinationrequest.md:
- id: f6e046bcfc29
- last_write_checksum: sha1:73e6898e9509d0cab70df26d3ffe4ab74fd01af5
- pristine_git_object: 538528d0c188a3e3b295a61231d017a23c13e923
- docs/operations/deleteworkspacebudgetglobals.md:
- id: 87689e418851
- last_write_checksum: sha1:cfdc49f941d57744c2601377bf478c2a8f2c3e21
- pristine_git_object: a42b7035a7917b3cbc26c523c855df8318980500
- docs/operations/deleteworkspacebudgetrequest.md:
- id: ecdaa4b4aea4
- last_write_checksum: sha1:98f66bb1fe0910b84528bbf9d284eb01f409060b
- pristine_git_object: 1528dd7d7f64808af792b1f424989eeb508a8aa9
- docs/operations/deleteworkspaceglobals.md:
- id: c9f40cc89b0e
- last_write_checksum: sha1:4131177651ca5ad33b7160b2f4b8ff74e2233152
- pristine_git_object: ef29294eda583f20fa40d5a544537cb72f1e98d8
- docs/operations/deleteworkspacerequest.md:
- id: bd62f5b93ebd
- last_write_checksum: sha1:8bd64edf9b0684036c34ab258b95914d46cf8520
- pristine_git_object: 980bab8fc4db27e0e7ef13f8799e0abd3ce8054e
- docs/operations/dimension.md:
- id: e9f30dc36c7a
- last_write_checksum: sha1:a8598023d4ff603ab6a4fc630eca4aff603b417e
- pristine_git_object: f1211356413148df1ac44fa0e80cd42d2d6e9df2
- docs/operations/direction.md:
- id: 7ba091522c14
- last_write_checksum: sha1:acbf6523b76ae4f9eb60cb9f61c525300135992b
- pristine_git_object: 339195f5b5e267ad8dfe3d912169130ca7205fa6
- docs/operations/displayformat.md:
- id: ad242fff7e06
- last_write_checksum: sha1:1b2aee0301442f0d1cd0cc187da805775033cba3
- pristine_git_object: dd278a8c74326eb0b1636e8d1c74bd24b0cfed31
- docs/operations/distillable.md:
- id: ab4b4fcec736
- last_write_checksum: sha1:11ce4c3bdfd7a3aca4e94e2bbf81318acd845f9e
- pristine_git_object: 77fb765c6ac1a5588d6f96fdcc0d3f57635f72c8
- docs/operations/document.md:
- id: 640b715eb2a4
- last_write_checksum: sha1:e5354408ae5ad862afda9ee12e58ae51ee2b99b4
- pristine_git_object: deaad6c3d45766316174ea050f127401f31b1c93
- docs/operations/documentrequest.md:
- id: 08ce1217bc41
- last_write_checksum: sha1:4c57c2ba76821c5d40267660da2d061abe55c297
- pristine_git_object: a55fbb16dc7f4404fd56275df881c72fdb57d723
- docs/operations/documentresponse.md:
- id: 1dbe219e966f
- last_write_checksum: sha1:aae01d1323240685b2f38f0409b18530fbe8193d
- pristine_git_object: bb8bfba10d72c9a749611ba87413df6f06e068af
- docs/operations/downloadfilecontentglobals.md:
- id: 40cf7c83ef44
- last_write_checksum: sha1:85802c7eddba33133a5d3913a23db467049fb01c
- pristine_git_object: ba3fc09c424898cab0279dc5cf8abea7c3fba7af
- docs/operations/downloadfilecontentrequest.md:
- id: f23fbce569ce
- last_write_checksum: sha1:f3a2a8aafd962f49a181f7ea6518c4b9780cf422
- pristine_git_object: 31be67d10cc2e2f7964f9bb5dbb608d9375cc973
- docs/operations/embedding.md:
- id: f269f99ee6d5
- last_write_checksum: sha1:37c64f7daf2ddca055feafab8df92acd112976f3
- pristine_git_object: f6344cab1c59e1be2b221d42c09ee4fe4ea8b69c
- docs/operations/encodingformat.md:
- id: 3ccae4d8f099
- last_write_checksum: sha1:7b7792741089194d996848dccca2144db1e2ca3a
- pristine_git_object: 7f532c1c211071ca34ca8d2fa9296a94af0192c4
- docs/operations/exchangeauthcodeforapikeycodechallengemethod.md:
- id: df7142dcee15
- last_write_checksum: sha1:abf90e37d86ba401850965e0837d590fa7cd7d14
- pristine_git_object: eec31e8c5e222b872db0c53aef3dac3889879b5e
- docs/operations/exchangeauthcodeforapikeyglobals.md:
- id: f25fc784d760
- last_write_checksum: sha1:3ba6407369e5bf7d202eeb18036af247392ac51b
- pristine_git_object: 91c87730d951c0b1d89bb4f876e3b2552127af81
- docs/operations/exchangeauthcodeforapikeyrequest.md:
- id: 88d7fb3e304a
- last_write_checksum: sha1:88d2ce3d649aec2ef9b61bbd370f124cb0539c70
- pristine_git_object: 05bbc427c28921582f5bf67af31c6eb685502bb0
- docs/operations/exchangeauthcodeforapikeyrequestbody.md:
- id: d4dadfc0846f
- last_write_checksum: sha1:0a2aa24a4d45ed66e6b2c39e47f684ef4bdfb65a
- pristine_git_object: 6361a13cacd0f7e6d72eba0e7fd912cde7251a54
- docs/operations/exchangeauthcodeforapikeyresponse.md:
- id: 62e36bd89583
- last_write_checksum: sha1:f1f06cc15b7bf183358c6de9aa6351b70ca5e8bf
- pristine_git_object: 11975e02a266c09b4c6c77409c7e8a42fe7cb537
- docs/operations/file.md:
- id: fb72601b883e
- last_write_checksum: sha1:ade4d3c908c664a07a3c333cc24bc1bfb43ab88b
- pristine_git_object: 37cc418f9e5189c18f312c42060fd702e2963765
- docs/operations/filter_.md:
- id: 99a428faae78
- last_write_checksum: sha1:50fd6effa0c74b5da3f11c9a62ad18f418f74904
- pristine_git_object: c6abf133fad31236d881d4ee0d6364691d209818
- docs/operations/getanalyticsmetadata.md:
- id: 33ceb2682f42
- last_write_checksum: sha1:58248c8e08a19c77e1b7a1269928e7e1e9fc7a7a
- pristine_git_object: b9e1c5a16c11d4d4d6697c15ee90ff17e6928e4e
- docs/operations/getanalyticsmetaglobals.md:
- id: 470b157773a5
- last_write_checksum: sha1:85d2f05090d37ec85f5a9be647326a5dc2a03c22
- pristine_git_object: 532cfc24f8768a637d5da91d8dd7fd9744fae665
- docs/operations/getanalyticsmetarequest.md:
- id: 6ceee9c0ed9e
- last_write_checksum: sha1:8c17007bc351f887b4ca09a836c691b829bde461
- pristine_git_object: 751b08b78b201239f5a98ab606e8222f1638b4c3
- docs/operations/getanalyticsmetaresponse.md:
- id: c18398ae7125
- last_write_checksum: sha1:8e7f71dc5ca06ffe4033f47bbe33ca2ebdeb7e72
- pristine_git_object: b21d5534d8ad35fd0a5bbdd3136b63ae0c75423d
- docs/operations/getapprankingscategory.md:
- id: 598b9ca46294
- last_write_checksum: sha1:74d76e21a39a083a6ab179002648ac218724b902
- pristine_git_object: 4d33545692c4cfd7c4bcac32bccb812a08fa7eee
- docs/operations/getapprankingsglobals.md:
- id: 6cc30d444669
- last_write_checksum: sha1:b0e0a24c467a13814a96971210a82d462825b208
- pristine_git_object: 7d92111badf45247134c84f13cfe5f823f000d7d
- docs/operations/getapprankingsrequest.md:
- id: 9578b7b3d5a9
- last_write_checksum: sha1:c8160407c9423397deb77966250d630ff0ff4035
- pristine_git_object: 0d36b5103163108872a278ec906169b238637dee
- docs/operations/getapprankingsresponse.md:
- id: 197177f42a08
- last_write_checksum: sha1:083fff141eba4473501bf2c5f8e3b077399cc281
- pristine_git_object: 69f3a432383f6823843958ae5cd6a4b300867b64
- docs/operations/getapprankingssort.md:
- id: f6276c91ff17
- last_write_checksum: sha1:9c80418c5384e63542ea16aa336c3bfe54c23b64
- pristine_git_object: f0d402fbc8b66cc075706e056fd152e41e141c3f
- docs/operations/getbenchmarksglobals.md:
- id: 18c553c31212
- last_write_checksum: sha1:99f5c115ff5fd28f04cb80fe4dfa280f12c7c68b
- pristine_git_object: 215e03e822bc8d9945711a5b08bdb1790617dd3b
- docs/operations/getbenchmarksrequest.md:
- id: 0a40a540bba0
- last_write_checksum: sha1:8102900af82a582c56bb903d521fddf4bc7bea8e
- pristine_git_object: 3bf4626faebe849aa85814be508bc820c74a0868
- docs/operations/getbyokkeyglobals.md:
- id: 82a8cd8db21c
- last_write_checksum: sha1:4490949622267f537def903fa3efe64142925739
- pristine_git_object: f2fe5e4320b22e90fda49f1476cd4a8a5a5a4f26
- docs/operations/getbyokkeyrequest.md:
- id: 0415f890e75a
- last_write_checksum: sha1:0ee7c46f0cbdd349f1b17a1e2275bc7a6aeaaa54
- pristine_git_object: 99b01898e72b7fcd892c7fae0707a295e36aea2c
- docs/operations/getcreditsdata.md:
- id: 57e01e9078b5
- last_write_checksum: sha1:0f1d133fe4045e1b1d0e494e54bbb02b76d16607
- pristine_git_object: 9ba4582d555e52c1542c1a1660434dd987ca5407
- docs/operations/getcreditsglobals.md:
- id: 83a1f9872049
- last_write_checksum: sha1:f0d59e9efe86e551f1a5ae616ccdf92cfd195860
- pristine_git_object: bb29d2dafec61744be14e47cd7b3c08b6ea2c23f
- docs/operations/getcreditsrequest.md:
- id: ca7cc8201079
- last_write_checksum: sha1:973b453d2a248ad281a95309de874c1fca385fae
- pristine_git_object: f86e9758b6715315067659ed0adb0c6f4d94b92d
- docs/operations/getcreditsresponse.md:
- id: 9dd4a021eebd
- last_write_checksum: sha1:36204666197a35bd352d2e2414f2d993748d01e2
- pristine_git_object: a58a336fb17cd33196da51df89c7803ba0cba363
- docs/operations/getcurrentkeydata.md:
- id: e357cfe8cdcc
- last_write_checksum: sha1:fa6a289f008033a17c6dc0c78d2536cd8996b1c0
- pristine_git_object: dc97980a9d3769df52334def41931e1281d82fb3
- docs/operations/getcurrentkeyglobals.md:
- id: 9d0a1314955f
- last_write_checksum: sha1:3aaff7ab31036ad4edb525577759ec52c430e180
- pristine_git_object: 905f7d1dd7692126131c8dbb99a5204b39b06f4b
- docs/operations/getcurrentkeyrequest.md:
- id: d1cc7ac5a986
- last_write_checksum: sha1:f3df133d4942e098df43ef7b6d2bb4ac91a5b2d4
- pristine_git_object: e20974606ebe165785b5c3cf7a392d3acefcceee
- docs/operations/getcurrentkeyresponse.md:
- id: 37af8951de4d
- last_write_checksum: sha1:1e62836ec19a8aad8b0dcafd7799b71250a5c6f7
- pristine_git_object: 2855d5b95d41a494bc7ffa9f85c74ff27a46ca96
- docs/operations/getfilemetadataglobals.md:
- id: 2d5d096e7f7e
- last_write_checksum: sha1:9bb4324ec2eb4bdc590dd11587ffd8382b03fd27
- pristine_git_object: 75e2f6c313dd6b7b10e85312cb696e0d9d99175a
- docs/operations/getfilemetadatarequest.md:
- id: b47b5ebc4684
- last_write_checksum: sha1:8650f381ccdd0b4f936c1d54e36496437548f6e2
- pristine_git_object: dbb1ad6578af3d162e73adaa1f3a1937eddebf69
- docs/operations/getgenerationglobals.md:
- id: 0d6e856c5861
- last_write_checksum: sha1:b5236815132dedf2b595fd520f1753d5ec8bb6e0
- pristine_git_object: 842003596b344b8b0ce3d74f0eb05e8157b4a4de
- docs/operations/getgenerationrequest.md:
- id: c830d67c6a95
- last_write_checksum: sha1:508adc1d9d3a03a5b6d12515ae9dd8f0b5b1c2e4
- pristine_git_object: 8c54a7a47635c68bb980670de08a748d076a401a
- docs/operations/getguardrailglobals.md:
- id: 6cf14d555b8f
- last_write_checksum: sha1:025d0a3b53ce5603d5d262a5db3ac54b5ce981d0
- pristine_git_object: 63bf9d69b85cad246cd1d5a2ba4ae47d9c6c4566
- docs/operations/getguardrailrequest.md:
- id: c105f1324d76
- last_write_checksum: sha1:a0b3242a5fd017bdc1819eadc5e74b40b8e7bc2a
- pristine_git_object: ad49c823ffd11b46d8a8ce2a67eed5bd71d09db8
- docs/operations/getkeydata.md:
- id: 4fba05263947
- last_write_checksum: sha1:914831859afa885b63cf4d8a252ae16997007438
- pristine_git_object: c5a3db6f9a847b1fafaca37b04e58e0f63cf77e0
- docs/operations/getkeyglobals.md:
- id: 7f990e0efc1e
- last_write_checksum: sha1:12dcc44c433951cdd8c4136ae1a70702e2b3e47d
- pristine_git_object: 585d2a336f873f80afd427063fe3d845be885adf
- docs/operations/getkeyrequest.md:
- id: 1f6e344b43eb
- last_write_checksum: sha1:13b09743107d4c21db602e1befb1623eae7aa04f
- pristine_git_object: b7b0a302d24d5964ce5a4bd24672d766362564cf
- docs/operations/getkeyresponse.md:
- id: c145b1a0dd5f
- last_write_checksum: sha1:c315584d278f8f91f4437479ef8e95ce48b3130c
- pristine_git_object: 72e8055b7d9b0de224ea423fab24a5614d6e9da3
- docs/operations/getmodelglobals.md:
- id: 8bf42bb29760
- last_write_checksum: sha1:015159b3fab18f2122ba256831314a96c88085de
- pristine_git_object: 5c12ffab153909fbf0b235c63500d36f09bc6259
- docs/operations/getmodelrequest.md:
- id: 81d572026a85
- last_write_checksum: sha1:87ba489a1703e58e49c19ff6f29a416f9441a378
- pristine_git_object: ebc160f8b88bbe2208da932a31248fa0eb726d83
- docs/operations/getmodelscategory.md:
- id: 30e7c8fb695d
- last_write_checksum: sha1:aab2e450286bc960f0aa5a856e29b6b2f2feaaa1
- pristine_git_object: 79ab890961ecf7cc92cd970881feaa8ad3aeb594
- docs/operations/getmodelsglobals.md:
- id: 61588f3029c8
- last_write_checksum: sha1:f1565d45f3d06f070a8bc5ebe53d6205656b4b3b
- pristine_git_object: 9533d03cfb8ec3720fde4833d7260f4f645d6786
- docs/operations/getmodelsrequest.md:
- id: ffb89fce8262
- last_write_checksum: sha1:e0c12cf541942cea4c3d1a7e79950a7cf47314d2
- pristine_git_object: 57de7f795dd1817c42f20c705d3e679009f3ee32
- docs/operations/getmodelssort.md:
- id: 0e5bc10b2c1e
- last_write_checksum: sha1:f464ed4731a978219a5e9b10263a8a69c8b3273d
- pristine_git_object: 6c9f2b7e02cbe8fb4bc6fded0774533ac04941cc
- docs/operations/getobservabilitydestinationglobals.md:
- id: 00303cf00619
- last_write_checksum: sha1:ae437bab3d6cd3996eacfbb713f9b29385eee1c9
- pristine_git_object: 66c60398544681aea2ef847648b6b1b6b7f83000
- docs/operations/getobservabilitydestinationrequest.md:
- id: a182ef732e42
- last_write_checksum: sha1:5d0d08269002a80e0cb73523ad75571569c1b7be
- pristine_git_object: f74d79fd1c0ff58fb95812dcb8821eaa601f8275
- docs/operations/getpresetglobals.md:
- id: 16601428a948
- last_write_checksum: sha1:673254046620888b4af338fc40a08fc70a7f5935
- pristine_git_object: 40f699f420beb6c7f0e27661e0c5380d404d703c
- docs/operations/getpresetrequest.md:
- id: 07d2d7c15e84
- last_write_checksum: sha1:2fa6def5b8bd8e1d4472888c6efa64b4c0b829b6
- pristine_git_object: 9259ee30ef6f0ac62c18bc7952c056d1b32a1d03
- docs/operations/getpresetversionglobals.md:
- id: bae9f8e30de3
- last_write_checksum: sha1:b29bbd392a7f21787c3dcefd678a49ad98f675e9
- pristine_git_object: b3666ad4ff09a4ba377795c0dd57e41324356b79
- docs/operations/getpresetversionrequest.md:
- id: 7f6e78a91e0c
- last_write_checksum: sha1:373d2ee03e10912fbf4e495ad6ac2890fa0a4bbd
- pristine_git_object: 4ceea402bf2a1acbaf26ec89d40bb57f27a8dac3
- docs/operations/getrankingsdailyglobals.md:
- id: 4c35125b5a55
- last_write_checksum: sha1:95e16bf72ae618cd5089666e89b8c6b37a8ffdc3
- pristine_git_object: a75e324e4f708bd186de38f2bd1ffb5df19df11c
- docs/operations/getrankingsdailyrequest.md:
- id: 4418b400973a
- last_write_checksum: sha1:9941d12ab4bf460c95756d511f9339a17383e113
- pristine_git_object: 59be90b2aebcf81f507dbea4cea1496beb9c5454
- docs/operations/gettaskclassificationsglobals.md:
- id: eaf1910aeda8
- last_write_checksum: sha1:3902ca1f10b2247b71a868dc5a2789fba1328983
- pristine_git_object: c0f672452f4e7e1bdc24388e61a01c3f8a763b1d
- docs/operations/gettaskclassificationsrequest.md:
- id: 5d0a91bd9531
- last_write_checksum: sha1:45c9c66b1fc95916b7c7c0924cea6120c372a308
- pristine_git_object: 3970eeeea4f1689144161d9d5b0dc79f9a50af01
- docs/operations/getuseractivityglobals.md:
- id: 39aded6fc0f1
- last_write_checksum: sha1:53ccc45e0783444aa97f4e051b6ac6edc3acc588
- pristine_git_object: a67a41d74952a5d50a22e2c080f7f89fefd1993a
- docs/operations/getuseractivityrequest.md:
- id: 114457542fe3
- last_write_checksum: sha1:a227cb2f2e7dacedea35660a62782d35688b5756
- pristine_git_object: 302da8dc897995610aed1ff03ffcf2d882c9adaa
- docs/operations/getvideosglobals.md:
- id: ac6874f74ef9
- last_write_checksum: sha1:d76755afe2595aa9fcc2bb498bfe0c779282c35d
- pristine_git_object: ea3a74389060aa5eb44ff3edfda609e490833bbc
- docs/operations/getvideosrequest.md:
- id: 2eeac3b6576d
- last_write_checksum: sha1:9f6eec582ec3a568a6e14f57a687f0d360fc9748
- pristine_git_object: db40577d2526f81edbcc38cef6517c598a98bc7b
- docs/operations/getworkspaceglobals.md:
- id: c0101897f893
- last_write_checksum: sha1:5ac92be2d4cd79c39bad1ed47a4e689ed44f3769
- pristine_git_object: 1bd5e0856557b36ea222bd2b685557bb0c75a7f3
- docs/operations/getworkspacerequest.md:
- id: 6443ed4f7ead
- last_write_checksum: sha1:c2ada6583e276f2a6c553b24053453853207b302
- pristine_git_object: 8b59d2daf235f8af09bf4664c8080ea7a0e5b3e2
- docs/operations/granularity.md:
- id: 1a397e2c8a0f
- last_write_checksum: sha1:612977bfd1a843139f70131bb345e7ec4d45ca4d
- pristine_git_object: 8ced62dd4e058a108a2e059bcfee3f801e5cb605
- docs/operations/granularityname.md:
- id: f5460a07f93a
- last_write_checksum: sha1:efc55ee0c73eaa090d0bca648fa58bba39559537
- pristine_git_object: dd9a9ba9845690442ef2158545ea9a3ac7a7b4b5
- docs/operations/headquarters.md:
- id: 3ccf7adf2542
- last_write_checksum: sha1:24ca86fa6e2ebabf4cb034f6e368901e5041ccc7
- pristine_git_object: 64ba03100172260705398517008edab83db1a1c1
- docs/operations/imageurl.md:
- id: 3cc93f7b5a2a
- last_write_checksum: sha1:f4f5ef46de9b16797c9779a2b2fefaedfd144c6d
- pristine_git_object: cd90c034360cc55772c9953ee29524292f7fd9f0
- docs/operations/input.md:
- id: c06b700f96ae
- last_write_checksum: sha1:427fd4eb7f9fb9fb06ba0880b40a6ef8ac2ea81f
- pristine_git_object: 455985900b46a8d308c755ee0f060bf32c93fa16
- docs/operations/inputunion.md:
- id: 8bde108b50c7
- last_write_checksum: sha1:e671ac1a028be0528b5273dd61b8deea5c3f9451
- pristine_git_object: 655cca3c9dde2904f47187955063ed1def505e47
- docs/operations/listbyokkeysglobals.md:
- id: 97eb1fd15ac1
- last_write_checksum: sha1:7c545f4b2bac2dc7c814cbeb0ce3ece4e8338f9a
- pristine_git_object: 9bd9dcc5a67a8361541150beff1fd3f67873220b
- docs/operations/listbyokkeysrequest.md:
- id: 2616eb6c184d
- last_write_checksum: sha1:5cf5f6e129d99ea30797d3523ba69915d1057bda
- pristine_git_object: 4a8bb4188542896d96807b154ed1423c12fb0f52
- docs/operations/listbyokkeysresponse.md:
- id: 15eaf6a6fa23
- last_write_checksum: sha1:8f688dc5041a88fa5417a4d58471c1c9399decd9
- pristine_git_object: 0e6a3cf7bce0fb030a0bd8f2c3c9d0e076490504
- docs/operations/listdata.md:
- id: 3a3029670d40
- last_write_checksum: sha1:1384605ff96cc0e7797d7dd2ff42752fe980d91e
- pristine_git_object: d2a0b36ca2cbc9e297beba6471f7838b12b0b783
- docs/operations/listembeddingsmodelsglobals.md:
- id: 29c3a9629ff7
- last_write_checksum: sha1:a8b2d679ac7a558761e4289233d31084f4f7663e
- pristine_git_object: 20150d7765210b3c5baf1fa3ecd1c2f50eecd163
- docs/operations/listembeddingsmodelsrequest.md:
- id: 0f177abf51a7
- last_write_checksum: sha1:01e31efadca654393b158a6fbb21f7ed8db9318a
- pristine_git_object: d3628eb9a4c4f75d511bad66af17942e2212f92f
- docs/operations/listendpointsglobals.md:
- id: 80acd2ab5391
- last_write_checksum: sha1:7f209fed5c7d0c7b41e4288a1a4f685c0a0bca05
- pristine_git_object: 5a8118765497e987ccb2ece257091931d6db1c64
- docs/operations/listendpointsrequest.md:
- id: a3fb6a6f2c84
- last_write_checksum: sha1:d044d07943c5fe4ed46ed8292c88eac0a43ec3d4
- pristine_git_object: 49dea4f8a6e4609aadad28dd43f0963f4c6c8a49
- docs/operations/listendpointsresponse.md:
- id: cfc28fb4b9f6
- last_write_checksum: sha1:93ba9653230f96a61c30adc5964b7cea0f931c06
- pristine_git_object: 130c76834bae2d44f58cab77a99f7a5d72b1ea8d
- docs/operations/listendpointszdrglobals.md:
- id: a2c6a0214809
- last_write_checksum: sha1:7992ef1026f739604835fbab28c5fdf28b8dff63
- pristine_git_object: 6abb940ea82d1562e0e0d915a229f40120e65963
- docs/operations/listendpointszdrrequest.md:
- id: 6dabe97bb447
- last_write_checksum: sha1:98569a89d74aca1ae5c47fab1976c9fb9dba7ae5
- pristine_git_object: 727be2cdc85666532208ef7c84927440f1701421
- docs/operations/listendpointszdrresponse.md:
- id: 37a957da8f54
- last_write_checksum: sha1:6892fe1fc31da14493b937171caec5f0fabb8daf
- pristine_git_object: 54cf662af701995f7c04272d932f9a2e2731beeb
- docs/operations/listfilesglobals.md:
- id: 7714f717b38a
- last_write_checksum: sha1:1c33d490023fc17efa93535eb6a9216c892f791f
- pristine_git_object: 7de49096c3a1c04634f297ac6477e5293febb539
- docs/operations/listfilesrequest.md:
- id: 2110213173a9
- last_write_checksum: sha1:7ec4380dca8eb27e7af711c6eacc232a981517ea
- pristine_git_object: aed56276f9f1a086b43d8011a7d0baf8775f17a8
- docs/operations/listfilesresponse.md:
- id: 2f635c7a9991
- last_write_checksum: sha1:f1702087ae5a485f124b8dc4d83d9c8d8172eb06
- pristine_git_object: 371188d710b21e568e6405528febcb034c6c4b55
- docs/operations/listgenerationcontentglobals.md:
- id: 86c60d8ee820
- last_write_checksum: sha1:6bb5e89777b8f25572237af5065a15ff5abea244
- pristine_git_object: eb76ee2d7e2516c9942be0fb3a1fe38177741f71
- docs/operations/listgenerationcontentrequest.md:
- id: 2fd43266dedb
- last_write_checksum: sha1:e9831ae9536176f944df36910bcbcde652545a6d
- pristine_git_object: a025996eecd9ddf89a1eb10a5931becdc58983bc
- docs/operations/listglobals.md:
- id: 32d30e56f680
- last_write_checksum: sha1:6b2661b1a208354794ee9f591c7581526d4641be
- pristine_git_object: 53064e43a4cc24c142195b662f4dec2ba7218081
- docs/operations/listguardrailkeyassignmentsglobals.md:
- id: c1e1fe669380
- last_write_checksum: sha1:58b3d4cc562e3cf74fc46213db5792aec38900c3
- pristine_git_object: a9cc4a39cec08240575910f54e2d3066f013dca5
- docs/operations/listguardrailkeyassignmentsrequest.md:
- id: c841f466ea37
- last_write_checksum: sha1:7084ec7cf9a90757bcd5180b2a3d78e90624264c
- pristine_git_object: 1873ab97b35a1ed0b2af8a1bbffdb3bb4a6ca340
- docs/operations/listguardrailkeyassignmentsresponse.md:
- id: 1d97f15080c2
- last_write_checksum: sha1:4ed00c4ac409a79c9d8a11cd528584b792208cdc
- pristine_git_object: 3ce3be710fd904fdfcdf63fb7fc9428993df8f1f
- docs/operations/listguardrailmemberassignmentsglobals.md:
- id: 104391661d20
- last_write_checksum: sha1:fca243f432ac5f1e46b991c83b4ae0ac76a173df
- pristine_git_object: 58ce40eb9573bf958f8063767bb57235c3d9595c
- docs/operations/listguardrailmemberassignmentsrequest.md:
- id: c2181183ceb0
- last_write_checksum: sha1:949f302f653c130fa4d7c683b6999a26ad85bf63
- pristine_git_object: 962eb0c3abb81b9dfd2460b541950118579ae869
- docs/operations/listguardrailmemberassignmentsresponse.md:
- id: 3148eb3110b1
- last_write_checksum: sha1:3c12490bf06aab3053f5a05295b2147f85942ede
- pristine_git_object: 766effbcc369983252d95e837f67082dd1f9ff91
- docs/operations/listguardrailsglobals.md:
- id: ce7fe6f64d6e
- last_write_checksum: sha1:14bc637a0e4375919159b6d2be79fbacde3d70b6
- pristine_git_object: 4a623f2b7664346b324037e5e099cc19a22e0f99
- docs/operations/listguardrailsrequest.md:
- id: c00416201071
- last_write_checksum: sha1:e73c3a5dab8af65b85eafbacaa9c3e7bff99ce3d
- pristine_git_object: e6f8126048b2344f42c86d1df9e472b9b0618bc7
- docs/operations/listguardrailsresponse.md:
- id: 0e85f301aa5c
- last_write_checksum: sha1:69b2d4440e668dc9e76ebad86d5f70227276a31c
- pristine_git_object: c2e3510e7d805915eb9f493ac6cb092ec1a9d9dc
- docs/operations/listimagemodelendpointsglobals.md:
- id: 24c447cf0391
- last_write_checksum: sha1:bc2e0cbf57b211cb37f3d0ec5e22a4e4ad8de12f
- pristine_git_object: 8ac861e3954206f311e935cb0f555c430bd48f65
- docs/operations/listimagemodelendpointsrequest.md:
- id: 4e63ace27269
- last_write_checksum: sha1:d8362d4de0204a7ee118c106e6150a89bb28c039
- pristine_git_object: 27647dcaee248f17d21e6f1d6658eab1a7bbbe1a
- docs/operations/listimagemodelsglobals.md:
- id: d44612742724
- last_write_checksum: sha1:4016d7f2b457583473315913e4056de5c9b0bf3b
- pristine_git_object: c3edbe39ee3c886c9a45d511442aa6f6a8cf4801
- docs/operations/listimagemodelsrequest.md:
- id: 3b796f3db657
- last_write_checksum: sha1:9a49a00fc5847eca4f41a90b552ba1622982c1e7
- pristine_git_object: 2732ff2195c83246c0cd67cf88f2c5e528354936
- docs/operations/listkeyassignmentsglobals.md:
- id: eb16fba53032
- last_write_checksum: sha1:823375a0dc84574748befda39821c790b469a6b4
- pristine_git_object: 6c0713d69c8b9f3d7532681b73857042bf0e6474
- docs/operations/listkeyassignmentsrequest.md:
- id: 0d0d4d33f476
- last_write_checksum: sha1:24232750e6497d8670cc36d73957cd6a79a574fd
- pristine_git_object: 4902d03ad6d0aa0f304f99c997ebcd816540aced
- docs/operations/listkeyassignmentsresponse.md:
- id: "973479296236"
- last_write_checksum: sha1:a89918b7355e48a0e8946fd89bba5bd2e38f6357
- pristine_git_object: a083a11699fdc01328172073f6c5b11643491b6f
- docs/operations/listmemberassignmentsglobals.md:
- id: 4df3602b0efb
- last_write_checksum: sha1:0e4513ed008550da90164df2dffdb82abb49b5ad
- pristine_git_object: 7d4eb65315a19218dcd5c31e6ae67e68fdbc897e
- docs/operations/listmemberassignmentsrequest.md:
- id: b5c1c04b18fc
- last_write_checksum: sha1:d8f4c537908c139b257c203f501085a0868df064
- pristine_git_object: e58ec65dd9087228d5e073ecb67d89df3ebd2132
- docs/operations/listmemberassignmentsresponse.md:
- id: 4dad56275a0a
- last_write_checksum: sha1:e0534935d968cf8af6497cef949e2ec8f179229c
- pristine_git_object: 6ee5e606e476ab16db887de01ae94ce3aee2a181
- docs/operations/listmodelscountglobals.md:
- id: 9d155afe292c
- last_write_checksum: sha1:ad8222615eeb5f22a7dca9ad6008a97146fc22ad
- pristine_git_object: 1c3931a3a1a06dd9862e488831586e56bed16030
- docs/operations/listmodelscountrequest.md:
- id: bf7590298817
- last_write_checksum: sha1:41e3343e2082a2e1382fd7613bc0777ba2b02a1a
- pristine_git_object: 02da5e2e3cd9d5dec1869d249ab348f1a613a16d
- docs/operations/listmodelsuserglobals.md:
- id: 69b5549f78e0
- last_write_checksum: sha1:55c10638b71726fda9336b32f2a2464392e25cf6
- pristine_git_object: b8ca3d373c3dce695fdc39be820d932603da5912
- docs/operations/listmodelsuserrequest.md:
- id: a1486d2c099d
- last_write_checksum: sha1:ca2fe8bbabe38b295a91831841f45eb8fa5c4bdc
- pristine_git_object: 68b87e323737c9c05b2976022c6012fd6f0eaef3
- docs/operations/listmodelsusersecurity.md:
- id: a5b7382e5fb8
- last_write_checksum: sha1:c4de0a5a996b4ad48cf50e0f5f35db05c882c574
- pristine_git_object: 3d42e13fcb006322664b3458e5399483ad0b73fb
- docs/operations/listobservabilitydestinationsglobals.md:
- id: f97e8b407351
- last_write_checksum: sha1:18ce351edf724c073d1a7e48cec4a4d1fe3344c3
- pristine_git_object: e743e9fcb59eed90783d6e02c525c9203000ba00
- docs/operations/listobservabilitydestinationsrequest.md:
- id: fe42600264e2
- last_write_checksum: sha1:2c9fca29d3666dd8a0a6831ac171c3870bc8611f
- pristine_git_object: 823bd375a911d42d6748a48a1475f737b9b2cbac
- docs/operations/listobservabilitydestinationsresponse.md:
- id: 27e52198d1cd
- last_write_checksum: sha1:7bfd16e81835713d3c4da71b96e50dec3b2c44e4
- pristine_git_object: 2ca4b2b0b7fddcc9539f0c76ad9dd3c116c58d15
- docs/operations/listorganizationmembersdata.md:
- id: e2cb8741f8f1
- last_write_checksum: sha1:2ca75ea8dd657b6cf33236ec7e3949215b958a8f
- pristine_git_object: f4fcecaff12922aea5cad2a0e14415794dce7842
- docs/operations/listorganizationmembersglobals.md:
- id: 01c9c4a98f1f
- last_write_checksum: sha1:4a3bd5fe1fee29c52df34521ac1b05727aa92991
- pristine_git_object: aa080033b790fd4ccb16d01c64118aed5a66a156
- docs/operations/listorganizationmembersrequest.md:
- id: f382354b10d8
- last_write_checksum: sha1:39a624c237163785c5a73aed88305e4d0a943909
- pristine_git_object: 6f90ae081bfe98aac40e7e632dcc9c324d797ecf
- docs/operations/listorganizationmembersresponse.md:
- id: b7cd9449d176
- last_write_checksum: sha1:f163e031babdf6a3db3e669b821578099ecd2441
- pristine_git_object: 240d8d538434110c7b972520ec373cb177e46feb
- docs/operations/listorganizationmembersresponsebody.md:
- id: 573a08dc9d96
- last_write_checksum: sha1:89cd76c6935cda7cbdb00de704b1d527e4eb0a14
- pristine_git_object: e5aab441b87284d7d88749950848db12655d48ef
- docs/operations/listpresetsglobals.md:
- id: 8b1acbd90059
- last_write_checksum: sha1:3202f46cae6be4ddc4cf4793402758a0b91385bb
- pristine_git_object: 49f3ea321bc305055cfacfe22bc7590162f84cc3
- docs/operations/listpresetsrequest.md:
- id: 4f1702eac3bb
- last_write_checksum: sha1:78cc97678a40641d64c291ad016f78bcb247f9d8
- pristine_git_object: 90feb2a1c95a3b2203a48c465ecb8b29977cd407
- docs/operations/listpresetsresponse.md:
- id: e827d8fa2c98
- last_write_checksum: sha1:f9bd37493c87f1af317dfc6fad181ee9365b5116
- pristine_git_object: ca86773926c8b90ab3073fbbf0db3344f74d5d51
- docs/operations/listpresetversionsglobals.md:
- id: 9516dc5fe50d
- last_write_checksum: sha1:764278af18b61c431efd16395a46e092fd77f4bb
- pristine_git_object: a0b5d7e47938af709b3a5c95367dd690971bc6da
- docs/operations/listpresetversionsrequest.md:
- id: dca09de93f73
- last_write_checksum: sha1:b99790793d146acf534f8f9d5d9926373943ea03
- pristine_git_object: 689a4865feabcd144c977564149501f8445656d0
- docs/operations/listpresetversionsresponse.md:
- id: 104b7871a717
- last_write_checksum: sha1:5ae0a5da5820f663c25ca583e955e2036bf61df4
- pristine_git_object: 10dc6e5f3ff5b5871062ac992a01ee3c3586819c
- docs/operations/listprovidersdata.md:
- id: 576de3a80e5e
- last_write_checksum: sha1:2f5a3edd32a37e17be34bd07faf0b89b14f8a08b
- pristine_git_object: 5179c87ea3ff01c0f5a36120cd5142c7196cec78
- docs/operations/listprovidersglobals.md:
- id: cbf10c70be68
- last_write_checksum: sha1:00b1bc3b8b9781a6f71972c0975609a1cb6968e3
- pristine_git_object: 6aacb32d4be29dc18e901006356312491546e505
- docs/operations/listprovidersrequest.md:
- id: 5beadbcc088f
- last_write_checksum: sha1:3d3a5d51ab7f692658cab920debde2d3abf2aa6e
- pristine_git_object: 9e96cc6d4d53196ac572a65150e6b1b1fcfaa976
- docs/operations/listprovidersresponse.md:
- id: 749bf65c2ab2
- last_write_checksum: sha1:20b1f0862ecb643295b8e495178fe8d72d9077ac
- pristine_git_object: 922cc65548995e12edbe83abf86732c4190c7a97
- docs/operations/listrequest.md:
- id: 40bb7fe37ce6
- last_write_checksum: sha1:dd1cdb3c672fb456b05afa8c838bfca5e7a4f2db
- pristine_git_object: a5646bdeb6412940b9f6f2320315d9f1f58788d6
- docs/operations/listresponse.md:
- id: 14450e1d6614
- last_write_checksum: sha1:e432e29d3c7de8517cc16b59b958134ec561f09c
- pristine_git_object: 255d266cb4cee8057210f820e560bba25858b82c
- docs/operations/listvideoscontentglobals.md:
- id: 5e356abaaa50
- last_write_checksum: sha1:476094e7c2920e0e3056d4995c4f02a450eab79d
- pristine_git_object: dc3c375e02be84568e95cb4bc6ce766f81f5714f
- docs/operations/listvideoscontentrequest.md:
- id: a03dc9d02574
- last_write_checksum: sha1:a895bbbbb64b8a1e300bbae942196c52e86741c6
- pristine_git_object: a729b3d4582f4b596ef1535a9e69a7e426de2d03
- docs/operations/listvideosmodelsglobals.md:
- id: 286327d3b747
- last_write_checksum: sha1:eb199755e6b166a947a8fed9462fcf061264889e
- pristine_git_object: 305081b9fe45addf7f6802273992ee2b465e3257
- docs/operations/listvideosmodelsrequest.md:
- id: e0e776f67adb
- last_write_checksum: sha1:0d590826439a800f340367b6721265535827aede
- pristine_git_object: cbd65ef6238a8b9bb2c36bc37cbdb5a5e181d3ad
- docs/operations/listworkspacebudgetsglobals.md:
- id: 2b37a411913a
- last_write_checksum: sha1:04d18dd7fc16e7c773b846ac52f53eba0812854f
- pristine_git_object: 38c41d7d85d5d2f2e26be4b02ae73244be9331c1
- docs/operations/listworkspacebudgetsrequest.md:
- id: 06f1f49eb154
- last_write_checksum: sha1:b47f9ab876ac1aa8ee262bf1c7b6fda45fd3c4a4
- pristine_git_object: b2620e8e9338ff1be84a1d29ca487036a286c4a5
- docs/operations/listworkspacesglobals.md:
- id: 4ccdc202de01
- last_write_checksum: sha1:3eade1075e3b0f917a9afee3da18cfebbc4ac886
- pristine_git_object: c5967dd23490646d0a10ffa24df8aa0bab712c9f
- docs/operations/listworkspacesrequest.md:
- id: 93bf2ba40fbd
- last_write_checksum: sha1:c0d073a290e63ae12c5099d38abc89f87d6ca525
- pristine_git_object: f46ba571e6e7cefe535e9a429ed811978fe697a8
- docs/operations/listworkspacesresponse.md:
- id: 54505a70bba7
- last_write_checksum: sha1:4f3cb764af31985161832976edf2fefb97c0cdc5
- pristine_git_object: f817644945c1182df48c2166fbf931e91ab34b36
- docs/operations/metadata.md:
- id: d37b5c1d5589
- last_write_checksum: sha1:14fbbcbc61e874a7c3805d7d751892c734598532
- pristine_git_object: 62820591df404a67c63db6e3b3e942181f7dfa40
- docs/operations/metric.md:
- id: 28da9e6f159b
- last_write_checksum: sha1:1ee79f025dc62cf1bf26ffaf2a957debc4941acc
- pristine_git_object: 7d56bf29feb132b5ecdd648201df3c5d732469cc
- docs/operations/object.md:
- id: baee3544844d
- last_write_checksum: sha1:2fba5ecf3f93c90460a972666d6acdfb597cafad
- pristine_git_object: 39e8c0b8d9a5e406a04a4636556efc03072ee441
- docs/operations/objectembedding.md:
- id: 7a144a9c7a29
- last_write_checksum: sha1:5f009bd24fd951128cdc546a6a5c937ab0426387
- pristine_git_object: 4f8c20dd33dceafda3362119a1cfb1e5133810d1
- docs/operations/operator.md:
- id: 2d98ce506f05
- last_write_checksum: sha1:e33c1a9f2770b16f88bf4516c7865868f2c0f868
- pristine_git_object: 2b1578ec5c2ba5be50fb3b5d6bfd850652d08b67
- docs/operations/operatorname.md:
- id: 0c45b73c6cca
- last_write_checksum: sha1:6b23abc74ab1eaf13c230d445c642ad0a169e59b
- pristine_git_object: 03a40abd4069d8b762c146d23f76d8dd7cc93130
- docs/operations/orderby.md:
- id: 1f56e147192a
- last_write_checksum: sha1:9058eff01fac823cf53501fe8b3b5ae7246aef99
- pristine_git_object: 1fea03103fc771a2b98ba707d5021345697a9ae5
- docs/operations/prompttokensdetails.md:
- id: 4e204e79631e
- last_write_checksum: sha1:253a012fe630387ab4de4461bf797cc8cd7a09c7
- pristine_git_object: 56c454715dfb32bf210dfe8031e7145fd4c2c83b
- docs/operations/provider.md:
- id: 9d89f101fabf
- last_write_checksum: sha1:471f657da16aeb9befb08e98183f85eb92dba405
- pristine_git_object: 487ab7b109aa3bbda8dc7e8f200e858f2771c629
- docs/operations/queryanalyticsdata1.md:
- id: f5ead5b95530
- last_write_checksum: sha1:a55813c57010d0613c1e70ee1a9232fdcf98775c
- pristine_git_object: 055291f2e192b8c846b85f04ac19212389d227f0
- docs/operations/queryanalyticsdata2.md:
- id: 245e11bf5e6f
- last_write_checksum: sha1:6222d56149ac857620007ff12a279bae421127ee
- pristine_git_object: 6b787c3d1885278949ce64404b48e48374c90cde
- docs/operations/queryanalyticsglobals.md:
- id: 373ab736c5db
- last_write_checksum: sha1:f3cc24044abacc9b184e6fb61b1c5cb86f8be0eb
- pristine_git_object: 9f9d4a101658eb5a210c95578a1c1f504db3069f
- docs/operations/queryanalyticsrequest.md:
- id: 17bd5ac6f41a
- last_write_checksum: sha1:8e60085008d0b24ced809aa589c73208cba08f60
- pristine_git_object: d8c88120bf89df54fc08efc3de0ae50c291cad39
- docs/operations/queryanalyticsrequestbody.md:
- id: d462ba943863
- last_write_checksum: sha1:d61b9cb983826a5e4dc9c5fef29e29d7c3ccd848
- pristine_git_object: 87a4d54f500b26455023c24ac6b5f26b9efad510
- docs/operations/queryanalyticsresponse.md:
- id: 662c24789418
- last_write_checksum: sha1:88a8ceb4ceaad18c15e6b22450205d1562b17064
- pristine_git_object: c079f10e99e8ebed3047b7a128523d606a3b4589
- docs/operations/ratelimit.md:
- id: 55ccfab9dcb0
- last_write_checksum: sha1:ba383320e312bc87bd156a5d338f3d973376ec02
- pristine_git_object: eeed3720e0eef6a871483dabd4a345495b466339
- docs/operations/region.md:
- id: d0bc61dedd4a
- last_write_checksum: sha1:bf44dd639de860bc02404edc99be98a19c4e0c00
- pristine_git_object: 36a51ce0097c2ad065ee0b0331d90339fcf3a6e5
- docs/operations/result.md:
- id: 432b3cd4c69c
- last_write_checksum: sha1:ec5cacde47270f2b163116b6b38820cfaa285dc0
- pristine_git_object: f06fc0e434bc96c8f29c6eb97e5a165b3df0434e
- docs/operations/role.md:
- id: 361efe189fd3
- last_write_checksum: sha1:b636196d23d598f27a7b39d5db1e9faa3a0cb072
- pristine_git_object: af35a0b8e024895cf26f5fb6a9bec2cffef12ee4
- docs/operations/sendchatcompletionrequestglobals.md:
- id: 4ca845a0810c
- last_write_checksum: sha1:da4e80f313c65f3534117604e4cb79de3516ec20
- pristine_git_object: 3256c024465d68f376df1e9498da94ce756bf320
- docs/operations/sendchatcompletionrequestrequest.md:
- id: "220604035185"
- last_write_checksum: sha1:a8cf41b291730959bba08061e98eafe3953cea1f
- pristine_git_object: bcb4bc42fd02fc674979172477e52b509b0c4daf
- docs/operations/sendchatcompletionrequestresponse.md:
- id: 354b29241c52
- last_write_checksum: sha1:baf6f1195eeabcb4742fec427127f2c33ffd9b3c
- pristine_git_object: c4ba8c79c6ba3021472583b922c3ef01c4115bf4
- docs/operations/source.md:
- id: 8d5b4a7ef752
- last_write_checksum: sha1:7ecc37abdbb6b9ac5e6bc3bac1254d4b5b4a6f2a
- pristine_git_object: 244d7c7eae58985137b5615d4b4a0a9c552f1a00
- docs/operations/subcategory.md:
- id: "169243175101"
- last_write_checksum: sha1:ddf3195ab7768df3095efa4cc86ea7b5ca3504f3
- pristine_git_object: 912cc5d754a041cfdddbad5c704505a3f7da1cec
- docs/operations/tasktype.md:
- id: f741399fcc2a
- last_write_checksum: sha1:e3b9c5b4a2b103ee4c7f60e7c8eb25b8a351c970
- pristine_git_object: f978421391efaf8d7b0b449cbcba9b82a93d182a
- docs/operations/timerange.md:
- id: a5ee8c05a917
- last_write_checksum: sha1:00b61805899422b836494a24088ec33674316714
- pristine_git_object: 1e0e56f92f9705e14c9ab6ebc68e3d7eb603d128
- docs/operations/typeimageurl.md:
- id: 433d2dc21947
- last_write_checksum: sha1:24b83d5212d95f5e5ee95d1b9e47059613126ea1
- pristine_git_object: addee7e98752ed799d155ae114551ba3c0f9ad9f
- docs/operations/typetext.md:
- id: 58e69601e3dc
- last_write_checksum: sha1:5abedb25856f0e45ef9b80e42cf6fe4aaeca0741
- pristine_git_object: fb9c2cfc86821cc2713c143ada5094af0e775f08
- docs/operations/updatebyokkeyglobals.md:
- id: 59d64e39f999
- last_write_checksum: sha1:3ad9ac30eb6ad60221451b2fbe10c4fb99780516
- pristine_git_object: c832d953d1968bf3eab6e934cda62cdc4484943d
- docs/operations/updatebyokkeyrequest.md:
- id: 91d2def5a18e
- last_write_checksum: sha1:3884824fc49b8f5eab9919adaa3a446ad6fa1aab
- pristine_git_object: 17d7eb959595a02720a6abc31b33a67265139a32
- docs/operations/updateguardrailglobals.md:
- id: eb4357a0714c
- last_write_checksum: sha1:3ebdcb875989055d04737285abb527a8ea30720b
- pristine_git_object: d72ffed2d70092f83e5af65f6abc80e05590121e
- docs/operations/updateguardrailrequest.md:
- id: 655370b0fd4c
- last_write_checksum: sha1:daa57018bd9010c6fdf08fa4bbb9fc5c5b193dc3
- pristine_git_object: 58ac81b1a12447b17d1da21f1b2275b32e2c2ca7
- docs/operations/updatekeysdata.md:
- id: 989d7ddeeb46
- last_write_checksum: sha1:81679927eccfbb9957d4cc3454668f9cc60458dc
- pristine_git_object: f1ef38208b77ffa7eabeb448a4d6b7894315dcb0
- docs/operations/updatekeysglobals.md:
- id: fe06e9820a16
- last_write_checksum: sha1:bc44e1936abe8d3ce77e223aacb0326143a4a812
- pristine_git_object: 4588f44c69c7090c1ab11e9d2dd250118ba7703b
- docs/operations/updatekeyslimitreset.md:
- id: f5958b3ca67b
- last_write_checksum: sha1:181e6d509793e869bb7433021c5ebe8133c4d511
- pristine_git_object: 7a91c14c09527cf868aff6fa189db2b2fd6d83c9
- docs/operations/updatekeysrequest.md:
- id: 37aa3abce627
- last_write_checksum: sha1:71e83687cd5bb68a435099abde4f46a0ab146ce7
- pristine_git_object: 1e35e33405525e49a37be85790ccb85b92676050
- docs/operations/updatekeysrequestbody.md:
- id: fa955b3d03f9
- last_write_checksum: sha1:f0c0f65294750db25925a036f987d7e4bc48f1a1
- pristine_git_object: a6130fd788229ee52843ebbb537b1a9ef6601278
- docs/operations/updatekeysresponse.md:
- id: 594f08a35b03
- last_write_checksum: sha1:4590d0a24f313d60e4e7e18688eac54e755151a1
- pristine_git_object: 8b5ef1fca6768575bb49ed510fd83b27c77db805
- docs/operations/updateobservabilitydestinationglobals.md:
- id: 95291996394f
- last_write_checksum: sha1:48edaafebdaa82f0fa05780afdce3c5480fb5be3
- pristine_git_object: 4bd59f0388e042854c46523a6ad813564d3b0c6d
- docs/operations/updateobservabilitydestinationrequest.md:
- id: 2446c57b28ba
- last_write_checksum: sha1:fb2caf3523357d21bc35946e1f48d0dd98edeb7f
- pristine_git_object: 6ba312fd9fb477a10e57eef62c519130c17f5136
- docs/operations/updateworkspaceglobals.md:
- id: 1f2cac8a13a4
- last_write_checksum: sha1:aeffb26e2ce0ddfe37f1ccee67035ebe9041c673
- pristine_git_object: 5835a41ee1c7a0e557a7282271e8d31230b54e82
- docs/operations/updateworkspacerequest.md:
- id: 719c33978f4d
- last_write_checksum: sha1:3ea95e60674f4d0380f532123c75579855ac00fe
- pristine_git_object: d5bd345f6faefd5e2448b7e6c6c15ae58df7d0d2
- docs/operations/uploadfileglobals.md:
- id: e6a061691838
- last_write_checksum: sha1:941faa7b58e39cdc3a0e54ccfaa9d2e4dea7674c
- pristine_git_object: 49b2442475be39e51f009fed49e7735d305e06b1
- docs/operations/uploadfilerequest.md:
- id: afe31e35e3ec
- last_write_checksum: sha1:1f4254b0494cb4bf33bdd7a07b374cbf057c1e0f
- pristine_git_object: b80c439e24b92151a6cf871b4043a7d2e2bf5532
- docs/operations/uploadfilerequestbody.md:
- id: e6a8c28ec386
- last_write_checksum: sha1:004454df6c98ca21a802bf9da7eea64abc7cb70b
- pristine_git_object: ac4e22af61da02419948c154cc56a7dc70fdac0f
- docs/operations/upsertworkspacebudgetglobals.md:
- id: 5c15b78ea24b
- last_write_checksum: sha1:359dde44e5034a4e0b2c82d1d2fc06e57cfb408c
- pristine_git_object: e8edd34168f94c47ceae197919544d80d5270738
- docs/operations/upsertworkspacebudgetrequest.md:
- id: 27cd86e52e73
- last_write_checksum: sha1:519a919466a3e0d539b5dd5a102a21b759346573
- pristine_git_object: eac53ae1b18f2e0906457156142fe01ab834a25c
- docs/operations/usagelimittype.md:
- id: f83f3fcb36f8
- last_write_checksum: sha1:9c272d9908a57fdbd2b376e13c8fd226e7d4ce65
- pristine_git_object: 0d9e7c83f5ae8bab7f5f5cfa6e48805c00f56f40
- docs/operations/value1.md:
- id: da0cfd1e3204
- last_write_checksum: sha1:15f7ac312cfb90706ad16389a07271eeb1935027
- pristine_git_object: c3266d083e14f24d48fa234f49c49ec9ae268fa3
- docs/operations/value2.md:
- id: 3f4c8217513f
- last_write_checksum: sha1:683e88a1e77074bf96c4ba1e83ff18661388b775
- pristine_git_object: d72862bbc8003f609b439ac5a7c0904ecd1649a3
- docs/operations/valuetype.md:
- id: 20b3a19cf0bf
- last_write_checksum: sha1:3ee651ec1a0b12ed21c222f856ed351e99ce36b5
- pristine_git_object: 9b4d37e44d3b989fe6b9bc47c9e35a9e09cdc5cb
- docs/operations/window.md:
- id: cae9b0c9da39
- last_write_checksum: sha1:236895b24731096eb1e95b8d4f88fb4ee485ee4b
- pristine_git_object: 7b3ba482648c212d9ebb3dd3285fdd86958ef051
- docs/operations/zdr.md:
- id: 7b519776696a
- last_write_checksum: sha1:9c7ea16d0ca7b4105190e93e583f145fb9c8b8f4
- pristine_git_object: c97bcf8826ee67a7b62c427daf0b541030785c46
- docs/sdks/analytics/README.md:
- id: 4c84abb05030
- last_write_checksum: sha1:2af2b879b1945ad9293b519ffa87579393608031
- pristine_git_object: 44f78122819ded7e472e28ebcf37dd8812707097
- docs/sdks/apikeys/README.md:
- id: e2bd25998427
- last_write_checksum: sha1:626c856e422b77914d461ed5fa86c94053dafdaa
- pristine_git_object: d3fbe9dfcd49510ee05f82b2ad115359d46eed37
- docs/sdks/benchmarks/README.md:
- id: 61c16262af9b
- last_write_checksum: sha1:e3030fe550fa8bb1d3379692f9633b5f8e98be99
- pristine_git_object: 7a4db0f13ee00f246b5f13887a023fc70a3b74df
- docs/sdks/betaanalytics/README.md:
- id: e037af84b386
- last_write_checksum: sha1:78a1ed27ae55ac9b6e6926e2587adeda0de65aa3
- pristine_git_object: 7f19e372b77803949f2afb8dd86b4794556e9c7e
- docs/sdks/byok/README.md:
- id: 511ba2ae7a1b
- last_write_checksum: sha1:451e316d1a15cea3c43033a9eb0b3989be9fd43d
- pristine_git_object: acb77887ae8d7612f039ae319b5654d2e03c9e26
- docs/sdks/chat/README.md:
- id: 393193527c2c
- last_write_checksum: sha1:0b40d973610ed193d6faafc7f4f0bfad06c78225
- pristine_git_object: 08b736f0782487ac73f87d4f008079ebc00eab48
- docs/sdks/classifications/README.md:
- id: ba3b1f5de071
- last_write_checksum: sha1:9bfc60644eccb737e3a3c64fe7c4bcb80bd63e61
- pristine_git_object: 85a0d0b4329b9e3954b27187389dbf5e8e77ea06
- docs/sdks/credits/README.md:
- id: 81608135c0ff
- last_write_checksum: sha1:abca02bc25760be47f80100a7cce6bb711202aef
- pristine_git_object: 1837ff59343eb87482e8750c1fb5d2b5f89aae6a
- docs/sdks/datasets/README.md:
- id: deb5d90f4faf
- last_write_checksum: sha1:c09c0c118def84591a90132f77b67f40ae9e3d1e
- pristine_git_object: afcf796dfd4d793bbfe7bcd3bdd81e5fe908de94
- docs/sdks/embeddings/README.md:
- id: 15b5b04486c1
- last_write_checksum: sha1:c2ed15521af31873f56e7813292aa30c5adf94e4
- pristine_git_object: b649f5b605ffcf156e773840dd28b9eb7c9ac147
- docs/sdks/endpoints/README.md:
- id: 80d3fa9f5f5b
- last_write_checksum: sha1:8eead5232f81561abe5a4d37c74c9a69a5de0387
- pristine_git_object: 2ce96e9a6eedf3a64256cd848615e9c4fd76c0af
- docs/sdks/files/README.md:
- id: e576d7a117f0
- last_write_checksum: sha1:ec0f9444f9d8a657caf6bbae2cc08805d4e6f17a
- pristine_git_object: 687d0fd1d678b125fb0d4dcaa6cd20512707849e
- docs/sdks/generations/README.md:
- id: a7d12ae95fb1
- last_write_checksum: sha1:70dbb18cfaff95cf5e398fed34ef969a683964d5
- pristine_git_object: 7fd647d02bfd29a3c7a5da0487761e89f308f224
- docs/sdks/guardrails/README.md:
- id: f72b38a5a2a7
- last_write_checksum: sha1:359f450bfeb9b1a3436b85a446a7529b76118c25
- pristine_git_object: 4b79890caa9a8296cdbabf550c66b4952f59d0c2
- docs/sdks/images/README.md:
- id: cc752c3524d0
- last_write_checksum: sha1:51f80f2eb736d11fcdc1368df1a4b54c2476c695
- pristine_git_object: 7737857e7d4c450d333814536cef0f6554975d18
- docs/sdks/models/README.md:
- id: b35bdf4bc7ed
- last_write_checksum: sha1:0c8c328bdaad985f129d8f4427f83415db883e38
- pristine_git_object: acaf3e22219706da100b2f1ea35f6ac5f4ee74ba
- docs/sdks/oauth/README.md:
- id: 80ad2c1a7b62
- last_write_checksum: sha1:3590ea2a886254f74575d5a803b8be3aa5f7de90
- pristine_git_object: a99fae69d502c4249a72145eea286d404ef81c3e
- docs/sdks/observability/README.md:
- id: bab967736831
- last_write_checksum: sha1:88065c2ad18b9ab74228a89bac655b05dbc11991
- pristine_git_object: e96d64dedb5332296e09bf5e34e83047f610ba17
- docs/sdks/organization/README.md:
- id: 69e4232b8432
- last_write_checksum: sha1:3aca4d3971ef8e049ec6c66d4dd160cf110529b1
- pristine_git_object: 867781001d3d7c6e755bcd3024268d831d154732
- docs/sdks/presets/README.md:
- id: ead9668ae1dd
- last_write_checksum: sha1:dd895ffd401b378c4d6de8cfff3bcf55af781364
- pristine_git_object: acd8279d19eacab7957c440ed14834e8573539fc
- docs/sdks/providers/README.md:
- id: b02aa45c0093
- last_write_checksum: sha1:576c938477d66de01f39db88b50caea41a6812d3
- pristine_git_object: b414ebc8a9ea57045833409e5deaa8aa21d283d1
- docs/sdks/rerank/README.md:
- id: e2b361cec1dd
- last_write_checksum: sha1:f66a436b50733a6a5867d4be0412b1909f99fc33
- pristine_git_object: a558abc06eb1e3251ae6a7993245f8e6e0ef3b2a
- docs/sdks/responses/README.md:
- id: e717bad14f63
- last_write_checksum: sha1:2fa7c76ae6c364248526d04871db0c16291bf60e
- pristine_git_object: c9601f17bbd48441521f947aa7e312d2689f6b0b
- docs/sdks/stt/README.md:
- id: 0806154492f9
- last_write_checksum: sha1:a8b75526dac340b813f687081fab11165dec3d11
- pristine_git_object: 99c5b7996c65d09da7a83c9de11b3e4a98442e71
- docs/sdks/tts/README.md:
- id: 0c425074d09f
- last_write_checksum: sha1:dc5da92e8d50ff1e5b91bb4571bf900aaf7fc5f5
- pristine_git_object: 1543931c82477df894cca5b2a2e32838bc66bf5d
- docs/sdks/videogeneration/README.md:
- id: b6dbf7b0729c
- last_write_checksum: sha1:186dc73b0d741c97bb92c441ae7c99809e43449f
- pristine_git_object: 393bdc66fbf85057da5811936439c48ad03a2322
- docs/sdks/workspaces/README.md:
- id: 1f5b051a6380
- last_write_checksum: sha1:c5ed18ad453c4cdc032fa5f2a81d7b93b36bdbab
- pristine_git_object: 6a5d5e09c3fb9006efddd9ca32a72e0353a390f5
+ docs/components/aabenchmarkentry.mdx:
+ id: 35ebea5f13ae
+ last_write_checksum: sha1:a870589d8fa8dda11eaa5007cbc5fdf8214e2ac1
+ pristine_git_object: 172d96463883f8a74704b07443ee3e84c83ec4e9
+ docs/components/action.mdx:
+ id: c1a4c8fcde0c
+ last_write_checksum: sha1:d4eae2bd7609ad645a0c4781ee18709d24e719d3
+ pristine_git_object: 50cdd412a25f1d6f1e2bb236c6dd6e59ab66474a
+ docs/components/actionenum.mdx:
+ id: 80a6e5c8e11b
+ last_write_checksum: sha1:fd6ff66bb4a43dd71b399b9c5be55f79624b33bf
+ pristine_git_object: 9bed0a58221b443b943524232117bdc43e6c4014
+ docs/components/actionfindinpage.mdx:
+ id: befcd5c03c7d
+ last_write_checksum: sha1:ff6b2e91ba48cbbdecd7ce7d75b9f109948de19c
+ pristine_git_object: 59aaf44e25f682681726605ff49dd1d6dc140adc
+ docs/components/actionopenpage.mdx:
+ id: 50bd86f8f935
+ last_write_checksum: sha1:0a6a482d2c7899fc7d680fd94ec1211fec2c7a7c
+ pristine_git_object: 6bf4cb4127eeb0989ba22d937afd181e02534aca
+ docs/components/actiontypesearch.mdx:
+ id: 44bbdd6ceb5c
+ last_write_checksum: sha1:042ff5a1bcc7a4a3c79819591d6dd4870881cc9d
+ pristine_git_object: dc49d753ad25e6dcf9265946f3a87a8bffd46d4a
+ docs/components/activityitem.mdx:
+ id: 20be851aee8a
+ last_write_checksum: sha1:03ce9c177882d8b0edbea014961061af81b50360
+ pristine_git_object: 0910645c06285f1ef165198c24f6fb9c3b1a8d7c
+ docs/components/activityresponse.mdx:
+ id: 5886155bc810
+ last_write_checksum: sha1:64acd6c3d2db5593d8359474c4e2e31e4db62453
+ pristine_git_object: 6edb98e874664ab4349034ca3d0c5874f761fe9a
+ docs/components/advisornestedtool.mdx:
+ id: 71464b7dde39
+ last_write_checksum: sha1:85f6613d57b23cb14b06e5bd9ee717dd7a0076cb
+ pristine_git_object: ef547673c81dad35eef331883e7b06c16f28a76a
+ docs/components/advisorreasoning.mdx:
+ id: c4f80ddfbd1b
+ last_write_checksum: sha1:9e16412ad2176b95e0c995efeb0850318ec58d37
+ pristine_git_object: b33ef5366b30a11dda8f28fcc8a44bdfd5511d46
+ docs/components/advisorreasoningeffort.mdx:
+ id: 16cca6bcc9c0
+ last_write_checksum: sha1:ad0c073e2f0fd5cb0cece557282959d13c1eea6a
+ pristine_git_object: aa427b33bd2210325fc468dcce935c9ad2da4096
+ docs/components/advisorservertoolconfig.mdx:
+ id: 21d52f2c8a42
+ last_write_checksum: sha1:c998886f93312eec86a7747ad12d095c20fbf64f
+ pristine_git_object: 123fe8790d1b021480efb9e7da3176cdd2736f00
+ docs/components/advisorservertoolopenrouter.mdx:
+ id: ed2fd64f9766
+ last_write_checksum: sha1:d0c85e7d14ded4e6686f9463bf6a1460ce9267df
+ pristine_git_object: 928a0b80faca7f5e8faa898ebe1634c9a09c15f9
+ docs/components/advisorservertoolopenroutertype.mdx:
+ id: 037d49b1a02c
+ last_write_checksum: sha1:1ef65dad1b6f74dad67829f8b67d65da6144922b
+ pristine_git_object: 95bf97c81f4b519b1abf0b8ef96d5344140ac182
+ docs/components/allowedtools.mdx:
+ id: bc9b06183311
+ last_write_checksum: sha1:9b19ddb249037404d76b5c8f7cd8b40e20cf598d
+ pristine_git_object: 14377fe6a97ef654eb28836afc9d8923350e9d88
+ docs/components/allowedtoolsunion.mdx:
+ id: 6fbdaf871602
+ last_write_checksum: sha1:821681b0933436cb8ef4cac8070296a3469b1b02
+ pristine_git_object: 239bb4825ee58ed57edd87e8f2ec886268433483
+ docs/components/always.mdx:
+ id: 349d3a763e1d
+ last_write_checksum: sha1:1e1169e637c785565ecf0646c29f812b9c6b3551
+ pristine_git_object: 539af0bb96a6b31c2c04f449aa9951c6066f2d15
+ docs/components/annotationaddedevent.mdx:
+ id: 772ab3c03c65
+ last_write_checksum: sha1:25c44358075e5dd94e1b8229e684203216b07ed0
+ pristine_git_object: d05a06237e63ed95a9fb35b9e1d9e54dd97a319f
+ docs/components/annotationaddedeventtype.mdx:
+ id: 14f2eb561997
+ last_write_checksum: sha1:c2d3663907d09f4bd8248d715384f3c45e18e241
+ pristine_git_object: ad9a606318c037d4fce78642297cd490ddd64878
+ docs/components/anthropicadvisormessageusageiteration.mdx:
+ id: ca0effff715e
+ last_write_checksum: sha1:66558840a0330602b3e022e9686b3f2f8529b959
+ pristine_git_object: 0d71d36579c70fd1a3d33b51e466a411a6077fd0
+ docs/components/anthropicadvisormessageusageiterationtype.mdx:
+ id: 3543a7aa7c29
+ last_write_checksum: sha1:d8888c96d3e548802b7d71d262fcb2221375a669
+ pristine_git_object: c13a23d75f73da4651f7b5927f1d1cf4293601fe
+ docs/components/anthropicallowedcallers.mdx:
+ id: ab91fc216815
+ last_write_checksum: sha1:6f70b8ecad86a2769552cff8bb791483a89ce7cb
+ pristine_git_object: 8cb662d874c67e557153b3e3437412caefbf1af7
+ docs/components/anthropicbase64imagesource.mdx:
+ id: c8a5127d3b74
+ last_write_checksum: sha1:0fe260c697183f4b5331ceb087e6010ccedc1b87
+ pristine_git_object: 31e75cf2b519c27e38bdf5fbe03484a64db1982e
+ docs/components/anthropicbase64imagesourcetype.mdx:
+ id: 9f2cacfdde04
+ last_write_checksum: sha1:80dc1820c0fec6cadf4ffa0dd4166552444dc11f
+ pristine_git_object: 9aa0663b2ef2feabb8d7894cc497b40d9f617ce0
+ docs/components/anthropicbase64pdfsource.mdx:
+ id: e8c4cb6182c6
+ last_write_checksum: sha1:65e7081f4f85e8720b6b5201c47333afa8e10b6f
+ pristine_git_object: 40f0426303483ec62902dd9a54eea37768d2a5b8
+ docs/components/anthropicbase64pdfsourcemediatype.mdx:
+ id: e1949fdb10d4
+ last_write_checksum: sha1:1dd37473566479acacd8b50b1c0166e0217774af
+ pristine_git_object: d20725c1f9638fa00c6d0073029ac68dd9782e77
+ docs/components/anthropicbase64pdfsourcetype.mdx:
+ id: 1c0b189eb6e4
+ last_write_checksum: sha1:cef0696d19df555ac5934ae55f4230571699f8a0
+ pristine_git_object: 44deb61a813fde8473d34e0a14ccaef643467e0d
+ docs/components/anthropiccachecontroldirective.mdx:
+ id: 5671704f9917
+ last_write_checksum: sha1:03d0b8bed7d5dd448141a09c4515594bcc7ef3f2
+ pristine_git_object: 5f755985a972da22e96483e3807cb2029ba18989
+ docs/components/anthropiccachecontroldirectivetype.mdx:
+ id: f5d844d35b58
+ last_write_checksum: sha1:9e513498c44431258e61e8fb25537d8f6c5d4f7d
+ pristine_git_object: 5b35ca5eb2aa6611d5c6889986aa94a4071867a5
+ docs/components/anthropiccachecontrolttl.mdx:
+ id: f047a00a8826
+ last_write_checksum: sha1:7731c7cecebc8d0ea5d779a811809d4d570ed7c1
+ pristine_git_object: bd3e799f85c07638dff4daf50d361bc718c47b0f
+ docs/components/anthropiccitationcharlocationparam.mdx:
+ id: c40e539e0fb1
+ last_write_checksum: sha1:bf7cb3fdf2b38b00e4b026e7c0304d9e308cbb75
+ pristine_git_object: 5a68da5540c99b154267f8de0c1b43532df2cd0f
+ docs/components/anthropiccitationcharlocationparamtype.mdx:
+ id: fb368c51e96e
+ last_write_checksum: sha1:0e987851554c13b9066772aabc5b7866a4edcaea
+ pristine_git_object: b4a606b53f264451f413f43d357d847d0999e6cb
+ docs/components/anthropiccitationcontentblocklocationparam.mdx:
+ id: f4549718f116
+ last_write_checksum: sha1:3169c74fc108e980f8b2f47dbc2ba13b95c74065
+ pristine_git_object: b0353d9cc0241b43cdec01be6111e3b7ca8ff2f4
+ docs/components/anthropiccitationcontentblocklocationparamtype.mdx:
+ id: 70b1c02579ed
+ last_write_checksum: sha1:8de858319539ca2a1a66e59d74d60cd380ccad10
+ pristine_git_object: 7c3d03d2357b9bdee42d24ff0d85725ab107635f
+ docs/components/anthropiccitationpagelocationparam.mdx:
+ id: 78b8f9392f6f
+ last_write_checksum: sha1:7e14d2b9ced1ccdbc493a0c2d61630018ebdd85c
+ pristine_git_object: 137db690f89cdefd486e9e0759b38417bca4623c
+ docs/components/anthropiccitationpagelocationparamtype.mdx:
+ id: 600fbeec8753
+ last_write_checksum: sha1:dcc72105e3f4c5f50ff39092ad82dc511d65e73b
+ pristine_git_object: ebe0335b3a26503e24ffa142fb1c3907c5e23600
+ docs/components/anthropiccitationsearchresultlocation.mdx:
+ id: 40f569d8ec6e
+ last_write_checksum: sha1:503cabd5f211da0e9681f802b63e6a242069e3eb
+ pristine_git_object: 4766fcaadfbff64d65a1b3fbffd3ae95cf8fe435
+ docs/components/anthropiccitationsearchresultlocationtype.mdx:
+ id: 100166b3a8b6
+ last_write_checksum: sha1:deed2eb89dc2d1c20b084e4e4c0a2c74b4f84b7c
+ pristine_git_object: 096cc0d6ce515592417e620b1340aa3b4ea02638
+ docs/components/anthropiccitationwebsearchresultlocation.mdx:
+ id: 95ef98e8c423
+ last_write_checksum: sha1:033b55c4b6e7cf6161a5d059d89ba0cd506d0d0d
+ pristine_git_object: b03268fdff9d48c3e99696ec02c0636c5d23871b
+ docs/components/anthropiccitationwebsearchresultlocationtype.mdx:
+ id: 1d41c18eef52
+ last_write_checksum: sha1:a18a6f783fc84d86afb56b21cf08ca9d74297b0a
+ pristine_git_object: 9cb6d29da30e11fd653a9bb5a06c6f7592ea56c8
+ docs/components/anthropiccompactionusageiteration.mdx:
+ id: 9bcca00fbe93
+ last_write_checksum: sha1:7d79a2bda26c860d3da4882bf4c8b4e044d2ed56
+ pristine_git_object: 2f0a28b5a960f7943b7ed5b3cff99e66af1238e7
+ docs/components/anthropiccompactionusageiterationtype.mdx:
+ id: 9a374fa59115
+ last_write_checksum: sha1:9227f0a88d72dba58bf45a6b6458ed460f790680
+ pristine_git_object: 2b04c2483fceacf8300bb872ea0eed600970d160
+ docs/components/anthropicdocumentblockparam.mdx:
+ id: ece98dcf04f6
+ last_write_checksum: sha1:5a05c624a5a134bedac12d687f51621448627daf
+ pristine_git_object: 5a24251490513dca5c64fa3f8b29c80eafdcd331
+ docs/components/anthropicdocumentblockparamcitations.mdx:
+ id: 474518ae0167
+ last_write_checksum: sha1:798372e77425fd7127a318c75247ce44e6f1dbfd
+ pristine_git_object: c8b4d39a9ea29a180e8f0294bea2c59199ad9301
+ docs/components/anthropicdocumentblockparamcontent1.mdx:
+ id: c9673121dead
+ last_write_checksum: sha1:a1afe1bee9f2d69e69c102d2c2aa2e2e951086dc
+ pristine_git_object: 151f550d3652849c20b3569c60b1864b73ba9e6f
+ docs/components/anthropicdocumentblockparamcontent2.mdx:
+ id: 7101c47f90bd
+ last_write_checksum: sha1:747034b2efad9fcf44a65c29a51582778c3240bc
+ pristine_git_object: c2330d41c96d003f46cfb2ef4c05cdc53739be91
+ docs/components/anthropicdocumentblockparamsourceunion.mdx:
+ id: 0fe41665501a
+ last_write_checksum: sha1:b986c4111210ece695b40750d8006f103caf5735
+ pristine_git_object: 644c8db7053f3a75bf33bb2430c53183bfca2e22
+ docs/components/anthropicfiledocumentsource.mdx:
+ id: 3cf4c2213084
+ last_write_checksum: sha1:1f490c185f0c5599669591755da9bd6500406812
+ pristine_git_object: 9b1f7560f374cc909c2ad8fefd2256ee30d21f0e
+ docs/components/anthropicfiledocumentsourcetype.mdx:
+ id: 911db198eb3b
+ last_write_checksum: sha1:491e11043880ae4e97048c0a7eb3b878214c7d83
+ pristine_git_object: c86bc52963eca6a9de705f418c56d17a4bf8ebc6
+ docs/components/anthropicimageblockparam.mdx:
+ id: a85ff43edd3a
+ last_write_checksum: sha1:b2324840f7be26004674f2a59f5d66122b75437a
+ pristine_git_object: 2d95dd47a3b3f4551cd4a148f4936057a40587f5
+ docs/components/anthropicimageblockparamsource.mdx:
+ id: 82f05c79d5cb
+ last_write_checksum: sha1:0939a26da32a1d150a58d6988b9ef8bbd49bacf4
+ pristine_git_object: 7a6eede7854ed53befd8988077bef7e0b715c150
+ docs/components/anthropicimageblockparamtype.mdx:
+ id: b696c47f8715
+ last_write_checksum: sha1:3c6aff8307fbb3e3af1dddecfcd0a5c00c036eea
+ pristine_git_object: eeff0ef379acc11269fc0ffa844f0fcee5d0d11c
+ docs/components/anthropicimagemimetype.mdx:
+ id: b518aeb3d276
+ last_write_checksum: sha1:8829e45ddfca9a783b12141c24e2dfb19383923c
+ pristine_git_object: c89e385a2dce4dfe40f5f83e2a2d7b697ef661e4
+ docs/components/anthropicinputtokensclearatleast.mdx:
+ id: a5500be92534
+ last_write_checksum: sha1:0c07d15b46c9182df56675c09406420066870c0d
+ pristine_git_object: 0c85fad247264e767809bf9ddddabbfaba3229b3
+ docs/components/anthropicinputtokensclearatleasttype.mdx:
+ id: 6e95ee572274
+ last_write_checksum: sha1:6a0bebe7d7d7242a14b6d65b4267b019cc5499db
+ pristine_git_object: 315dcc84d5c04957b2f0d68b667a0a0b902a36cd
+ docs/components/anthropicinputtokenstrigger.mdx:
+ id: 344c9265efa4
+ last_write_checksum: sha1:431d4d0eb52f9e6d0c27f7ae0bce2d53f1848932
+ pristine_git_object: 72fe90a578ac686e3ebb0b361b22035eb13f652f
+ docs/components/anthropicinputtokenstriggertype.mdx:
+ id: d4de58548475
+ last_write_checksum: sha1:c371f8d3fdadcc84fe2a6451e3dce096a71448b3
+ pristine_git_object: 2b0b01f8e3cad9bbe847881844feee8f0ac1347b
+ docs/components/anthropiciterationcachecreation.mdx:
+ id: 3d219e812746
+ last_write_checksum: sha1:604cefcc9984ff6aee5c889c0e7054830753a0fd
+ pristine_git_object: 29b33e64aaf405c0010f7447d9997ab65f9d7951
+ docs/components/anthropicmessageusageiteration.mdx:
+ id: ad0c79d5feb1
+ last_write_checksum: sha1:88a599efb8922898bc6a8fa0ca730e1ec0f39eec
+ pristine_git_object: 01ec99b0eb087e090b93fd49ef82301bcb2c05b8
+ docs/components/anthropicmessageusageiterationtype.mdx:
+ id: a81f0a0a59b7
+ last_write_checksum: sha1:ab20ab633f28620f517212774313dae763dc2ce4
+ pristine_git_object: e8cb0341e0acd625e35f151db84f0aab7a51e3d6
+ docs/components/anthropicplaintextsource.mdx:
+ id: fab547d404e1
+ last_write_checksum: sha1:31f76997c99405badc149bbb4ed51ebb6ac4a4b0
+ pristine_git_object: 3a07d04fc3591e4d6be991d74ea2fc5c8238e9ef
+ docs/components/anthropicplaintextsourcemediatype.mdx:
+ id: 7035f2cd2d84
+ last_write_checksum: sha1:2bd9d29200f68be7fcfee2fefe41e16b3308ad9e
+ pristine_git_object: 2c017cc57bdab1be88b343c456221724a9f9cf7d
+ docs/components/anthropicplaintextsourcetype.mdx:
+ id: 6e7d778bbb64
+ last_write_checksum: sha1:7bc64373f6ef127247b59329f49d3718db308f94
+ pristine_git_object: a538343b4f3fca39a44d3f208e702c482978c4f8
+ docs/components/anthropicsearchresultblockparam.mdx:
+ id: 5c62b24b2c58
+ last_write_checksum: sha1:a8acf36f4eb32d7d01a906f889f9c76e36786f24
+ pristine_git_object: 517785e7ab5c58a8e41292572d2d581a0a0e3df7
+ docs/components/anthropicsearchresultblockparamcitations.mdx:
+ id: e6a0db284ce9
+ last_write_checksum: sha1:20a8315824e11129d12d4d5c441e9fde3691a1f5
+ pristine_git_object: 107bda3275f8d6ac6cb1cee9e2bef961807fd7fb
+ docs/components/anthropicsearchresultblockparamtype.mdx:
+ id: 06be14681704
+ last_write_checksum: sha1:8371b32dcf174d3381f46d198aef3445bb22c8b5
+ pristine_git_object: 302faea5f574d9bfe746ee1241d03ddf9d39bce1
+ docs/components/anthropicspeed.mdx:
+ id: 1227dfabccec
+ last_write_checksum: sha1:0ba0013465693c68ce5820446a42525416df92cc
+ pristine_git_object: 6f1e9ce880a0c3173ce7af4d14c8508b686b8ebc
+ docs/components/anthropictextblockparam.mdx:
+ id: bded5d409e91
+ last_write_checksum: sha1:5c8b4dafc14fafa615c888b9cd207bac55ebb585
+ pristine_git_object: 6d00495d81a02e202e2ae1346439d734a75df8f0
+ docs/components/anthropictextblockparamtype.mdx:
+ id: 7f03a13234b7
+ last_write_checksum: sha1:12c7718c5c0da4561914ed95dd6853873568bd05
+ pristine_git_object: b6b0d6f9022f2046c713d768125927e22ecc9431
+ docs/components/anthropicthinkingdisplay.mdx:
+ id: e068ddf6374f
+ last_write_checksum: sha1:47d00b51a96ed72da8986432bdf46d7e1e9225b3
+ pristine_git_object: e30b6f747c5fd1194beef3483a254f81afc2abfc
+ docs/components/anthropicthinkingturns.mdx:
+ id: 795200cbbc8c
+ last_write_checksum: sha1:9b3125daafb83c3a8843cd07224670f352b8ac40
+ pristine_git_object: 9c9202152d4688ed2e7c5c311c6c85d8362f08d5
+ docs/components/anthropicthinkingturnstype.mdx:
+ id: 58b7f8554e4d
+ last_write_checksum: sha1:6193e98647de03e888bdfedec1c18a2c36de8a07
+ pristine_git_object: c1034a4153765eb307c650c27e85b0832263b934
+ docs/components/anthropictooluseskeep.mdx:
+ id: a80174ecc369
+ last_write_checksum: sha1:b05b93553bbb32cef5150f79e1c2f0ca55298e5f
+ pristine_git_object: 56a3b082a60c9f8517cc21e606d4720bc300cd99
+ docs/components/anthropictooluseskeeptype.mdx:
+ id: adb454cd03b9
+ last_write_checksum: sha1:41c4c636f0d482e14c5895f125df31cdcaae98b7
+ pristine_git_object: 55631753337c9ddf8b23af3989cc21a5e47e9649
+ docs/components/anthropictoolusestrigger.mdx:
+ id: 4b0e4988821f
+ last_write_checksum: sha1:2c414a4792ada35dfaf13fa9228daa4564228308
+ pristine_git_object: ddf146336404c8a41615a0867ccf78b68b59e750
+ docs/components/anthropictoolusestriggertype.mdx:
+ id: e4f717265714
+ last_write_checksum: sha1:9434fb13f4730a9a0983d8a063c034d4c0ed4654
+ pristine_git_object: 0f4676272480c2cb37707b6294189def4fba3770
+ docs/components/anthropicunknownusageiteration.mdx:
+ id: ad8bddddee13
+ last_write_checksum: sha1:48f2ec21cdb27842b41f4a7a9ed5116efdb2a216
+ pristine_git_object: 9a298f5071bcd359257e4cdef2bcac07d7b9e32b
+ docs/components/anthropicurlimagesource.mdx:
+ id: b1a4b26bd6a2
+ last_write_checksum: sha1:48cd15680bc4a4167322bdd533d3bb1b5825126f
+ pristine_git_object: ac91360511b9d4352dc891b3732048a610d0f02f
+ docs/components/anthropicurlimagesourcetype.mdx:
+ id: 05696c6ed74e
+ last_write_checksum: sha1:5d351eceaad58632bf7fbf61a9499c956a45cb1d
+ pristine_git_object: 86b72b871c03a39e314f1ea6bc74d622e619225c
+ docs/components/anthropicurlpdfsource.mdx:
+ id: ed22f90fa1d7
+ last_write_checksum: sha1:bcbc3db138d2acb0eaa6400c5d39d8adbde5d5de
+ pristine_git_object: 50d60b95a3c2bb393a6453523a8c1d8115a4f40f
+ docs/components/anthropicurlpdfsourcetype.mdx:
+ id: 1f4c02e2bf5b
+ last_write_checksum: sha1:857d5e6b5220b5821255038846c0dfc9b6907e98
+ pristine_git_object: 717ed3b5cbda8cbd83e3c497c804f0efa9e29448
+ docs/components/anthropicusageiteration.mdx:
+ id: 3310bf2eed94
+ last_write_checksum: sha1:f3faaf7624149614de715e245ea4c667e433ecb9
+ pristine_git_object: 0ae331c1d87201007d6f2da04cb03d911004e0e6
+ docs/components/anthropicwebsearchresultblockparam.mdx:
+ id: 0eec50f08630
+ last_write_checksum: sha1:51ff39d85073da0fa458f6f4b6e837c4298aa0d3
+ pristine_git_object: ddcfad3966ea8e7e0553f9eec96c1fafe5f624ae
+ docs/components/anthropicwebsearchresultblockparamtype.mdx:
+ id: c0b4c6f50ed5
+ last_write_checksum: sha1:0f6fb484091a5915b19a4b6f4223619219e67bb2
+ pristine_git_object: ed07bc52c2409eeb97f0ea548ca0dc0e15e1c2a6
+ docs/components/anthropicwebsearchtooluserlocation.mdx:
+ id: bca2587d7144
+ last_write_checksum: sha1:0e366c190891756a9f4c21e01ab348f686d8c94b
+ pristine_git_object: 0096c9dc4b5624da3231c80f579af1ddb974e049
+ docs/components/anthropicwebsearchtooluserlocationtype.mdx:
+ id: 804f3ec181f9
+ last_write_checksum: sha1:f3017ffb67a0781d23ab853352e72fc1c73452bf
+ pristine_git_object: c0387e05711d85511538984dbf5eef3cdcd820fc
+ docs/components/apierrortype.mdx:
+ id: 2f73a03b8af9
+ last_write_checksum: sha1:ef4dab4b1d653fe3c2719576c9cd037b8c998ea1
+ pristine_git_object: 53c45463b67a1365c2700f73ddb7330b048e79f0
+ docs/components/apitype.mdx:
+ id: 1a902c4c05f3
+ last_write_checksum: sha1:a9f2bc6e9eee1a1834a8209e5683037894aa59db
+ pristine_git_object: 185a0faa93cb1332684421f556cb15ec06d81543
+ docs/components/applypatchcallitem.mdx:
+ id: 00fd75573009
+ last_write_checksum: sha1:8650be12909ab98cefc237e3499b73d9a79cf3d3
+ pristine_git_object: 69bc2b8640a58837b896694e456a966a6b6cb9da
+ docs/components/applypatchcallitemtype.mdx:
+ id: 60f2448e3f7c
+ last_write_checksum: sha1:42c3944dc0214f1a6e2298efe4650a3944c014ae
+ pristine_git_object: 23ee1f224fc5f612565f585325711b247fe73d5b
+ docs/components/applypatchcalloperation.mdx:
+ id: d8a2db634407
+ last_write_checksum: sha1:bef8f39a18f3a724facd92da02746e56d6abcfb7
+ pristine_git_object: 2159c8161efd3fc52885005a1bcde3723ef70db2
+ docs/components/applypatchcalloperationdiffdeltaevent.mdx:
+ id: 1127d6e114d6
+ last_write_checksum: sha1:170f7c5e374d7460492a836163d9140cb6300722
+ pristine_git_object: d8c4af6acb413455799566592a3a2e919bb1399a
+ docs/components/applypatchcalloperationdiffdeltaeventtype.mdx:
+ id: 8427f957f111
+ last_write_checksum: sha1:ef85bd0dc72fc6b2d1cbc9534a4f458f73347c0a
+ pristine_git_object: 9647bceb873bdbb759225b22446463e4d7e0cfb5
+ docs/components/applypatchcalloperationdiffdoneevent.mdx:
+ id: b8a781256a05
+ last_write_checksum: sha1:9f4e2b24a03785550e7e4678395555791ebdd2f2
+ pristine_git_object: c722bd49551f3dd6daffa501e80e6ded919c4bd3
+ docs/components/applypatchcalloperationdiffdoneeventtype.mdx:
+ id: 64b044b951e2
+ last_write_checksum: sha1:b71b4192a50c857a4f897b40b01d385468f81e96
+ pristine_git_object: 9bddff0f87b9abaf62ffce6ce34848d088bfe02f
+ docs/components/applypatchcalloutputitem.mdx:
+ id: 319e0ff92320
+ last_write_checksum: sha1:098176e4b514affe2c0576953ea7dac4a7f69f91
+ pristine_git_object: 6ef61a86a7cb6fcf6c38430326686241d47a1daf
+ docs/components/applypatchcalloutputitemstatus.mdx:
+ id: 21243e5bc7c4
+ last_write_checksum: sha1:a50d28b9cbb8b483c456c51c378c9c1ad0e61a40
+ pristine_git_object: 435847d24468b3b6a91333d5c16f8bb6113dd863
+ docs/components/applypatchcalloutputitemtype.mdx:
+ id: d7e5ae4c0f1a
+ last_write_checksum: sha1:998f9cf4f96177d258fb5898fc407617d516286f
+ pristine_git_object: b0adb3c30faad74e9d5a87533fb0ca2d84f31894
+ docs/components/applypatchcallstatus.mdx:
+ id: 3447fcc69da4
+ last_write_checksum: sha1:c3baddd0dab5e6e8aeb8ed151cdf946047214fda
+ pristine_git_object: 13f21ea1e699e8ebdbad0ef02d8ac79312605394
+ docs/components/applypatchcreatefileoperation.mdx:
+ id: 21db5a91351e
+ last_write_checksum: sha1:d983e8d15c9b776441a14a3587c2d44892af5e92
+ pristine_git_object: 37aa1921b19ef1b2cc64d2525bfea15d3f08755f
+ docs/components/applypatchcreatefileoperationtype.mdx:
+ id: 6d42700db0f7
+ last_write_checksum: sha1:8859456f8b81bfc0004b2bb560b6ef6e305fb95f
+ pristine_git_object: 7a95b9f6f55b2ae9ffeb4024ddf756b77d2a0a55
+ docs/components/applypatchdeletefileoperation.mdx:
+ id: 5e7f1e7cecfc
+ last_write_checksum: sha1:ab8019a74b87d52e5c3fe1dbae27ed7bf99a1c21
+ pristine_git_object: 49463ffa8f2068878116a768021afd24b62aa845
+ docs/components/applypatchdeletefileoperationtype.mdx:
+ id: 6937c4db9bbe
+ last_write_checksum: sha1:40a3a2c790d3cdcff0d6795cffae632e7d74ed61
+ pristine_git_object: 8866b2a2d65abd4b301ae7dd8e35952b850f9c88
+ docs/components/applypatchengineenum.mdx:
+ id: a307df2529f1
+ last_write_checksum: sha1:d3b5e286881d66a6c6ab9b796ff611d7180c3eee
+ pristine_git_object: ec6e50782a8bc7ca4a4c745ee75481aa3cc14aff
+ docs/components/applypatchservertool.mdx:
+ id: 7c6b48cc9e29
+ last_write_checksum: sha1:7c4af0800a07de672bc8fcf718c1a859a5e25d4c
+ pristine_git_object: b8c80524bb8be02190b268f08254abb1e3ca878c
+ docs/components/applypatchservertoolconfig.mdx:
+ id: 88b564f86759
+ last_write_checksum: sha1:e94902185668f6ef969a32d3bd05cb81d5b1737b
+ pristine_git_object: 1ec1793d367ed99e395745d650ff9adf1038c413
+ docs/components/applypatchservertoolopenrouter.mdx:
+ id: d0dd549b2947
+ last_write_checksum: sha1:7ca81fb0e93b24ee6ac76a28122b3f4703beee99
+ pristine_git_object: 98531bfb794572a28440da99c407e030d82f0a4d
+ docs/components/applypatchservertoolopenroutertype.mdx:
+ id: d0cf7bbd0a04
+ last_write_checksum: sha1:1216b3c33d85c37bf2f27009dfb4a02607070ceb
+ pristine_git_object: cfe1c7868eb70fd55558d683118d2c9b95da9879
+ docs/components/applypatchservertooltype.mdx:
+ id: ee204374e74d
+ last_write_checksum: sha1:6514db808d355806ddd65ada0f3987dbc5dcc67e
+ pristine_git_object: e97bf57ae9c3f2f04511355100ad7e82ec379600
+ docs/components/applypatchupdatefileoperation.mdx:
+ id: 0a3def9fcda0
+ last_write_checksum: sha1:d5834ddb9b2774c0800609dd8ba719a9d1eb52a4
+ pristine_git_object: 458f786721701cd75966fb545d4b1a3023395c84
+ docs/components/applypatchupdatefileoperationtype.mdx:
+ id: 409472b929a5
+ last_write_checksum: sha1:0b3f4a732cdc59daf00ec264cc75f640747f9b31
+ pristine_git_object: d76a0f84ab88089a8e523fb54729fe8858d8eecf
+ docs/components/apprankingsitem.mdx:
+ id: 4e4110a60add
+ last_write_checksum: sha1:831b12332a6c649f9bc4d1beedeec784f623e386
+ pristine_git_object: 08cc35c0a08268f89507a8e05432b7c3a075d3b2
+ docs/components/apprankingsresponse.mdx:
+ id: a88c9a36c7ae
+ last_write_checksum: sha1:d6e4d441acee693ade65d6c24bc94884d6305ac8
+ pristine_git_object: 06ea87da92af18eb4cef9c2ea501ff57045e121f
+ docs/components/architecture.mdx:
+ id: 2092a26b770f
+ last_write_checksum: sha1:8f179b922fce777d3229ca524750ddaabe02fc91
+ pristine_git_object: 277a0da557d67e40f91a9a2bb0fd318f5bf9f9bf
+ docs/components/audiourl.mdx:
+ id: c457db82a4ac
+ last_write_checksum: sha1:eda63702a1bab370efe326a661950ea0b864169e
+ pristine_git_object: ef98b1de499df79940ccacaf5da0be2d635b104e
+ docs/components/autorouterplugin.mdx:
+ id: 4d62f9b36bc2
+ last_write_checksum: sha1:b0058abe56fb36523cac5296b6124fa84cb006a2
+ pristine_git_object: 6fe8acaab8a38a767f710aebbc3390ca9022417e
+ docs/components/autorouterpluginid.mdx:
+ id: ea9862a88ce8
+ last_write_checksum: sha1:51d6cd6296501209ebc8b721adb3feadeb798f9a
+ pristine_git_object: b3395732b1e9de51a13d9c4952c1876f6c9827b2
+ docs/components/badgatewayresponseerrordata.mdx:
+ id: c7d6d22234b0
+ last_write_checksum: sha1:4aef24007fd61cc6e64dc2f67030f1ce28a6a258
+ pristine_git_object: df2de9f107779203990c42a3335c0e61e98af3bf
+ docs/components/badrequestresponseerrordata.mdx:
+ id: "143714074251"
+ last_write_checksum: sha1:6d1d4489e3f58e8ca88dc3c0262f52a9e303e4df
+ pristine_git_object: 3afce5ccf17f7bf1112513a9e186a2b44fae6d3b
+ docs/components/baseinputscontent1.mdx:
+ id: 67873741fab6
+ last_write_checksum: sha1:35d42d9c20a3f2c2f48f7e51624680052802fbd6
+ pristine_git_object: e0824c06099830cf6502d71a98926a84be27fe5f
+ docs/components/baseinputscontent2.mdx:
+ id: 347dbce23259
+ last_write_checksum: sha1:cc4a642a5cdb86679b3747c980844c457be677c4
+ pristine_git_object: 079aa0b32257632d646e85afb48c3e2d38620393
+ docs/components/baseinputsmessage.mdx:
+ id: a2c89b56ff2c
+ last_write_checksum: sha1:158dd9adc64d4c3cd675f226f22509972c478cf1
+ pristine_git_object: 0c00444a9d685404fd06f8fbad92da6115140b0e
+ docs/components/baseinputsphasecommentary.mdx:
+ id: 13cb24429a56
+ last_write_checksum: sha1:e6dfaab64ca8eb1c07d3835d694a30185b0e8f1f
+ pristine_git_object: 78b77b356cc46a76a7ceb20d1930045ac1e426d5
+ docs/components/baseinputsphasefinalanswer.mdx:
+ id: c5ac71fc5265
+ last_write_checksum: sha1:f878c1bd6481f40814fd59d0703eb3a644ce4fb5
+ pristine_git_object: 0ff0427fc96c7640817e5130d195796f20b05685
+ docs/components/baseinputsphaseunion.mdx:
+ id: 0a2128c06411
+ last_write_checksum: sha1:5dae76acbeec0a8a1613f48f98ee8e7ef7fdf1fc
+ pristine_git_object: 5a0578435dcfff203e6f8be5e869bda7dc018db2
+ docs/components/baseinputsroleassistant.mdx:
+ id: 0db596de2098
+ last_write_checksum: sha1:3bbbc88af5eb3853264c6b472348eb6385d67cf3
+ pristine_git_object: ebf4315e93f5bedf773d2368d13f71f3d7fb6fa8
+ docs/components/baseinputsroledeveloper.mdx:
+ id: 7506f1e50a30
+ last_write_checksum: sha1:33d8df1602a3761403f59b8b771f571f8d250389
+ pristine_git_object: edbe6df5f2858dbaabab53b48d3e4a399bba2d3b
+ docs/components/baseinputsrolesystem.mdx:
+ id: fa080b344039
+ last_write_checksum: sha1:3d54d8ada0a2908350305debb35e1ceeb680d11b
+ pristine_git_object: 5d94f023c315f4e1340ed6334e2dcd61a7181557
+ docs/components/baseinputsroleunion.mdx:
+ id: 82e0b25e5de1
+ last_write_checksum: sha1:be482f41c4ea6a6a5918b51de590575361651c8b
+ pristine_git_object: 31607b26739ba19138c9559dfa9c598da83ea936
+ docs/components/baseinputsroleuser.mdx:
+ id: f18ba0e11110
+ last_write_checksum: sha1:15f239e21e81dc30ad9f9f9fbc83eb966b2cd93f
+ pristine_git_object: 2ca95da4096dd3ae5e08f5416cb770abce5ecea7
+ docs/components/baseinputstype.mdx:
+ id: 5a9e2145fd5d
+ last_write_checksum: sha1:becc319e0aa24b015e19a144455433a180980b26
+ pristine_git_object: 6bb25bd0a4211020cb14661b95fae6ca5366677c
+ docs/components/baseinputsunion.mdx:
+ id: 4a9f9aa3a775
+ last_write_checksum: sha1:176bf9b20015a91650a825f9c10b7384637e678f
+ pristine_git_object: e006bcc0c1b5c3cef08302490ace5418a3489eb2
+ docs/components/baseinputsunion1.mdx:
+ id: cff794940c38
+ last_write_checksum: sha1:8e14c3c03333ce594563b02552753215b4f93e84
+ pristine_git_object: 633bd16e1abe0e3894c12f551761ad1a9da37d5e
+ docs/components/basereasoningconfig.mdx:
+ id: 3c6f03de40b1
+ last_write_checksum: sha1:3273f4dc1e6af65f58aa87e4b97bdab579f65f8a
+ pristine_git_object: 628251998a3571d2b89225ac5a707f372c5ec143
+ docs/components/bashservertool.mdx:
+ id: 664dbaf53aa3
+ last_write_checksum: sha1:0b276c752d22836d67b31aab477b4ebba24c17c1
+ pristine_git_object: 09464da84a2c1e57d9c6d7abda98254de075a858
+ docs/components/bashservertoolconfig.mdx:
+ id: 7c7f1dd1cc47
+ last_write_checksum: sha1:8d566ee18106ce2ff562d5adb0a0f87a59aba68e
+ pristine_git_object: 967974c047982a57c544e0533f251b200edeec2d
+ docs/components/bashservertoolengine.mdx:
+ id: d0779ee68ded
+ last_write_checksum: sha1:68e15335058a5c91b1e3fc74efa5e5d3767ad0fa
+ pristine_git_object: af3c05c5f760a6ea6178f90c6551809c106a9701
+ docs/components/bashservertoolenvironment.mdx:
+ id: 028fd5ff37b7
+ last_write_checksum: sha1:2e6e9420400f6c9a149dea51f05e18c0d43b755d
+ pristine_git_object: d1c6a2d8288c5e17642ae15eeda6b77eb17c0ac6
+ docs/components/bashservertooltype.mdx:
+ id: 73f42e4bc945
+ last_write_checksum: sha1:599705c7ef520285d8da9e5510109846aa7fd332
+ pristine_git_object: 539a7c32200bef803260226e81f3225e9529688e
+ docs/components/billable.mdx:
+ id: b983fa757056
+ last_write_checksum: sha1:80d142a13e98a8f13da2850753282adf2ff59521
+ pristine_git_object: a907902b407eac76aae4cbd5ce4814b36168123d
+ docs/components/booleancapability.mdx:
+ id: 514674d4ad70
+ last_write_checksum: sha1:1421e43c3d78989f55da2cccb79fee62d20f87cb
+ pristine_git_object: 74ba072818bc46d5e390155892608628188e8123
+ docs/components/booleancapabilitytype.mdx:
+ id: 9fde49928d3a
+ last_write_checksum: sha1:6746044145b81e2480e6f2757db714a467f0d1f8
+ pristine_git_object: 9c583fdf315b6ac8ad38f254d932aaadde8c7ded
+ docs/components/bulkaddworkspacemembersrequest.mdx:
+ id: 92f44877345a
+ last_write_checksum: sha1:98e0c96a7ea1e43172ef8d71527de4c5368daa42
+ pristine_git_object: 6773678759b3546fe71f0fd3f933083f6ba75c88
+ docs/components/bulkaddworkspacemembersresponse.mdx:
+ id: 025552ef9ad5
+ last_write_checksum: sha1:17789b08b7bb66de389eff2df8d69384789ebb0c
+ pristine_git_object: 4550429c5fd489a705b13f2a331800327a3e6269
+ docs/components/bulkassignkeysrequest.mdx:
+ id: 7a23fc6e5c6c
+ last_write_checksum: sha1:1a2b112b1f9c2d62de91f2226813222835980c83
+ pristine_git_object: ce5a37d8d8008fb6ad1522d0aec06ac8acc0ae82
+ docs/components/bulkassignkeysresponse.mdx:
+ id: 8a8fa3606343
+ last_write_checksum: sha1:acc37bf1d880ab371366782e9b20788fd6b6e4e7
+ pristine_git_object: a9f54e53b50035701b003e1111e1e3686a1dd4c7
+ docs/components/bulkassignmembersrequest.mdx:
+ id: c328ee1814d5
+ last_write_checksum: sha1:6a8e7b833e1b77dffb41bd7fb96284483f548979
+ pristine_git_object: 272a74b2a7dc99dacca3ce1102b722ac54579de3
+ docs/components/bulkassignmembersresponse.mdx:
+ id: 13246b6a2fa8
+ last_write_checksum: sha1:644593e93e57abc72e18094f1d6e3be0e21fc72c
+ pristine_git_object: fb4f9e2b8a31a2f4f2f11c9f61672453e410d71d
+ docs/components/bulkremoveworkspacemembersrequest.mdx:
+ id: 870d98a00042
+ last_write_checksum: sha1:0402d4d47418f0c1d7a28ac6ebbbce84cbd89c8a
+ pristine_git_object: e05a95672ae69de6b901fa9c6d6b756e2443a0b5
+ docs/components/bulkremoveworkspacemembersresponse.mdx:
+ id: 5cc37edfd35e
+ last_write_checksum: sha1:74d5d820105c95b3a9dcb9e44086f91a7b606c8a
+ pristine_git_object: a4537109a54950ee2f9946510f39649d879de69d
+ docs/components/bulkunassignkeysrequest.mdx:
+ id: 8752e2f524aa
+ last_write_checksum: sha1:a021c436ce117425f75144ae12cb4da4708c1d97
+ pristine_git_object: 53506dd9c53a765c54d11b9ad01cb158bf94bada
+ docs/components/bulkunassignkeysresponse.mdx:
+ id: df60f21e1dbf
+ last_write_checksum: sha1:9f4a5f2bcec4fad73f25cf3a25822764771903ed
+ pristine_git_object: efa2bc14bef5e61c03928a32e708d77e62cf5970
+ docs/components/bulkunassignmembersrequest.mdx:
+ id: 8d4ff00ba329
+ last_write_checksum: sha1:e4da9162320c05575f90b0ac102e24ca5e0b07cb
+ pristine_git_object: a39b1c2183de3401f50635840a96a0725bff8160
+ docs/components/bulkunassignmembersresponse.mdx:
+ id: 178540139aa7
+ last_write_checksum: sha1:ad5069bbadec3af5848a625fdc2e924d8d484624
+ pristine_git_object: 1907c82620a110d10f957470da820d0a8f5dde72
+ docs/components/by.mdx:
+ id: ba68e75edfab
+ last_write_checksum: sha1:403af1a9a0e45871f7ce46d9c0c35e5bfc469bd2
+ pristine_git_object: 8dd2b456e53244a5eaf7e3e957b00840f6fd9601
+ docs/components/byokkey.mdx:
+ id: f67303c7207c
+ last_write_checksum: sha1:034c0336049d87ffc6bb4ac2825c02513a7f25a6
+ pristine_git_object: 151dd8398dc818ff4d26d6859d25efd202d03917
+ docs/components/byokproviderslug.mdx:
+ id: 6ea70819f6d8
+ last_write_checksum: sha1:5116cfa7ed1f8270dfc9d277d3cc0ee02b147c44
+ pristine_git_object: 439563d0fe5440c4f0127337f39ddc403f63ae06
+ docs/components/caching.mdx:
+ id: edc8a0f8f37f
+ last_write_checksum: sha1:b4e6619f389c1440555ec567fbdcddbc9976e63e
+ pristine_git_object: d9c719912c5e82aa2bf9b02c54fb03c8d448ef83
+ docs/components/capabilitydescriptor.mdx:
+ id: 34ac0e581d79
+ last_write_checksum: sha1:62ee9ccab6cec4572383cef654997ab4106d4676
+ pristine_git_object: ace8f22b972273bdee620a9981abcb0cc46d994e
+ docs/components/chatassistantimages.mdx:
+ id: ffb19be9dace
+ last_write_checksum: sha1:cbcf9e1fb04e660786ad38a273b852cf84504f9f
+ pristine_git_object: fbd1a4de84eb0bc24ba322e18afd95c5dfab82f9
+ docs/components/chatassistantimagesimageurl.mdx:
+ id: 2c8e2ee8441d
+ last_write_checksum: sha1:38785ea38bca7de912765ac627fdad31863167de
+ pristine_git_object: 8a36279a112a3f8efc1ee770cb250e510674e7e5
+ docs/components/chatassistantmessage.mdx:
+ id: 8ba2a16f77d2
+ last_write_checksum: sha1:adc7e210e87fe8dad751970b4c459e07818b02b0
+ pristine_git_object: e2b637c750983fd50b89f4a305a982a4e77c7d6e
+ docs/components/chatassistantmessagecontent.mdx:
+ id: ab4dd265daa1
+ last_write_checksum: sha1:911775e0061c32e7b6501c25a783c743090129d3
+ pristine_git_object: c335554a976734059173a256e2e07c59f638ee23
+ docs/components/chatassistantmessagerole.mdx:
+ id: 6b3ba6abcc49
+ last_write_checksum: sha1:5129b49f15061be42bf604476a8e1fdc972faf0d
+ pristine_git_object: d0cbbf9a78a8db255187cd255ffe516ffaa38d84
+ docs/components/chataudiooutput.mdx:
+ id: 06141b4b285c
+ last_write_checksum: sha1:1ac2afdfde5da6c2487e10b7c52de3efe7e53d26
+ pristine_git_object: 54812b591531add33369295f87cac329c59d0fc9
+ docs/components/chatchoice.mdx:
+ id: 8775e5a97030
+ last_write_checksum: sha1:51acee80190b1ab730e1a2db84dda2d21f79d08f
+ pristine_git_object: 6143931304608275bf36b0fcbb3a77a3538279e6
+ docs/components/chatcontentaudio.mdx:
+ id: b40b6e1d4ef6
+ last_write_checksum: sha1:b373e5f4445fac42fec4ce3a7219731e9a767d7d
+ pristine_git_object: 4fded9376abfe49b35c1e438cb1e59a1a56fac94
+ docs/components/chatcontentaudioinputaudio.mdx:
+ id: f873c3bfc488
+ last_write_checksum: sha1:ef1ccc56ed8e65c3b4353585d1b4b24ead6ec0c8
+ pristine_git_object: 06fd6a6c7f598656dc1d14a8743474c0645a3187
+ docs/components/chatcontentaudiotype.mdx:
+ id: da3cd956274e
+ last_write_checksum: sha1:09d3f72fe287cc303ca6682389915a8fcfc27cdf
+ pristine_git_object: fdb10076d12248abeacfae19a1bd647d4a838eaa
+ docs/components/chatcontentcachecontrol.mdx:
+ id: 215e2356f770
+ last_write_checksum: sha1:cf9c5e64dcedcccbab8d79499bea7bf76e86b1b9
+ pristine_git_object: 250fd47f76c936c2e979b55caa6d4fb17b4a26ef
+ docs/components/chatcontentcachecontroltype.mdx:
+ id: 93c1e9a9146e
+ last_write_checksum: sha1:febb0b8575ef8fc009f71312d8fed2b596cf6d28
+ pristine_git_object: 71ebbaf86ee2982b6d2e2d1061f6fc26a144b7c0
+ docs/components/chatcontentfile.mdx:
+ id: d8848251040e
+ last_write_checksum: sha1:79363873860e9454bb96fc3e09ebba1944b26fa4
+ pristine_git_object: ae0bb19c659e2efc3d430b7432f07ec291925f29
+ docs/components/chatcontentfiletype.mdx:
+ id: 4f4228795d0d
+ last_write_checksum: sha1:f38c6ca62a813bf688a607ee41576bf19be5d74d
+ pristine_git_object: b9b0634218111d6f5e84e1ac5b70aa0392849235
+ docs/components/chatcontentimage.mdx:
+ id: 4d78d1bf6e98
+ last_write_checksum: sha1:0d88e934d173cceb2bbf370cc47cd3cdce5387d9
+ pristine_git_object: 1dc21599163a0c96dd9eae288b2fdf4de4bf94a6
+ docs/components/chatcontentimagedetail.mdx:
+ id: 03ad7cc96976
+ last_write_checksum: sha1:1e6aacf1e34cb67a3787b946cf5fa8b3ca9b8553
+ pristine_git_object: 7935e4a90eaeaca6c1ab7a1a31140d7862ecbfa7
+ docs/components/chatcontentimageimageurl.mdx:
+ id: 52caf7838985
+ last_write_checksum: sha1:1f95a709ddbdfedf760a974d4ae504adc66ebe54
+ pristine_git_object: 814136649641907a449fba88824026e42544c44e
+ docs/components/chatcontentimagetype.mdx:
+ id: b1ca1ebc5e79
+ last_write_checksum: sha1:3880c25e09d68e4f7dad8b8f195a6569fa899d78
+ pristine_git_object: 628241008aab1daaa3c4b796a8c30b2f8b6691d5
+ docs/components/chatcontentitems.mdx:
+ id: 76baba99bea5
+ last_write_checksum: sha1:3dfd9b23c37193367c9ca2c9f4e2b777a5389bd6
+ pristine_git_object: 92c9c5c2ce23807bac9756e55803057921c34f24
+ docs/components/chatcontenttext.mdx:
+ id: a2436d6c5c1c
+ last_write_checksum: sha1:dfda97beb6d5cdb859b9207798e34ed7ed4691f8
+ pristine_git_object: a59dafe92bfb650c89244eaa89f00690fd8282d3
+ docs/components/chatcontenttexttype.mdx:
+ id: eb29ddb48a88
+ last_write_checksum: sha1:154a7cb1f0dcdc0ff60b5fcfe1ce5e86e08bb72f
+ pristine_git_object: 3f8ebf166ab10692349622534f846e1434dd94c1
+ docs/components/chatcontentvideo.mdx:
+ id: 97f75c8e37e4
+ last_write_checksum: sha1:544b7d4d458147d04485999a7fab0e54b03e1a37
+ pristine_git_object: b8a1d5ee3df3e7ad02845285854411d7da83a0ea
+ docs/components/chatcontentvideoinput.mdx:
+ id: 9c532e9e6277
+ last_write_checksum: sha1:84a6017411931c941afeaff1f21b73719deb0d2b
+ pristine_git_object: 7b80ce52b58467bc0d5d2c9f254b0ddeaaf1c03e
+ docs/components/chatcontentvideotype.mdx:
+ id: 55a566b293e8
+ last_write_checksum: sha1:0989b559350a1399ce249828d11b48749f376d18
+ pristine_git_object: a784c584cc684ed1f07155ea6ca2b027dac51aef
+ docs/components/chatdebugoptions.mdx:
+ id: 6e90350c5b3a
+ last_write_checksum: sha1:d82e7036fd0f0ca6e210bfbebd73544a6e9f3b46
+ pristine_git_object: eee9489fd2c3f15a7cc6525688a5b0cd12839e10
+ docs/components/chatdevelopermessage.mdx:
+ id: 36556ee902ee
+ last_write_checksum: sha1:3ad4e33a7aa81ff3174df9bc4416a706dfa2221b
+ pristine_git_object: 05d422366ab8123f4488df014cc733df83366adf
+ docs/components/chatdevelopermessagecontent.mdx:
+ id: 0f36d5e7c6ff
+ last_write_checksum: sha1:fe6c792d0d0f647b8894543c23df0d59a34f3c54
+ pristine_git_object: 9828d6d86c08fe6c5588a8eb879d5ecbb212d245
+ docs/components/chatdevelopermessagerole.mdx:
+ id: ded4269f5027
+ last_write_checksum: sha1:cf1ad00e836b3525ea5e03c3f58f074f7e9ccc4c
+ pristine_git_object: db5c7d49ff22588f7ef3d67bcac0996525bef113
+ docs/components/chatfinishreasonenum.mdx:
+ id: 08f18ef0359b
+ last_write_checksum: sha1:ac1cc050eab292b168ea6307c3206f8c3041a624
+ pristine_git_object: 1449d172e7e2a21ca187603cff331cf6e88622e1
+ docs/components/chatformatgrammarconfig.mdx:
+ id: 6f844bfcaab8
+ last_write_checksum: sha1:3b06375cd2300c9a525f0a1a669d17f3f8a4aa1c
+ pristine_git_object: 8595b86421e9358b343984f05dbb9e909189d041
+ docs/components/chatformatgrammarconfigtype.mdx:
+ id: 8afc3b0c53f8
+ last_write_checksum: sha1:f86f220ce930d1a671b8c702bdea25dcefabfa94
+ pristine_git_object: 9b479f4efdecfa74ed55207183a0bce5d4d38f5b
+ docs/components/chatformatjsonschemaconfig.mdx:
+ id: fddf166f727d
+ last_write_checksum: sha1:454f73f794c83adb2b86edc7bc9cba8b322405de
+ pristine_git_object: 565e33485302c05e328215c33e59fd8414b340b8
+ docs/components/chatformatjsonschemaconfigtype.mdx:
+ id: a468c96dd2e8
+ last_write_checksum: sha1:2e086a538fd2f8f4ea8d762cdada480db695b1a0
+ pristine_git_object: 076ff6d74b18fef40ec7834e006e0753c3f93a51
+ docs/components/chatformatpythonconfig.mdx:
+ id: 715c6afe3312
+ last_write_checksum: sha1:3fcad4a74e09c875ef06784451b503eacffcbd1c
+ pristine_git_object: cd0ab7ba16c7116e04277d05f61a3b530bd19b72
+ docs/components/chatformatpythonconfigtype.mdx:
+ id: 8593572457a9
+ last_write_checksum: sha1:2a1386a233596ed1bdfd8b72bf4a860749c5a8df
+ pristine_git_object: 5949043705855790a5029cd93de4350ec2b56c1d
+ docs/components/chatformattextconfig.mdx:
+ id: 10644d676a7e
+ last_write_checksum: sha1:ecea852c1ae33f0c9bcf98025af11d205d5f7151
+ pristine_git_object: a539cad56ebf149e68e7a7a257ea85a7ad11bc63
+ docs/components/chatformattextconfigtype.mdx:
+ id: e770ff8bf5e3
+ last_write_checksum: sha1:7ae36e7288f3a06d1afa256473a6e62b9f9c3904
+ pristine_git_object: f5cbc93e1277fe0ed97bb520e331a58837e91ab4
+ docs/components/chatfunctiontool.mdx:
+ id: 13433a4eb5b0
+ last_write_checksum: sha1:d3b6abd613e7866de1fb7074e9e794543c8a940f
+ pristine_git_object: 41b4523f970c7a81f2512587ef8dd3a8db150f89
+ docs/components/chatfunctiontoolfunction.mdx:
+ id: b9f813a5b0c9
+ last_write_checksum: sha1:1daf25e4f31b7013fcbcd43f86678ce1548c8423
+ pristine_git_object: 7619eec425176b875101f822b806ff98a5d991c9
+ docs/components/chatfunctiontoolfunctionfunction.mdx:
+ id: 59c7a37a65c9
+ last_write_checksum: sha1:671313b618e2e45e37f94494b8bd88822aa4220a
+ pristine_git_object: e4a50d554a3b23d06c5f2f6e0ec6ee7202d48ab7
+ docs/components/chatfunctiontooltype.mdx:
+ id: 6b715d511146
+ last_write_checksum: sha1:052e19c72306c62984069c9546a4bf8b886984da
+ pristine_git_object: 97fa5f43749ab221d87fa37b3b86d1492da4cbec
+ docs/components/chatjsonschemaconfig.mdx:
+ id: a5484dbdf56d
+ last_write_checksum: sha1:e6d1980a8fd64f9b6c6c6e5a69f5a9d93d1cb745
+ pristine_git_object: 9d355f0ac86084432f766c087f2cf4bd610e62b6
+ docs/components/chatmessages.mdx:
+ id: 8d256772dcb9
+ last_write_checksum: sha1:695f1bf1bb3ac6df1147ce1a2c83474257d4b528
+ pristine_git_object: 54e55e019264004d79b9df6af46cd1f4915999dc
+ docs/components/chatnamedtoolchoice.mdx:
+ id: 952284b280fe
+ last_write_checksum: sha1:d6aa4a48be132ce6c30bc58423800e4ce029e115
+ pristine_git_object: 1c98093bfb533ffad6b97adc78fb099af0c3a792
+ docs/components/chatnamedtoolchoicefunction.mdx:
+ id: 8c2f974fc167
+ last_write_checksum: sha1:292f2c6121d400e80fbc86c75fdf33ca8f496976
+ pristine_git_object: 1824174f9583a565016e56f0b4e6ace8dfe9d10e
+ docs/components/chatnamedtoolchoicetype.mdx:
+ id: d11d15b7bdff
+ last_write_checksum: sha1:a49921708b0df92415f937015c2f4b7829ab9df7
+ pristine_git_object: 0368099314b29e95b99c991ee0ac4321f2c5b299
+ docs/components/chatreasoningsummaryverbosityenum.mdx:
+ id: 5ff03a849a53
+ last_write_checksum: sha1:ddf8b1f3f5966f8abdc3eb7bc17953910b8b8d08
+ pristine_git_object: 220be03bd674a257c2064c0455104959b3974a35
+ docs/components/chatrequest.mdx:
+ id: 055812be14d8
+ last_write_checksum: sha1:77fcd137afe54399a3eba5f08cf6e0ffda8cc242
+ pristine_git_object: 1cc4f0f490833b0defa14840b69ea02f90820770
+ docs/components/chatrequesteffort.mdx:
+ id: 703c73252ebd
+ last_write_checksum: sha1:243510f188071a3f317dc06a07fbcfcedd3cf821
+ pristine_git_object: 643c118fe458c24cdaeca90edceadf1c7d1c9cc2
+ docs/components/chatrequestplugin.mdx:
+ id: 157782a43de6
+ last_write_checksum: sha1:c918d35c8f0d9796fdaf78cb9d55a6c866d05413
+ pristine_git_object: 2ef1d9e43930650344033d25272c4d3d97923169
+ docs/components/chatrequestreasoning.mdx:
+ id: 8f0176992b3e
+ last_write_checksum: sha1:84576cd6513f125955685c7bdfe315ef886160eb
+ pristine_git_object: d9a271d74a0c6981c08fcdcdf8a2a74f699bc5bc
+ docs/components/chatrequestreasoningeffort.mdx:
+ id: a8ac4d0f36fd
+ last_write_checksum: sha1:7cf50deaeb4a20ca64352b8713479059834e5f78
+ pristine_git_object: 648e271855d957af7003d1dd3607116ab6f71ea3
+ docs/components/chatrequestservicetier.mdx:
+ id: 3037649ffa34
+ last_write_checksum: sha1:a132287a3f537373e974e7f8acb9c1f8e243cb04
+ pristine_git_object: 66c2cd5c615d778b267d7559902f6de8a0098c48
+ docs/components/chatresult.mdx:
+ id: 1d855f0d207b
+ last_write_checksum: sha1:1327c59b5dd13f87488f8076e97ca36b2e93c22f
+ pristine_git_object: 94e3c0ce6c01fd6b28edcf40097e6f70fa0dfe01
+ docs/components/chatresultobject.mdx:
+ id: adc07397bfc0
+ last_write_checksum: sha1:0323dc5815ea2b95d85785afc089cacd90cb13f0
+ pristine_git_object: c4c06a38d03376d299e600ccb6a38366591e9694
+ docs/components/chatsearchmodelsservertool.mdx:
+ id: ec9b3ca3d315
+ last_write_checksum: sha1:e7f3249dd039f6b9fceddb66df5beaa242d60297
+ pristine_git_object: 18b2f4e1abf5e15856b145d10f115e21d408a213
+ docs/components/chatsearchmodelsservertooltype.mdx:
+ id: d25af3887fc8
+ last_write_checksum: sha1:66bdd26ab553b532c252739060331dc6ca6a3c8a
+ pristine_git_object: 8a51a6070c8fdbca4894de0d3e67dea1a5037a73
+ docs/components/chatservertoolchoice.mdx:
+ id: 22a01eb665cf
+ last_write_checksum: sha1:b54861f4d954f83fdd2fe9332ed58a6463f3d2cf
+ pristine_git_object: 9eac8152d29e30dcb16bd15f31f9a990ba256e9e
+ docs/components/chatstreamchoice.mdx:
+ id: ea662a8a9eae
+ last_write_checksum: sha1:6bf345f32853451fe9652ed2da78b826435e237e
+ pristine_git_object: d6bd70fb2627a85b2db13a1f23c179f2fe3ad194
+ docs/components/chatstreamchunk.mdx:
+ id: 90a2741f18cd
+ last_write_checksum: sha1:0a60882651fbfdba6ca61aee439ecf7087499188
+ pristine_git_object: 3adbd9896f88520ec5a3c54596a8f8ec20e1110b
+ docs/components/chatstreamchunkerror.mdx:
+ id: 15ce1e8c2a5d
+ last_write_checksum: sha1:adc488f464df961a969a36414ee90988e2866a6b
+ pristine_git_object: e04b55b0600b503f7d7187570292cf921048d307
+ docs/components/chatstreamchunkmetadata.mdx:
+ id: c32533ecffc9
+ last_write_checksum: sha1:b332ce15a5c7e81f34fca147b231fc6b9c212de3
+ pristine_git_object: ce80e38c1df1dd7774096271559af9f2c989e5f0
+ docs/components/chatstreamchunkobject.mdx:
+ id: b566ee7bb2f4
+ last_write_checksum: sha1:1cb93b5078ce2455393cf172ee43d354b50f983b
+ pristine_git_object: e07fc2435544618a76a5441f1f9e2e145947a864
+ docs/components/chatstreamdelta.mdx:
+ id: 188dfce87802
+ last_write_checksum: sha1:507a45ac53e78c5a09d48fce151063c7fad2de1f
+ pristine_git_object: ca45ea3ce93365b817f4ca368d61d4b8b77d3080
+ docs/components/chatstreamdeltarole.mdx:
+ id: 6b8c4f06d157
+ last_write_checksum: sha1:e8c45d5a04b527f5ab6bf30f1305ca1b7605cd61
+ pristine_git_object: 775d363caff96d015ad428416a5e2ec32aebed24
+ docs/components/chatstreamingresponse.mdx:
+ id: e665f10d3cb0
+ last_write_checksum: sha1:e1bc6c8e0df28960fe7918a51ba0a559e5821e95
+ pristine_git_object: bd7543c94f09476c0ddbb8fd1c155eb426509a75
+ docs/components/chatstreamoptions.mdx:
+ id: a76f428f0434
+ last_write_checksum: sha1:a1ee0e5018db17348cb6702bf7080a3e78a72b44
+ pristine_git_object: 430faf2a02d4c10fe7ccefdca40ea2c91cc1f160
+ docs/components/chatstreamtoolcall.mdx:
+ id: 5b4e47f83a5f
+ last_write_checksum: sha1:ecff98d60c6edd21b366227508bea9c81be6a358
+ pristine_git_object: beba823a602bfa21f133ec36f25b77c2d3ca7289
+ docs/components/chatstreamtoolcallfunction.mdx:
+ id: 8de9998dab50
+ last_write_checksum: sha1:6c0616477ec7c8cb344590080a39e8af0623f18b
+ pristine_git_object: 12a71db2d909d1854ec90933fbe2f0a1b9d7ffed
+ docs/components/chatstreamtoolcalltype.mdx:
+ id: a4c2716de3fb
+ last_write_checksum: sha1:1e16ebd9114cc6ab2d76351eda5846441fc40ba0
+ pristine_git_object: 602231cf40fe0c66347bd13dd158bd75741c0759
+ docs/components/chatsystemmessage.mdx:
+ id: fd74aa853b84
+ last_write_checksum: sha1:d557a333aad0038c561b6b419fbec6cd75cf462e
+ pristine_git_object: 7f6ccc99352eaaf80e6340b99d1188ca7d39cc0a
+ docs/components/chatsystemmessagecontent.mdx:
+ id: a26e029e8e60
+ last_write_checksum: sha1:475985246731f53936fe0e0b4d6557c54f201ed1
+ pristine_git_object: a8bda9f06821cf3a122564b674b6f1273a11138f
+ docs/components/chatsystemmessagerole.mdx:
+ id: 87ed2a5e080d
+ last_write_checksum: sha1:2865a40286913d1de566dd4fdc81eada6a3b4fb2
+ pristine_git_object: 968ecf2c8b7548e152ba542566bb4a98fe86ba25
+ docs/components/chattokenlogprob.mdx:
+ id: 5d735052588d
+ last_write_checksum: sha1:737a020cd12400ea211b3e6f549953f8763a37a3
+ pristine_git_object: f6b39af96cd92ca05e9bc4de4d6eaba8f72c9a4d
+ docs/components/chattokenlogprobs.mdx:
+ id: a8c0e9c829f6
+ last_write_checksum: sha1:bcf9509aa69c6afd29cb9bbc1639ac97de52d916
+ pristine_git_object: 068610e7a5bac08962aaede44cc9c56d1da6c483
+ docs/components/chattokenlogprobtoplogprob.mdx:
+ id: d3bb66d49800
+ last_write_checksum: sha1:5363ecca055ec746ceb39c04f5a8be203bedb7f0
+ pristine_git_object: 89813675b93dce806c0625545a12371352594bac
+ docs/components/chattoolcall.mdx:
+ id: af8cc07d5140
+ last_write_checksum: sha1:f13edeacd9e460a441d97190529db86b52bebc7c
+ pristine_git_object: 09bffc9d997d82042e4a97d96418128967c70176
+ docs/components/chattoolcallfunction.mdx:
+ id: 1bcb25f823b2
+ last_write_checksum: sha1:6857812b9124716db1bb629f14131751d9c3f523
+ pristine_git_object: bf3ffcadc2210e675f139ffd5801ca2734d39595
+ docs/components/chattoolcalltype.mdx:
+ id: c0a1ae1f59f1
+ last_write_checksum: sha1:dcc0410b953bd41bd0ade29da25dc91301c0436e
+ pristine_git_object: db90aff34845aaf8cb5dcad3af5effff344ebe9d
+ docs/components/chattoolchoice.mdx:
+ id: 5e3190912c16
+ last_write_checksum: sha1:fecbbe6410dc873387278ea7cbcdc64357bee0b5
+ pristine_git_object: c80ecdaa11084ab575ee0896985b96d788dca4f2
+ docs/components/chattoolchoiceauto.mdx:
+ id: feef0a445cb4
+ last_write_checksum: sha1:f1bf80cc718a4d48be3aa4209e16d8a70b8a3d2c
+ pristine_git_object: addf7830c0a24e0fbad548fb236642a438569a99
+ docs/components/chattoolchoicenone.mdx:
+ id: 8f6d0364c4f8
+ last_write_checksum: sha1:8cd5553585d0e10cd69fd3b9cc21aee53413194c
+ pristine_git_object: edaefb9c80e0583a4b60d8eccd59448a8b06096e
+ docs/components/chattoolchoicerequired.mdx:
+ id: 394a50a16154
+ last_write_checksum: sha1:a5d8bbfe544260d91524844815ec8b2254ddf495
+ pristine_git_object: dfea698bb9acc2f15d97fc7e718210c3af158e93
+ docs/components/chattoolmessage.mdx:
+ id: aac7d2928086
+ last_write_checksum: sha1:6ba16fc7b94b3572d1fa641af35f0258eff61127
+ pristine_git_object: bd39bbff26078e1d2f6de1b515bc2f8f93b2b218
+ docs/components/chattoolmessagecontent.mdx:
+ id: 0525fac7a946
+ last_write_checksum: sha1:3f7e96c86946f546e35656058dc63b3f509154fe
+ pristine_git_object: 1282e856de24588709a2397fc1e5671eb6d79fa9
+ docs/components/chattoolmessagerole.mdx:
+ id: 333428c22814
+ last_write_checksum: sha1:334d3743fda7feeebc1e35220713c58c816ba7a4
+ pristine_git_object: 48386287b072381a9b59de6ae804b0ffbbab221a
+ docs/components/chatusage.mdx:
+ id: d7c2bc8b3eb2
+ last_write_checksum: sha1:7f8bf402accabcc12f92b52bf6101cac3ef0363e
+ pristine_git_object: a45747f57783767d91fe66f212525f7578d7345c
+ docs/components/chatusagecompletiontokensdetails.mdx:
+ id: 0274e721a9d9
+ last_write_checksum: sha1:77e7b8ae3c4456f4284f4fbd0093d00fdefd06c9
+ pristine_git_object: 6ac1392b3ff42d4b16a57ecf3cc8ea8d95ff4cf6
+ docs/components/chatusageprompttokensdetails.mdx:
+ id: 6fb50e68afdd
+ last_write_checksum: sha1:aec3ca006672155fed1ab6058eaa13cb50216947
+ pristine_git_object: 0f5dac4b58b1dea0603c6415d2db7424130056a1
+ docs/components/chatusermessage.mdx:
+ id: 3d49e3d3af58
+ last_write_checksum: sha1:a8f9e8d29fac70185f8ea785564746b50b287a30
+ pristine_git_object: 3b6546aa3a6d0344444c51376a3beb1671870501
+ docs/components/chatusermessagecontent.mdx:
+ id: ce4b41077e72
+ last_write_checksum: sha1:f94f38e6f677ff3f2f5be8686c085e32789d31f2
+ pristine_git_object: ddf804c43fd2237026991c2ac3dbbb94ad9a8b9a
+ docs/components/chatusermessagerole.mdx:
+ id: 6efb281f8696
+ last_write_checksum: sha1:ef431c77c58f00fa242c1bae969e057bbb405ae6
+ pristine_git_object: 11d6c22059efcf4e3b0d6b15b39a67678adc7a4b
+ docs/components/chatwebsearchshorthand.mdx:
+ id: 40f0c0a47ef4
+ last_write_checksum: sha1:a469a44e9c0e07ed77fb17302c25b51a5a8b962a
+ pristine_git_object: 942103ab9977faed1ecf76509e94acd48cef57f7
+ docs/components/chatwebsearchshorthandtype.mdx:
+ id: ce16c0139963
+ last_write_checksum: sha1:1637ce5dac9fc9c87df3793d46a4eff33282e0a3
+ pristine_git_object: 6056c49814eafac5ca7ce25eb0da8413a358c8be
+ docs/components/citation.mdx:
+ id: 9a5f3d4dc85e
+ last_write_checksum: sha1:e87496dfef2b1f10bc75744fb01cd8c56dc36e1a
+ pristine_git_object: 9e503681992fded303416915b21d3e23d1296dca
+ docs/components/cleartoolinputs.mdx:
+ id: 4e474b90f4b7
+ last_write_checksum: sha1:2574803d7adf914b3f90850fbaea1af2cf6eaed5
+ pristine_git_object: d5682fcb62d709606d7e073a9447621cc6da7a68
+ docs/components/code.mdx:
+ id: 1cc125f1dfa9
+ last_write_checksum: sha1:4a06fc3c63211ff7ac30cd5012663f58d077d3ec
+ pristine_git_object: dc6776c36813b18fba2613f5cfaf147acb229a90
+ docs/components/codeinterpreterservertool.mdx:
+ id: d828abe3a52a
+ last_write_checksum: sha1:8eafcbabe4084b286d34a7b2e7db0f99ad547727
+ pristine_git_object: 952662124240d5f9493a5d801ad02907145115ff
+ docs/components/codexlocalshelltool.mdx:
+ id: dc18445a3e36
+ last_write_checksum: sha1:10129d74f399bce935b3c24b7ee29e53a0406376
+ pristine_git_object: f5b8e9d3c4d1e135769036caf4d0c0d4b0394cf0
+ docs/components/codexlocalshelltooltype.mdx:
+ id: 44763fa09429
+ last_write_checksum: sha1:645f66a48115bc1864b79a161b8bd697c792898d
+ pristine_git_object: aeeea69fc2548198dbb4ccd5982f605071d59ff8
+ docs/components/command.mdx:
+ id: e2c4f1baea03
+ last_write_checksum: sha1:4eb6c6bb504554581d238672915750e1f0cd4441
+ pristine_git_object: 8a2adc33e4a201f48cc802d12dd0154dfa674aa9
+ docs/components/compactionitem.mdx:
+ id: 26c52557072b
+ last_write_checksum: sha1:5d5e9a7ece815c6cc9aea6cb3b484e8d3a7e0321
+ pristine_git_object: 7fb1a632309091019e4f2622225c07f926e42b1b
+ docs/components/compactionitemtype.mdx:
+ id: 688981b39855
+ last_write_checksum: sha1:70bb56c5e1b6352f709a63c98103e99c379fc86c
+ pristine_git_object: 335f2a6ac2acfb1afb7523e7e12970b8e8b2e0c4
+ docs/components/compoundfilter.mdx:
+ id: 346617a04c59
+ last_write_checksum: sha1:dd66c088cb5d39ba87db9afae711eaaf7f809479
+ pristine_git_object: 6c3f524e199707154988ce99b87571208f3fe488
+ docs/components/compoundfiltertype.mdx:
+ id: 68e76416ad08
+ last_write_checksum: sha1:036009180583ea8f72bb76671566ec4d5d2e4162
+ pristine_git_object: ab1137191a1f5d0a971c05fdc4cf9a526f597863
+ docs/components/computeruseservertool.mdx:
+ id: 4276b38e93fb
+ last_write_checksum: sha1:3185088a2bf62deb4be775f44498de8a47d7cc0d
+ pristine_git_object: 3021debd985fbc08ffa78a4bbee9fd4e1a7c5d9b
+ docs/components/computeruseservertooltype.mdx:
+ id: e4aadaca19bc
+ last_write_checksum: sha1:d7024f63ad66f7701809f41907d35f4b08e21c2b
+ pristine_git_object: 37199a7b510c1e9fcb61566fb1ca2dc3d6a5428b
+ docs/components/conflictresponseerrordata.mdx:
+ id: 2d7c53cec517
+ last_write_checksum: sha1:6e51b6140225812c676e85b0524bff270269c534
+ pristine_git_object: a48176a70b127e973cde593c8a4169b9ac6e6d31
+ docs/components/connectorid.mdx:
+ id: e2bb5ba7cffa
+ last_write_checksum: sha1:38d7e2bf323f4e87c0f8283a0a998698a605380d
+ pristine_git_object: 783b14bf824bbea150ee4aec34250a08b47a0d10
+ docs/components/container.mdx:
+ id: da487bbb3fca
+ last_write_checksum: sha1:001edbff08751a63d05df57795c796ae2a39c3ab
+ pristine_git_object: d82379ca39f22b63a6ae19c3ca67e50ed5fe55e8
+ docs/components/containerauto.mdx:
+ id: 9c816f0f356a
+ last_write_checksum: sha1:f281d8a1138f0b4f71eb3cb92663d4246d4d0d9d
+ pristine_git_object: 00e55b66a5ea22e92742f1bc669c12bbdbef3c0e
+ docs/components/containerautoenvironment.mdx:
+ id: 650b2f4ccef7
+ last_write_checksum: sha1:001869d2818fe3dc3d890364d05f884e8030b808
+ pristine_git_object: f902de7beb69ab7afaf4df8d03b3440f77f57b9a
+ docs/components/containerautoenvironmenttype.mdx:
+ id: 1e247d70245d
+ last_write_checksum: sha1:66636ec50e7863bc4c8f9fb4f95b1e895f429b97
+ pristine_git_object: 1c99ecd1ca87bb0ff50f541f157ab9c1db071372
+ docs/components/containerreferenceenvironment.mdx:
+ id: 80d581804fd7
+ last_write_checksum: sha1:525283f0d016b0385786264f87e2a1257c53b9a9
+ pristine_git_object: 28843b0f3f7515a773906b34f3a50db189e5f74f
+ docs/components/containerreferenceenvironmenttype.mdx:
+ id: 3baa9f801f17
+ last_write_checksum: sha1:e41a1c97b5ed7ef5e404bff0f2a7a65bd262ac17
+ pristine_git_object: feb2c4481125b90f3994b57f38f58b1b97743cfe
+ docs/components/containertype.mdx:
+ id: eb63c7c4fcd4
+ last_write_checksum: sha1:f01f5f7b9f3291c54ba46b4836041fef32407b53
+ pristine_git_object: 9a8e9eaadebb36e2836d73c4ed1867c5f1e564e7
+ docs/components/contentcompaction.mdx:
+ id: 1923f9db3cff
+ last_write_checksum: sha1:59526732df9d4b5a69f3a79d1210493dff8d8898
+ pristine_git_object: 39acf3a7dc4de67d2eb07a4e21e33e6cfdd2091f
+ docs/components/contentfilteraction.mdx:
+ id: 11728ebb9679
+ last_write_checksum: sha1:c2e70a8136e1af5a9a0e2abd930e5cd3bdb880a1
+ pristine_git_object: 8419defc10e832b66662ad7a87e56f57c3c691e2
+ docs/components/contentfilterbuiltinaction.mdx:
+ id: 08bebf2def2b
+ last_write_checksum: sha1:74b4771533db4f1dedb3403d6b5ea9bf0486f55d
+ pristine_git_object: 99919bdcad18b5ecfcb2f9c4845b577154e78073
+ docs/components/contentfilterbuiltinentry.mdx:
+ id: 0d811c0a46a6
+ last_write_checksum: sha1:d5e4e053ab43277896291cc9c9d67c40d6cdcbb8
+ pristine_git_object: 5bdb1f6af9ce5a6a39e02f8069aec14bb261fcec
+ docs/components/contentfilterbuiltinentryinput.mdx:
+ id: 87ba5e6ba529
+ last_write_checksum: sha1:8ac4a21b68b34a1ead858b19d4933ea0f9cd964f
+ pristine_git_object: 28e250251c5033e3ee7fe7c142e474d4b3ec2993
+ docs/components/contentfilterbuiltinslug.mdx:
+ id: 80b519edd96c
+ last_write_checksum: sha1:746f45dad594dadabdcdbc87dfa3377fc588b852
+ pristine_git_object: 273ad6cb49690c8abc1620a6f4dd65f3ccf87789
+ docs/components/contentfilterentry.mdx:
+ id: e5d65035c6cb
+ last_write_checksum: sha1:451e759051c72d90ef986c9b40caa30d1eea6d84
+ pristine_git_object: c8165e83a8164c1e41179a5a05a38c381de9600a
+ docs/components/contentpartaddedevent.mdx:
+ id: 785ea6a90328
+ last_write_checksum: sha1:4c9ed7cb9761710e111042e03a4faff3cba51767
+ pristine_git_object: a62904e2cb6e00fe75ce881d36a01843032d80d9
+ docs/components/contentpartaddedeventpart.mdx:
+ id: 41d3289761f0
+ last_write_checksum: sha1:5697e7fd84d91d4116d80821042022084220ea3b
+ pristine_git_object: 3590cb4f71b91c92f2c195126d4dd785753cb9a5
+ docs/components/contentpartaddedeventtype.mdx:
+ id: 6f660edc43bd
+ last_write_checksum: sha1:51183ace2c919980d990ab19af73b77d676c5946
+ pristine_git_object: 91a231d419af8011c0400a913e9ac438a63ef51b
+ docs/components/contentpartaudio.mdx:
+ id: 2895373f695a
+ last_write_checksum: sha1:68053664b6f8e87af636e973fe52c6351db79f4c
+ pristine_git_object: 1a97cd731c0d2f5571840081da56747ade120017
+ docs/components/contentpartaudiotype.mdx:
+ id: e97475ce2cb1
+ last_write_checksum: sha1:50cfd4efaa763005ed354da2c2b45154af2d832b
+ pristine_git_object: d6ad2b7d07dfa72ba184986fe43a3e2bb440bb33
+ docs/components/contentpartdoneevent.mdx:
+ id: d8d53f578378
+ last_write_checksum: sha1:2ea459e142ebae05cc623d1c4f3b12dcf57d9142
+ pristine_git_object: 39c9384930ee92c41986fb94249ccf4eb895d8c5
+ docs/components/contentpartdoneeventpart.mdx:
+ id: 3bb86f388b48
+ last_write_checksum: sha1:c3381701cb70c497a2c70916d2068e6fb8a5055d
+ pristine_git_object: 7e45ad214d819ffbb2df9f2c76da0a915ba4abe5
+ docs/components/contentpartdoneeventtype.mdx:
+ id: 565fa38e1d86
+ last_write_checksum: sha1:f79fb2c499ef24095a02a81862b315b5a09f36ff
+ pristine_git_object: 7a93ea3f012605963fd7a066963c70218a9f44ab
+ docs/components/contentpartimage.mdx:
+ id: b5d4950ed410
+ last_write_checksum: sha1:c1af7cce75c46f3f768a491df080441d8b171810
+ pristine_git_object: d4adef71081482d111bd1387bbadef7bcac54b1d
+ docs/components/contentpartimageimageurl.mdx:
+ id: b6741faa446a
+ last_write_checksum: sha1:7fd507a1c40a96f374fa338a79e636afacb804f5
+ pristine_git_object: 248d1b880edf9fc622ade36e33237201ccd2615e
+ docs/components/contentpartimagetype.mdx:
+ id: aea0e155b985
+ last_write_checksum: sha1:2012ce8173052b4140c76ecbaa095181270d6397
+ pristine_git_object: d2984506de54111db28b3387916762e98623b4ea
+ docs/components/contentpartinputaudio.mdx:
+ id: 584ebd7b9ad0
+ last_write_checksum: sha1:e6b852ed5cdd29dec833addfba5be10fe074c0e7
+ pristine_git_object: 08619de7fa9d517d98344316c3162ae847613fe6
+ docs/components/contentpartinputaudiotype.mdx:
+ id: dad953db74a4
+ last_write_checksum: sha1:e8eafb76c24944c6ea96567daca309f7368bbcf1
+ pristine_git_object: 4d3a748201d3da9c6daa85032249e8b5a0acee3e
+ docs/components/contentpartinputfile.mdx:
+ id: 43f9b6926266
+ last_write_checksum: sha1:b3db7d6aea7fb2a480725a3780f4af9061e71c9f
+ pristine_git_object: de674503defec34b9f7b430211c7ecc44dea80a6
+ docs/components/contentpartinputfiletype.mdx:
+ id: 7c9a8b71f4c0
+ last_write_checksum: sha1:107ce0734e87c17488145b4fd974bb8ab8234cf2
+ pristine_git_object: 3b0cca0be113a45c304aac54cf109734ea816a5c
+ docs/components/contentpartinputvideo.mdx:
+ id: 4e63a9425c80
+ last_write_checksum: sha1:7ab2640320e1b09333a587949427c37315fcf5a7
+ pristine_git_object: 0d846f378dc17965b83b2ac47e6af9735dbc9dd9
+ docs/components/contentpartinputvideotype.mdx:
+ id: ac5cebb93ef1
+ last_write_checksum: sha1:2079cd2ea05945c25a110ea8ca9163cf60000af1
+ pristine_git_object: ff1648bd1a0128eed1bd35475c937a91d010a17b
+ docs/components/contentpartvideo.mdx:
+ id: 49e036bdcbd3
+ last_write_checksum: sha1:12038569da87be45aa991dc15f050158c4496acf
+ pristine_git_object: 058640db3db2cc09c44ed822356374538c90775f
+ docs/components/contentpartvideotype.mdx:
+ id: ab6408bf1c86
+ last_write_checksum: sha1:82173fea2284d4e965278c80fd952aad54ebbe57
+ pristine_git_object: 24b7dfa708d009a8263c9ee36b97520509d1ecba
+ docs/components/contentredactedthinking.mdx:
+ id: 1807faf0124b
+ last_write_checksum: sha1:ddfee69368735db2412078f92fec8c0af5a2c58c
+ pristine_git_object: f9c4eeefa07fcc73839934dd6b3d403fe7539da3
+ docs/components/contentservertooluse.mdx:
+ id: 7b676db3a465
+ last_write_checksum: sha1:65f0643d0a7af0e2ef8b4f2dc9a336b5a34b135c
+ pristine_git_object: 527a1c1ae4e8df68528db2404024b67348ab4b6c
+ docs/components/contentthinking.mdx:
+ id: c23024acf25a
+ last_write_checksum: sha1:f3a989b8eb7a38f2705324263796f49a7e1722b6
+ pristine_git_object: 8c9a9246c03beadee004dc71d2519862070cad1a
+ docs/components/contenttoolreference.mdx:
+ id: fe1e54c845d9
+ last_write_checksum: sha1:8f69b7d199fd1ed2948927b93b6f9facf50e3ee0
+ pristine_git_object: f07b01d7d44cc717b67e5648283c659fc02c72fa
+ docs/components/contenttoolresult.mdx:
+ id: a9a083b8900f
+ last_write_checksum: sha1:1a0bb46e6c27779f1f88da7eb87d0ae04acd62af
+ pristine_git_object: 4abde669843735aeb36b10c6a5992f8d6509cd40
+ docs/components/contenttooluse.mdx:
+ id: ad7fb52d642b
+ last_write_checksum: sha1:47f463246904b67a444c6072b1d927c1c6c223de
+ pristine_git_object: e29dae101a0e629b6cfa1473fc22d732e646ef55
+ docs/components/contentwebsearchtoolresult.mdx:
+ id: d2401cf2f6b9
+ last_write_checksum: sha1:b24e06b9ba722674a7fc4116eba838657914f166
+ pristine_git_object: a2664d14e56d9f5ada405cee06d7f745e1a5a47b
+ docs/components/contentwebsearchtoolresulterror.mdx:
+ id: e53d83e87e2b
+ last_write_checksum: sha1:22dd4ec3f699feb7d8f22abff79623b427292e35
+ pristine_git_object: c944724a99b7f7d4a9b5de4dc478f1e15643e20a
+ docs/components/contextcompressionengine.mdx:
+ id: 684ea7e73a30
+ last_write_checksum: sha1:b093510814e6d7a1911104a6a5911e789b689759
+ pristine_git_object: 42f20bd61681b650c17cc062753e557c8dd0525e
+ docs/components/contextcompressionplugin.mdx:
+ id: 15099fe81c39
+ last_write_checksum: sha1:07aa2965c3700d22e97d492fafd625fc430d51cd
+ pristine_git_object: a502a991a0ed1413f2358c1490aaa15d4154176a
+ docs/components/contextcompressionpluginid.mdx:
+ id: 5134b610fa66
+ last_write_checksum: sha1:54b05cc44a4b00376866ae343eb7391610080619
+ pristine_git_object: fea81b2ffabc35c1025a1c8fd7d3261c039b3fc8
+ docs/components/contextmanagement.mdx:
+ id: ba18678d8673
+ last_write_checksum: sha1:fde34a2fa88b30b60877c341de2039232ae1c0bd
+ pristine_git_object: 521afd6c88d56d73be85f1ed9768ed5f826854d5
+ docs/components/contradiction.mdx:
+ id: bb27f66efcae
+ last_write_checksum: sha1:7595d35ecf46d4b6f407d5e31c8e8b4f746066ce
+ pristine_git_object: df0f53d79f8acca641d7f13a00c706f2c7883752
+ docs/components/costdetails.mdx:
+ id: 15349f1e1877
+ last_write_checksum: sha1:90a330bfa37e208bcee6615af2ee7535c4416a26
+ pristine_git_object: 753493b8d505e9317dcaca6fc897da7e30e91d0c
+ docs/components/createbyokkeyrequest.mdx:
+ id: 2af3019aa2a7
+ last_write_checksum: sha1:cd7ec119da30ea0b5ae12e150355d2ebc3069809
+ pristine_git_object: 3eaa154fa0f401f51e6f24d01140da9adf9320d8
+ docs/components/createbyokkeyresponse.mdx:
+ id: 73f247dc0e33
+ last_write_checksum: sha1:c4dbcd1ccaf3465a42c9370ce785d1be420eda5c
+ pristine_git_object: 67494d04412539e0cb0b406ef4e4cce61b3a6c87
+ docs/components/createguardrailrequest.mdx:
+ id: c1a768f054c0
+ last_write_checksum: sha1:8e8d8f957c48303ea3eb1955c182b26e8c2d5729
+ pristine_git_object: f26042f6c6a5c769f5c13030df4f9e48a8077e6b
+ docs/components/createguardrailresponse.mdx:
+ id: 1477eebdf505
+ last_write_checksum: sha1:5b260347acddb3d10bcb9283673646950b4b3c6b
+ pristine_git_object: e876cac85124ae1a612a2611c11e7039a7eed07a
+ docs/components/createobservabilitydestinationrequest.mdx:
+ id: 8d942a601a6e
+ last_write_checksum: sha1:8bed1fb299e0fb1961ee90a07274a0803c977958
+ pristine_git_object: a3435fe0c498da2ef18fe16d0afab27b813d3595
+ docs/components/createobservabilitydestinationrequesttype.mdx:
+ id: 0cb269425077
+ last_write_checksum: sha1:f8608dbed4fcc4407be03f34d5a5ab50c5cd085e
+ pristine_git_object: a3f9ac29f6a4edc5a63c4a6b18c5b86754c1f945
+ docs/components/createobservabilitydestinationresponse.mdx:
+ id: ce5ac8963efc
+ last_write_checksum: sha1:de29327c652aebd154ae071bcce530d8c1518012
+ pristine_git_object: a6654f0998c2afe7f22e5647afd77c9bd374491f
+ docs/components/createpresetfrominferenceresponse.mdx:
+ id: ed0298bf47bf
+ last_write_checksum: sha1:01fc963af14788ca0453a09fe4f7a60e4420244a
+ pristine_git_object: c31f263d23205ebfa16eb7e4ae5f33a11fb19764
+ docs/components/createworkspacerequest.mdx:
+ id: ea85d6684017
+ last_write_checksum: sha1:3fd0555fe82dbdff103995079630e6bcb7503795
+ pristine_git_object: 3de1021e362e3a910e0e35842e6f1cdea15cdca4
+ docs/components/createworkspaceresponse.mdx:
+ id: ee0c0ca3257e
+ last_write_checksum: sha1:64ab0075fcdd724938755204443051ad0c41100a
+ pristine_git_object: 85596ef5870f1faa8a4faefe07470a30fcd83451
+ docs/components/customtool.mdx:
+ id: e8963a9be6e2
+ last_write_checksum: sha1:9321bedb7d51af8f98dfe098989747d92a3f8db8
+ pristine_git_object: 4da535856e50542d30be28e12f1802519ffba50b
+ docs/components/customtoolcallinputdeltaevent.mdx:
+ id: 015e22f6e954
+ last_write_checksum: sha1:f73d21dcc65f4e0b15ec5d546806e6c8f4d1205d
+ pristine_git_object: 4ff3cab6462170546bf5ddd7068b2fe43929ed06
+ docs/components/customtoolcallinputdeltaeventtype.mdx:
+ id: 2d9f203e7a21
+ last_write_checksum: sha1:5e75d5504900fa25577a6d2c2af679254068383f
+ pristine_git_object: 55bd172b3aaf0199ac61533c785e57cb1393726e
+ docs/components/customtoolcallinputdoneevent.mdx:
+ id: 4307053d8389
+ last_write_checksum: sha1:a5299b5cec7fda9ab74702560c3529c526e19d03
+ pristine_git_object: 9fa94a133ff180f99381a83b4687f4e3910346ab
+ docs/components/customtoolcallinputdoneeventtype.mdx:
+ id: 2c39202a6733
+ last_write_checksum: sha1:78748e4b1f86dca06ac8d7af9522b02056b35a1a
+ pristine_git_object: 8f1998f649043b4b2c6eab0ed51df960be63523e
+ docs/components/customtoolcallitem.mdx:
+ id: 3936d690b05c
+ last_write_checksum: sha1:26f5b677acfa7a9934e2843d8455b67413b79079
+ pristine_git_object: fc18f9890ff9014d08a110e16e581280b3c09a72
+ docs/components/customtoolcallitemtype.mdx:
+ id: d69cfea1fb83
+ last_write_checksum: sha1:25c64017876c8e051f178e87fcd94f47f19e6bc8
+ pristine_git_object: 3d905dbff9faea09b8635ea1fb7d4e15739f0a44
+ docs/components/customtoolcalloutputitem.mdx:
+ id: 5e73a74f3035
+ last_write_checksum: sha1:57af58bb1af5d2d80192851faf332bed7f882338
+ pristine_git_object: 2e8dd6506b8710955d62b207ab2d65c97ff31786
+ docs/components/customtoolcalloutputitemdetail.mdx:
+ id: 98d0eb9ba782
+ last_write_checksum: sha1:6b999396a15a6d94be34e30e7f25eea3afef1790
+ pristine_git_object: ba63c6e461e3e083730d6a14666263355c7a9a24
+ docs/components/customtoolcalloutputitemoutputinputimage.mdx:
+ id: 35c913e2c5ba
+ last_write_checksum: sha1:01ebc7a20d532e09e7660689bd7406567aaf3e04
+ pristine_git_object: 830ac246df500f3e4376c3eeb08c8b856e4ec504
+ docs/components/customtoolcalloutputitemoutputunion1.mdx:
+ id: 083fd9d40955
+ last_write_checksum: sha1:a1e66b4441b36a0b0383da6eb2be1c6f97ef1066
+ pristine_git_object: e3d8498bfff28700601076cd05cf265d327b4dea
+ docs/components/customtoolcalloutputitemoutputunion2.mdx:
+ id: b2640c7f341f
+ last_write_checksum: sha1:1da60c3906c15ef0d54a47cdcca9c742f1793c6d
+ pristine_git_object: 10e3c5e6151b7540604f0fe43941bb3bf494bf09
+ docs/components/customtoolcalloutputitemtypecustomtoolcalloutput.mdx:
+ id: 9aeafc9c0118
+ last_write_checksum: sha1:5b1f4ee809d675b439fff5b77313d166b426c355
+ pristine_git_object: abfec635180255e23d4c5c0faf7662f90e2c92a0
+ docs/components/customtoolcalloutputitemtypeinputimage.mdx:
+ id: e3c38138e53f
+ last_write_checksum: sha1:679e601744c73d99f5afd57c0de521914497aa82
+ pristine_git_object: 821cf8bba27d169ca2a950faca297f432222192d
+ docs/components/customtooltypecustom.mdx:
+ id: bd47414fa7f5
+ last_write_checksum: sha1:308434644c3f96ca5e4084d22f5877b17c45a153
+ pristine_git_object: 10faea80751d21dd80b6faf879e725c181b5749a
+ docs/components/dabenchmarkentry.mdx:
+ id: 51d39703b62c
+ last_write_checksum: sha1:b43feaef797627d56eab0a98c9424c2cc6d95007
+ pristine_git_object: 63238a9c49055db8169aa639fb75d4b23e9826ec
+ docs/components/datacollection.mdx:
+ id: c29a8011151c
+ last_write_checksum: sha1:e4f8c70da5562a17752390debc0d3540c594d2b9
+ pristine_git_object: 307b625ad02378014bcaa5be4c21e32708edf9cc
+ docs/components/dataregion.mdx:
+ id: dac6201df667
+ last_write_checksum: sha1:830cefcb39b706616204c58ce65457b15347efd9
+ pristine_git_object: 07ebe2f4eadd59e2282d204442bcd87ee4dec3a9
+ docs/components/datetimeservertool.mdx:
+ id: 709ed5cdd4da
+ last_write_checksum: sha1:2920ba9d11c4c1600dfdd4293442407b4482cc0f
+ pristine_git_object: af483becfb66c99449a88e9265568f4824e428bd
+ docs/components/datetimeservertoolconfig.mdx:
+ id: d05bf1be275e
+ last_write_checksum: sha1:2656651872fae642b7933e54078b1d2c946b0b88
+ pristine_git_object: f2c289a398ebb8f4248462cb483d1cb4759d1866
+ docs/components/datetimeservertooltype.mdx:
+ id: 8250df00c843
+ last_write_checksum: sha1:addf1f380a24cd6f8b36a572d99c5ee28e483fc1
+ pristine_git_object: 23b3fdfc750fcb578ab751f7726f5fa8ba854b80
+ docs/components/debug.mdx:
+ id: e3700a58e527
+ last_write_checksum: sha1:a7899e5645dc429606bdb622581c4a2f6fad61ad
+ pristine_git_object: 5aff6df42e4d37cb363d64e5b854d64843d761e0
+ docs/components/debugevent.mdx:
+ id: 6ca5a59f1fa4
+ last_write_checksum: sha1:a70e1632f9ce13d2829e41fb60b75dec7ca2043f
+ pristine_git_object: 1a76e56a4273928dd20e3e46965643234733e3f1
+ docs/components/debugeventtype.mdx:
+ id: 8b6b222a5da7
+ last_write_checksum: sha1:e37576941ec9e2cb4fe176277bb02b9cc86f6f48
+ pristine_git_object: 5d2d4dc2ddfc8d88c4869242498affc0b46f969e
+ docs/components/defaulteffort.mdx:
+ id: 13b9d543d674
+ last_write_checksum: sha1:3a64d36689446d36d4bd1ab08f85f16c0aac2c2e
+ pristine_git_object: 1e867684ba127492528485c864e121e67d5f24f6
+ docs/components/defaultparameters.mdx:
+ id: eb9e41a380b4
+ last_write_checksum: sha1:5c82a5cf6bd1b0b115d772590e6925f808f4c0e7
+ pristine_git_object: 6c502ac4c12dc4d032466e3e0d124d708831c77a
+ docs/components/deletebyokkeyresponse.mdx:
+ id: abdf89311ee3
+ last_write_checksum: sha1:4d42c424a2f62d17b7aecc813f171a83dd6b5b6e
+ pristine_git_object: f1c80d26580b903f6997af5a9328216be8af7e7b
+ docs/components/deleteguardrailresponse.mdx:
+ id: 4b5aa42babb9
+ last_write_checksum: sha1:85c65956be5b333b233ada31f980a73eb580f9b8
+ pristine_git_object: 36069a9639aef5294e8ef81b5e96d169b01e5b07
+ docs/components/deleteobservabilitydestinationresponse.mdx:
+ id: 0f606ad36822
+ last_write_checksum: sha1:99269cd4a1958da8aa09cb828709ca8a734541ff
+ pristine_git_object: 4d572b68887b463586c64afbe73498fe70b7f8d3
+ docs/components/deleteworkspacebudgetresponse.mdx:
+ id: 438cab4d21cf
+ last_write_checksum: sha1:ee3e008f82c76693cb018712a921bcbf32bd28fd
+ pristine_git_object: fb5ff101e1f218a3d67fc3efd2bc2e1956041f06
+ docs/components/deleteworkspaceresponse.mdx:
+ id: 6b62c9e33dc0
+ last_write_checksum: sha1:aa78e7ac3832b5e3033a19ed3d666b4193488b66
+ pristine_git_object: 93b4da47498148fa2d3fb1a488d05b0560fa5214
+ docs/components/easyinputmessage.mdx:
+ id: 71bd8b4dc7d7
+ last_write_checksum: sha1:3bb172d1d6eae554456fa5228ae6a4b792264577
+ pristine_git_object: 60e935b6dd892eb12905a4d38d92edba37f0c06b
+ docs/components/easyinputmessagecontentinputimage.mdx:
+ id: d9c28bca7c9c
+ last_write_checksum: sha1:118666ad8993025c9b405149e92a40ff1efe9ae4
+ pristine_git_object: 502f118250862c20fbd5f8427389bb06a5f60020
+ docs/components/easyinputmessagecontentunion1.mdx:
+ id: f0f84e4a62d7
+ last_write_checksum: sha1:ee6d451a988d7ad19acf9ce1763fe3b12e352125
+ pristine_git_object: b650861b74772c18a502c327b5dff2c2313c6402
+ docs/components/easyinputmessagecontentunion2.mdx:
+ id: 09220b3ecbc3
+ last_write_checksum: sha1:da94562d574e94aef7f867c727e4b5bfc6289f6b
+ pristine_git_object: 02c13eb50df50e79ab55dfe849134e9d3a54b260
+ docs/components/easyinputmessagedetail.mdx:
+ id: 90d600df4441
+ last_write_checksum: sha1:f14122e0f3fac97cd0912731ab2050b931af36bb
+ pristine_git_object: 4f052972320daa0e9df0ed47450f3eb2df5c1ad2
+ docs/components/easyinputmessagephasecommentary.mdx:
+ id: cd12923eab93
+ last_write_checksum: sha1:0220e90eb8da4b1a227232e0afdca173016584cb
+ pristine_git_object: 6c91d1640002778720bf058a8f75026eb1bc8b3a
+ docs/components/easyinputmessagephasefinalanswer.mdx:
+ id: ad11b5a222f9
+ last_write_checksum: sha1:f90583cfe2e1b5424aa3ecca175ae9f68d11d65e
+ pristine_git_object: 4c9f6073f10a6884afc98101ee398df33fa00fef
+ docs/components/easyinputmessagephaseunion.mdx:
+ id: 1b6ac9af1803
+ last_write_checksum: sha1:32c40092a97e059a7f519d5e575ed3dceb4d0f89
+ pristine_git_object: 6f56b1adcf81b84d88df0432d096eb479789ac87
+ docs/components/easyinputmessageroleassistant.mdx:
+ id: cad68aa52f41
+ last_write_checksum: sha1:4df19f7b18540801bef2f5a5ad355d80e4326c15
+ pristine_git_object: ad75b1436f97f914134280f45a7ff058a64ea3b0
+ docs/components/easyinputmessageroledeveloper.mdx:
+ id: 2af223fbe312
+ last_write_checksum: sha1:13dceb8b714291dce808100cdf7509aa1e87858b
+ pristine_git_object: 1c5e3b100fb0866056e90aecf52fcc96f49f56b4
+ docs/components/easyinputmessagerolesystem.mdx:
+ id: 122bf2ab9785
+ last_write_checksum: sha1:20ebc74c18684d12639ee102b24ba216d378498d
+ pristine_git_object: 2baab7193c84adaaeab0cf7db118f42725a9674d
+ docs/components/easyinputmessageroleunion.mdx:
+ id: 9a28108d99ce
+ last_write_checksum: sha1:487f42b885f739086d165b3207de61ae241a5190
+ pristine_git_object: 27659d87b3c8a9f935f990397a261c5fc4280f37
+ docs/components/easyinputmessageroleuser.mdx:
+ id: 1a8e020cb65a
+ last_write_checksum: sha1:56ce9b410b83f6b106e3321fc51dee106a971baf
+ pristine_git_object: 2d5933ca87658c07552dd678d1fe5328d6eacd0a
+ docs/components/easyinputmessagetypeinputimage.mdx:
+ id: e81ae19bdb64
+ last_write_checksum: sha1:9e65e183c8d42454cb814ee95649958420732b84
+ pristine_git_object: f7d504e774ac018ff37bb304a5731e6ab7742b4b
+ docs/components/easyinputmessagetypemessage.mdx:
+ id: 37ec98988a63
+ last_write_checksum: sha1:aee7e8b7d057fe7581977db622ca68a5fd7c19c1
+ pristine_git_object: aca189151b5ad31a7d600b2a2e30be006ed649d6
+ docs/components/edgenetworktimeoutresponseerrordata.mdx:
+ id: 31b2d23325c4
+ last_write_checksum: sha1:d8d52abbcdd092079d0af840deff1b72b22c3228
+ pristine_git_object: 66b365f4cf76c649c5c98072d1550d79c885335b
+ docs/components/edit.mdx:
+ id: beb780c4a3d4
+ last_write_checksum: sha1:1ec0390664caa39f049254733104bb18ca11a712
+ pristine_git_object: da55b43f7914f2b82219914169414b4876dc289c
+ docs/components/editclearthinking20251015.mdx:
+ id: c0ecf2bb43c3
+ last_write_checksum: sha1:92f0c84b274d854368e033edefec6bc0fedf0c9c
+ pristine_git_object: 0796f7cdb8cf7498f4c77e9a749c7f0f75fe1d64
+ docs/components/editcleartooluses20250919.mdx:
+ id: d8b581c8ed3d
+ last_write_checksum: sha1:0b5819f318ab86e0b43c242e07397a5ad13fa01b
+ pristine_git_object: a8a31837f22ddcd5a90dc108964aec3e8a94b609
+ docs/components/editcompact20260112.mdx:
+ id: 7123a54635de
+ last_write_checksum: sha1:b5485c685eca10db230886100fa089e0535be69c
+ pristine_git_object: 09c8fd6f6aeedcf1ae3046b88f0171c9953fc37b
+ docs/components/edittypeinputtokens.mdx:
+ id: eb40c458515d
+ last_write_checksum: sha1:b85ea056036bbdbbcd4e0adea9dcd9a7dc695c51
+ pristine_git_object: b876816efb61e12af7f25bf72f0447adbfbd810c
+ docs/components/endpointinfo.mdx:
+ id: 6dcdfc7379a9
+ last_write_checksum: sha1:2c5fc2144a44e919bda2929fd9dbb10f64641ced
+ pristine_git_object: e525afd1a47a82b73e0f78ae25de41c8871c61f6
+ docs/components/endpointsmetadata.mdx:
+ id: 28860bdbee28
+ last_write_checksum: sha1:75f9c7ca1d90b46860c958b2495a569e3ce0e126
+ pristine_git_object: 4add6ebfc73d7edfb30a7d8a363aad0ceff19117
+ docs/components/endpointstatus.mdx:
+ id: 5e4fa96c840d
+ last_write_checksum: sha1:4d2ccb7fc0d20c8a0b72db3a55a8228169891b6a
+ pristine_git_object: 72c5b4fb8441c2a4337dc9906fa81b01bb92f126
+ docs/components/enumcapability.mdx:
+ id: 33c7a0f315d5
+ last_write_checksum: sha1:08338d742893cb3966cd12cee49a5d80748b3d63
+ pristine_git_object: 4c04e707a98671dfaf3c5d1563ccd169e6d04fe7
+ docs/components/enumcapabilitytype.mdx:
+ id: ff781736c1f3
+ last_write_checksum: sha1:b85c33025d37312667a669a2fa8771b2f0065e41
+ pristine_git_object: 1b43e9ba3a50d3ea814e584c50293291a9333a1d
+ docs/components/environment.mdx:
+ id: 10d9f9dbcaf3
+ last_write_checksum: sha1:415cb68d86a5d9bfd2ddb9bfa3ecd2794870721b
+ pristine_git_object: c08a3d8fa9bad83e57d5baa9be9995f30b16a24f
+ docs/components/errorcode.mdx:
+ id: 0d3bc0f8a92d
+ last_write_checksum: sha1:ad3ff0627e50e0b51140afaf8fa9b08531f5e9c4
+ pristine_git_object: c177e3075bf9bf8b124fc5bb0c54eff0a2a75ae6
+ docs/components/errorevent.mdx:
+ id: b8087272db82
+ last_write_checksum: sha1:af1ab64010fd36ba6711e26788244afcbf35d9c9
+ pristine_git_object: b09b8411e07b50ead3c0ef2537a3ac40c021f6c6
+ docs/components/erroreventtype.mdx:
+ id: b365b7815bf8
+ last_write_checksum: sha1:65fe2b66aeb7f8e46a4c1a1e6ee826495fc86b71
+ pristine_git_object: ffc147c8c082c000a355063292275d381b130b42
+ docs/components/event.mdx:
+ id: 83efd2dabaa9
+ last_write_checksum: sha1:82c3b4882ab31a90147ffe5c0f5d3011ef6ba3cf
+ pristine_git_object: 3f077ae59db00c0a92cdaa90ddf24860dcf0c3c4
+ docs/components/failedmodel.mdx:
+ id: b19eb588a22c
+ last_write_checksum: sha1:647182170d99695cdf4985f8b4e423765bbf6d2c
+ pristine_git_object: 70d6de50d74b3d3a16f2b90ae5ff362c4d77a9d2
+ docs/components/fieldt.mdx:
+ id: e7b48abef959
+ last_write_checksum: sha1:e535734499fa6e4afcc05ba296d0c54f49b2388b
+ pristine_git_object: a021f257ecd8e43605e8559dd69c0c8a4fed4c99
+ docs/components/file.mdx:
+ id: d4f9d0d9fbd0
+ last_write_checksum: sha1:73520bf00e1d5f1ee3830178b1c2e6ba35d95db2
+ pristine_git_object: d332b47b59ec1d41ff24e24ff7206a58797c07b1
+ docs/components/filecitation.mdx:
+ id: 857aa356ad65
+ last_write_checksum: sha1:2a8a17ea6253fe54b63918b3a6f2b0206432191c
+ pristine_git_object: 79ca7438874aa25cf91e0559b1c889bfb7ed4b35
+ docs/components/filecitationtype.mdx:
+ id: ecd342f3c43d
+ last_write_checksum: sha1:6ea8086b8c4c00c18e68f2f7e676d0b7a0500fe2
+ pristine_git_object: 2450e43778e482e31b4ccf29287d0a029120ba5c
+ docs/components/filedeleteresponse.mdx:
+ id: 5f7dc2e707ae
+ last_write_checksum: sha1:586c8e036c9bd5bff72f8ba8c817527997ee2c53
+ pristine_git_object: f9fa432587770f2613bf1fa4354e66202d15c83f
+ docs/components/filedeleteresponsetype.mdx:
+ id: 5f7a73962d48
+ last_write_checksum: sha1:ddaf4610d5e53795b50cf54bdfb59ce7f09a43b8
+ pristine_git_object: 978f7962bbd31d7427d9abf4af239efd5ae16226
+ docs/components/filelistresponse.mdx:
+ id: ca063283734e
+ last_write_checksum: sha1:05fbc7f5d1656f7ba4b41fa3c4071fdf20ff9c72
+ pristine_git_object: ec3829978213a2daea4ced16b4c30405c3687532
+ docs/components/filemetadata.mdx:
+ id: 1de063910c9b
+ last_write_checksum: sha1:97e9ea9294549ec49126fead9f95bdd2aad8af61
+ pristine_git_object: cfb23fb248c4473425f52bfb4576a09951163d75
+ docs/components/filemetadatatype.mdx:
+ id: 334463560a36
+ last_write_checksum: sha1:8fb5050aa4a7dd6395c24ecf4dd3bca517494b31
+ pristine_git_object: e67003057312f7d56f3b3ba0197a93624755175b
+ docs/components/fileparserplugin.mdx:
+ id: 083d2a50302f
+ last_write_checksum: sha1:a5be0e9c85ac7f425996982662606fb34b25fbd3
+ pristine_git_object: 2a74948b2d91279a67e87e6fd941f5fc01c8f502
+ docs/components/fileparserpluginid.mdx:
+ id: 7d737c676412
+ last_write_checksum: sha1:e5f121638cdf28a930d1b2bc6bc296fe5694355f
+ pristine_git_object: 092654bb43e283576c1e3cbdaa8b5060ed1fdfff
+ docs/components/filepath.mdx:
+ id: 39b591177fbe
+ last_write_checksum: sha1:39849185c3a432fd233d32205cedfbe7a6fc8102
+ pristine_git_object: f6d81e7b4b6683de342af59481920c06087d9f70
+ docs/components/filepathtype.mdx:
+ id: 5051caffff88
+ last_write_checksum: sha1:84b7b63066020a2a297ce511261f272767df2c10
+ pristine_git_object: fa448d3f72ed18b2a8894a949bbc8df5dfebf281
+ docs/components/filesearchservertool.mdx:
+ id: 5d9983161437
+ last_write_checksum: sha1:29b0b6df7c1cead82c312595d8809e5a3234562f
+ pristine_git_object: 573425f380bf20d06487bac7749e3f4a0786f747
+ docs/components/filesearchservertoolvalue1.mdx:
+ id: 64c038ff374b
+ last_write_checksum: sha1:16c205ab4e6070838b0cb688991d6407f1b02cc9
+ pristine_git_object: 769ec98426b4a9f92a002ce6bf4792afbef9a24c
+ docs/components/filesearchservertoolvalue2.mdx:
+ id: 2b477049dcd1
+ last_write_checksum: sha1:e6d7bff818ad43690daeb4a41b2b30b5895d6a04
+ pristine_git_object: 570219253720d0f7f682e6b5a8b510ea60abd066
+ docs/components/filesservertool.mdx:
+ id: 7b15d2a7ba50
+ last_write_checksum: sha1:6fcbd963de8797fc622b28c97b5d03b24e1b733d
+ pristine_git_object: 7720ba432a313dbdc1ec4bc793280f629c19c666
+ docs/components/filesservertoolconfig.mdx:
+ id: 4786db8c4bad
+ last_write_checksum: sha1:bea44aab79ccddb9dff37eb6dc30ef8cf8a13872
+ pristine_git_object: 2a1990e4b9a54b1974af9e1581e177ef2340723e
+ docs/components/filesservertooltype.mdx:
+ id: 2518fc00979d
+ last_write_checksum: sha1:12e23c87834ede010604d6f4faa85685899cfb74
+ pristine_git_object: e9d25567d44fbaaa6506ebebe1b75e8bb1a5cffd
+ docs/components/filters.mdx:
+ id: eb61c97e25a7
+ last_write_checksum: sha1:4e20881809ca6f0e0ecc3d572919f96f7ba4088d
+ pristine_git_object: deb052770e7585652dd39a43529707e84c190572
+ docs/components/filterstype.mdx:
+ id: b465aabe216a
+ last_write_checksum: sha1:5aaca37571b9afb4102d1d6b0641b34daaa8cb4a
+ pristine_git_object: 172ba4b91998fdb10fafcdab1a6d2ae0ec8a1f20
+ docs/components/filtersunion.mdx:
+ id: dd890414ed4e
+ last_write_checksum: sha1:926caaafa4e689537dd7800767f0449d4c19d7a2
+ pristine_git_object: 263dda89b5a2dd3bc1a409fd4530c613adadb169
+ docs/components/forbiddenresponseerrordata.mdx:
+ id: "760721125246"
+ last_write_checksum: sha1:3abc15cf5c47ac6d2dacd679f19ab8c1fa563c9d
+ pristine_git_object: 6876df07cc049ac7216134da25218080135d6cf2
+ docs/components/format_.mdx:
+ id: 0282154286c4
+ last_write_checksum: sha1:4f930bce8f946d3995606f06c63421b0378f7b1a
+ pristine_git_object: 76b8e33d8a8ab77f7be501b004987aac75c302ac
+ docs/components/formatenum.mdx:
+ id: bdb6c3cefc9d
+ last_write_checksum: sha1:1de529936d4e211cbfa09a34f1b96c7e322f4fec
+ pristine_git_object: b8cb0845d0b3b8353913ac90a4bfe4da5d5cc610
+ docs/components/formatgrammar.mdx:
+ id: 4eb257a94238
+ last_write_checksum: sha1:d56a813316c03ba7adc39c28a462d3076e72c9e8
+ pristine_git_object: 27fb6f5f6d49287fa4813b22992c9162a0dfba9b
+ docs/components/formatjsonobjectconfig.mdx:
+ id: 1675097eea85
+ last_write_checksum: sha1:8432f7dc560ec33af97f8affa6dde8dbad8d23fe
+ pristine_git_object: 376faaf43281f56a8a8c09698ca1bde7a2d81f49
+ docs/components/formatjsonobjectconfigtype.mdx:
+ id: 4514227c0898
+ last_write_checksum: sha1:f3b7c73f57b6abaf2408cd0155ccf3e1c429a641
+ pristine_git_object: 54307d61ebda1db4d9ffd7aae74d6a9d18ad27f5
+ docs/components/formatjsonschemaconfig.mdx:
+ id: 14f44a8b7add
+ last_write_checksum: sha1:6d80c68eca8da41172f9bfe8470e088662e1c184
+ pristine_git_object: 12224f310fd12056567710d43dee83a7fabf0cd8
+ docs/components/formatjsonschemaconfigtype.mdx:
+ id: 440019abbcee
+ last_write_checksum: sha1:4fa1c94297eec8b9f6395f3bc7db844f63eec222
+ pristine_git_object: b5a4ff25b47226c69ad7f3875e8c4b0acb347414
+ docs/components/formats.mdx:
+ id: 5bb176c6cf37
+ last_write_checksum: sha1:a69fe91edb6148730ece9c0271984d76efaa7483
+ pristine_git_object: fc3b36888b3d89dded2a2d884f2cac25c9d2410a
+ docs/components/formattext.mdx:
+ id: 5ab83469a10b
+ last_write_checksum: sha1:422aa15de0b55c47d899b5cec15ffe6e1b5da213
+ pristine_git_object: 61d6f3b9e3f595547391ce2c09b462187cbe4f1f
+ docs/components/formattextconfig.mdx:
+ id: 01d80e60b1aa
+ last_write_checksum: sha1:f202b5a0707f223e13de2d0a4d57f431c35f2235
+ pristine_git_object: 798671326c0c5c0a077e79e17935992130738430
+ docs/components/formattextconfigtype.mdx:
+ id: 78ac8ef29e5a
+ last_write_checksum: sha1:43ac364b9f18d66927d4f8c97468a4229093705c
+ pristine_git_object: 4d236211da8d7263e1be7bd9d077902d83d3e2ee
+ docs/components/formattypegrammar.mdx:
+ id: 189cc7136c7b
+ last_write_checksum: sha1:b7ab518fc4935259908a520ffbe6517d173d9e53
+ pristine_git_object: d37196e66d056dabe2a2c2cd7770f14735313cb5
+ docs/components/formattypetext.mdx:
+ id: 51f699e26fae
+ last_write_checksum: sha1:6708cfd5bad2a610540680e683020f21e7111822
+ pristine_git_object: ed61eec17b3285863045a1629b74fa5225b0dd1c
+ docs/components/frameimage.mdx:
+ id: c5ada3767f6d
+ last_write_checksum: sha1:05ca5e4bdd5357dd8799652142ae81c895aae620
+ pristine_git_object: 46b4b985d25cfa97bdcdb67245450dc1b4936508
+ docs/components/frameimageimageurl.mdx:
+ id: 4e2e0585c368
+ last_write_checksum: sha1:16fd77c3afba87c39dd1e7426800c17ba83248d7
+ pristine_git_object: 713a81f1d90efbaeb1b5cd276551ad83f2d45f75
+ docs/components/frameimagetype.mdx:
+ id: 80a2f3324333
+ last_write_checksum: sha1:602febcd65ba3b346bca4989068f7c117872c24a
+ pristine_git_object: a27b6a6f5cef9c35e78f9f1179cc636caf0b5869
+ docs/components/frametype.mdx:
+ id: 4ab07ff3071f
+ last_write_checksum: sha1:f847f0b700c6ef363ee6c5a2d66e367cacd7863a
+ pristine_git_object: 7144b8675abe41fa9b576174e702475189291692
+ docs/components/functioncallargsdeltaevent.mdx:
+ id: ecc6d6613582
+ last_write_checksum: sha1:b1cc3e1f2ccc6cdc2d87c0cfc17523d9b8cfd10e
+ pristine_git_object: e28936efffa02588ef23fc8d3bec7a6f12ef1466
+ docs/components/functioncallargsdeltaeventtype.mdx:
+ id: daaef103a6c0
+ last_write_checksum: sha1:b3ad75a7ad97dfc0a1758b8f2042abdd2308f5ae
+ pristine_git_object: 27b17963a9bc6e4026ce2c9786cd229ed39f83cb
+ docs/components/functioncallargsdoneevent.mdx:
+ id: f838d9ca1d90
+ last_write_checksum: sha1:de0e814a2cd373b6126eac1c60bd61340e6bec85
+ pristine_git_object: acc25e399de003e1052b4d6877f3dfa40b54f32f
+ docs/components/functioncallargsdoneeventtype.mdx:
+ id: bcb0ea9e0c1a
+ last_write_checksum: sha1:edadd822daa0b46eb73a529c2f958af26ed030dd
+ pristine_git_object: da8e18a164f2bd77e34b42d88e0b553edfe8a9c3
+ docs/components/functioncallitem.mdx:
+ id: 6cb0afdc292f
+ last_write_checksum: sha1:e9c1e74fee850ae488ea789133c7fbac4a42c717
+ pristine_git_object: f1082d7352418d9e0055cfff070ddfb33b44ce15
+ docs/components/functioncallitemtype.mdx:
+ id: d41eb56d2b5b
+ last_write_checksum: sha1:2b5ba9f95bbac58d31ca72fb29d8398a90c68f86
+ pristine_git_object: ebe7c4534ae98d6bad16be51ae67f3d7b68a6de3
+ docs/components/functioncalloutputitem.mdx:
+ id: 046aa205440e
+ last_write_checksum: sha1:c7c60e48e384e8b45827f80325ea71b3f8563263
+ pristine_git_object: f48aaeabf846bf1480225074595f61d6fd77df1a
+ docs/components/functioncalloutputitemdetail.mdx:
+ id: 5f3a3e7a265e
+ last_write_checksum: sha1:173f1dabec2c3aaf8bebe06cf63e27a568d5f0f1
+ pristine_git_object: 086e8a674c4fe4174eb1129b0aa33f785dfe6044
+ docs/components/functioncalloutputitemoutputinputimage.mdx:
+ id: 0b40b0d89709
+ last_write_checksum: sha1:5a890674261391c3100592a20cbcd175dc96060a
+ pristine_git_object: 55bb222509ed9d751a7675dde367f8a699a29760
+ docs/components/functioncalloutputitemoutputunion1.mdx:
+ id: 69d70ecfbda9
+ last_write_checksum: sha1:4e8c3d4459c55ae088b9c6de3ac5f67cec1c42c3
+ pristine_git_object: 3cea7c430981983c5483fbddba103c1e9e144afe
+ docs/components/functioncalloutputitemoutputunion2.mdx:
+ id: c4953b99bca2
+ last_write_checksum: sha1:69f8715f2b8d305759dfc75f7e56c247b9e25e26
+ pristine_git_object: 92b4c4cca1f9a587654cfff97c93f6c66f99fa6c
+ docs/components/functioncalloutputitemstatus.mdx:
+ id: 2649c00d0618
+ last_write_checksum: sha1:781a211478e77770e68be20fbaf9c5f26f0cac9d
+ pristine_git_object: 870e40ce63b742d63581c686f04900b3cc1e1703
+ docs/components/functioncalloutputitemtypefunctioncalloutput.mdx:
+ id: a1c1ac8a378a
+ last_write_checksum: sha1:766416f347f68a55e2b4ef1c3861add60157c0ff
+ pristine_git_object: 7085d8cd474a4fa2f41e915375479f2220c47853
+ docs/components/functioncalloutputitemtypeinputimage.mdx:
+ id: 13902448e7ad
+ last_write_checksum: sha1:0b3d0f3e8cbe4f93445d07ba65cceebe365933da
+ pristine_git_object: eff3701c44c58f6c8a93badff21969b939089a4f
+ docs/components/fusionanalysisresult.mdx:
+ id: a3d19bd18149
+ last_write_checksum: sha1:07be09bbe40db29df2ab80183aca39136b575dcf
+ pristine_git_object: 461abd3405a1f3625b5aba440474f5b8f438e0b5
+ docs/components/fusioncallanalysiscompletedevent.mdx:
+ id: c0bd92da771d
+ last_write_checksum: sha1:47e2810628a394ea1d0266e2e7454ad43f656f17
+ pristine_git_object: dc3640ff8add5ace3d6dd14a3edf1262556d6d22
+ docs/components/fusioncallanalysiscompletedeventtype.mdx:
+ id: 6ea6b2bc49c5
+ last_write_checksum: sha1:667bc54812dff48413bb3ebcb4144aa5de5202dd
+ pristine_git_object: 897efa69c65c240777c2639958db44191cf6ccd1
+ docs/components/fusioncallanalysisinprogressevent.mdx:
+ id: f3845ebae84c
+ last_write_checksum: sha1:829d05a50b21a4b30b67a869624f1224fcc52e9a
+ pristine_git_object: cd16c26cae8bece70bb9cb566a6f16b63d4f4534
+ docs/components/fusioncallanalysisinprogresseventtype.mdx:
+ id: dab80e9a7de4
+ last_write_checksum: sha1:c9bb3b13718e05441f746c08f79d9cc15eeb04bf
+ pristine_git_object: fb1d6412a7c75bb957c54897587ee971c2c9aebb
+ docs/components/fusioncallcompletedevent.mdx:
+ id: a4f04b10042b
+ last_write_checksum: sha1:52cbc0a43ec0f9088f6bf7744d5d3248c16901af
+ pristine_git_object: 400524487eeaf4046db9000faa8ba533b8c4d834
+ docs/components/fusioncallcompletedeventtype.mdx:
+ id: 46e2ebfd9619
+ last_write_checksum: sha1:e7698cac298f7c89b00198824152165493ac8a30
+ pristine_git_object: 7061775b1179a55405f847308429b94ec0a245e1
+ docs/components/fusioncallinprogressevent.mdx:
+ id: 18fed096cd7c
+ last_write_checksum: sha1:a9abc32cc5cd39d7bb58f5d5ad748b48ac589471
+ pristine_git_object: 8f27a2d07ba201543e8e76d46b185ebd65d74cfb
+ docs/components/fusioncallinprogresseventtype.mdx:
+ id: b4a2909435d6
+ last_write_checksum: sha1:5071f20ee849ae136e898fc13af0ff97e3886ae0
+ pristine_git_object: eec9b0a365f403bf44f433909bd14c9ac460aeba
+ docs/components/fusioncallpaneladdedevent.mdx:
+ id: d057a87a3e8c
+ last_write_checksum: sha1:0b1ee3d638082e813d029e5936cc2abc3a779e88
+ pristine_git_object: 260884b7d7acf74c0a534f5b4ac91130b1c24878
+ docs/components/fusioncallpaneladdedeventtype.mdx:
+ id: 439f8569c5ad
+ last_write_checksum: sha1:04872f0173e07a8099f1e8511a7ba31af1a3c3db
+ pristine_git_object: a2c258432c4c154324004cee9c5eb359e1405b8f
+ docs/components/fusioncallpanelcompletedevent.mdx:
+ id: 6ca3150d7b87
+ last_write_checksum: sha1:71afecb28178165d7573c2193260983db5296698
+ pristine_git_object: 1d115a6afd9e94bae0441d912a68c15f07eb1732
+ docs/components/fusioncallpanelcompletedeventtype.mdx:
+ id: 3a0224f9e3f9
+ last_write_checksum: sha1:ec654c25c231f49c7865ae264e9417e09617a239
+ pristine_git_object: 1cfc97de5a70c5fa838186957e72cb8d6379d950
+ docs/components/fusioncallpaneldeltaevent.mdx:
+ id: d10c40350eee
+ last_write_checksum: sha1:0385a1d9565e20b5febb162a338956792bc2582e
+ pristine_git_object: 3f8a569b750dae18aa84c4bc1576662ca7650952
+ docs/components/fusioncallpaneldeltaeventtype.mdx:
+ id: bb9c81fcfb6e
+ last_write_checksum: sha1:963e7feec1c73d00f7ef3928473ee76aa63a55dc
+ pristine_git_object: 1d067fe04ea2a955e5f1e0b931058628fd1fe302
+ docs/components/fusioncallpanelfailedevent.mdx:
+ id: 4e0cbbe370d8
+ last_write_checksum: sha1:acf69a3356a8b1952aaf32fe1d43bfd8fb5455d3
+ pristine_git_object: a6c9fa53521862aec14a0831164192af41b60285
+ docs/components/fusioncallpanelfailedeventtype.mdx:
+ id: 2d4b21d9cccf
+ last_write_checksum: sha1:876066a290046be2a6bc514834a64ca72ad8e786
+ pristine_git_object: 4ccbf5743ef17486b9590e78be27e224d5a2af9b
+ docs/components/fusioncallpanelreasoningdeltaevent.mdx:
+ id: 13029b972715
+ last_write_checksum: sha1:fed6eb065bafdb04f8156d58e500ec1ea3e511d9
+ pristine_git_object: a25d4c0eb52a591709d8228d455222087d5404e0
+ docs/components/fusioncallpanelreasoningdeltaeventtype.mdx:
+ id: 958e4995e762
+ last_write_checksum: sha1:737823fa9ee15d8e007720937517c3117d73fd49
+ pristine_git_object: 7b7d7a350209a88f9a688d1fab6d88fc4754664e
+ docs/components/fusionplugin.mdx:
+ id: 91c7b4638c7e
+ last_write_checksum: sha1:d6cb2d143277157399b5c8560827b4e5f92c1931
+ pristine_git_object: 47df2cd777c8b157b4df2ff942b9af80b36dd697
+ docs/components/fusionpluginid.mdx:
+ id: 2b90bfd2d611
+ last_write_checksum: sha1:8111a4424197eb86dfccedfdc798d1a2b5a1c39e
+ pristine_git_object: 07ef9cfd59a0aedd18e5f1a0206c65f471ceb29d
+ docs/components/fusionplugintool.mdx:
+ id: 075d6029e74b
+ last_write_checksum: sha1:bcfdb9296fa9f3d97a496df70d45b12129f15ed7
+ pristine_git_object: 3c29bc4bd3bdf7037b9c3aa894180b8e4cae6098
+ docs/components/fusionservertoolconfig.mdx:
+ id: 87976811b0c3
+ last_write_checksum: sha1:dc0f4c3cd6409193662d17304c0dfc2eb28f6efb
+ pristine_git_object: 68527081664f78ec050036db30091158a08bd5b6
+ docs/components/fusionservertoolconfigeffort.mdx:
+ id: f5ce0fbc94aa
+ last_write_checksum: sha1:4ce09a069b4eeae41ac1531027cf97dc4139927f
+ pristine_git_object: 8ba9e2e9776f6f5ff13255a95514f68003ed066c
+ docs/components/fusionservertoolconfigreasoning.mdx:
+ id: e2814e0ec2ce
+ last_write_checksum: sha1:2cce3523a6ece5ff53b99e7508e95283d69e5f51
+ pristine_git_object: af7105baa0ce972bfccbae84a2ec91ae50ae6333
+ docs/components/fusionservertoolconfigtool.mdx:
+ id: cb4b076ea8f1
+ last_write_checksum: sha1:41f637f2abe226ae7db2206ba3656c64815efad7
+ pristine_git_object: ec79aaa4c0af8b3ee59c5b786f3c9ea88c5e7502
+ docs/components/fusionservertoolopenrouter.mdx:
+ id: e90614058484
+ last_write_checksum: sha1:ca700c405e7a9cb2d5f10932cd1413b0192c8527
+ pristine_git_object: 6f4149fb710f4d73e562190483469ab7c79f84fc
+ docs/components/fusionservertoolopenroutertype.mdx:
+ id: da7e7bf8b425
+ last_write_checksum: sha1:e3b47af2ce0438e276c4669ddbeb373dedc8cd07
+ pristine_git_object: 51199c32af27a46659b1c3d5a48e5ba11912dca8
+ docs/components/fusionsource.mdx:
+ id: 9c98ab0aea5a
+ last_write_checksum: sha1:5718b311bbd7315cda6723e16da7f06eca0459f4
+ pristine_git_object: b305413e07a9922a150dfb23e65164f7d2166495
+ docs/components/generationcontentdata.mdx:
+ id: 030f8930b5df
+ last_write_checksum: sha1:84792e91bcca8347a02d62672fa755bd7c607cbb
+ pristine_git_object: 1e4a22a040cc50e6700e7a2a9786e812e88435ef
+ docs/components/generationcontentdataoutput.mdx:
+ id: a86cb8cf8b22
+ last_write_checksum: sha1:3ddde7d4af4ff46aebf9c585f0fb4d2a4a452bea
+ pristine_git_object: d497eb12b1565177425a3b77996c12e540110b31
+ docs/components/generationcontentresponse.mdx:
+ id: 6961bdcaae0b
+ last_write_checksum: sha1:e4c7d5fcddd8c9ad181766e24a2b3b62c1cd1f5c
+ pristine_git_object: e214221d00eebf62201405e60c28a40d7f568e57
+ docs/components/generationresponse.mdx:
+ id: b3a5579b9919
+ last_write_checksum: sha1:95b41bf6ced0933321650bd2c4413106974766da
+ pristine_git_object: b876dce8ca019098465106bf05b11c5e0b9536f0
+ docs/components/generationresponsedata.mdx:
+ id: 5c92bc415596
+ last_write_checksum: sha1:8cd76e87e6167f3a97841e6de1a4ce4507e7f7de
+ pristine_git_object: 6dfd6191d083367490287508ccf1e4a239f13139
+ docs/components/getbyokkeyresponse.mdx:
+ id: 451f36940fbd
+ last_write_checksum: sha1:d5e3f4ef481598c92e4e4842442eeeba8a2627e9
+ pristine_git_object: 5730056ada30b50ff129f1da9e021fe69310d5b7
+ docs/components/getguardrailresponse.mdx:
+ id: a5ffd4aa91ea
+ last_write_checksum: sha1:511fa1f74b06e6f9c8b39ec95dbd976d31daa3fe
+ pristine_git_object: 7a49600a95781a703124f690ab3440201b3613fe
+ docs/components/getobservabilitydestinationresponse.mdx:
+ id: fc89b94d297e
+ last_write_checksum: sha1:43e6002bcb78df9ee766e6d97c08a6b238f8cae5
+ pristine_git_object: efce02e6b84011ecee5c2ccacffb835229febd25
+ docs/components/getpresetresponse.mdx:
+ id: c0c979f8e40b
+ last_write_checksum: sha1:370381ce62ad520180a59c7659ba0f72a4a1cdd5
+ pristine_git_object: 2af502a128b6f8dac61654f17c62e72c56122554
+ docs/components/getpresetversionresponse.mdx:
+ id: ec319a1ab019
+ last_write_checksum: sha1:e3378700484df1b9d94e39e1dc1c1bb92490f3cd
+ pristine_git_object: 6c3040281b154c953a524bed1bc45f1c6a8c4a40
+ docs/components/getworkspaceresponse.mdx:
+ id: c8d0c4683019
+ last_write_checksum: sha1:d659e4cebde3a9a14eca14c4a95f1e9e53e46f06
+ pristine_git_object: bb16c1fd514e8e4d4f98dfbebd3a29bcdf8ee192
+ docs/components/group.mdx:
+ id: 7a304030a713
+ last_write_checksum: sha1:e7ac1a81dba9420ef0ca16b53648812273505a3b
+ pristine_git_object: 34495da0d0429ae52773d520030bb2b0807bc206
+ docs/components/guardrail.mdx:
+ id: 91791d4c83b6
+ last_write_checksum: sha1:071ca3eb0a6f158e4107d7f337c3f7a8e6ac95f8
+ pristine_git_object: dc72fbb152e23a7e3903e9aa6479e68baf10f556
+ docs/components/guardrailinterval.mdx:
+ id: ccedea0ab250
+ last_write_checksum: sha1:08342a9cceb4f7a5dc0b574a429d46af9d9a13f4
+ pristine_git_object: 9e0a058e6a19b68f470eb0938670dff51b47f4b5
+ docs/components/ignore.mdx:
+ id: 2714aa9d51d7
+ last_write_checksum: sha1:fd8114687442350261ba507cd41d1f0ebb067928
+ pristine_git_object: 8ba131528ef679ebd2880be85b7732ad5a078174
+ docs/components/imageconfig.mdx:
+ id: 455a9f530ea8
+ last_write_checksum: sha1:3ec5e8ac11e823479e41115da31aae29d2a1cbd3
+ pristine_git_object: c838dbe65d84a9674c7afbf0f7be2d311a255733
+ docs/components/imageendpoint.mdx:
+ id: d7d1514fbcd6
+ last_write_checksum: sha1:4219b8a98eb20856cd545f891757ae12d1d52807
+ pristine_git_object: 29fa84c13547f8fcd2741bd23b00ab6200bf2959
+ docs/components/imagegencallcompletedevent.mdx:
+ id: 16f72f044ccc
+ last_write_checksum: sha1:3a9dc797d5ed3b3833321247a556897d9fd8a7e6
+ pristine_git_object: 2ca428b13cbf504d9c5cf11df4ab9e5eb656b567
+ docs/components/imagegencallcompletedeventtype.mdx:
+ id: 8c2e366aba77
+ last_write_checksum: sha1:1521f78cff4ba35951ca9b6196828f4212591fc5
+ pristine_git_object: ca8fa217c3925b7ace5235e44e8945eaeb825b5c
+ docs/components/imagegencallgeneratingevent.mdx:
+ id: bebca59d9a4b
+ last_write_checksum: sha1:93d10d87fa11c25e0fdcb65ff10be85da1c3c9e1
+ pristine_git_object: eb3a1af69393089b6d0b406aa194837d241da359
+ docs/components/imagegencallgeneratingeventtype.mdx:
+ id: 813a4ee9ab5c
+ last_write_checksum: sha1:105fd27a8cb9e92cff896a60006849e623145f9d
+ pristine_git_object: d89b772038fac7a3a929194836d3cfa1b7eee1e3
+ docs/components/imagegencallinprogressevent.mdx:
+ id: a1fff3931313
+ last_write_checksum: sha1:a11d0a6268b3b5caa62e69f4adc9514c4c20d1d9
+ pristine_git_object: 72ce2bb45580faad3429dddd82273dba8f741498
+ docs/components/imagegencallinprogresseventtype.mdx:
+ id: d6a5a3193c96
+ last_write_checksum: sha1:f530ffad689403173e1e56e74e71f588e1682bfe
+ pristine_git_object: 865edcac7cebf2e97eca5f67b6f0cc20b9538218
+ docs/components/imagegencallpartialimageevent.mdx:
+ id: 65578365bc26
+ last_write_checksum: sha1:c63aaf9e3f9b7939e12e5ecb3a0e088c15874506
+ pristine_git_object: a3b82a920807ae051f59a439f91b85e44f9ca17b
+ docs/components/imagegencallpartialimageeventtype.mdx:
+ id: 51c2429f9951
+ last_write_checksum: sha1:66bbf663f778a1f69c31d04f9c7b1161401b28fe
+ pristine_git_object: 8eb6786a519936cce87262623156a61e2f645c38
+ docs/components/imagegencompletedevent.mdx:
+ id: 2b1b82b2ff79
+ last_write_checksum: sha1:3d4e28577da1d6ee353a8f3bdacbc45e8a1c043a
+ pristine_git_object: 90ddd67dae34e0fed8c622edf27638d47709f3f7
+ docs/components/imagegencompletedeventtype.mdx:
+ id: dd9998bc9093
+ last_write_checksum: sha1:a7d7c52d0a7c5128a40fd9f1524e8b6f372a9061
+ pristine_git_object: df5a9a53d2ea20bb548913c902b0bffdf2dc5d15
+ docs/components/imagegenerationrequest.mdx:
+ id: b093cb0f5e81
+ last_write_checksum: sha1:68096752052ef76c094d2e49782962a0facad4d8
+ pristine_git_object: 1d6369db6d2d6de74df8a6d7366ba627a5389a70
+ docs/components/imagegenerationrequestaspectratio.mdx:
+ id: bda89377f32d
+ last_write_checksum: sha1:9cc231ee222c01ce471ecff3804a9e5acb8a054f
+ pristine_git_object: 2116ac419e420262dc3a03b6460ec51c985dd1cf
+ docs/components/imagegenerationrequestbackground.mdx:
+ id: cab3c6c6dfc6
+ last_write_checksum: sha1:ea6f2fa5f8f63600e2d1a67a784e6a93cf295975
+ pristine_git_object: 8501680bcfebabb3af52b518c01f732d18282120
+ docs/components/imagegenerationrequestoptions.mdx:
+ id: 2245ece0aaf8
+ last_write_checksum: sha1:ef565300c4aaaacf991f0ecabb2dade678494423
+ pristine_git_object: 26f3f1ecd8f4865034e81ce1eca81552d90d70b8
+ docs/components/imagegenerationrequestoutputformat.mdx:
+ id: 380f12bf77bd
+ last_write_checksum: sha1:afb479dc34118828e988888a8f49e7a5a50a45ab
+ pristine_git_object: 4901416246fb4e34fc9227d3dc0bbbc08aa717e2
+ docs/components/imagegenerationrequestprovider.mdx:
+ id: 8b592ddbab98
+ last_write_checksum: sha1:c67183fc76f6e46530829fc5b85b8c164a4c2557
+ pristine_git_object: 51188d0f86b2208ae9dc3d797ce3595961162602
+ docs/components/imagegenerationrequestquality.mdx:
+ id: 7699c7fce91f
+ last_write_checksum: sha1:e0c8abee1332b182aeb1228b9c7a7f4cec83e99b
+ pristine_git_object: d6f8b5bec84207d47a6c9e47a5c0ee901c7a555d
+ docs/components/imagegenerationrequestresolution.mdx:
+ id: 5dcb01b22e48
+ last_write_checksum: sha1:c53e03ff5d6cf292acc6702a75bc8b09db116e46
+ pristine_git_object: 4d9385e8f8bebbc916ea152992747b1af5de1519
+ docs/components/imagegenerationresponse.mdx:
+ id: 094e477544e9
+ last_write_checksum: sha1:3f998b412d3227450dc500b78c2e227385ddc6d7
+ pristine_git_object: b6e0e2c0dadc42fd0fbfaeb9b81f12efb62ff051
+ docs/components/imagegenerationresponsedata.mdx:
+ id: 1afc55d56268
+ last_write_checksum: sha1:04d65c9889436bc57b88dc1e9e98765f86d9da29
+ pristine_git_object: 78ec1e139b813231ed78ecf7f337cb277180b7a8
+ docs/components/imagegenerationservertool.mdx:
+ id: "299013078656"
+ last_write_checksum: sha1:663ae715382f7f22890ea81a43ddb3cd0c07cf6b
+ pristine_git_object: c290753ad894940926de78e89ec89f19f71b7370
+ docs/components/imagegenerationservertoolbackground.mdx:
+ id: d42f0c89a96f
+ last_write_checksum: sha1:1e06585c90c3fd1fbe38bbf24d2c382cfe5f0738
+ pristine_git_object: 208f2a3f3108d1d74d7000b10422a6930437bcec
+ docs/components/imagegenerationservertoolconfig.mdx:
+ id: 1a5797a495e3
+ last_write_checksum: sha1:e14700acb142c1035cb95a91aedc4d384d7e0b04
+ pristine_git_object: 3fc78f9b04fd2624804c6c0f2f13393d72a4130d
+ docs/components/imagegenerationservertoolconfigunion.mdx:
+ id: 9c9b67c84754
+ last_write_checksum: sha1:dc2781e674923e113c2e73fab18686e8495e1d61
+ pristine_git_object: a3b6a156a4bb01df6a3ddb4710504d2428ca0888
+ docs/components/imagegenerationservertoolopenrouter.mdx:
+ id: 589f9a433e7e
+ last_write_checksum: sha1:eca7b04fe2d9d7fd52a630a74780962cfd16997c
+ pristine_git_object: 0caf29cf47519cf46480e2e478429a3bfd6ba5ed
+ docs/components/imagegenerationservertoolopenroutertype.mdx:
+ id: 37745407ed6d
+ last_write_checksum: sha1:51da31cdc1f1d5719e1e5a669d8ca3eefe0d4a5c
+ pristine_git_object: 8151a459a9d8089d64f9236f554c74f764593691
+ docs/components/imagegenerationservertooloutputformat.mdx:
+ id: 330a7fb24966
+ last_write_checksum: sha1:980e372ff80d7465f1f5a9333481f98c0f831667
+ pristine_git_object: f19e909e7e1b862fe7f31454203f852f72028d1f
+ docs/components/imagegenerationservertoolquality.mdx:
+ id: c9904709d879
+ last_write_checksum: sha1:a8da01f3476375d3615262068d6a3d2fb2afa854
+ pristine_git_object: ab9a21795de0f70adb55361c39b280795f1a583d
+ docs/components/imagegenerationservertooltype.mdx:
+ id: 167c286f0c9a
+ last_write_checksum: sha1:6f2a9208a6ce068f3884933ec47c2118eff64bbf
+ pristine_git_object: b677030fbb87a091f68f14eceff243afcc8720a3
+ docs/components/imagegenerationstatus.mdx:
+ id: f6faa22834f7
+ last_write_checksum: sha1:b576a26c15c796599bda01d656621f3b408a4fbf
+ pristine_git_object: cabf0cccfa7d7bee9faa823d66650bc395220966
+ docs/components/imagegenerationusage.mdx:
+ id: 0f8faafc5148
+ last_write_checksum: sha1:be2ebcd80f3299ec6e38bf8c580ac5e28ba67d85
+ pristine_git_object: be9fe8ffa3ea8829bf61cbbdcfd5f1a17aad439d
+ docs/components/imagegenerationusagecompletiontokensdetails.mdx:
+ id: 71ecb25e164d
+ last_write_checksum: sha1:f0843acffd7d7540b07bb384f299557e7309950d
+ pristine_git_object: 9c56a843cd067e432d9bdd09291e10b3eb4bfbac
+ docs/components/imagegenerationusageprompttokensdetails.mdx:
+ id: cb55411b0067
+ last_write_checksum: sha1:38b7a082d8c225351211a7b4473291d662ebbb66
+ pristine_git_object: a00b1254724080c9b26012b397bffeb4885fb67b
+ docs/components/imagegenpartialimageevent.mdx:
+ id: 865cadc17d8c
+ last_write_checksum: sha1:9d921f6dda0f0aa406ac9589b024211d666e1b9f
+ pristine_git_object: b081c1148f0cd5e38587f52efcd82402833c5dfe
+ docs/components/imagegenpartialimageeventtype.mdx:
+ id: f75641b904db
+ last_write_checksum: sha1:71f197de28081be5757e4f8ba341f1a3cbed3741
+ pristine_git_object: 89e2495f687e323761fe3227c9b66a4a79513d4b
+ docs/components/imagegenstreamerrorevent.mdx:
+ id: a2298c4cb0a0
+ last_write_checksum: sha1:d53fecc0d40ebd120e370a2d4a83561c044cae32
+ pristine_git_object: befd44245772ca68b156b7ca8c06e5da27005bdd
+ docs/components/imagegenstreamerroreventerror.mdx:
+ id: 927575e8ae9a
+ last_write_checksum: sha1:594d680e5d8050e5620238e5ea457d6617a051f6
+ pristine_git_object: 8539997c094d61bbe4ccab90d9118dce5ef8ac08
+ docs/components/imagegenstreamerroreventtype.mdx:
+ id: 4aebc0906c32
+ last_write_checksum: sha1:cc721e8cb94394423b023926244b51f981a1840e
+ pristine_git_object: dc1d52997ba58bd62e44c145f3f954ff619d95b9
+ docs/components/imagemodelarchitecture.mdx:
+ id: 605b7d0df8cd
+ last_write_checksum: sha1:4d1003bc766ebe55e79e172c1f959ccb3b945487
+ pristine_git_object: 6842d9d695c103dc85f93fa899cb2646c5c2d62a
+ docs/components/imagemodelendpointsresponse.mdx:
+ id: 831c40b45635
+ last_write_checksum: sha1:fd1f51f3157ff364b9c61def7734a5321eb66400
+ pristine_git_object: 7d3ec9ccf30af829cede2a042052f85219c1381e
+ docs/components/imagemodellistitem.mdx:
+ id: 84bc3a818e8c
+ last_write_checksum: sha1:3ef04fbb970ea8f28af6e954bad4b168a0af7519
+ pristine_git_object: 633c99be2493e8546eba3d02539567f1aa90d1cd
+ docs/components/imagemodelslistresponse.mdx:
+ id: aa9f0050f23b
+ last_write_checksum: sha1:c29180c08d47da5238a26b92b9806904f6f88237
+ pristine_git_object: b5d695bd126df56bf6b58635855629585b76505b
+ docs/components/imageoutputmodality.mdx:
+ id: bbdf54215a95
+ last_write_checksum: sha1:10bd9287d10686536a2f0d49bba5fae96b4ec773
+ pristine_git_object: 52ec9d78ba530720587f29cd7412daa84de346ac
+ docs/components/imagepricingentry.mdx:
+ id: 349c100297ec
+ last_write_checksum: sha1:a8e0dc272363e755f035d77d5920553b5b6edbd5
+ pristine_git_object: 8381e7e712183249bd838da2fc3951756555b167
+ docs/components/imagestreamingresponse.mdx:
+ id: 69e8d792ed0e
+ last_write_checksum: sha1:8b5ea25f12c5267b8db48e6e7524163c48f09ebd
+ pristine_git_object: 8aad6cc3403b2d0874a7b591248988f3089d33ad
+ docs/components/imagestreamingresponsedata.mdx:
+ id: 4376edf71a13
+ last_write_checksum: sha1:5e6ed13b281270c672168c506b36d7e3b16789cf
+ pristine_git_object: 104002712c11896019f0ef05708333ce6631d4d1
+ docs/components/incompletedetails.mdx:
+ id: d83c063d7285
+ last_write_checksum: sha1:b24c3be63176609c48ae9b19582c520ba1683ce7
+ pristine_git_object: 7c1490a5fa42012a60428023229ca9980b0602f6
+ docs/components/input1.mdx:
+ id: d94dc7f66d38
+ last_write_checksum: sha1:c645ebd86b024620cdbfe93dbeb7f35bb4a36840
+ pristine_git_object: 43245bc1076bf43c18fab7c40cd27b05ed837d9e
+ docs/components/input2.mdx:
+ id: 09d21fcac31d
+ last_write_checksum: sha1:d19fb7762524ff6849f39b1cb270a917910b1e70
+ pristine_git_object: 5dc5ade73a81471f6af86d4b5e460b05675e175b
+ docs/components/inputaudio.mdx:
+ id: b82595fd87c1
+ last_write_checksum: sha1:625e374c14ab462de002dd76049c568de4449910
+ pristine_git_object: 54aba1db860570e63e2c176705a3e623d6e28bc4
+ docs/components/inputaudioinputaudio.mdx:
+ id: dc49d96d2907
+ last_write_checksum: sha1:a89196f4257c89359f4cf2966e2e329c724dc7a6
+ pristine_git_object: 29ec9c922a6409e3b6de59222b5d8508b2d059f6
+ docs/components/inputaudiotype.mdx:
+ id: 7a27b29fad43
+ last_write_checksum: sha1:71efb65f0fb6eddaa35c30bbf1a3a07af4539591
+ pristine_git_object: 9fadef3e1a933c24342705e48452ba7635b8ac48
+ docs/components/inputfidelity.mdx:
+ id: 2e4fee8a959f
+ last_write_checksum: sha1:f6643baabee131da4bbd8b493f480913c7c292e4
+ pristine_git_object: df80baab3b64b8ece9f4922ccbab3623deb41092
+ docs/components/inputfile.mdx:
+ id: 43d8ad1a407c
+ last_write_checksum: sha1:232a7b31db9ea77c78b203db257bbb9a63aeb3b9
+ pristine_git_object: 2e4a15d5c0f08b37ce441c476eeacafa99f8c7a3
+ docs/components/inputfiletype.mdx:
+ id: 3328065140ea
+ last_write_checksum: sha1:f1075ecf280ac98a16eaa0c3e4624d71c5c3403b
+ pristine_git_object: 15dd4af786386589c96dae3757bbd0be0c30ff5b
+ docs/components/inputimage.mdx:
+ id: 2e7cfa5069fa
+ last_write_checksum: sha1:3f6d268739884e923eb1f26dc906ff81e00d31c8
+ pristine_git_object: 294eb9b52890b2247b6f0bf4cc64b15c503aff27
+ docs/components/inputimagedetail.mdx:
+ id: e0f846215c0f
+ last_write_checksum: sha1:b3c873c60884089778476b6c88a3d16b5311d312
+ pristine_git_object: a20099452d2e669648d342bc04065b06b9cf29d6
+ docs/components/inputimagemask.mdx:
+ id: 033b801659d0
+ last_write_checksum: sha1:d932479db9f92bb6fbebe9b61fb8178019fd1ecf
+ pristine_git_object: 74ce00775a9ca69cbfd16340c9662df451066df0
+ docs/components/inputimagetype.mdx:
+ id: 74ad50005674
+ last_write_checksum: sha1:f2fe452162811ec4f2a5325418a75c68d7bf4218
+ pristine_git_object: b1eb47e7bce4b12ede72357940618aeed02ff4d7
+ docs/components/inputmessageitem.mdx:
+ id: 24a2f3588676
+ last_write_checksum: sha1:2c5512df8a161c5988e76722415cc8894f6fce08
+ pristine_git_object: 0a2f6e5d23a03c66e723da5779da9ce9d58e1b19
+ docs/components/inputmessageitemcontentinputimage.mdx:
+ id: a07208b1eddf
+ last_write_checksum: sha1:dfb1c800e9a26b5b5d289a0b94f7c6bb3c2f5154
+ pristine_git_object: d029dec16fd1143fa35cc5383f6bdce9feafcbf6
+ docs/components/inputmessageitemcontentunion.mdx:
+ id: bf1cd325720c
+ last_write_checksum: sha1:6b1cea3884e1ea54028c1acbf9059b58ee7a27af
+ pristine_git_object: f64ba6e9c40bc382e06867c10c726dc7c11b7054
+ docs/components/inputmessageitemdetail.mdx:
+ id: 04bd4f9248a9
+ last_write_checksum: sha1:c7081ef01efe8819f72d4672df054d730b0a0827
+ pristine_git_object: 58974a1e6d82933924b850a802232ea3d5ab0e9f
+ docs/components/inputmessageitemroledeveloper.mdx:
+ id: c352e4b2723a
+ last_write_checksum: sha1:2b4ecd3f6a577ab834327d26e22d341c844fdc2a
+ pristine_git_object: 32594773a1bd66f8539daff310d049a48fc099c1
+ docs/components/inputmessageitemrolesystem.mdx:
+ id: fea9c8716c78
+ last_write_checksum: sha1:8c092af06965fcb6416b93d90299ac0204d91519
+ pristine_git_object: 064277e0c54b928dc6c52689bb90b2e9f947f330
+ docs/components/inputmessageitemroleunion.mdx:
+ id: 8578d7afaad8
+ last_write_checksum: sha1:9b89bcb1d4cbc808b7f263d127f1c6097717c0d8
+ pristine_git_object: ae0a911e1327d4056002657afc9fbdf931bb59e6
+ docs/components/inputmessageitemroleuser.mdx:
+ id: 6d239f9460a2
+ last_write_checksum: sha1:4db31d646da1d1a902f3bb876ac22df770689944
+ pristine_git_object: 972c913ab860f614e52716d93be41fb4f04be14d
+ docs/components/inputmessageitemtypeinputimage.mdx:
+ id: ecf839cab864
+ last_write_checksum: sha1:89a28327a08ad2a2c1ca7b6e544d9b172d19073c
+ pristine_git_object: 03fdcb0b6169f1e6ac65df087d7db7a829f43ec1
+ docs/components/inputmessageitemtypemessage.mdx:
+ id: 970c66796bad
+ last_write_checksum: sha1:8a4cf12ac00b9578eedf4a7450e54a0a5c2f5b93
+ pristine_git_object: 7b8d6b3b7603da2e32b55b4c2a1c1f3ec49c69c1
+ docs/components/inputmodality.mdx:
+ id: 3c25d3e68f37
+ last_write_checksum: sha1:da74c88c99fccd4906633e2cfc5d29ddb7297158
+ pristine_git_object: 37302a3f153c65e1c6e2596b76dbc47a6a93e1c8
+ docs/components/inputreference.mdx:
+ id: f23a98f7a3b4
+ last_write_checksum: sha1:036e6b05d18541d912d739ff3785fc8c99efdb2e
+ pristine_git_object: 8332cd08018255c15d027281c9c6996df5e08b80
+ docs/components/inputschema.mdx:
+ id: 4cd0b1f16cc2
+ last_write_checksum: sha1:c71a5e5f6eea8441960e87e4f94c460757622b9a
+ pristine_git_object: 0adafb654189b45c31afe6f9f924f94a2649bb6d
+ docs/components/inputscontent1.mdx:
+ id: 4d067cae8934
+ last_write_checksum: sha1:63fc75a1cd64347bbd378217fca9d0f6f760aba3
+ pristine_git_object: 99897ec8c711b6137748752885004a9e4256e6d1
+ docs/components/inputscontent2.mdx:
+ id: 5513e35476b2
+ last_write_checksum: sha1:8d160b5993bc22233500428ef257a496557a3e8e
+ pristine_git_object: 2cfb9792fcba74c7d8baccebb3751ffac9c88ba1
+ docs/components/inputsmessage.mdx:
+ id: 8187d4987ebd
+ last_write_checksum: sha1:cb5e14bd64190feae73408111aa97509c339da0b
+ pristine_git_object: 60f7bd2f3f71f659746917b9114c09fb3dbca65a
+ docs/components/inputsphasecommentary.mdx:
+ id: 60d1aac83135
+ last_write_checksum: sha1:6876e0b49c7c8d92c4f56fcba61b511accf19a6a
+ pristine_git_object: 1c08b114f0629b742efd6c8f80627b66995dc368
+ docs/components/inputsphasefinalanswer.mdx:
+ id: 434258e8320d
+ last_write_checksum: sha1:2d451ed92da6f8f62d14055b3264182902a9323a
+ pristine_git_object: 6dc3c8e07fe4b9849cec18a1ad7f54f7b9d0f374
+ docs/components/inputsphaseunion.mdx:
+ id: 61e40e9bc963
+ last_write_checksum: sha1:c210807ab5a55a80d7f7e4c97a29e96a059e2ddb
+ pristine_git_object: cad0670099b36ac101d02c0370b0f3407fca26a0
+ docs/components/inputsreasoning.mdx:
+ id: 4d87fe5d05cd
+ last_write_checksum: sha1:fa74176f24f50aba66bf707549a7c803e918f4b4
+ pristine_git_object: 60e9a1a60a62f2b6a9be5174e1b3d54c9f9371b1
+ docs/components/inputsrole.mdx:
+ id: 0ab483c40a1b
+ last_write_checksum: sha1:6466387fa9658cc53b278d915be3cef012597acb
+ pristine_git_object: e6e13f32b3608cf2ad039d24d2edf81f1bab043e
+ docs/components/inputsstatuscompleted1.mdx:
+ id: a3936d0a936b
+ last_write_checksum: sha1:a8e73d3a431425fc4fb64d027021df1ec099a68e
+ pristine_git_object: b19646a76344e1235ecf01afe4c171300f4a3973
+ docs/components/inputsstatuscompleted2.mdx:
+ id: 399ab7daaa98
+ last_write_checksum: sha1:4ad30bcbf75c488d0d06bc53ad2180241e2dcfbc
+ pristine_git_object: 6830af4d32bd0fa03b56d3eda4461c424b9f666c
+ docs/components/inputsstatusincomplete1.mdx:
+ id: 34ec54b595d4
+ last_write_checksum: sha1:418fe3e49374eb2968034dce797827aa2dc95465
+ pristine_git_object: a022485c8ad97130b348bc591ff76193697f2b26
+ docs/components/inputsstatusincomplete2.mdx:
+ id: 920c4aeb2120
+ last_write_checksum: sha1:86d97c8cf60643ccdf0679cee62662bb28e2b1fe
+ pristine_git_object: c84f517be1ca9a39a8355704047e998fe901156f
+ docs/components/inputsstatusinprogress1.mdx:
+ id: 430457359ed3
+ last_write_checksum: sha1:89088e3738df0a43e5755c7537afccbba09659bf
+ pristine_git_object: 4f9a03c20be2f67f4fa292b043ff1da55b890de6
+ docs/components/inputsstatusinprogress2.mdx:
+ id: 99e4678f2b15
+ last_write_checksum: sha1:78dee2253b302817fb7e12690d62cbee88150e00
+ pristine_git_object: ded7acc1e4be1b1d5c76f075ff63d67fa0193003
+ docs/components/inputsstatusunion1.mdx:
+ id: a4b286a62fdb
+ last_write_checksum: sha1:c4cce32f5602c845350afbdc57ba0fa2dfbaea4d
+ pristine_git_object: 7b59ecdf92d6f50776a017b01423c2c23b5d1b1f
+ docs/components/inputsstatusunion2.mdx:
+ id: f9e28f254633
+ last_write_checksum: sha1:40d474f03742879c23e62efba171f6c8fc760e74
+ pristine_git_object: c82be8e044c5c29fad07a5f9ac8d4da5948c5b74
+ docs/components/inputstypemessage.mdx:
+ id: 2ba71e113d79
+ last_write_checksum: sha1:5050ad339d38af566534203897b6fa3380ed236b
+ pristine_git_object: 1a8200c4b2f181c10a3aee86a2739891e8c980b6
+ docs/components/inputstypereasoning.mdx:
+ id: fee733f8d7f0
+ last_write_checksum: sha1:f8726b71b8ada6d2474047e526c0f978e08448dd
+ pristine_git_object: a585778e1df15723a50d3d9535c27b9e4be7d405
+ docs/components/inputsunion.mdx:
+ id: "011522549903"
+ last_write_checksum: sha1:33dbbf16f18d97ff625cf548a92c0ac478a7fe91
+ pristine_git_object: 33aee92c61bf7ab9beded4e193f50a2c08462378
+ docs/components/inputsunion1.mdx:
+ id: c216609d21ce
+ last_write_checksum: sha1:ccfecdbd5ad7a2719b2372c54e9eac1075b1f108
+ pristine_git_object: 9d37626f96de3c19d39e4901d041ef41b01bdc98
+ docs/components/inputtext.mdx:
+ id: c8a97322a50a
+ last_write_checksum: sha1:5462885a683c2ca29551281c9fcf3ad1bceb0634
+ pristine_git_object: 5ebcb8365d9d55c2032d5d4739ceeb30831d1ebb
+ docs/components/inputtexttype.mdx:
+ id: 91f958925357
+ last_write_checksum: sha1:42a8d9a6d3506e02f6024592691292b7ac255075
+ pristine_git_object: 18baf9c9090c0696427dfebf69ed7e12a8fd77af
+ docs/components/inputtokensdetails.mdx:
+ id: 1b569c720e5c
+ last_write_checksum: sha1:f6b5b4912a20dfea2515994f9656374d3fc56676
+ pristine_git_object: c58b1d023f8ebca70e803c0128b0ade367b4ae35
+ docs/components/inputunion.mdx:
+ id: 94f68c6e9582
+ last_write_checksum: sha1:85c3b78897569c4572f3fc43f6b1143c293b452d
+ pristine_git_object: 53081e479fffa519e65d4903e895381506bf688e
+ docs/components/inputvideo.mdx:
+ id: 174b24b8f614
+ last_write_checksum: sha1:a00cacecd2fc9e7679a18e99f8070ee4497947fd
+ pristine_git_object: a303045f5dcaca6830fbaf648b44a0c048603ab8
+ docs/components/inputvideotype.mdx:
+ id: ec9d78e69f7d
+ last_write_checksum: sha1:baaddfd1bc97d6bc885fcf33c436b5dfefff8d29
+ pristine_git_object: 31cfd35391d548fbb94f6df1303e76b057b6c369
+ docs/components/instructtype.mdx:
+ id: 4e1ceba5a654
+ last_write_checksum: sha1:2efe0463c8d0ed63159bbcc8cb8c21743800b88e
+ pristine_git_object: e3e71d16be9294f68ca671f76dbcc8b6d8ecc749
+ docs/components/internalserverresponseerrordata.mdx:
+ id: 9a443dea63c5
+ last_write_checksum: sha1:6abe1098c9866188738c24b9d07fb1440c831a24
+ pristine_git_object: 4db529f2f7d510aa971abeac76232281546a38ca
+ docs/components/itemreferenceitem.mdx:
+ id: e6a76e3841f0
+ last_write_checksum: sha1:715bc829e2cc02c156eb742a88145113fbd7449c
+ pristine_git_object: 5d91c205adfe99da0e355985afe808ac8e66d918
+ docs/components/itemreferenceitemtype.mdx:
+ id: 4a97a0028d93
+ last_write_checksum: sha1:a80dda1fb6cc098102c643649ac1fac2c9df4bb9
+ pristine_git_object: 74c61e5f750e2df770862017b6b406065398ca9e
+ docs/components/keep.mdx:
+ id: c3da64331e76
+ last_write_checksum: sha1:f58b4b0416619717f16b37897c0cfe19bdac2362
+ pristine_git_object: 4a4da75aff6c8fcea3c3d2269c99e0a9c62ad973
+ docs/components/keepall.mdx:
+ id: e8d72870a08b
+ last_write_checksum: sha1:9864f94e04a0411d1073741e9fe31d7fe3c21d80
+ pristine_git_object: 8f65526d93915457236227842ae50be031fd0e0c
+ docs/components/keepenum.mdx:
+ id: 3ee3fcc5fe79
+ last_write_checksum: sha1:043573e286bc900925be92e1ebe00a14167d4063
+ pristine_git_object: 7790630b5cfb76dbe3527e71a23f809dc21bfe36
+ docs/components/keeptype.mdx:
+ id: 381355e7a9b0
+ last_write_checksum: sha1:757294dcf376127b5cb8ef8224b848695c9b2c7f
+ pristine_git_object: 99cde727d78d8a158b1d809de1841e083507f13a
+ docs/components/keyassignment.mdx:
+ id: 6ebc78938625
+ last_write_checksum: sha1:cc00184ca2e96cb429788698d7be2111a2ea5fad
+ pristine_git_object: 3c18ed0fb80fbc8cfd45667af06cdecde6a907d5
+ docs/components/legacychatcontentvideo.mdx:
+ id: fd222b8b9445
+ last_write_checksum: sha1:c77f3069be68b3a8fe5757bf31626d73606de778
+ pristine_git_object: f1d4b3d542cadec3caabd2fbb99f8769221e37ee
+ docs/components/legacychatcontentvideotype.mdx:
+ id: 6ed2500f1a33
+ last_write_checksum: sha1:191077107def4be932273d87f6e81a2b3aefc412
+ pristine_git_object: 63991d9ba8aedd15e34bdc73c8f99fbdcda2d037
+ docs/components/legacywebsearchservertool.mdx:
+ id: 0b47ff5dd0c4
+ last_write_checksum: sha1:ef83a0b10997f5e4b739804c64100360e6dc2f32
+ pristine_git_object: e966af5dc1c57d2628f6392e923e7cf8b9f29188
+ docs/components/legacywebsearchservertooltype.mdx:
+ id: 192fa7358f3b
+ last_write_checksum: sha1:c82facbab1f9b4f53e06a6e3986b886f2a9b9b00
+ pristine_git_object: 3bb4205e59ddb7d332e8d900afd2ee5aaa120dc0
+ docs/components/listbyokkeysresponse.mdx:
+ id: be41921e1cce
+ last_write_checksum: sha1:cc039aaf6927478fd3d3db9eb6a1f84c51e9caa4
+ pristine_git_object: 4e7fce4c206a1d335298f04fc0a77a0c98c00b5c
+ docs/components/listendpointsresponse.mdx:
+ id: 1aeb90d09e63
+ last_write_checksum: sha1:f1191182b486926d410b238e95fc17b0f0c205bd
+ pristine_git_object: 2687145f938c790c9ea9601232818b2114cd0db8
+ docs/components/listguardrailsresponse.mdx:
+ id: ba740952e77b
+ last_write_checksum: sha1:5a75d264da7e1074ccb5529bf06dce343db5a8da
+ pristine_git_object: b62bb9a80c43de00da33184f8917adf248d45959
+ docs/components/listkeyassignmentsresponse.mdx:
+ id: a7c5b3a2f509
+ last_write_checksum: sha1:251ccf1d69aec53e91a8ad243516d8d22d4b71a7
+ pristine_git_object: c6806c4ab2664c34e7e33ca1bebfe62cce73569d
+ docs/components/listmemberassignmentsresponse.mdx:
+ id: 54da8b0a1cbc
+ last_write_checksum: sha1:1a24b49586e33b6ff2bb38efff99a46aa9e9bb79
+ pristine_git_object: 9e72b130eb39b37b04d20b3aabefe6dd3b99c23e
+ docs/components/listobservabilitydestinationsresponse.mdx:
+ id: cd603cde4c15
+ last_write_checksum: sha1:27e13153336bab53e6a0e4ec56c12b2cd881ef9a
+ pristine_git_object: 912c6caf6f1687c0201521fa3b65c64492c6fcb1
+ docs/components/listpresetsresponse.mdx:
+ id: a2774fdc050a
+ last_write_checksum: sha1:1797db57ed0b6daab7da6ee61004899f4c01004d
+ pristine_git_object: da04cab090a9e71771b5f2a82148e279d978dd46
+ docs/components/listpresetversionsresponse.mdx:
+ id: a6eb4fad37a7
+ last_write_checksum: sha1:b6e1c0dacac17485fceedc43c19f73684c950149
+ pristine_git_object: 768df799d61dcc27510f108d123d4182e8f9eba3
+ docs/components/listworkspacebudgetsresponse.mdx:
+ id: be60b3aa222d
+ last_write_checksum: sha1:5e5e015f7957686bce403d8f176e4f7f9eba9b47
+ pristine_git_object: 27bb746a556432a1d423634c0d2f55e384de7859
+ docs/components/listworkspacemembersresponse.mdx:
+ id: 1b8dff85b565
+ last_write_checksum: sha1:3577f9efc0094f785f0413e6eacc729267e204fc
+ pristine_git_object: 90edcaf6b5451904212adc4202422f5808d2194f
+ docs/components/listworkspacesresponse.mdx:
+ id: cddf2b6dd8bf
+ last_write_checksum: sha1:e5f4cc01853d9fa8feb77140d976d64ebe5b1d45
+ pristine_git_object: b78013a42a1ecdd045a22b5166db12fc1fc2c762
+ docs/components/localshellcallitem.mdx:
+ id: 4fd75c6167cb
+ last_write_checksum: sha1:79dfdbd525136f87bc1f7d07d55c3abfffb19eee
+ pristine_git_object: c3ce8fe8268ade1ac51cdf8958666a8aebeea8fd
+ docs/components/localshellcallitemaction.mdx:
+ id: 7b1de6b70edc
+ last_write_checksum: sha1:f8b2f71517adc098efbe61d8dd78045b92cd8054
+ pristine_git_object: 584d53921fdc4463e44d80a75a316aa710f1e901
+ docs/components/localshellcalloutputitem.mdx:
+ id: 785248d5a428
+ last_write_checksum: sha1:81eed95472bc4d2f87e3c28c519e82fb75e8eebf
+ pristine_git_object: 99fa6e2a4948f502bb295af937883a3f2c18c205
+ docs/components/localshellcalloutputitemstatus.mdx:
+ id: 35259ee549fe
+ last_write_checksum: sha1:bcb4e74975c086a2267475ae2954631951feaad7
+ pristine_git_object: 35fda260302c26b059ca748fc7804d9feb7742b7
+ docs/components/localshellcalloutputitemtype.mdx:
+ id: 01c195fe37c8
+ last_write_checksum: sha1:8aaab04cfc173280814aee66b0eb176cb162765c
+ pristine_git_object: e67622cfe09af3ad183090b653716b4aed97a9b2
+ docs/components/logic.mdx:
+ id: b28a174aa390
+ last_write_checksum: sha1:ed602f5db1f575de70d02186c857340dc491af43
+ pristine_git_object: e9b7b000e766329851f0c1fc0a4805e74b8dc6b2
+ docs/components/logprob.mdx:
+ id: c2e49761789d
+ last_write_checksum: sha1:7461a6ed2ebd7d111f3a6c2ed9051310643a6962
+ pristine_git_object: 6345da5c5881bd02c31a53afacce924bab7dede4
+ docs/components/maxprice.mdx:
+ id: 4c021ec1bf65
+ last_write_checksum: sha1:3d6adde1002316d1880a95f5015889f052eb217a
+ pristine_git_object: e1892e259e3cb8de57bf1582554878549c8b9261
+ docs/components/mcpapprovalrequestitem.mdx:
+ id: a77961ecf93d
+ last_write_checksum: sha1:3adf3b4a8fb19ba488420fefa26334fd9efa6246
+ pristine_git_object: d02d66656b563e91723e125ccb9a8dc7d3db3920
+ docs/components/mcpapprovalrequestitemtype.mdx:
+ id: b4ef5028ec47
+ last_write_checksum: sha1:eb72d54550ff1d97a305a53d1dc7dcb14af2aa1b
+ pristine_git_object: dd72c2a9e90f13d33d80faf97fa1cf312d25ab08
+ docs/components/mcpapprovalresponseitem.mdx:
+ id: 49c472b51b96
+ last_write_checksum: sha1:a713479e5aace467a6c93d6aac12fde5c2c848db
+ pristine_git_object: d67c1e405001960842d04e3fd31a83c0f4a9783b
+ docs/components/mcpapprovalresponseitemtype.mdx:
+ id: e1ada0a7d6f5
+ last_write_checksum: sha1:7ac26ee40276a37c28fcb7616399f5ec13635d46
+ pristine_git_object: 4bbaed26edb62e2c671b09348e5fe5f0e8ea4a33
+ docs/components/mcpcallitem.mdx:
+ id: 6b694279da31
+ last_write_checksum: sha1:cd9329d7ca20c966b29f7e3a544d41465e1cce52
+ pristine_git_object: a025e7da660bc760c72964335bd600371edbf7e6
+ docs/components/mcpcallitemtype.mdx:
+ id: ac24e6fa49a8
+ last_write_checksum: sha1:c66cd7093df7ec0deac9c479b14cd3dadac11d47
+ pristine_git_object: 8e6027553c3cadd56957a3a5e946351b959bdd6c
+ docs/components/mcplisttoolsitem.mdx:
+ id: 3340f4b5fcbf
+ last_write_checksum: sha1:512a4933478a87149eee50bf8839cb3dc8c39f30
+ pristine_git_object: decba2cc8470f7751ac025ad9cc9cf195243a7c1
+ docs/components/mcplisttoolsitemtool.mdx:
+ id: eaafe6825d42
+ last_write_checksum: sha1:781dc6f0f15681d6a521fc6882d736f3cbfb2794
+ pristine_git_object: d73292f539ff9baed94cbafa56b0e401b1cce838
+ docs/components/mcplisttoolsitemtype.mdx:
+ id: f6a66bf29b6a
+ last_write_checksum: sha1:d6b36cad9e7fe3020168dda96352fb637d19bd35
+ pristine_git_object: 633df50c25056c04f81ffa9500857ff3b9e5852b
+ docs/components/mcpservertool.mdx:
+ id: af4fb76dbf07
+ last_write_checksum: sha1:0232a086c6b2ce8d1d3419420faf6a20baa4936d
+ pristine_git_object: 70f05198182e71eb71ef986c49acea65031c003c
+ docs/components/mcpservertooltype.mdx:
+ id: a3ffc7c06762
+ last_write_checksum: sha1:66ee790a2feff588d942a104eaccd58ef4b79259
+ pristine_git_object: b86c9a1a7b6c3a3f3d51533aee21b27bbc7af8c2
+ docs/components/memberassignment.mdx:
+ id: b91e68dbf87c
+ last_write_checksum: sha1:38512558186ae584eb7de3954873284b1f781cd6
+ pristine_git_object: 589bcb61c72b35c62b935d72e3cdfa533166d3d5
+ docs/components/memorylimit.mdx:
+ id: 9265ef3d0f1a
+ last_write_checksum: sha1:19580835f051bd4a97d1d272d3a6dbc882e016f2
+ pristine_git_object: 11421f055f1c2312710b637f72378d63e9df1d8b
+ docs/components/messagesadvisortoolresultblock.mdx:
+ id: 5a07a5b7964a
+ last_write_checksum: sha1:7c07658f4384e1ca5ad30f33da19cdb1093c9dc4
+ pristine_git_object: ae6b8d91163f69ebb9495697002029e8ac117780
+ docs/components/messagesadvisortoolresultblocktype.mdx:
+ id: 3a0dbdde87f0
+ last_write_checksum: sha1:157db05989f1ae8fe2c02064998a74cb55420fe6
+ pristine_git_object: e15e5c95e01572a3fc7d59ff16dc4bcc5d695447
+ docs/components/messagesfallbackparam.mdx:
+ id: d7e026fed5f2
+ last_write_checksum: sha1:e2d6138202f6f55f4a17478bff2a13a3e6001cac
+ pristine_git_object: acb608428580d878f911d7c166c4651a58073753
+ docs/components/messagesmessageparam.mdx:
+ id: 816cdd6ac883
+ last_write_checksum: sha1:1632139846752d09a080a715525b127deb43e2fa
+ pristine_git_object: 698d1f4bb05f92e5bddebc948f04bb806c2411f1
+ docs/components/messagesmessageparamcontentunion1.mdx:
+ id: 811f79bf91b8
+ last_write_checksum: sha1:72740fa5031fb64e07428df970b3c41feaf8daf2
+ pristine_git_object: 3c0a29ada0324939822807c2fc3007b3ea178688
+ docs/components/messagesmessageparamcontentunion2.mdx:
+ id: 34ef0b8ae9b7
+ last_write_checksum: sha1:b4f7b49df6f60b741ea71b13a71f0bc967b03323
+ pristine_git_object: f50498dbfd0163b053e37e0b0256ab6bb43336e8
+ docs/components/messagesmessageparamcontentunion3.mdx:
+ id: aa4353a5c3e9
+ last_write_checksum: sha1:a0db5da340e7095ef3cd31bc88b3aedd139677bf
+ pristine_git_object: aacfcabc1908dd56355bd5059c8d896a7f5266fd
+ docs/components/messagesmessageparamcontentunion4.mdx:
+ id: 0cbf68d37ca2
+ last_write_checksum: sha1:78cc4e1944f81a93cbe863fd533981ec1d838f71
+ pristine_git_object: 41beca7be323b219a39dbc8383341b43f7416f80
+ docs/components/messagesmessageparamcontentunion5.mdx:
+ id: 103a9b1bc479
+ last_write_checksum: sha1:8082efc20a4cb6d09750ac74b4db5a4f224d7032
+ pristine_git_object: f7bb2cc53c8b844fe5f28f7cfa6c864f94994ddd
+ docs/components/messagesmessageparamrole.mdx:
+ id: cb1721b92cd6
+ last_write_checksum: sha1:3f5c7431c6635c667b17e7b176b7dd4ba6f6777d
+ pristine_git_object: ff70af302614222cc836cb8347c73b071ef7d4ff
+ docs/components/messagesmessageparamtypecompaction.mdx:
+ id: 5194bb4cd379
+ last_write_checksum: sha1:817f941770a847e3683c28fcb2a6237321bd2561
+ pristine_git_object: 371458c5cbce70c0ff25e7da7703feeef8482d34
+ docs/components/messagesoutputconfig.mdx:
+ id: 4f36aa4862b1
+ last_write_checksum: sha1:f5ce07d1d0cccb54cd23587265a28960a918b46d
+ pristine_git_object: b5ce8e91138ac3cacc1955b32a3e5775c96ecd79
+ docs/components/messagesoutputconfigeffort.mdx:
+ id: 4eea6d60aba7
+ last_write_checksum: sha1:bee3c5c3dd1beac6eeee074f484dd2ba32e1a20b
+ pristine_git_object: 5de3f3fc91b9d1c301c8b5d01ebd80acabf1dfc0
+ docs/components/messagesoutputconfigformat.mdx:
+ id: 6295b9d1e1c3
+ last_write_checksum: sha1:83631a2624668b151b07bd84a485206eb52d2005
+ pristine_git_object: fdec2e474dceaf742a71a9042724c94720e115e5
+ docs/components/messagesoutputconfigtypejsonschema.mdx:
+ id: fbb3784021b7
+ last_write_checksum: sha1:ac721bbfc3aeacc74104fa841e3f57376c4799d8
+ pristine_git_object: cff8f3938a8bd5699d1111a6b1a926518d868da5
+ docs/components/messagesrequest.mdx:
+ id: 762dd6b894c8
+ last_write_checksum: sha1:8e06b3369eb4dee0ab5fee504e444cb5be1f2f3c
+ pristine_git_object: 2b25d420887ade7549b1848592fb24ed622b54f1
+ docs/components/messagesrequestmetadata.mdx:
+ id: facdcaeb2576
+ last_write_checksum: sha1:42bf112bc4f6d259c589906fd5f67c5342ab4c2d
+ pristine_git_object: fb2a55630750a5c10fe509403c6d95cbfa8373c5
+ docs/components/messagesrequestplugin.mdx:
+ id: 45918e4b5c26
+ last_write_checksum: sha1:955d6b458b4cc3b30b3a3a20e07d832ce72f1365
+ pristine_git_object: eaf4fe4fcbe67dbaacdde671b7774b00e0e31d42
+ docs/components/messagesrequesttool.mdx:
+ id: f9dc5aede7ad
+ last_write_checksum: sha1:4b0df6f8636e4882112549b4f036f9b54d99439e
+ pristine_git_object: e6fae8228c3d685d6cfe815e3c24fa53fd642ff7
+ docs/components/messagesrequesttoolunion.mdx:
+ id: cb1be4df3cf7
+ last_write_checksum: sha1:f3afd12d5ecb4ceb5a4209dd03594abb8dcd626a
+ pristine_git_object: b24e866b9c3842956daae6c28351e0643c29fc49
+ docs/components/metadatalevel.mdx:
+ id: f564e5e9a7d3
+ last_write_checksum: sha1:e51f09243a346926c426f53b07865f5ed145511d
+ pristine_git_object: 6025f743b09271172bd6bc22801cc51d73513980
+ docs/components/method.mdx:
+ id: 52eb604d9844
+ last_write_checksum: sha1:a1671e63404dd1f194cf0704138919c10a9ca6c6
+ pristine_git_object: 90145e7861da0ef5f30900bff09539fe2e1bdeb8
+ docs/components/modality.mdx:
+ id: f40fccd34eb7
+ last_write_checksum: sha1:bdebebe3627c62469a2911d40a29e75f6e508f47
+ pristine_git_object: e1d39ed87a123b73a5e54104a9408a3645c07d11
+ docs/components/mode.mdx:
+ id: 2359278fefff
+ last_write_checksum: sha1:83de45c66339ab29177c96f4092ff606bb0147cc
+ pristine_git_object: 4efff0eb410ea2e84c9d86e24fed19b438b4184d
+ docs/components/modeauto.mdx:
+ id: 5a492d91b5a7
+ last_write_checksum: sha1:bf621d185f90a6822618a2866a389aef3c999e26
+ pristine_git_object: 432f9b632b00dbc6e7cd8a87908df962923bf3d6
+ docs/components/model.mdx:
+ id: ee338c3cef0a
+ last_write_checksum: sha1:0e670e45c767644f2445d870b05242b3bac4e7e0
+ pristine_git_object: e8757cbafebf799b6f162a2b9d7a2aff95c67e4d
+ docs/components/modelarchitecture.mdx:
+ id: fe77e4816f6a
+ last_write_checksum: sha1:dcf6b88330ab80e643cb7e9b962489a85783002b
+ pristine_git_object: 3035c9bac4573c0b1a70f9b463ba1a0ce8cf36e2
+ docs/components/modelarchitectureinstructtype.mdx:
+ id: 4064f8606ef4
+ last_write_checksum: sha1:172862da64039b2e61ed05b24fbc4c0e219ef9b5
+ pristine_git_object: c8d02132963a140b2d71c982b09bec0eed30d042
+ docs/components/modelbenchmarks.mdx:
+ id: a56406a8820b
+ last_write_checksum: sha1:556248629a58731cd01f96ad5972f9d09c00e8af
+ pristine_git_object: f9d4890de1167d8a1fbef33478ab3de57b5396ab
+ docs/components/modelenum.mdx:
+ id: 354b0a829212
+ last_write_checksum: sha1:52c95ff24eb1c1f0a797e99f1915a218f9f22758
+ pristine_git_object: 815fb46e5e07168841ed484059450e5e9cdf3a49
+ docs/components/modelgroup.mdx:
+ id: 8f246164d34c
+ last_write_checksum: sha1:2954097c66c1dd56fa0440a501630275a6cfebea
+ pristine_git_object: f5c67b141d1a889f0c71f5bb9cb92e52ee3fbc79
+ docs/components/modellinks.mdx:
+ id: 2b4568c3a642
+ last_write_checksum: sha1:3f09c6e29fd5719c3a46899a7bf0cf4772697411
+ pristine_git_object: 2a62599883ac616cd2bd5f66f6a4cdb51daa9989
+ docs/components/modelreasoning.mdx:
+ id: ddcdfc7d47fc
+ last_write_checksum: sha1:5519baaeab6eac63b4f1eaa04805c7b464bd1b96
+ pristine_git_object: b8d23642d12c1497fd62d94afd9c1f32f4e3b59d
+ docs/components/modelresponse.mdx:
+ id: 5a9393d9fc35
+ last_write_checksum: sha1:cdf21cf9e88de5290bd144894643d03af7a9957e
+ pristine_git_object: 9ced330616524c84e80c01cad9a5c3edb1f01b10
+ docs/components/modelscountresponse.mdx:
+ id: 74d50ecbad3f
+ last_write_checksum: sha1:a4678447a082cfce7da588eef61ddb5e3b46c066
+ pristine_git_object: 104a32fd78e3e526a700ee572b3fd0d38142397a
+ docs/components/modelscountresponsedata.mdx:
+ id: c0ff644852aa
+ last_write_checksum: sha1:d522384cb0b2d238f71e90a39db682637addb8e0
+ pristine_git_object: 9e1b9145d0352d47192a8427975702517923ef66
+ docs/components/modelslistresponse.mdx:
+ id: 1880eae9f45e
+ last_write_checksum: sha1:660d60c5fb6e99883437e7e30da3586cbf35b57e
+ pristine_git_object: 140ec11b65ad7ee9bd3b3fd7933d21a49af3561e
+ docs/components/moderation.mdx:
+ id: d145b88b8b67
+ last_write_checksum: sha1:ed7cedc44d3043ef40007d3135774d168b30683d
+ pristine_git_object: 74bc3fbb631e6f8a7d1f37012bb7e591cf73c21e
+ docs/components/moderationplugin.mdx:
+ id: ea978b62d906
+ last_write_checksum: sha1:73ebbb6a87ad97692684328e2f0ec2320b132314
+ pristine_git_object: 0fd2af65ae189483a1ef823b92f1f35a30210ae2
+ docs/components/moderationpluginid.mdx:
+ id: 29c8c434a766
+ last_write_checksum: sha1:4a235ce1a8d4ff74997eff7724353ac59e0b16d9
+ pristine_git_object: 0d006f3bad01e739b9f879fa80b370896823103c
+ docs/components/moderequired.mdx:
+ id: 2eca4c9b202f
+ last_write_checksum: sha1:e56b20273681e2213908a0fd644312bdba567501
+ pristine_git_object: 5ccf31affe032c4dd663eb63d34d9cabf2948397
+ docs/components/multimodalmedia.mdx:
+ id: 3e5915b35809
+ last_write_checksum: sha1:cb80fcefe313a5ad2f1c9a0d10ede281de94d2e1
+ pristine_git_object: 9b621c1cce740dc43907bb986816e1eec5dd1996
+ docs/components/nameadvisor.mdx:
+ id: 6898c8bf3d7c
+ last_write_checksum: sha1:6f709e45a864c33983c27251b70f2b6e4b35ec4b
+ pristine_git_object: e7df77cc45a770938d6cc6ecd1458a17abbd166a
+ docs/components/namebash.mdx:
+ id: bd0cc59f80b0
+ last_write_checksum: sha1:63ea02d5ce209d316aefd1628ad03e92c90df033
+ pristine_git_object: d6efdde4f36aafc14fa58dcc6b8e50f0d1284dbe
+ docs/components/namestrreplaceeditor.mdx:
+ id: 736fbbfc3973
+ last_write_checksum: sha1:862e18830457a1d4b98062ea58b73a2c9d08131f
+ pristine_git_object: 5dea596eef6bebddd80300cc2dc8eeb641506fee
+ docs/components/namewebsearch1.mdx:
+ id: 6e77fbfdffac
+ last_write_checksum: sha1:cbbddb1724aff471233aa2e2eccffc6568a504c9
+ pristine_git_object: 41ced4e2fff47aefbc3b51e473b84868a3335241
+ docs/components/namewebsearch2.mdx:
+ id: fb5e85bb77da
+ last_write_checksum: sha1:50190d6fb52c7d673ef87f34e39c620460cf932b
+ pristine_git_object: f6803b05fdd0332c58b0d07e2aa819de4a8087c5
+ docs/components/never.mdx:
+ id: 7c0a5248748d
+ last_write_checksum: sha1:aea21cab9eaa32c13bc278bfd7dbb1ec41127091
+ pristine_git_object: 37ce7d3651f9c1bf5b33165c28e08db630e95bcf
+ docs/components/notfoundresponseerrordata.mdx:
+ id: 7c59a9c21347
+ last_write_checksum: sha1:132aaa6966fc55237f9a4d1926a761b6dfbeec85
+ pristine_git_object: 1fed737141362b74726a09d7500ea75bc6c9048b
+ docs/components/observabilityarizedestination.mdx:
+ id: 8ab5c92ec9b5
+ last_write_checksum: sha1:a61629804fb1a6417abc56ebffab80ce4f957715
+ pristine_git_object: 9eefceee787aa10f465bb15c1cd4c62ec163a5ee
+ docs/components/observabilityarizedestinationconfig.mdx:
+ id: efaf5bfd1406
+ last_write_checksum: sha1:1425f56ed1f045643b3597c10f7c827969b4d2b2
+ pristine_git_object: 9a4f66bee6ff5872e8b8c8991894b986b5b3c3b3
+ docs/components/observabilityarizedestinationtype.mdx:
+ id: 33afdc84a045
+ last_write_checksum: sha1:f40c4dfa0473b9e429014e4d60c152f7f392b5d6
+ pristine_git_object: 8fb879fb1be791e16ed3c2d1340983ff3e48aca7
+ docs/components/observabilitybraintrustdestination.mdx:
+ id: d4fb2aa6ff1b
+ last_write_checksum: sha1:5b6aad4cb8f7a08f089a2ddbb85501f28b1c820c
+ pristine_git_object: bd21dcc2f8d4c5295cda66d505db9a4127de3be2
+ docs/components/observabilitybraintrustdestinationconfig.mdx:
+ id: 03abfca35bdc
+ last_write_checksum: sha1:c0ec75b1f1d28d62abe12c9ccff5d32bb98d8ad6
+ pristine_git_object: 56fcb623259ad1ff1f18717a0c60f61c14f28724
+ docs/components/observabilitybraintrustdestinationtype.mdx:
+ id: 4c2d5128f76e
+ last_write_checksum: sha1:d2c5b1b6ec8561e09c30a82add623d93153e155d
+ pristine_git_object: 2686027052fc88669dbe1f261baacbdeed41a895
+ docs/components/observabilityclickhousedestination.mdx:
+ id: 22672c72a47f
+ last_write_checksum: sha1:390cf60319cb199a49f9029044eb5cc4164ef19c
+ pristine_git_object: 1791dbf32bc671a4e17725e304de6d78da499387
+ docs/components/observabilityclickhousedestinationconfig.mdx:
+ id: 31969c4f79e6
+ last_write_checksum: sha1:581b45aab6174219694069db5d2dd187aa3c081f
+ pristine_git_object: 8135b0f9c2d554388911c676dda6267320a94a4d
+ docs/components/observabilityclickhousedestinationtype.mdx:
+ id: ec4a466d4fb8
+ last_write_checksum: sha1:ac8b55b98f1cad8f07f10bca277e6a0c8f40c1a0
+ pristine_git_object: c450839c8b4d42ad1d2d075a948136c9dc9ac853
+ docs/components/observabilitydatadogdestination.mdx:
+ id: 9069b48e8b03
+ last_write_checksum: sha1:f0c2e0a4742245f258aa9783f63d4246dae4a889
+ pristine_git_object: c3a06316261b38619ce3e1fc677e8c7bcc87f209
+ docs/components/observabilitydatadogdestinationconfig.mdx:
+ id: 5d9352581ce2
+ last_write_checksum: sha1:41095359e9daf0344c5117c01b1f7fb4e97d2301
+ pristine_git_object: 56d22797c321911afa0f133fa6db8857d216aac1
+ docs/components/observabilitydatadogdestinationtype.mdx:
+ id: 0136bc2eef34
+ last_write_checksum: sha1:b1fdf5fc623076f9b5347d50743091f763fe3675
+ pristine_git_object: 872d16f1872c13732547fd416ec0093564931cd1
+ docs/components/observabilitydestination.mdx:
+ id: 2b5b371b62ed
+ last_write_checksum: sha1:eb15fe342436bb49fe24b4884c5989564149716f
+ pristine_git_object: 3fcbba14f1e9d35a5b5f2aac22d4b4827a6ae149
+ docs/components/observabilityfilterrulesconfig.mdx:
+ id: 7693db9b58d8
+ last_write_checksum: sha1:e0ebf1b44bd0174e38fafee60ed17eca07c1606c
+ pristine_git_object: 46330428534ffced625fbd3b3a3b2da5f1a156d1
+ docs/components/observabilityfilterrulesconfigvalue.mdx:
+ id: 7c5b26ae20b1
+ last_write_checksum: sha1:f8558110d2cff9d5e3ac036fc7befacb12eaf105
+ pristine_git_object: 6b335f615687720e4590e73578de2d4e9096b8b2
+ docs/components/observabilitygrafanadestination.mdx:
+ id: 933526705b96
+ last_write_checksum: sha1:75f67fe00561d8a7f163554ccec092903698df55
+ pristine_git_object: f0c1cfd903a76d5ab3a5e399877db18ddf7262d0
+ docs/components/observabilitygrafanadestinationconfig.mdx:
+ id: 6dd26838a8ed
+ last_write_checksum: sha1:5ecf3222dc5ab0e308e7e43fa0eea88e0c00902a
+ pristine_git_object: 34d561c251e395579d822517eb66c16ea58e40c1
+ docs/components/observabilitygrafanadestinationtype.mdx:
+ id: 7d9da767f675
+ last_write_checksum: sha1:5f8dd4cf514d4ac44f6c9213ccafc8ea56a7d256
+ pristine_git_object: b3a87a6bd089fdda6ef0b1b82ac9a7fd7f7b8686
+ docs/components/observabilitylangfusedestination.mdx:
+ id: a937f11e1a22
+ last_write_checksum: sha1:585cafae4074fa2aa7cdd0adeb76d8246fbd78f1
+ pristine_git_object: 5364c6337d550cd2c5ddaf5e7be43ef244bb2624
+ docs/components/observabilitylangfusedestinationconfig.mdx:
+ id: eb6d8b96b9db
+ last_write_checksum: sha1:a272574f6faa764dbf291efe1852d5a4680c903b
+ pristine_git_object: cabadb292a975b6fa035902add980fb9725e4e34
+ docs/components/observabilitylangfusedestinationtype.mdx:
+ id: 4a764f5ce59f
+ last_write_checksum: sha1:e1b0a4f27ff27d996b5660a8feaa418503b31f31
+ pristine_git_object: 0a0ef90a75966cb1e6a01cdabca55e2854a2e65e
+ docs/components/observabilitylangsmithdestination.mdx:
+ id: 3c019b2baadd
+ last_write_checksum: sha1:e864a5c5d762a558a1540594e309410d06a5c298
+ pristine_git_object: 20e1a3eccc78372ed5a0e4eac6395da47abd6a3a
+ docs/components/observabilitylangsmithdestinationconfig.mdx:
+ id: e8ba506f0bb6
+ last_write_checksum: sha1:9c000b6149bfe5f00602042e1a3230a72ae989eb
+ pristine_git_object: 0a1f76e5a65f850d24249758904e2ef2f891ce2a
+ docs/components/observabilitylangsmithdestinationtype.mdx:
+ id: c4fb36b04de9
+ last_write_checksum: sha1:f8e3fffc9c6845bd3823b60fa68dd0056714a949
+ pristine_git_object: 4cc128c9afe496eb949236875b79455d15cc1365
+ docs/components/observabilitynewrelicdestination.mdx:
+ id: 51f825f7492d
+ last_write_checksum: sha1:efca650011f54525bddbead3fb3e4e0fff8d4147
+ pristine_git_object: b04a7f805638297f076ae79db9daf7e534d385f7
+ docs/components/observabilitynewrelicdestinationconfig.mdx:
+ id: 1bfa0e65f66e
+ last_write_checksum: sha1:bb861670f63dcfdd47f92ffe04d26ce4020208be
+ pristine_git_object: eb8542dcaec0ea0522b2f457175b4ab5802bf5e5
+ docs/components/observabilitynewrelicdestinationtype.mdx:
+ id: 6f4ae194c250
+ last_write_checksum: sha1:2c09a75277f2dc29052fb4a8b729cc90bfb319f5
+ pristine_git_object: 8f74ec6c80b673784e6663faced904afed9e73d7
+ docs/components/observabilityopikdestination.mdx:
+ id: f79bf0519b07
+ last_write_checksum: sha1:81c620cb22af1764b9fe47a1ee912b8c53979128
+ pristine_git_object: 82ab82d0849595cda0ba3fcdb0d47baadcc7d071
+ docs/components/observabilityopikdestinationconfig.mdx:
+ id: a29272c1315e
+ last_write_checksum: sha1:afe9c9dab6b21c068e5629c4823b09b1ce076086
+ pristine_git_object: ce71d1f16aaa639d7d96426af48dc2af87d89faf
+ docs/components/observabilityopikdestinationtype.mdx:
+ id: 0bceecd35ff8
+ last_write_checksum: sha1:c7308d1a0354e5c42e3f1c39bf800118eabffccb
+ pristine_git_object: f7689374cb3fa75bfb790b12a737b10941fc9e57
+ docs/components/observabilityotelcollectordestination.mdx:
+ id: fbefa5ba48da
+ last_write_checksum: sha1:baae534f030f73723a2fdeb02967bd2f5ec64144
+ pristine_git_object: 43f3a5129313ccdba4d6515ab4dc5aa24f3bb481
+ docs/components/observabilityotelcollectordestinationconfig.mdx:
+ id: 204fa4b1365b
+ last_write_checksum: sha1:21ffeb7874cfe3cf90ee0521f3cc21a23b2c9f4b
+ pristine_git_object: c0e46e241cc2b7fe0d0e9bbe911c62eab30ee5a6
+ docs/components/observabilityotelcollectordestinationtype.mdx:
+ id: 130ee89d27f9
+ last_write_checksum: sha1:bd099fbb43d7f0170267758de0467d4593194bbb
+ pristine_git_object: 04d51fca83de0cd45e5341d5eafef87997644e08
+ docs/components/observabilityposthogdestination.mdx:
+ id: 602ebbf459aa
+ last_write_checksum: sha1:14f91996137492259dbc21338f98c30c47f8a493
+ pristine_git_object: e6b8ee1b2e21f6210f13ec59b3346a3fc06f897f
+ docs/components/observabilityposthogdestinationconfig.mdx:
+ id: f70e6155227e
+ last_write_checksum: sha1:ae7c844f4507e8fc571f10e8f23ebae6f4ef5ad9
+ pristine_git_object: 2c0c48deeb694c89cafd831c48a2030cb10fadb7
+ docs/components/observabilityposthogdestinationtype.mdx:
+ id: 5209ca48adc6
+ last_write_checksum: sha1:dba3e9b074cec77f77da6f7da0e534c218790a81
+ pristine_git_object: 15d5f4b204b6f11123e889347b9bca9d4c1bf774
+ docs/components/observabilityrampdestination.mdx:
+ id: d282b8093450
+ last_write_checksum: sha1:4b8c40ae8dc8c60523ec372f737eabaacd411500
+ pristine_git_object: 78218365803f4ccd7050713a6909e04c87c81534
+ docs/components/observabilityrampdestinationconfig.mdx:
+ id: 508afecc801d
+ last_write_checksum: sha1:0303440d4c32b655e5eae672157859c3f5a3d842
+ pristine_git_object: 809d417c91a79d4b8ebff6841a30eca77d0b3699
+ docs/components/observabilityrampdestinationtype.mdx:
+ id: 2d02006eccdd
+ last_write_checksum: sha1:af701535002f70b8876ecb56eb496eb59a7d3720
+ pristine_git_object: c344370154af3e48ab34d83bceeec80c163e8b4e
+ docs/components/observabilitys3destination.mdx:
+ id: fcfdc787f494
+ last_write_checksum: sha1:60ec25f2f2466fc343e530c9023410e274d66f16
+ pristine_git_object: 14ec127b3a65635ef1bfbbf0bc2d91f64ff80629
+ docs/components/observabilitys3destinationconfig.mdx:
+ id: 040367f19dfe
+ last_write_checksum: sha1:063638b494568601ae5043fa24f40cbac6a1b641
+ pristine_git_object: 3974209559c2b3f15d0a3108b9849815a3dd97bb
+ docs/components/observabilitys3destinationtype.mdx:
+ id: 8279c13af28f
+ last_write_checksum: sha1:10cea4da23cb74039112d0a531eee503e1a760df
+ pristine_git_object: 0ef939a6bbce82c2610a94f31a126bc62e32b382
+ docs/components/observabilitysentrydestination.mdx:
+ id: 9a5494b91636
+ last_write_checksum: sha1:73be2892119ac49f3aaa43724cf7845cd0160d85
+ pristine_git_object: 6f37f7dcbd8d5784787e1538c78504a59a84603b
+ docs/components/observabilitysentrydestinationconfig.mdx:
+ id: 4b59b787f138
+ last_write_checksum: sha1:77957ffe6671ee13d885296e609bca1f6e6bfef9
+ pristine_git_object: 99f775de08a04b932c0457f787e5f8762255edf1
+ docs/components/observabilitysentrydestinationtype.mdx:
+ id: d672633feb56
+ last_write_checksum: sha1:097a02f803a87398ea07aa4bab307624ea8f7487
+ pristine_git_object: b4948a38975913b3ad4cd50b494566af44854935
+ docs/components/observabilitysnowflakedestination.mdx:
+ id: 50eb5d73c736
+ last_write_checksum: sha1:179d196d7ed16d2dee94590b38bd856155d8e9d0
+ pristine_git_object: 0cc7f73d1ded5ca0e6ae32ce6b9f673633fc1ccf
+ docs/components/observabilitysnowflakedestinationconfig.mdx:
+ id: 61daa1944898
+ last_write_checksum: sha1:aba368fd00883f348c77fcee080414ec433a6dfe
+ pristine_git_object: 5ad320cb4111244bdfffc9e1080c29f10b00fc8a
+ docs/components/observabilitysnowflakedestinationtype.mdx:
+ id: ce8232e3dcd7
+ last_write_checksum: sha1:1f91ffa3e55e4570d5eda35028be5c61c30cb44e
+ pristine_git_object: c3cc873227fc32fff3a1aeddfe7852856057f095
+ docs/components/observabilityweavedestination.mdx:
+ id: 16c45cebb51d
+ last_write_checksum: sha1:cf3779fed0094cd4b9c6ad15c9b4a24e44ac443f
+ pristine_git_object: 4f9d6b16f6e7f7ad54de5755e14b559205cd103a
+ docs/components/observabilityweavedestinationconfig.mdx:
+ id: 27ab1f4389f1
+ last_write_checksum: sha1:26f0010d5e544c9856f09b63136ff4584cc3443f
+ pristine_git_object: 89007854843754a046a22d92bb06ce667a2f6c5c
+ docs/components/observabilityweavedestinationtype.mdx:
+ id: 7549df35fdb8
+ last_write_checksum: sha1:10c26524f121a3197d9f7914a2383ec6545a0cce
+ pristine_git_object: dcaffb2070e7203e06a6747111b6df950465b5ff
+ docs/components/observabilitywebhookdestination.mdx:
+ id: ac114793a610
+ last_write_checksum: sha1:43788ee2fb614098a1c7f6b122c89b46393fa50d
+ pristine_git_object: 6be7531c12764bacdb38857b0a2b6d2a412880b0
+ docs/components/observabilitywebhookdestinationconfig.mdx:
+ id: 3f56a0517583
+ last_write_checksum: sha1:50a935198381531354a979579be97e2f61f1ad46
+ pristine_git_object: 8dab0b1a2c58a1cc0d7b1d37d6290d7b5d67473a
+ docs/components/observabilitywebhookdestinationtype.mdx:
+ id: 35262d81b0a1
+ last_write_checksum: sha1:53220ed66cf059d9f06df81b7f5bb0f2d87f5283
+ pristine_git_object: bf3c27b8d2da352bd80bb18179159839e69b9b0a
+ docs/components/only.mdx:
+ id: cee5f91a1c3b
+ last_write_checksum: sha1:abccbc4844ea73ff3641b1aa2a98bdfaebf8d216
+ pristine_git_object: cc284e22005d61c156fac73624aee6ead3c1e9eb
+ docs/components/openairesponsecustomtoolcall.mdx:
+ id: 090c07768006
+ last_write_checksum: sha1:34b7e423654fb097e3420b2fa3ef010f15821796
+ pristine_git_object: 6d9191222ade0008f12d5aec84360968df2283ab
+ docs/components/openairesponsecustomtoolcalloutput.mdx:
+ id: 9e53ff4a7904
+ last_write_checksum: sha1:9314c7cf5a9117b1c26201d8ee75dd28a1caf880
+ pristine_git_object: a5539655b48f3cb259c5bde189e5719821a6a8d2
+ docs/components/openairesponsecustomtoolcalloutputoutput1.mdx:
+ id: 2c8d666e28f0
+ last_write_checksum: sha1:b39bf98bd1fce83020b1fbddfccdd32c6b21bf70
+ pristine_git_object: ef5467e6b1ea32dc02f2a69106e66be692c2049c
+ docs/components/openairesponsecustomtoolcalloutputoutput2.mdx:
+ id: adbfe07a7048
+ last_write_checksum: sha1:c080081a6787bafdcf2fe30317d5f7fbd2feb5aa
+ pristine_git_object: 74b5365606767e924efb43bfe6adfb94fe769ade
+ docs/components/openairesponsecustomtoolcalloutputtype.mdx:
+ id: c7081c9d38f7
+ last_write_checksum: sha1:a1b8f7d6c6cf82d1beb1c022823c99db9d9f7590
+ pristine_git_object: 6ccce45954ff2fbeaba4e96fd392d1f8b2178fe8
+ docs/components/openairesponsecustomtoolcalltype.mdx:
+ id: b5607ef7db1e
+ last_write_checksum: sha1:60b1a11a88b0226ca8fbd12dc405c10c06bf7182
+ pristine_git_object: 8c38bc0f267a36c61128b1a5d747a56ff4aa6564
+ docs/components/openairesponsefunctiontoolcall.mdx:
+ id: 8e50b2457c3b
+ last_write_checksum: sha1:050ae2fecc3831e37a7e830e0eeab1043fdbabf2
+ pristine_git_object: efdbbbce90ebc1aa26129d87a523551e531949a3
+ docs/components/openairesponsefunctiontoolcalloutput.mdx:
+ id: f1e4ed07af7a
+ last_write_checksum: sha1:b5a9a215a1276803c32408bc06352858385c571f
+ pristine_git_object: 0ccfaaf0986e90e5b3218a00a8328534e69f67eb
+ docs/components/openairesponsefunctiontoolcalloutputoutput1.mdx:
+ id: 6bbcb4b25cfb
+ last_write_checksum: sha1:faf30716bb6661c1cc97642fa68ae5c8dc100c62
+ pristine_git_object: b2fb9df7287f57f751ffc8ff884cce42a9136cfd
+ docs/components/openairesponsefunctiontoolcalloutputoutput2.mdx:
+ id: a30dc783a954
+ last_write_checksum: sha1:dcb728bab175422b8a381bcdea9facad4434f5f3
+ pristine_git_object: 3b498b5916e80bbd8284d6ad7f7a608b066f044c
+ docs/components/openairesponsefunctiontoolcalloutputstatus.mdx:
+ id: 1f929cd48053
+ last_write_checksum: sha1:9a7a2baa176ec8490c559d967b3342319bbc76ad
+ pristine_git_object: d5e7af39351d80dce8b586ea4295be6af05d8bda
+ docs/components/openairesponsefunctiontoolcalloutputtype.mdx:
+ id: af38067ccadd
+ last_write_checksum: sha1:b189125d1756e152441fced6a22160169b8bb1e5
+ pristine_git_object: 16e5b2059e4c6c58c603aaba63cf085af0966e7a
+ docs/components/openairesponsefunctiontoolcalltype.mdx:
+ id: aad74378a805
+ last_write_checksum: sha1:427d28b49c2627514b7839467cde6f2ef761559d
+ pristine_git_object: f0e32f3d580a3d58d76c5971a51620355b1a8874
+ docs/components/openairesponseinputmessageitem.mdx:
+ id: 4365eb14c0af
+ last_write_checksum: sha1:c80742f8d9e9b733f5a5560fe93db78c3e5d8aa6
+ pristine_git_object: 8670ec0c1ceba7acbe3a9aab9700dace6b2dc0db
+ docs/components/openairesponseinputmessageitemcontent.mdx:
+ id: 42f22eb9ea08
+ last_write_checksum: sha1:79813cc4c1045a8002ccd39448632f15097ca043
+ pristine_git_object: 560a4f512ffe385e7862cabd3beeef56742deb9e
+ docs/components/openairesponseinputmessageitemroledeveloper.mdx:
+ id: 354a5e52097a
+ last_write_checksum: sha1:df668fd6f62d07fdfa87a4a9ec091e177b1aadb1
+ pristine_git_object: 8470f14769e2574983e46722ca09111aa9d7eaed
+ docs/components/openairesponseinputmessageitemrolesystem.mdx:
+ id: 3cf7fcd91c53
+ last_write_checksum: sha1:e0075d99727448ecdbcd86c07d612232a3445d41
+ pristine_git_object: a09674ed7c710927000e69334a30072d6a515a94
+ docs/components/openairesponseinputmessageitemroleunion.mdx:
+ id: 18c70a57ec16
+ last_write_checksum: sha1:d53194b341651e2b89d3f84fffee18768411d89e
+ pristine_git_object: 6551653278a2ad5c84c991e1ad5c7764fbac35c2
+ docs/components/openairesponseinputmessageitemroleuser.mdx:
+ id: 0f616589fd7e
+ last_write_checksum: sha1:e544596d6526f4fa95e9bdf085d374bbb80442ce
+ pristine_git_object: 23b5d7ea73a47770ad90851e5de00cd6c5c8c362
+ docs/components/openairesponseinputmessageitemtype.mdx:
+ id: 2de72066c7ac
+ last_write_checksum: sha1:de56f2cd143ce17f4dbab03191250964c57ae371
+ pristine_git_object: 27637b7529d59adb678f2a5e790f06912e519fe2
+ docs/components/openairesponsesannotation.mdx:
+ id: a2b85cb38acd
+ last_write_checksum: sha1:81a5fb1461fd6fc3847e1c23081ba5766010a58c
+ pristine_git_object: d5de3b268a5fe11da4c319484275c11172f73b37
+ docs/components/openairesponsesrefusalcontent.mdx:
+ id: 6b2bd400f001
+ last_write_checksum: sha1:bdcc7cb44b94cfbbfc080297137e85ce3c650f62
+ pristine_git_object: c687dab4615ca48c1db2fbfdb0418b579f804494
+ docs/components/openairesponsesrefusalcontenttype.mdx:
+ id: 4d70b1eca59c
+ last_write_checksum: sha1:24556b36406657a9c815a71882a6aa057650f499
+ pristine_git_object: c1d90a539a7b10cba3b8c7ec8ebbf7071bf6e6c4
+ docs/components/openairesponsesresponsestatus.mdx:
+ id: 22623069aa36
+ last_write_checksum: sha1:0c44abd5fec0c6702799553d524a995e33bf5f50
+ pristine_git_object: c833b87ba94877d704dc8764116d279a29471a0c
+ docs/components/openairesponsestoolchoice.mdx:
+ id: 4156ab7daa19
+ last_write_checksum: sha1:ecc7b89750ba054e1e4c408ac5e86a9dd0a73e43
+ pristine_git_object: 71090a1f7247835c51b672ae4057187fc5ec8473
+ docs/components/openairesponsestoolchoiceapplypatch.mdx:
+ id: dbdb13f3a8d0
+ last_write_checksum: sha1:cf61eed7aecc03d05eca9629b8ee3656372daacf
+ pristine_git_object: de012d5c168b0763a2b2fff9a00d5d34b845dcf5
+ docs/components/openairesponsestoolchoiceauto.mdx:
+ id: 30f3f3e19044
+ last_write_checksum: sha1:b8ccdc3327f5a8998a357cc99ee2c339afbddd3a
+ pristine_git_object: b91f4fb1f892322ddbbadda1cedb8c669a89e79d
+ docs/components/openairesponsestoolchoicefunction.mdx:
+ id: 12f0d5d04d1f
+ last_write_checksum: sha1:a4428b66e82235bd239e51d723d6d534678e2639
+ pristine_git_object: e08dad52c7a851de97687c60e94fa1dd80a35b88
+ docs/components/openairesponsestoolchoicenone.mdx:
+ id: 3636f7575483
+ last_write_checksum: sha1:d124bdea6201f63f886d83bd8dea283e2f6fe37c
+ pristine_git_object: 8b1df8053f6c68c0ceb69341d1e27e9b0cae899b
+ docs/components/openairesponsestoolchoicerequired.mdx:
+ id: 3ad4c6f93639
+ last_write_checksum: sha1:59981ac32511436b058facc5d2830abef9834c2b
+ pristine_git_object: e7f185a45631dc2623b62d02833d3d661c533748
+ docs/components/openairesponsestoolchoiceshell.mdx:
+ id: 780b1faefcfa
+ last_write_checksum: sha1:c414237e6ca1e7dcb7c86f379fbe6796e1594313
+ pristine_git_object: b0451b76a479800d966fac7ab31919bac84245ff
+ docs/components/openairesponsestoolchoicetypeapplypatch.mdx:
+ id: 15c65c41c459
+ last_write_checksum: sha1:cc9a95b93a8e3f9c68ef62bde32e56221d019099
+ pristine_git_object: cc32b5a198eecbb840ee342600e15b72d22a7a07
+ docs/components/openairesponsestoolchoicetypefunction.mdx:
+ id: 7af73ce96576
+ last_write_checksum: sha1:a6e4b52675ccb209efa9c2f7d8ac56748940faef
+ pristine_git_object: 39952ef36e891c0c2adfe5b61ad7547ac21d2d07
+ docs/components/openairesponsestoolchoicetypeshell.mdx:
+ id: d8fb253885a3
+ last_write_checksum: sha1:554d64c515a9d71da41978f7c7bbf1b5e245cb7f
+ pristine_git_object: 9c0bbd8453c45e8aff72bbd4d93998614d26bfde
+ docs/components/openairesponsestoolchoicetypewebsearchpreview.mdx:
+ id: 7734884d242c
+ last_write_checksum: sha1:9ab03b162a73deb6d0214b4eabefdc736c4c96ce
+ pristine_git_object: febd1eda5293e1caec2eb186c518d26630a1b767
+ docs/components/openairesponsestoolchoicetypewebsearchpreview20250311.mdx:
+ id: bb894c25d22a
+ last_write_checksum: sha1:d0ea85ce8fe2ee96eab288091e3c5df1da2f60f6
+ pristine_git_object: c23dcea302163ffa59370b90019d208072d619f5
+ docs/components/openairesponsestoolchoiceunion.mdx:
+ id: 830a36f3265c
+ last_write_checksum: sha1:a3fcdfc71e4ae46473d290ed6ad09f540ffdac79
+ pristine_git_object: d44bdba389cd431c9407de6ad9cb1fe5776b8601
+ docs/components/openairesponsestruncation.mdx:
+ id: 2d9d105e2a92
+ last_write_checksum: sha1:cfa41ac9ec20131a32ebcc5bf1831fc1173eec09
+ pristine_git_object: 58f86b3f5daa1fa9712ca436ea350513e187eb61
+ docs/components/openresponsescreatedevent.mdx:
+ id: a6e32fa959a4
+ last_write_checksum: sha1:3ff3e7a7861f3f0d80af0d5f9024a5a41d7e1429
+ pristine_git_object: a0433fe2d1c665e7748367f0a2bde9f36aa32bdf
+ docs/components/openresponsescreatedeventtype.mdx:
+ id: 178d703388d2
+ last_write_checksum: sha1:4b1d854a6d9a642ceb77be2e384bfb760366c9fc
+ pristine_git_object: 0bde4b814329ff9bb3459c75dcc4d1ca22a700da
+ docs/components/openresponsesinprogressevent.mdx:
+ id: a1e40ec742ea
+ last_write_checksum: sha1:98062e87795a2f78762b3e4d018cdd8ced693e4d
+ pristine_git_object: a2e79d407cd69493f33bcc1027f6a84d617036c9
+ docs/components/openresponsesinprogresseventtype.mdx:
+ id: 8f2fa117be62
+ last_write_checksum: sha1:b998f6837eb1f042c8446182684284641190b32f
+ pristine_git_object: 09effe2d3fe45536c8b0aa0f23c02ce19b15f62c
+ docs/components/openresponsesresult.mdx:
+ id: d0fed85674d2
+ last_write_checksum: sha1:2ffbf6a72d81a6bc5585fe5b71c9e57a89694118
+ pristine_git_object: b987eca82266acf1fac32040d53f940a69ab9766
+ docs/components/openresponsesresultobject.mdx:
+ id: 93b1fcc70132
+ last_write_checksum: sha1:7579ee1bb9e0d20c55cf54a8ca2ccbc950d2921d
+ pristine_git_object: 53ba3e6a9b38896d18e2aae4bf7c6f90e3e1fac9
+ docs/components/openresponsesresulttoolfunction.mdx:
+ id: c9aad3ae216e
+ last_write_checksum: sha1:38309bc74e68d78d62aecf694a729c3e500bc343
+ pristine_git_object: f0fbd6bca8f844a1d6d6a8a00bd0c781197adba0
+ docs/components/openresponsesresulttoolunion.mdx:
+ id: d43b7e93f04a
+ last_write_checksum: sha1:33440dfcc702449e15a78d9e196c6641249c60e3
+ pristine_git_object: 13ed401ca350f15de4d6dcd4f0ab49de644daf76
+ docs/components/openresponsesresulttype.mdx:
+ id: 59f334d128a7
+ last_write_checksum: sha1:c74e9c086d4911223620a11dcd45c5eb9b9160fb
+ pristine_git_object: 6ef2ae2c930d1279df1f2f68348c8bf3583c2a7c
+ docs/components/openroutermetadata.mdx:
+ id: 355be2e7788c
+ last_write_checksum: sha1:c5ed476aab215597dd1af37fe1fd7e99a0ac6c88
+ pristine_git_object: 812ccb2b90388d191c2866eb3c2ed0572d0181e9
+ docs/components/openrouterwebsearchservertool.mdx:
+ id: a553315e2543
+ last_write_checksum: sha1:9d85c2945ba2713fcbe49bec28307372bb8535e0
+ pristine_git_object: 3842a52e2465ab9d6441e37fd22470fb222cd5ae
+ docs/components/openrouterwebsearchservertooltype.mdx:
+ id: a844dbfb5f6b
+ last_write_checksum: sha1:f2f3e3e75da8d42443fc5617b0d9ea7ff674a8e2
+ pristine_git_object: 6f2a785c1fad869fe4c9c32e3e10e280ecf3b660
+ docs/components/operator.mdx:
+ id: f88a0ae3ee7d
+ last_write_checksum: sha1:196dfc00e44fa232c6e4f0f496f265a163ffe66b
+ pristine_git_object: b4df5fb4757522576e8452d88f22499cee204278
+ docs/components/order.mdx:
+ id: ae1a6aab00d6
+ last_write_checksum: sha1:efc73cd83c8f4e0095ba6901df6dc95349b822a2
+ pristine_git_object: edc1ffcd263a4fffa0d4d5b7da1e2c0315a61cb8
+ docs/components/outcome.mdx:
+ id: dc555505ef36
+ last_write_checksum: sha1:5e99185f9d49f3f404ca4e54ef84d0cdbf31546c
+ pristine_git_object: 98279af1570063f5a0124fa4f575ed58b215c517
+ docs/components/outcomeexit.mdx:
+ id: 760b3faffdf7
+ last_write_checksum: sha1:6fbd92f244db4a275245f12d405faff18a18bc01
+ pristine_git_object: dd9bda681ed90bb67dca90944f04ed6e6711b3e6
+ docs/components/outcometimeout.mdx:
+ id: 4ee5cced97d5
+ last_write_checksum: sha1:e81aa94e0d5d2fd30894499ac6b1d33cb329427d
+ pristine_git_object: 6fe515d1498ffc5e6a0abf4a4ca3f7984af90573
+ docs/components/outputadvisorservertoolitem.mdx:
+ id: cd80a2ee4d39
+ last_write_checksum: sha1:75846501525d089fbf5f2d3beb0da6fe795c7eda
+ pristine_git_object: e89c7434f9bdbc8d3b449a713687575233b3fbaa
+ docs/components/outputadvisorservertoolitemtype.mdx:
+ id: 639f864d0dd2
+ last_write_checksum: sha1:232e7b5cf8544bb070f171dc376148207a5d41f4
+ pristine_git_object: 2d7fd488eea8ab3c8dd7e104f6efdbcffea8cdd8
+ docs/components/outputapplypatchcallitem.mdx:
+ id: 6d1131aeede5
+ last_write_checksum: sha1:061da7f8450fad4465b25261959e5d05ff7c5fbc
+ pristine_git_object: 2a02c6e3de7b30bc48d3a3b8c21444c8b191c04e
+ docs/components/outputapplypatchcallitemtype.mdx:
+ id: 013cc1fd41d1
+ last_write_checksum: sha1:26a8f3d9f9e85b60a7dd317304f08abacf2da20b
+ pristine_git_object: 17a39e683c5db9dd5934de2baf6c76af44cb6a58
+ docs/components/outputapplypatchservertoolitem.mdx:
+ id: c73fb5b689f4
+ last_write_checksum: sha1:9237c757ba0ebd1735b00fbb362d0f2ed22d0e63
+ pristine_git_object: b27640e16c2d47f021d1ad704079b50b70ce4c5a
+ docs/components/outputapplypatchservertoolitemtype.mdx:
+ id: 8819a4128df7
+ last_write_checksum: sha1:cbfca03c03b33ab4a6d7e382664b14a8fe7eaa4c
+ pristine_git_object: ad79a325e74efc6cc08ad7ffc794cecd0e7eaa15
+ docs/components/outputbashservertoolitem.mdx:
+ id: c17c44c991b5
+ last_write_checksum: sha1:7d04159d7f2b51c2df50eddd58362d71dc0ec3a5
+ pristine_git_object: c039dfa53c36c853fbbb8bff1b6a5bb02be00f84
+ docs/components/outputbashservertoolitemtype.mdx:
+ id: 584dd317e6ab
+ last_write_checksum: sha1:558e35bae6619f511da32758b7642bc6f000c95e
+ pristine_git_object: 801e62ba5508c0ca6915d95de6c39fd51c0209fc
+ docs/components/outputbrowseruseservertoolitem.mdx:
+ id: f95c82cbb289
+ last_write_checksum: sha1:e0ebc47c8389fff3978ad2a175e24bffb988592f
+ pristine_git_object: d8f75dc43208f263752a7f4c053c626ce41215ee
+ docs/components/outputbrowseruseservertoolitemtype.mdx:
+ id: 5c02fa1fcdec
+ last_write_checksum: sha1:f536cc69540b92c242a44de74a8fa979b62a65e8
+ pristine_git_object: 4e1ac848efae9e52849329f14d2b9ff2f14933bd
+ docs/components/outputcodeinterpretercallitem.mdx:
+ id: 167ec714574b
+ last_write_checksum: sha1:5e16eae1eac9685d1e71bf3802129068a4f92fae
+ pristine_git_object: 08f28041e498e979b7bd81d87644030a038b5e14
+ docs/components/outputcodeinterpretercallitemoutputunion.mdx:
+ id: 8e4dfeaae6c9
+ last_write_checksum: sha1:87d64144954ae95d6e5bfc5ce8746e49aabe1fc3
+ pristine_git_object: 02e6c2ca8d7c3ae31c6489585f651b0029648bbe
+ docs/components/outputcodeinterpretercallitemtypeimage.mdx:
+ id: 03ff0b62333c
+ last_write_checksum: sha1:c23cbcaa9dcf7dc9c38819be58b9a117722e0821
+ pristine_git_object: c901280c878c987f81b6f0ad29747baac0039e69
+ docs/components/outputcodeinterpreterservertoolitem.mdx:
+ id: 4d2814954b22
+ last_write_checksum: sha1:f2e2fb1a45947bf9456ec890932769bf954e1cc1
+ pristine_git_object: 3b97b10ffad9a5af50db59784f06eca20ea1c9fd
+ docs/components/outputcodeinterpreterservertoolitemtype.mdx:
+ id: cf833580c013
+ last_write_checksum: sha1:00e55bce1f414f5d2f8e8bed708c748df40e4967
+ pristine_git_object: a9b4162f9f3bf8ffb3d12cbc74bdbf88fa5f9ddc
+ docs/components/outputcomputercallitem.mdx:
+ id: 0ebf7b2288b9
+ last_write_checksum: sha1:8411096c03dd62829511efbdffb52a92eedc9d06
+ pristine_git_object: 7d0669ae4dc6f0dac3cb540360c8bbb42d7fdc09
+ docs/components/outputcomputercallitemstatus.mdx:
+ id: 6d6e5a1c9d51
+ last_write_checksum: sha1:253fdb05674ebb78103ab548e331b9ed4b5a8cd1
+ pristine_git_object: 7d7e680bf97191a328fc92d45e24bc0dda1315fa
+ docs/components/outputcomputercallitemtype.mdx:
+ id: 16a00a59b73d
+ last_write_checksum: sha1:4dc674f3415e21faecc6f0f7f6ad5d6f5bd81b78
+ pristine_git_object: 072ec0fda99640b7b6e38beba759a4c61bf5d0b8
+ docs/components/outputcustomtoolcallitem.mdx:
+ id: 60c140410cf2
+ last_write_checksum: sha1:7b6ff8fcb310c3d33c5860e3682d1536ce5dc829
+ pristine_git_object: 6cc163b664a79eb72ce15ad37b4cd1bf7713543f
+ docs/components/outputcustomtoolcallitemtype.mdx:
+ id: 35808b916d0f
+ last_write_checksum: sha1:2774efac476d4f040b9137cbaf4fc6a63e53662a
+ pristine_git_object: 9bf4d0f91880fb15d6156859b8ac2afd5df9594e
+ docs/components/outputdatetimeitem.mdx:
+ id: 470853c662d9
+ last_write_checksum: sha1:16024ed7fffacfd86308b168c7c3a0c8c85be750
+ pristine_git_object: c698d7e6556b968190e9ba7e122aa23ed648d2e5
+ docs/components/outputdatetimeitemtype.mdx:
+ id: a8219ea3cbbe
+ last_write_checksum: sha1:7eb09027b473e745dee4f4fb533c6e3cc2ed7321
+ pristine_git_object: 62bc0076806110e866d63bf477349fe9753bdf3e
+ docs/components/outputfilesearchcallitem.mdx:
+ id: 16f4409e4148
+ last_write_checksum: sha1:cea281505d546eae43bb93dca7c8856a24a5764f
+ pristine_git_object: 9b9ef44453543dde30bc432c7c37d379fcf5b01d
+ docs/components/outputfilesearchcallitemtype.mdx:
+ id: 5d80dfbea99b
+ last_write_checksum: sha1:c770d198b631c697bf97ba4b8de924a93506ec78
+ pristine_git_object: 9109c9a400c4c2fec02314b55fdb536b138f3c1e
+ docs/components/outputfilesearchservertoolitem.mdx:
+ id: 033e5c89b639
+ last_write_checksum: sha1:131563e37809f33e606858b99314df33bb0da8ad
+ pristine_git_object: 2095688caff936ea5c9a3e0e099d4cbcdccb7dce
+ docs/components/outputfilesearchservertoolitemtype.mdx:
+ id: 7b77e3515472
+ last_write_checksum: sha1:f50a8d6620bbf95e43dd8b6c221ebe8f01b1cd32
+ pristine_git_object: fe499bd21f3539752b0091907a0b3dd5c55b5d76
+ docs/components/outputfilesservertoolitem.mdx:
+ id: 345df34acb80
+ last_write_checksum: sha1:41c547463bd869c4acc0c8ad64ea2d4bc0a9998b
+ pristine_git_object: 111b79f06ab2edb08b60062868b1dd13fe14d740
+ docs/components/outputfilesservertoolitemtype.mdx:
+ id: abdc83b528c9
+ last_write_checksum: sha1:5a89f4165e70f4dee1b74cd300a790e0274d55f2
+ pristine_git_object: f9eb6568f06fc4b917d41a391f0b3046ac064889
+ docs/components/outputfunctioncallitem.mdx:
+ id: 1d62f9e67c2f
+ last_write_checksum: sha1:6642104468672708caccef16346f824b51264670
+ pristine_git_object: 86a1cd0d85064d5befa583ca69d39412683c90e4
+ docs/components/outputfunctioncallitemstatuscompleted.mdx:
+ id: 9adee8d9044e
+ last_write_checksum: sha1:dc89eadf1d22b60e9724132c025b902c515bba72
+ pristine_git_object: ec84cfaf3cb52650dc675862275d4948f63ec0df
+ docs/components/outputfunctioncallitemstatusincomplete.mdx:
+ id: 01bfc266b11b
+ last_write_checksum: sha1:eea0a7f6f085d850e712525a3ca4f2bec9ee6534
+ pristine_git_object: b95a0a0344aebbe74164b379ad3cf1b8cede02f6
+ docs/components/outputfunctioncallitemstatusinprogress.mdx:
+ id: 49699892993a
+ last_write_checksum: sha1:0cbeee31dcfa098a1278f5f44c7fc2cb46ede977
+ pristine_git_object: 7204f29b0ca4e9ffb0164b19d6394c4de6362889
+ docs/components/outputfunctioncallitemstatusunion.mdx:
+ id: 032eaf121751
+ last_write_checksum: sha1:d1133a2a0258047c769ca9c6bce709afda014df9
+ pristine_git_object: d4cb118508c4931e8dc3389cd9d02b98c71c7ea5
+ docs/components/outputfunctioncallitemtype.mdx:
+ id: cbb88dd0dc5a
+ last_write_checksum: sha1:e2ae4e411c58ca859cecc745f78da50f3c824aca
+ pristine_git_object: 700af387aa2f0f827ef4775f69fbb3900b075899
+ docs/components/outputfusionservertoolitem.mdx:
+ id: bc7c73cc3100
+ last_write_checksum: sha1:53565a2c163e9aacdb4f786ef71fc65063b60137
+ pristine_git_object: 996340e483ed52e0faaa69bb38aded9bcaa6d5b2
+ docs/components/outputfusionservertoolitemtype.mdx:
+ id: d5337e29a21f
+ last_write_checksum: sha1:133446222202e08ffceaa5944185842c21078830
+ pristine_git_object: 5b050d8db3ad7195c2c6bbc93638be95edbb1624
+ docs/components/outputimage.mdx:
+ id: a358b7233cd2
+ last_write_checksum: sha1:029463bda2ddf51bd399d5ca95c2747ac1140c14
+ pristine_git_object: a7b8246372bebf6dac66833399060cd6566c109e
+ docs/components/outputimagegenerationcallitem.mdx:
+ id: bd80e7125993
+ last_write_checksum: sha1:1e70465d2ec2dcbc8a355b65c99a00e64452ee8f
+ pristine_git_object: d9926094c502c781907800ed9de915196be95cd9
+ docs/components/outputimagegenerationcallitemtype.mdx:
+ id: a0eaa69b4531
+ last_write_checksum: sha1:830ce2c76ce7eba0bd72dcf058e0694ebeca9eac
+ pristine_git_object: bb97b950d2d81aae3c143d43ad562f820ed49e65
+ docs/components/outputimagegenerationservertoolitem.mdx:
+ id: 0084a32d49a2
+ last_write_checksum: sha1:5f3d551b663ccce0e8aad9a484fdfec018ae9bb1
+ pristine_git_object: 516d44bad56ed22d001d4459deb96b3565d3e8e4
+ docs/components/outputimagegenerationservertoolitemtype.mdx:
+ id: 7a776acb2987
+ last_write_checksum: sha1:eead9d15e523ad237d238d4070708fee85716ed7
+ pristine_git_object: 6296f5a2e802e66093a3a39cec4c5c198286f33a
+ docs/components/outputitemimagegenerationcall.mdx:
+ id: 67a6cf2d566a
+ last_write_checksum: sha1:cc606d3aa9217b3c52cd733b0848234ec34bef05
+ pristine_git_object: a9c86ddb3504b3e3714ffe4babb5a9c5a6870b25
+ docs/components/outputitemimagegenerationcalltype.mdx:
+ id: ecd36a8eb320
+ last_write_checksum: sha1:f24559d5f041bbad338effc43db33d69e0f02336
+ pristine_git_object: 7e12c2ee3da68966a14d19207b95699c7b57d1e5
+ docs/components/outputitems.mdx:
+ id: 876e956be23e
+ last_write_checksum: sha1:feaf29256eb4203388160c9f8c22292dde315bef
+ pristine_git_object: f73cc6671c184f19ca530e8d0bda4e6cc247e30b
+ docs/components/outputlogs.mdx:
+ id: 89bf8506e4fe
+ last_write_checksum: sha1:8b2efe9f4117b7b3d44eb16813e8ed88fc6d1ebc
+ pristine_git_object: e6eb732cb2cf1a73385b3d6111a1e1b810eca30e
+ docs/components/outputmcpservertoolitem.mdx:
+ id: 78e33fe9943f
+ last_write_checksum: sha1:b64c87e227cf51037bc59aca8fb82b2ed0dd2f4c
+ pristine_git_object: d11d1e77640fc72fee5b2bd122a527032f0d7c8d
+ docs/components/outputmcpservertoolitemtype.mdx:
+ id: 73eee5101369
+ last_write_checksum: sha1:dbd204ff01694d6ecab08faae07aeef5a78cf2a9
+ pristine_git_object: b98202d9a57066e51e0a8cffc48f9e909708915c
+ docs/components/outputmemoryservertoolitem.mdx:
+ id: 92da20c0ab0a
+ last_write_checksum: sha1:1d1afea177009f6ca75f6125d8048a4700495a63
+ pristine_git_object: f6fdc65d1058d426edaa5a069c826ff4e626d2a9
+ docs/components/outputmemoryservertoolitemtype.mdx:
+ id: 7abbcaea1834
+ last_write_checksum: sha1:f3c98d03ac6bca67329e32b7792d4171e53291b3
+ pristine_git_object: 6a65103cc12c8f78fd72f3085d1a5cf194b22c1c
+ docs/components/outputmessage.mdx:
+ id: 52a861e9201c
+ last_write_checksum: sha1:c01b85f5c1e9673aa02e4f9813c3316d9fa17915
+ pristine_git_object: 9cd8a403f1d5a68527e9b7e6468fc601f0a3f852
+ docs/components/outputmessagecontent.mdx:
+ id: 0a868ef4580e
+ last_write_checksum: sha1:62cef800826c3ad8511b19b743fe9bda62523c33
+ pristine_git_object: 04594cdaf89b701bcad3c4c77a4ff4404c68acdb
+ docs/components/outputmessageitem.mdx:
+ id: 0f4cb0124f16
+ last_write_checksum: sha1:dd04ecb089b19f492bedad4c8a3a357f80819b56
+ pristine_git_object: f02e8d23c2936236db0564fc684861f3d41ff996
+ docs/components/outputmessageitemcontent.mdx:
+ id: 9414efcbb76e
+ last_write_checksum: sha1:7e082b845736093b5e4b4f351d249e9584ee3c9c
+ pristine_git_object: 3fe04b2f00958e389d35c91ce504a3fb328d3b6c
+ docs/components/outputmessageitemphasecommentary.mdx:
+ id: a5a1afe30018
+ last_write_checksum: sha1:ff8240097fb01ef8ea7fe2d4f98616e4104adf2b
+ pristine_git_object: 67ae51fbc51a516418d5a137bb9341fe0addbcac
+ docs/components/outputmessageitemphasefinalanswer.mdx:
+ id: 8c29c9d66500
+ last_write_checksum: sha1:907276384dc283b6e97429fca7b03dd4d54a4174
+ pristine_git_object: 5fded9ec805ec6809a35967d8129ba5bff55651a
+ docs/components/outputmessageitemphaseunion.mdx:
+ id: d42d20f5c741
+ last_write_checksum: sha1:62a982d5a04ec6a560fe18b736e7115711891964
+ pristine_git_object: 39b73fbecbac7efcd2de1bcc341d6202783a76c0
+ docs/components/outputmessageitemrole.mdx:
+ id: 0076b0462103
+ last_write_checksum: sha1:49a65f5d386b5bb7541c6a2585db4f7d6999846d
+ pristine_git_object: b6456e41a3e71c115e15df189a901aeb20981c09
+ docs/components/outputmessageitemstatuscompleted.mdx:
+ id: 5aab7edc20a8
+ last_write_checksum: sha1:a26fa8980e08eaea39a74f8568ee6885efaede8c
+ pristine_git_object: 43f950c097d1e3fdd72a28d885369282fd480084
+ docs/components/outputmessageitemstatusincomplete.mdx:
+ id: 274882ab4e68
+ last_write_checksum: sha1:a2398a31a553bbd39e67371d81996335d07bb671
+ pristine_git_object: 7191dab240422ff9002eefe27690a4fc5b440191
+ docs/components/outputmessageitemstatusinprogress.mdx:
+ id: 0c4ace488b6e
+ last_write_checksum: sha1:6842ba5fafac9eaaffc8e1cd3c447697ff6dd168
+ pristine_git_object: 978dbbc11a9f25a3a7709945f973617070471e62
+ docs/components/outputmessageitemstatusunion.mdx:
+ id: 0249d099c34d
+ last_write_checksum: sha1:f6e96b1ed600c5c4dd0e47ee0b472d788d252842
+ pristine_git_object: d57364607a625e0d3eead9764d57deec53b07fbf
+ docs/components/outputmessageitemtype.mdx:
+ id: b704b67dc850
+ last_write_checksum: sha1:844de87858d78af7e5f12f86f25f98f9e19d85f3
+ pristine_git_object: 8baacb4bf4fb852670cc43109d6d23d5517d9497
+ docs/components/outputmessagephasecommentary.mdx:
+ id: 9266d7be360d
+ last_write_checksum: sha1:02c85ee928cb4c2df0ed16008ce92f7c3e310787
+ pristine_git_object: c03db0f9f6d5de8c4b009558ee7cd540545c5154
+ docs/components/outputmessagephasefinalanswer.mdx:
+ id: 452c24f64d8f
+ last_write_checksum: sha1:0c758fa9b27b56567756587665e3b1cee2609f8c
+ pristine_git_object: 47d6cfd6d192f9a86bf5277aa7b47e4579cf9b29
+ docs/components/outputmessagephaseunion.mdx:
+ id: 6ab2b3682d45
+ last_write_checksum: sha1:89e73d889f5588756c23906a04d71fe7c02d965b
+ pristine_git_object: 67491fda04ec1cb45a62de528ed4f0a712730553
+ docs/components/outputmessagerole.mdx:
+ id: 6ecc03d81311
+ last_write_checksum: sha1:de182e3dbd969d702ee21461bd60b0c123eb5581
+ pristine_git_object: 342943e3a076544a8c0ada37b7cc9ef013758956
+ docs/components/outputmessagestatuscompleted.mdx:
+ id: 82623cb752cb
+ last_write_checksum: sha1:6cff869c99628cf9afd8fc0aa493c65f01a8bcc6
+ pristine_git_object: 8e7698d17673cc77a22419d8c12d26a2e40db6e9
+ docs/components/outputmessagestatusincomplete.mdx:
+ id: a8d17582d806
+ last_write_checksum: sha1:5cf26a5864b3dd6e3d00a5d631687a377779c08c
+ pristine_git_object: c492398c4454d90eeb3d8500349f07661cc8e8b6
+ docs/components/outputmessagestatusinprogress.mdx:
+ id: 733bc5d69ff7
+ last_write_checksum: sha1:f8de1367ef55fe717b84d72cef9a2b68b66e4f3c
+ pristine_git_object: 94ee4f9f6651bf6e6e77efd958619a1e3c2ef2e2
+ docs/components/outputmessagestatusunion.mdx:
+ id: 00523fa52f2d
+ last_write_checksum: sha1:393c0ff130da92fd43560276d922f563678965b0
+ pristine_git_object: 46b30d64bdedba1e87fe77cce5ef8ffcbc3ae621
+ docs/components/outputmessagetype.mdx:
+ id: dde791add74e
+ last_write_checksum: sha1:a0af53cdc69a9b8a35089f2972a9bb836415166f
+ pristine_git_object: 5f80faa24ced13304a685894f4f01553531f0c3c
+ docs/components/outputmodality.mdx:
+ id: d0e5e32d8485
+ last_write_checksum: sha1:ab35ad2a3d1ef1b6b024be920d78d538450fb563
+ pristine_git_object: f052813506aab38d5d746aa56096d1d05dec8bb9
+ docs/components/outputmodalityenum.mdx:
+ id: ff4d9d7b9e07
+ last_write_checksum: sha1:a9bbd20b85b23f8d3affe92d5c8b0a6d5b717142
+ pristine_git_object: 2d9b6fc6d382ef371eb85f9c53f0a6d7130f7668
+ docs/components/outputreasoningitem.mdx:
+ id: 820bd777266f
+ last_write_checksum: sha1:33efff22e99dd52d274e791933388fdaeb91c582
+ pristine_git_object: 761085bfaed3b4dc6552ce497187245ebf87bd95
+ docs/components/outputreasoningitemstatuscompleted.mdx:
+ id: 4211cb7f6844
+ last_write_checksum: sha1:ce479409162a27538c9ebd0af573b6550d3d47a7
+ pristine_git_object: f2e1877843ad527cfc003ef73228b3aec4e3ac7f
+ docs/components/outputreasoningitemstatusincomplete.mdx:
+ id: 573245933df0
+ last_write_checksum: sha1:c871f5bd332ea307230c6743cf9a7be86cf16b5f
+ pristine_git_object: 0e81c76a33976f137efc1f18ecc6d70c8f2be3db
+ docs/components/outputreasoningitemstatusinprogress.mdx:
+ id: 9e5567f63022
+ last_write_checksum: sha1:aabc618a5494dd6c5db010d5fdd3d2951e586729
+ pristine_git_object: 07a0760b47478bdbd7dc4a9b16de8fccdd35acfe
+ docs/components/outputreasoningitemstatusunion.mdx:
+ id: b54642d50143
+ last_write_checksum: sha1:f2c20f63392d155b8752e12b80cd686acf70e08b
+ pristine_git_object: 276711e0e5f86d04ca013a8467cc0886b1404a89
+ docs/components/outputreasoningitemtype.mdx:
+ id: 1e5d4f5baf49
+ last_write_checksum: sha1:9485238c0606e8ffae88a62f95f062179dda48f7
+ pristine_git_object: 241c03053c7755774953081a52b76746ca01b52d
+ docs/components/outputsearchmodelsservertoolitem.mdx:
+ id: c0cc08dcfe8c
+ last_write_checksum: sha1:759d8a4da3c1230747bd19ccdce9b88e9f7551dd
+ pristine_git_object: bb1946a0ea7acbacdcd5263b97cb681abb6bcc5e
+ docs/components/outputsearchmodelsservertoolitemtype.mdx:
+ id: 3c077010a876
+ last_write_checksum: sha1:fa3bbc7841d41adbebfb43246bfb9d7404280a1b
+ pristine_git_object: 80904602e8e35699fce804be328b522c7b76bd8d
+ docs/components/outputshellcallitem.mdx:
+ id: b9bf31512bf2
+ last_write_checksum: sha1:e1a1a10f771bddfe434645a01dc395f768389e40
+ pristine_git_object: 994c3c01f230dd29d47df507fbed3f067e56f1c1
+ docs/components/outputshellcallitemaction.mdx:
+ id: e37067fe9cd1
+ last_write_checksum: sha1:2d3b53d5f5d2a4bcce027d55a3b36f78d13ab197
+ pristine_git_object: 2e9c76f3ddc587666d2bdde16c78dcb6a9d7dc22
+ docs/components/outputshellcallitemtype.mdx:
+ id: 7ba8d1e50207
+ last_write_checksum: sha1:dbe98e5fa0030de9a0f36149b78dbab26d309aa5
+ pristine_git_object: 6e25f4cdd42f706845c834921a44a7198a09c2f3
+ docs/components/outputshellcalloutputitem.mdx:
+ id: 2ce46fbb594f
+ last_write_checksum: sha1:0386175dde77211ad62fef7da9365c518de62984
+ pristine_git_object: b8fc79b3a0fac24dd0637837426283675e4d87c1
+ docs/components/outputshellcalloutputitemoutput.mdx:
+ id: d3e6fe7ad91a
+ last_write_checksum: sha1:12d8f0d5576898fed2328396c52d6dad7c859dbc
+ pristine_git_object: ca3f63fd3395cb4abcb6f884b16fd9d2b969a30d
+ docs/components/outputshellcalloutputitemtypeshellcalloutput.mdx:
+ id: b3771721488e
+ last_write_checksum: sha1:a2f348d70becceafa08d4d0ebd5dabe7a0395e3d
+ pristine_git_object: 2bfc5b85b0a0962d951930f1fd22bf3fb230750a
+ docs/components/outputsubagentservertoolitem.mdx:
+ id: afeb6acde438
+ last_write_checksum: sha1:36325a1dafb79158eae8b60a27cda59c6a56f25f
+ pristine_git_object: edc8261cf9839725dcf0a28c6a5224787b57a41c
+ docs/components/outputsubagentservertoolitemtype.mdx:
+ id: de66682e96c0
+ last_write_checksum: sha1:73a7ed6acdb716d85e1cd3b83517f12dcc5ee393
+ pristine_git_object: 19c0ebb0500e07eb2d3126b9740dcb598178c3b4
+ docs/components/outputtexteditorservertoolitem.mdx:
+ id: b55291433671
+ last_write_checksum: sha1:e32aa0251b472a7f51de8220eed826ae3e9ea511
+ pristine_git_object: 2739149f3a9522bf25a4080d3f181aad575c8ae5
+ docs/components/outputtexteditorservertoolitemtype.mdx:
+ id: 94b307d080ed
+ last_write_checksum: sha1:9343eda429965c70ec38b664d32037b1e765029c
+ pristine_git_object: 73d44035fd5cfcac99b42e34c2568f5f0367bd13
+ docs/components/outputtokensdetails.mdx:
+ id: 5a130ca4fc23
+ last_write_checksum: sha1:c1b5e6a8dc5a416b85c05ebf4ebb0dc5937ae03b
+ pristine_git_object: 9c9b6d5923e87acc8d5abcd3ab587324fcda9cdc
+ docs/components/outputtoolsearchservertoolitem.mdx:
+ id: 7106fbb89729
+ last_write_checksum: sha1:8001d2a20f8a6cb262cd06cf9926034af39c4b2c
+ pristine_git_object: af768f21a1d5357ae5e038de9ac0c49cc120fdda
+ docs/components/outputtoolsearchservertoolitemtype.mdx:
+ id: 2b67e805a2ae
+ last_write_checksum: sha1:7d4b330d471721610a9ac7d9f44684fd1a099f7b
+ pristine_git_object: 49c6685751d4ebd497b66734c421f906862d9f57
+ docs/components/outputwebfetchservertoolitem.mdx:
+ id: a13b752a8d99
+ last_write_checksum: sha1:ea99fa695f1db73632c1258a7f58ce0ad37a1195
+ pristine_git_object: 9c045b8b4f8234da7f0df0734097872bfb1a2576
+ docs/components/outputwebfetchservertoolitemtype.mdx:
+ id: 9ba9db22a4d3
+ last_write_checksum: sha1:ab7d41e97f1e83f69ea312673ad23a09255dca7c
+ pristine_git_object: 909b5a9d76aa8d35d543c6d26b297a4fcf1b44e1
+ docs/components/outputwebsearchcallitem.mdx:
+ id: c79fb1d179e3
+ last_write_checksum: sha1:24d7061a66250fc3576a7c1c7f28b85f8e8c9d8d
+ pristine_git_object: 3a389a5fa8751c88ebd8727d612df156f9f5f8de
+ docs/components/outputwebsearchcallitemactionsearch.mdx:
+ id: 68b8fca747ab
+ last_write_checksum: sha1:98a76009fb8bc87c3b2f20dcf56af177cdff2826
+ pristine_git_object: 8a3bea409530f781a0fc0108e43276e9a38328c0
+ docs/components/outputwebsearchservertoolitem.mdx:
+ id: 0b0f98b9ac54
+ last_write_checksum: sha1:e405bff48ef850c2d3fe416f857cf83b69596d23
+ pristine_git_object: b7fb42bba9891044ab52955ae6aee6c0d84bc776
+ docs/components/outputwebsearchservertoolitemaction.mdx:
+ id: a0269d265fbe
+ last_write_checksum: sha1:a5ffa656a464af15548437c19e92be6aef7bfdad
+ pristine_git_object: ca6a895cf6b2ffb67a5bef0b3c83b57b30021a2e
+ docs/components/outputwebsearchservertoolitemsource.mdx:
+ id: cfbd41edea19
+ last_write_checksum: sha1:f5fa04bcca698374114b6132b959c498d18d478e
+ pristine_git_object: 5c1f410d3bdcdd7601454b38fe6698c933eca5f2
+ docs/components/outputwebsearchservertoolitemtypeopenrouterwebsearch.mdx:
+ id: 4a035da1ded3
+ last_write_checksum: sha1:eb864713561ae630ee1b8a76fbb4a329bfacf541
+ pristine_git_object: c2d2d4d122bb8bef249d27286a9814c4e6386cd2
+ docs/components/outputwebsearchservertoolitemtypesearch.mdx:
+ id: cec5ec5cee40
+ last_write_checksum: sha1:59d8a25ff09e8b30c3b2ea7c4bfa6f63aea0587f
+ pristine_git_object: 569551439c2e174e6fc54eff2286081205211652
+ docs/components/outputwebsearchservertoolitemtypeurl.mdx:
+ id: 590ae58aeae3
+ last_write_checksum: sha1:9840459347943e716a48cc5947086a063c3e53a0
+ pristine_git_object: 7bcc872b70da2f1c7edb03ffddc8e96363e8a3d9
+ docs/components/parameter.mdx:
+ id: 732881d0420c
+ last_write_checksum: sha1:b07251b79fea1c46ace40815bec04c3f6945959a
+ pristine_git_object: eef5a5c4a33f4a956032328641888fc336a5a55d
+ docs/components/paretorouterplugin.mdx:
+ id: 92e7a1e63fd0
+ last_write_checksum: sha1:0d27d564e181cecd6570c92ce027afd447518536
+ pristine_git_object: c7ff4bd17a8c4fa61b9a02abad2257ce6c931dc6
+ docs/components/paretorouterpluginid.mdx:
+ id: 1142f2f64cc8
+ last_write_checksum: sha1:6e5b2bd86e73db92a9b4b93f014acb57cc61e1ae
+ pristine_git_object: 7e0cdb5cd39b7790758dbf2d6e4240aeefd4f491
+ docs/components/partialcoverage.mdx:
+ id: 2c16d0d10bdc
+ last_write_checksum: sha1:3db7723280b039b38be0b8d95d02eed9527acdbd
+ pristine_git_object: 7c7807b235f0b46e7aad32d047b19b9d223fbcd9
+ docs/components/partition.mdx:
+ id: e1ef1b74cf4a
+ last_write_checksum: sha1:d88f2a894236140f3497f828efaf3d178997f5d8
+ pristine_git_object: c61b4bcedbe8bd7306ded6bc263128087aa4362f
+ docs/components/payloadtoolargeresponseerrordata.mdx:
+ id: 2ea2198798f8
+ last_write_checksum: sha1:98c67fbe3ab45540e878852c690e3aa5df72a2ad
+ pristine_git_object: 3d55fb22f33c851cc1f6bbf4bb52c65bb479d2e6
+ docs/components/paymentrequiredresponseerrordata.mdx:
+ id: 7c3cc66a62e7
+ last_write_checksum: sha1:b7f48b734f5190c78aa520439aff6471a2b474bf
+ pristine_git_object: 2dc83a9d5afb9dbb568fe489bf5cfa58b0a60fcd
+ docs/components/pdfparserengine.mdx:
+ id: 4413c8716154
+ last_write_checksum: sha1:bfe77eb11094614101feca1ec050b90edda29cd7
+ pristine_git_object: a78f4deef8d90e1faf6ce17cabc2861f67dab3f1
+ docs/components/pdfparserengineenum.mdx:
+ id: 937cec38065c
+ last_write_checksum: sha1:0e77257831ddae3b13ce306b793df8579759fb85
+ pristine_git_object: 69ef2938b2418e0765119552bed776574e4d7385
+ docs/components/pdfparserenginepdftext.mdx:
+ id: f30f6e6b18e8
+ last_write_checksum: sha1:7d0cc4b2dddb1b727866281d6182b25e6b114ae2
+ pristine_git_object: b1b3339738178954671b03c208cb9ad217a0e5b7
+ docs/components/pdfparseroptions.mdx:
+ id: f7c78d1276d0
+ last_write_checksum: sha1:3f17cb303c2d084cc2dfe25f78b649c2e77358e0
+ pristine_git_object: 2e830520967ac2fe4644b1401d6d220889a20de5
+ docs/components/pendingsafetycheck.mdx:
+ id: 82aba5742fed
+ last_write_checksum: sha1:a7e4ba3cf447aa2794189fc4d741529cee9d82fc
+ pristine_git_object: 4d484ee8eff2a8e946eeaea44256c3f5977a8e8d
+ docs/components/percentilelatencycutoffs.mdx:
+ id: dbba9b9c0335
+ last_write_checksum: sha1:41329b859a3972bf11f534bcbf3ff843c11f42ce
+ pristine_git_object: 60b8ab278d0c9497e95054a8817ad5a11fd23ea7
+ docs/components/percentilestats.mdx:
+ id: 6d04941b9751
+ last_write_checksum: sha1:97382b4befbdcc45a05b8d515c8220480562dc19
+ pristine_git_object: ff5277c9c4a0927ce8af12eac416e73d0368994c
+ docs/components/percentilethroughputcutoffs.mdx:
+ id: 5ed0945b3483
+ last_write_checksum: sha1:75469331593bced83bfe98408caa584b939c95bc
+ pristine_git_object: 86ea312944a50501fd307f41c471b2462adeeb5e
+ docs/components/perrequestlimits.mdx:
+ id: a503880c4645
+ last_write_checksum: sha1:a971ac638f0c8885577b1165909c8d5ef6b77e1f
+ pristine_git_object: c03fb6fb692b8af0f720a70f36b214cc8c36b785
+ docs/components/pipelinestage.mdx:
+ id: d61180ec88b0
+ last_write_checksum: sha1:d49a71a6279ca655210b5d5c2317799e3ac6c97e
+ pristine_git_object: fb000252497e0c2405b948b80d2e56e460fac96f
+ docs/components/pipelinestagetype.mdx:
+ id: 3c54779ba868
+ last_write_checksum: sha1:2e5611cd5f6c1ce35c979a1046b142c66895f9aa
+ pristine_git_object: dbf6cac96b22f374bb90a50206cf8f0a10a5c8bd
+ docs/components/preferredmaxlatency.mdx:
+ id: 8ca10c660593
+ last_write_checksum: sha1:606748118011316ae4563b9afe99105f61968053
+ pristine_git_object: 0c78ef7a9fd64d51b1b6dc981d6d609b74beb1bf
+ docs/components/preferredminthroughput.mdx:
+ id: 395a738d1f59
+ last_write_checksum: sha1:83fabc28a3caf621d3abe6e1202922b00278e594
+ pristine_git_object: 348b570390ecd6845e362a4984ecd563daad710a
+ docs/components/preset.mdx:
+ id: 9069cdfaddbc
+ last_write_checksum: sha1:87eebf424e40efb670c2bc0f617c903a6f9d3da5
+ pristine_git_object: af18885fe3cc9a11fa73f5366f9530aed8732750
+ docs/components/presetdesignatedversion.mdx:
+ id: 600f3d47dfc9
+ last_write_checksum: sha1:387d8e514d995d0d5a35b77a90693972d4aeda97
+ pristine_git_object: 0db549178d21f9cd5ff214ac21909bcf90d1e531
+ docs/components/presetenum.mdx:
+ id: 5c9d69c551a8
+ last_write_checksum: sha1:5d1fdd6337d62463657cfbae4a58abb21cedc03d
+ pristine_git_object: d4ae3a8992c31daf56310ec01d089eb862ed13b3
+ docs/components/presetstatus.mdx:
+ id: cb4faf64ee85
+ last_write_checksum: sha1:7a2f2619305e77274fa23eb6a68e17c122a0fb38
+ pristine_git_object: 7eafb31f6b1fe451200cc8b2dfcb19e174b26ead
+ docs/components/presetwithdesignatedversion.mdx:
+ id: 81a043aab111
+ last_write_checksum: sha1:3479d7565adbf6d6095e50ae3e966affcacd88b7
+ pristine_git_object: 56d189d99021af45f7fa6fb143af33d7d08cedcb
+ docs/components/preview20250311websearchservertool.mdx:
+ id: aeecb65a50e0
+ last_write_checksum: sha1:9cd7cb2fd03fb0fb42684a3e00b072045d1974ee
+ pristine_git_object: 51a09f1717d612fcb41f0694f55e699f619e86b3
+ docs/components/preview20250311websearchservertooltype.mdx:
+ id: cedcfeda38d6
+ last_write_checksum: sha1:f7ac2913cc8c24d851c06d02c06742f9fe435084
+ pristine_git_object: 3669d05ce38327fa9b3d9a8c66c1de208a5f30e2
+ docs/components/previewwebsearchservertool.mdx:
+ id: 2695e6e2fdfb
+ last_write_checksum: sha1:3279699a9827cc33c871fd15ab6af0129605760f
+ pristine_git_object: 66b4f3f11418bba6015197b38d12ef65d3fb061b
+ docs/components/previewwebsearchservertooltype.mdx:
+ id: 4b6373295164
+ last_write_checksum: sha1:b28bae247d5a91d62f9be9877cd6f437628be49e
+ pristine_git_object: 6d4539916fa939a5acaea395be41b0627629cad5
+ docs/components/previewwebsearchuserlocation.mdx:
+ id: 2a874697fab9
+ last_write_checksum: sha1:c4693dc83aedfaf95cef18538f626338309d5368
+ pristine_git_object: 1695e40497a7178618edb5a5bbc4814e18aa1aae
+ docs/components/previewwebsearchuserlocationtype.mdx:
+ id: 35ac43fbcda0
+ last_write_checksum: sha1:ac447a848769901eb347e8d4ab81494a79d4101f
+ pristine_git_object: 414a5204c691ee0766f05498ff467eeaddebcb6c
+ docs/components/pricing.mdx:
+ id: 6816d700f8b1
+ last_write_checksum: sha1:ac5c56af4e56eb98da5686e33a224950dfbb8207
+ pristine_git_object: 78ac34b5053103dc4261c2fbeb9833f97ef109db
+ docs/components/promptinjectionscanscope.mdx:
+ id: 27b252a0e798
+ last_write_checksum: sha1:a8947423372ce9b2edee232b8da4aa0afe5c6619
+ pristine_git_object: 1d91d32cd0bf4b64699bbbf05a7e95ab835b10cf
+ docs/components/providername.mdx:
+ id: aa3a4904b228
+ last_write_checksum: sha1:0ed72fc077d1a2641c8013c782fa7797282337e8
+ pristine_git_object: f7cde44d7ed6638b63f3f5c3921096cd368c1b1e
+ docs/components/provideroptions.mdx:
+ id: 2697807524fe
+ last_write_checksum: sha1:e1d6db7e6b3ed82bc19a6ece557566273f9a4b93
+ pristine_git_object: b15b96fc074273c0d83e59b9b69c64ce8dfb48d8
+ docs/components/provideroverloadedresponseerrordata.mdx:
+ id: dc500cd14889
+ last_write_checksum: sha1:6c1d551db4083f1d0bc429baa1ce472d2c085331
+ pristine_git_object: 05bcfceecf3e74def73684391a76fa68829271a3
+ docs/components/providerpreferences.mdx:
+ id: adbdfaa46438
+ last_write_checksum: sha1:d0f7b534fbaed359e2f2abd736bd669367371462
+ pristine_git_object: 750d3a21ada3133dba71217f0444c2064b2ff081
+ docs/components/providerresponse.mdx:
+ id: 36e1a24f90b6
+ last_write_checksum: sha1:8cc7665df40a74a5df41e654e7824b6cdd8a2155
+ pristine_git_object: 65abb901a8ffeeafa89279f5e15d885cbaa297ec
+ docs/components/providerresponseprovidername.mdx:
+ id: 2fc17b61e546
+ last_write_checksum: sha1:3c9ef87051135f7aa37e89b7b952aed3b8e2c13a
+ pristine_git_object: 85c97ab96bd1c209a131187986528ea636e81256
+ docs/components/providersort.mdx:
+ id: d73fa13eeb95
+ last_write_checksum: sha1:b7e9e6842741e3433d705bd576f2ac5383f00134
+ pristine_git_object: cbfa63e4d31ea7c545d69ce2a7de281a3ece9828
+ docs/components/providersortconfig.mdx:
+ id: 9ca776e56c1b
+ last_write_checksum: sha1:6e4c1559eef9ee1369886cca6708b01b93d685bc
+ pristine_git_object: 5aa8e90a6761d61aa63204bc3aa73f4481449d3e
+ docs/components/publicendpoint.mdx:
+ id: ec4843ef5d86
+ last_write_checksum: sha1:3cd9799262a806acabefeaee43d5069fb58ab4c6
+ pristine_git_object: 53b22a2c5d91fdc4ee5e39d7013b09b748d763e2
+ docs/components/publicendpointquantization.mdx:
+ id: 9b0ec1bdfe07
+ last_write_checksum: sha1:c820b5a85f593030702969f8bce4d81358d222dd
+ pristine_git_object: 4498d08fd82f26a210eeed2b9659e6a0b321f9ef
+ docs/components/publicpricing.mdx:
+ id: 61fb18b7ff94
+ last_write_checksum: sha1:41c3b03c9eb4883d41e128e1b2d549ddb608c317
+ pristine_git_object: 0d8f6cf2cca158ec93dd8afdc29c0cb377053fbd
+ docs/components/quantization.mdx:
+ id: 9d062e4ee362
+ last_write_checksum: sha1:4cb3588933fe1ca8592669f8ec1bef1cf0986e28
+ pristine_git_object: cdbf8d73f319e091b6514c6bae0dc8bb56fd8c96
+ docs/components/rangecapability.mdx:
+ id: 8c2d6524bd62
+ last_write_checksum: sha1:e583c16a52c5811d882ddbe20cee0a7006035356
+ pristine_git_object: 34425c50e04ff9fb85da6f81aadd9ca65f9d8715
+ docs/components/rangecapabilitytype.mdx:
+ id: ed9a27bb5417
+ last_write_checksum: sha1:357127ec16001090e00bfc05c17573fa9f271783
+ pristine_git_object: e4d767dd892763484e2405ebfb181788c04b73e6
+ docs/components/ranker.mdx:
+ id: ea49a60d49ac
+ last_write_checksum: sha1:6539c0a8a78cd39e83642afa1f92283d4472bcae
+ pristine_git_object: 7a7b811afe39d052513a657b6b0cb4ab2d8fe0f8
+ docs/components/rankingoptions.mdx:
+ id: fc7b9b20f341
+ last_write_checksum: sha1:56211ab8b5c3c2d46d31a99b80cb4252ea7f596e
+ pristine_git_object: 2f3d38a040d8175b63d0a1423445bc6ec887fad0
+ docs/components/rankingsdailyitem.mdx:
+ id: 96e15ce0fb39
+ last_write_checksum: sha1:3fc5a1df6b1a451227535d17c26ea27ea0fcc23b
+ pristine_git_object: b2e760295879653eb491f6b171ad5f2399b3e1e0
+ docs/components/rankingsdailymeta.mdx:
+ id: d6d04480acfd
+ last_write_checksum: sha1:53f7947281343750c6a014c66887c583d0186248
+ pristine_git_object: cdc00fcf749f1108164269a8db7ad76b5d623a46
+ docs/components/rankingsdailymetaversion.mdx:
+ id: 1de73fde8cce
+ last_write_checksum: sha1:990f056c1ab068eddecea25d1e8b54d4e27d5e02
+ pristine_git_object: 274452757b0df087a5fca9c903df92ca7d59eb9a
+ docs/components/rankingsdailyresponse.mdx:
+ id: eaa8d80ab494
+ last_write_checksum: sha1:01550caa8b17d53d661fb8eec86f7dd6536f3e2a
+ pristine_git_object: 13cf299dbc8c505fbc8e691add26341779a692af
+ docs/components/reason.mdx:
+ id: 0c3e75430162
+ last_write_checksum: sha1:d46f2a9cba528c56bafb3150b3debcb7a138c2d8
+ pristine_git_object: 99c4a374a4dacb8e64c8a1cf5efb815fb177e22d
+ docs/components/reasoningconfig.mdx:
+ id: e5500b541923
+ last_write_checksum: sha1:0356f9e98a2ae7ec83b1c352994ced8cddeaaf79
+ pristine_git_object: 819b0830608d88a227d9457f4189d7b1112c39d4
+ docs/components/reasoningdeltaevent.mdx:
+ id: 2ec3838c029f
+ last_write_checksum: sha1:15dccf12992148893efb3325d86be310d339fda5
+ pristine_git_object: 2c29c423cb24ac01b61cb3e6eed2b2bfb7facee2
+ docs/components/reasoningdeltaeventtype.mdx:
+ id: 96184b7986c3
+ last_write_checksum: sha1:b7d150d28d29a72074c4a094a8bcaed7c1c80909
+ pristine_git_object: 6c358d0e153e45a3deb9468d715f876561598a8c
+ docs/components/reasoningdetailencrypted.mdx:
+ id: 7bf862724f88
+ last_write_checksum: sha1:23b0b825b177db6d7ee539cba858f2de2e1a7740
+ pristine_git_object: af4cce611927af3fb6910e011ec682f3e31b8a28
+ docs/components/reasoningdetailencryptedtype.mdx:
+ id: 7dea8887a486
+ last_write_checksum: sha1:92808e57ae938c7cfaf7d5ab1dcc2e411d887108
+ pristine_git_object: 3779ebb04af32b9188d75c4c910752f6ef31ccc6
+ docs/components/reasoningdetailsummary.mdx:
+ id: 264cd49526bd
+ last_write_checksum: sha1:73d7efd548b4a457454ebf381f159797ddc91970
+ pristine_git_object: f0ad47f1dfe3359cbdedaa8bf869a8e1fd0c1b27
+ docs/components/reasoningdetailsummarytype.mdx:
+ id: 7a022f3244e9
+ last_write_checksum: sha1:4f4225c81b7d7a0bbd1542f158c87a9fc4967ba2
+ pristine_git_object: 7061072353ebec80f873d6a6e1fff9e4cab7273d
+ docs/components/reasoningdetailtext.mdx:
+ id: ab46bdf1fecc
+ last_write_checksum: sha1:193705552c7526be3cc1cb7a549a5250273a576c
+ pristine_git_object: 54a6696ff20603346cac8dedbf4c2b264346a857
+ docs/components/reasoningdetailtexttype.mdx:
+ id: 06604321ed1a
+ last_write_checksum: sha1:93b10c0a74c1ca105c9d06c31a30a1a5547ba998
+ pristine_git_object: 4b94f542433728f6cf9adce6be943b7be90dbd41
+ docs/components/reasoningdetailunion.mdx:
+ id: b79bc447eaff
+ last_write_checksum: sha1:93c29cce21e4ba625b7299ecc8891d1b1fa7ef87
+ pristine_git_object: 49ac02bee627aed7cc041917d432dd368463827a
+ docs/components/reasoningdoneevent.mdx:
+ id: 3183f11559d0
+ last_write_checksum: sha1:b2ab6eac3b93629f1643c518dca3e7274d4b17c9
+ pristine_git_object: 6068c9df014c7b9521d249c6db593fa3fcd30beb
+ docs/components/reasoningdoneeventtype.mdx:
+ id: c594e155bada
+ last_write_checksum: sha1:33c39a9156e69f6408a8a567945da63df0e20a77
+ pristine_git_object: 55393ca53e8d952919e429f7bc5a2f8762a7adc8
+ docs/components/reasoningeffort.mdx:
+ id: b2f39931f1a8
+ last_write_checksum: sha1:f4d71419143fde97e5a1cca31603b030f49b008e
+ pristine_git_object: 2cfb4301a444ee320895855dd98311aaca93363b
+ docs/components/reasoningformat.mdx:
+ id: ad8b386fc1e9
+ last_write_checksum: sha1:4c324f1a8828a549ea5106b08b5de95691587f86
+ pristine_git_object: 704d0542d4b1601b7c0e67a8fd21837b701276a7
+ docs/components/reasoningitem.mdx:
+ id: b878124ede47
+ last_write_checksum: sha1:f740ab591ad89130eb9eefbbc507dbbe8a92195b
+ pristine_git_object: 1afe6189619054be6b509bbbaa51abc0084848e1
+ docs/components/reasoningitemstatuscompleted.mdx:
+ id: 691c02c0f311
+ last_write_checksum: sha1:ecb1dbba577ea1e3ae7d8df659e51e0226795e09
+ pristine_git_object: 431f14fa12dda7caa53dac731aef76b1bc0c778f
+ docs/components/reasoningitemstatusincomplete.mdx:
+ id: a96f6f2a5d11
+ last_write_checksum: sha1:cceedc4a495e0bda85cfb6dcd84aa26d16e97eea
+ pristine_git_object: 6c2942a33589ad8c4a2ce9fdf74d9999940dedcc
+ docs/components/reasoningitemstatusinprogress.mdx:
+ id: 556eae7029e5
+ last_write_checksum: sha1:a224088882e2bd072fd350e7e11a53a47a02e030
+ pristine_git_object: 3bcf01238f78b530d1d54c89b36ecde2d08a51b6
+ docs/components/reasoningitemstatusunion.mdx:
+ id: f61d530754ae
+ last_write_checksum: sha1:000b1aac403965ec14f49393a519f924d08e6e48
+ pristine_git_object: e6ea6285c74adcb99196a02816705af97ca69e01
+ docs/components/reasoningitemtype.mdx:
+ id: e8641738e2de
+ last_write_checksum: sha1:3e48a910c91face268f4856b29513a839387908b
+ pristine_git_object: ce469f036c494a9b65a2f9c6cba2a00d84ea27be
+ docs/components/reasoningsummarypartaddedevent.mdx:
+ id: f8185d70cec5
+ last_write_checksum: sha1:ea2de8082c5aa7e86313a4e22caf7f800d76988a
+ pristine_git_object: 277f61694ce38c290be3b1b59fe2fc6a93ded250
+ docs/components/reasoningsummarypartaddedeventtype.mdx:
+ id: 287026fc4fd1
+ last_write_checksum: sha1:4218cfaeb5692fee8894542a41f170e3b66a2bf5
+ pristine_git_object: 6b1f94bd6b95e9c772ea8b1f23a89fcab72d01f2
+ docs/components/reasoningsummarypartdoneevent.mdx:
+ id: 956627e33125
+ last_write_checksum: sha1:0b90575bf63633f10733bd2575d00c4efcccd131
+ pristine_git_object: f648a1e1bc4be59bee9533e55713459f09eecb85
+ docs/components/reasoningsummarypartdoneeventtype.mdx:
+ id: 6f7fd024080b
+ last_write_checksum: sha1:63700123f9615bbe2fd2630ca9f8a5b3dff11401
+ pristine_git_object: 74d96535b176bb2d7cde99a220788f179a93cbbe
+ docs/components/reasoningsummarytext.mdx:
+ id: bec34612b49f
+ last_write_checksum: sha1:75cde8f4a0255ecc98bbbe8b2bb96a8fd800f55e
+ pristine_git_object: 0a97676ea682c22f97860605d56547efc5653dd0
+ docs/components/reasoningsummarytextdeltaevent.mdx:
+ id: 26a5d6aa1490
+ last_write_checksum: sha1:20a098efae128dc6ed31af9380c1afef376fa037
+ pristine_git_object: 204b30efee119e862c98942d36defd671b4dc71e
+ docs/components/reasoningsummarytextdeltaeventtype.mdx:
+ id: b50054957f10
+ last_write_checksum: sha1:083b44e1a93aa49032a947e667c4dd90365a7845
+ pristine_git_object: a7ac9a93436e7b8a6a48d780c5339b1adf1aca54
+ docs/components/reasoningsummarytextdoneevent.mdx:
+ id: 6b6758cbe771
+ last_write_checksum: sha1:68d6e6d0c31d809f4b6c7dc628dab03b6db236cf
+ pristine_git_object: 540a20cea1f72668a18f117bd21e9c5d3f81bb2b
+ docs/components/reasoningsummarytextdoneeventtype.mdx:
+ id: 4ef745dbe0ae
+ last_write_checksum: sha1:9fc6f7f3ec2bc08751242b587050232163b6197f
+ pristine_git_object: 64982e79bfbe0b227ec81c134cc784b1a43cb75a
+ docs/components/reasoningsummarytexttype.mdx:
+ id: f8223e4931d4
+ last_write_checksum: sha1:4ea3dbd342ab76027102377c212b7ffea462d0e1
+ pristine_git_object: 4768528308252140417214f989c3206e59a9232c
+ docs/components/reasoningsummaryverbosity.mdx:
+ id: d41ff78d159b
+ last_write_checksum: sha1:220aadec8d70dea4ed681f404a96c6cf6227407e
+ pristine_git_object: a62813b9ae2720e1409205cc1b3b848e9068a9fa
+ docs/components/reasoningtextcontent.mdx:
+ id: 68c13c37bbf1
+ last_write_checksum: sha1:1b324cabe714d7145f67fd710e0d5f2811aa296a
+ pristine_git_object: 6fbaeeed46dbd907900ab331e48715314fc04ebd
+ docs/components/reasoningtextcontenttype.mdx:
+ id: 889d0f7c9bbf
+ last_write_checksum: sha1:1091eddb7370abadf0cb898eb82439ea67932b82
+ pristine_git_object: 9724b529b0c42063dd25638672fbe19249b4520a
+ docs/components/refusaldeltaevent.mdx:
+ id: 2e54cae49929
+ last_write_checksum: sha1:0992fb070f815f9fb16bcc9eef69ee1a6e78fb74
+ pristine_git_object: 046947a1cc61edaff0cd993cf7933445eaa6c60b
+ docs/components/refusaldeltaeventtype.mdx:
+ id: 0bf1d07f3cb7
+ last_write_checksum: sha1:d67b53de4bd50e060ec6b6a4b90d12b2b99f4bec
+ pristine_git_object: eb1088e8934f46630484a6045eadb5c956aec713
+ docs/components/refusaldoneevent.mdx:
+ id: 906d3a461c5d
+ last_write_checksum: sha1:470ba4b967b7e82b9965baaa048efadfe38be295
+ pristine_git_object: ccc2709f3c646f54d6ed65bfb2832299a074aec2
+ docs/components/refusaldoneeventtype.mdx:
+ id: 4f8136a055a8
+ last_write_checksum: sha1:d205c02bb074a52f492a81ba76b3568670fc1334
+ pristine_git_object: a6e370bd6787ea1a068791e331b4c894666dabe3
+ docs/components/region.mdx:
+ id: f2abab6453b6
+ last_write_checksum: sha1:9db11174ef8a40a144f94ec1d18cb4500fc66871
+ pristine_git_object: 51b26cc819421478797a67e192f2c8952cab45a4
+ docs/components/requesttimeoutresponseerrordata.mdx:
+ id: 6f984fda78d6
+ last_write_checksum: sha1:b730dd6e83db69efbba25f05cd1c0f76f7297e1b
+ pristine_git_object: 71579d93bbc9647c3057821314ed3eda9b8626d6
+ docs/components/requireapproval.mdx:
+ id: a207e0b4b049
+ last_write_checksum: sha1:48b763f7ee9f04e2986d74edfd952ce6f8f97d3c
+ pristine_git_object: 79583bfa0935e0885425fb4665f08a02fe07de60
+ docs/components/requireapprovalalways.mdx:
+ id: d1a6759638cb
+ last_write_checksum: sha1:2fc22645172025eb9a591ea117922730649d1fd9
+ pristine_git_object: 520f072ac3cb27bc17febba34ff704d16133f8b3
+ docs/components/requireapprovalnever.mdx:
+ id: 6dd7ca812306
+ last_write_checksum: sha1:3ec72ee929c0d529ccbcebb22d52da5097f415d6
+ pristine_git_object: 0e65abee2cd9ce152b68dbe3180739ea36b949e6
+ docs/components/requireapprovalunion.mdx:
+ id: fd80c94f61ca
+ last_write_checksum: sha1:866cc7d438af77925b5ea6ae7f17283826ecc1c4
+ pristine_git_object: 9ff15b470d192a2717e19f15ef0154de10522615
+ docs/components/resetinterval.mdx:
+ id: ef4f6969df8e
+ last_write_checksum: sha1:e47284974689070a1dd9c82195e4588fe9ffe17c
+ pristine_git_object: a22e20430c548554994bd3e8371b19cf8027784d
+ docs/components/response.mdx:
+ id: 08f49f31e8ab
+ last_write_checksum: sha1:13b3e031d4aab706503a23ff99528813ec14698d
+ pristine_git_object: f12a0a04d9dc4430ca6180c8507360d9bc7494cd
+ docs/components/responseformat.mdx:
+ id: 9b8deacad550
+ last_write_checksum: sha1:2ca93510828412e375f9903be2c92bcefbacd177
+ pristine_git_object: 29709effcd49176f32b4b99f9a37ed1309231549
+ docs/components/responseformatenum.mdx:
+ id: 60f6138df415
+ last_write_checksum: sha1:b3d58b45db884f8b051be834701ee3166bfb13cc
+ pristine_git_object: 0b7c4b07a2162050d564e6947d060d1b22241817
+ docs/components/responsehealingplugin.mdx:
+ id: 5bf9b8008e95
+ last_write_checksum: sha1:1aa7dc7146a93a215d275571233ee63902a6e155
+ pristine_git_object: 8b89cfa96d79562d7b77bc5eaa58ffec95f00187
+ docs/components/responsehealingpluginid.mdx:
+ id: f51ceb263180
+ last_write_checksum: sha1:db7f0f7081aaf350395b55d15553b771ac559a74
+ pristine_git_object: 0dce5ceee2929e6ef2817fd622093fbfe5ca75f4
+ docs/components/responseincludesenum.mdx:
+ id: 3fa11839bc55
+ last_write_checksum: sha1:045a1ca6f744774bb1a4f777c9d661faf6021e44
+ pristine_git_object: a5cb010354b5dff2d5751fcc0ddd5fa1b0563168
+ docs/components/responseoutputtext.mdx:
+ id: ff47b80fc46f
+ last_write_checksum: sha1:c0fb299b188e91f92766079b16b94dafe96b5ccb
+ pristine_git_object: a6879aa83f0c9507fb6d31c75f2290f239e4b420
+ docs/components/responseoutputtexttoplogprob.mdx:
+ id: 023ba8fe0238
+ last_write_checksum: sha1:c7587a1afdd80387ff7a7e285cd9509c5d059dbe
+ pristine_git_object: b085f188727b4333f46de226aae4467ddb8fb453
+ docs/components/responseoutputtexttype.mdx:
+ id: 3c4fe7ccb317
+ last_write_checksum: sha1:62c6558f6d82310cd4238271a07372d51a2ffdf7
+ pristine_git_object: aa7c89233d761c71c471d4f9ee808e648e683fcf
+ docs/components/responseserrorfield.mdx:
+ id: b6154c03e4c4
+ last_write_checksum: sha1:1226c11459e0aab4601c395235bb4aed55c9c602
+ pristine_git_object: 996cffee821435729436d7f29bce4333f4900382
+ docs/components/responsesrequest.mdx:
+ id: 0dbcef40a4b1
+ last_write_checksum: sha1:6349c1560ef2f55875ce6d926e42117d1b069cee
+ pristine_git_object: eb2f6540a39471b65545174c8f5658303868f00f
+ docs/components/responsesrequestplugin.mdx:
+ id: 4d550c41c85f
+ last_write_checksum: sha1:ab9d1e6c062cd51fc976da6ccf393e9974171f7b
+ pristine_git_object: 7121cf5ea925e054ff60296a7d7ce2ecfceb4d80
+ docs/components/responsesrequestservicetier.mdx:
+ id: 5000ee5983ff
+ last_write_checksum: sha1:97a6f6dae00368174adedb8bd994aa5c23d0a550
+ pristine_git_object: 51f9b5996e0a3d693726e27c3ac8095b926091ef
+ docs/components/responsesrequesttoolfunction.mdx:
+ id: dd0c817d15e6
+ last_write_checksum: sha1:884bcbda9812577a8ff36fa962d33421e13da3c1
+ pristine_git_object: 5f6cc606242e0f8343c7bef1d54e640fef620a80
+ docs/components/responsesrequesttoolunion.mdx:
+ id: 96bafa5d19b1
+ last_write_checksum: sha1:ea0dca57eedbc520f2a5097b8e0adc1b1f831be2
+ pristine_git_object: bfec11b6f951665f3b0467a8e8f98e7f224a9350
+ docs/components/responsesrequesttype.mdx:
+ id: b2720876d384
+ last_write_checksum: sha1:9ed21e9f3c79e3936a4f6bc9df24eea499cc1e56
+ pristine_git_object: bd4d080a74641b4a2018d2cbddbd16daa3ae7b0a
+ docs/components/responsesstreamingresponse.mdx:
+ id: 5eefe41f1850
+ last_write_checksum: sha1:06ac8357212098a2e461592ff4cd29ef9e7e1fe1
+ pristine_git_object: a9e4e2a7461ba24eedfd00740bf4522607e64a04
+ docs/components/routerattempt.mdx:
+ id: 372598a145ed
+ last_write_checksum: sha1:51d8aee604f0093ea6df2df0fd73f02241190f70
+ pristine_git_object: a082fd19fb49f23a7b87c8bff4339475d2ceb54e
+ docs/components/routerparams.mdx:
+ id: 48b1835a3807
+ last_write_checksum: sha1:3edebb97271f1405f8347235a7f58f9ac018ec8b
+ pristine_git_object: e5316d7870bbb825b96980dc2488bde156bde638
+ docs/components/routingstrategy.mdx:
+ id: c74229969aa6
+ last_write_checksum: sha1:dc0caaa60b7c88580668cc4393486f13b3b6e636
+ pristine_git_object: 02852267fa52361a11f7732afe1e7818105196f0
+ docs/components/rule.mdx:
+ id: 652b4ec56a02
+ last_write_checksum: sha1:9e98bfe08cdbc0e13635a26c52a1d11003041b78
+ pristine_git_object: d585c3be57a8c3843d6712c747983fbcdb692d17
+ docs/components/searchcontextsizeenum.mdx:
+ id: b6b9a99acb5f
+ last_write_checksum: sha1:177016c42a56a7a8dcd40caa7e9105ca7a6ea1cc
+ pristine_git_object: ba86ee34516bcebcc90eed390c5f5fae197ae564
+ docs/components/searchmodelsservertoolconfig.mdx:
+ id: afffad2845a2
+ last_write_checksum: sha1:4c205a6c239561b5813ec9202abeeef9e4e41331
+ pristine_git_object: fb2f7f7c53004cfee264fe37346b88af5cf7d61c
+ docs/components/searchqualitylevel.mdx:
+ id: 0cbced049b6f
+ last_write_checksum: sha1:106b7467c7ab738c7ce04ab44d83a91388dc0808
+ pristine_git_object: 09c661196e0bbf039ff1e117c55aa1981ca1ef4a
+ docs/components/security.mdx:
+ id: 126e702b7c97
+ last_write_checksum: sha1:3fbb5c3145b96472437de6e6384ae222b0ae5210
+ pristine_git_object: 185abbfd59b8369f9e7475ab4cd7acdfc58962a3
+ docs/components/servertooluse.mdx:
+ id: 0431e1259d43
+ last_write_checksum: sha1:79bb35b65254a9df9804ccdc89a84ceadc72a811
+ pristine_git_object: a90fbbefe76853f92638f4ae7ad63cf67951efc4
+ docs/components/servertoolusedetails.mdx:
+ id: 5a7d75562dec
+ last_write_checksum: sha1:28d1fa7491c62f6fc5592fc8092afa9cfaa0b4f5
+ pristine_git_object: a9f0d64b5351c9d5f5839b29c8c8c9c79a2d0c3a
+ docs/components/serviceunavailableresponseerrordata.mdx:
+ id: 72f01d77e774
+ last_write_checksum: sha1:7b53cfdd92a87ef0b70e0b5f7d2031e73bcbe033
+ pristine_git_object: c4f86510dd56bef5dd5cabb2587ebe6f04bfe983
+ docs/components/shellcallitem.mdx:
+ id: 172eabd6add3
+ last_write_checksum: sha1:8648ce1b124e619f8ee36f29ad17d6f05bb2d54e
+ pristine_git_object: 02c5c8a8803a5302755cf8aea534a75ee5144381
+ docs/components/shellcallitemaction.mdx:
+ id: cbd26fb9049f
+ last_write_checksum: sha1:e1f76bee9ea1ac27ffc7bad531335b55de3110e4
+ pristine_git_object: cca3bb6149631c73acc99918017138a85d707256
+ docs/components/shellcallitemstatus.mdx:
+ id: d212b5774e0f
+ last_write_checksum: sha1:676d928f202fcef08ac3043f374d7b1233fe0793
+ pristine_git_object: b6ec73cdd2e1360daa475564b254479f875aaa0c
+ docs/components/shellcallitemtype.mdx:
+ id: c198ee9e7382
+ last_write_checksum: sha1:933fad7f148c81a73de7bf0d6f2083038fc0803b
+ pristine_git_object: fe8aa0d80f56454a4326d74c8ee8a7793427312d
+ docs/components/shellcalloutputitem.mdx:
+ id: 3c692a7914b0
+ last_write_checksum: sha1:deda355e7fbab3d845fe343c9253a1d304f59c73
+ pristine_git_object: e4456b9caf3dfb944a968140d5d2ac0d08033ec9
+ docs/components/shellcalloutputitemoutput.mdx:
+ id: 85a0aef86180
+ last_write_checksum: sha1:10743226453034a964c7161509f4b14e0a132bda
+ pristine_git_object: 9d4855758dd00d9ec1d0ecc32f0e274073756c4f
+ docs/components/shellcalloutputitemstatus.mdx:
+ id: aaef41438132
+ last_write_checksum: sha1:0368af73f91840e63378168ca74b9d5197c5eac5
+ pristine_git_object: d1b61c6d1baa184fc306ac13f47fae2f0bc04c57
+ docs/components/shellcalloutputitemtype.mdx:
+ id: 13012771fc34
+ last_write_checksum: sha1:0bd6909e931eeb3ab3a22dd98b9a51c67f1d0dfa
+ pristine_git_object: 90b55526b1a545847174a6e147f8bbe91908d22c
+ docs/components/shellcallstatus.mdx:
+ id: d5afd9396cf7
+ last_write_checksum: sha1:146c3774e082cd8ca9c11aa97d22ed9de7ee2091
+ pristine_git_object: 27aa179a9bb5ece860b84cd59185921a0e229516
+ docs/components/shellservertool.mdx:
+ id: 9cddc1b96409
+ last_write_checksum: sha1:ea5b02df81d67cbbba97e7b538f59024137db3e9
+ pristine_git_object: 0f55c3798873d7c5583fd06187cb7a9566bcc5b9
+ docs/components/shellservertoolconfig.mdx:
+ id: 5958cff854db
+ last_write_checksum: sha1:8b6bd8f0e38c574f64e0b13a333fd80fca807043
+ pristine_git_object: 5f24f1a8895e63426351e0bcb2d75fbffc06045b
+ docs/components/shellservertoolengine.mdx:
+ id: afea02c824ea
+ last_write_checksum: sha1:2c179cb81f553cad5ebf67e42230b011a4e01b7f
+ pristine_git_object: e5a091195d590f88c5e7afb9f7da62af4089b54e
+ docs/components/shellservertoolenvironment.mdx:
+ id: eec9a9690588
+ last_write_checksum: sha1:bcceae5f7d385a575fdab19210c7d2f4632459a9
+ pristine_git_object: c61d1889a25e5879664c12c6a7b07a57047684ac
+ docs/components/shellservertoolopenrouter.mdx:
+ id: 5c8be5a98197
+ last_write_checksum: sha1:7cfa877d119578daf4624ee04b361b87bf6bda0d
+ pristine_git_object: fa031486ac8634cc5fd84a6c001f1af01b1fab97
+ docs/components/shellservertoolopenroutertype.mdx:
+ id: c5ef6fc964a4
+ last_write_checksum: sha1:9c5463f6c610069752149860746ac4f92fd18d78
+ pristine_git_object: 9c46cc1009cef572e34719ee09eb7bb3afb52b49
+ docs/components/shellservertooltype.mdx:
+ id: b35cae5eacec
+ last_write_checksum: sha1:6865169ff4445d70d63c674092812b47236f213f
+ pristine_git_object: 1c0dd3c44cfce8b531e7d89e3db6b2787f060984
+ docs/components/size.mdx:
+ id: 21d53f42f1b5
+ last_write_checksum: sha1:543c159668e36a35b0d6f2357e4b9cfda44ce2f4
+ pristine_git_object: 707abe9890dce5df4f29843cb2b05cff5d9f280c
+ docs/components/sort.mdx:
+ id: 2423f4a05690
+ last_write_checksum: sha1:3443886b2481e8685a1c390530dfd7b763d9f237
+ pristine_git_object: b12340f49cd6973329dc305d88b7190bcb5c163b
+ docs/components/sourcecontent.mdx:
+ id: d211413b56ad
+ last_write_checksum: sha1:e9ec235c28760da429e35fea006321e7a697e5c4
+ pristine_git_object: 792f40542b86ce988d9257810717679468db825d
+ docs/components/sourcetype.mdx:
+ id: 77262fe83449
+ last_write_checksum: sha1:9f290862f832b501a96456226ff1f18431f74c50
+ pristine_git_object: 5d617cac37f7b364f4dd0640246e97c34351d824
+ docs/components/speechrequest.mdx:
+ id: 06e81b0433f6
+ last_write_checksum: sha1:0c8b9aae49356145aa960740cd88e620b511ec6c
+ pristine_git_object: e984d1fcbbc242679fbd51f142bd9de711833a50
+ docs/components/speechrequestprovider.mdx:
+ id: 4f78ed0394c4
+ last_write_checksum: sha1:99d94c6b01dbd3e875c213584f97c7dca545a6a9
+ pristine_git_object: 3a95d19f4a88dbd0c96cec7cf53d9264927a3c0d
+ docs/components/speed.mdx:
+ id: 4fd1f2823924
+ last_write_checksum: sha1:c6815d115b55b9409052f9d1d1d16bb1d7197763
+ pristine_git_object: f120cfef4c79cf5913a6c86ceb327c2b76e64016
+ docs/components/stance.mdx:
+ id: 6eb0f13ef2a1
+ last_write_checksum: sha1:64ee44794873236df5419e4f63e4963898ce6627
+ pristine_git_object: 3a93298ea9bc10f11e468d2eb33c2bd8e7e12f40
+ docs/components/stop.mdx:
+ id: 338b29992e2d
+ last_write_checksum: sha1:6f2df577e3400448f42393a716630ea5db75664d
+ pristine_git_object: 0f147f6e0e0f2a55ba73df5e4f5f76a47288bafd
+ docs/components/stopservertoolswhencondition.mdx:
+ id: 5fdb9a5c17ee
+ last_write_checksum: sha1:fd59b93bfdf655a268171fc4f35170cbffa72f47
+ pristine_git_object: 34d7863a7a5fe022dbfc6a534ae4e4d39bf8f54d
+ docs/components/stopservertoolswhenfinishreasonis.mdx:
+ id: edb3bdd7b6b4
+ last_write_checksum: sha1:4d7053fbed217b38a60a9f8d62a64a6bf0a7c07e
+ pristine_git_object: ef2f143f73407e97cc0903b038b73632f2864a45
+ docs/components/stopservertoolswhenfinishreasonistype.mdx:
+ id: 054aa7a9d125
+ last_write_checksum: sha1:07068ab51ebcf9b9461f38d1b12749a01020011e
+ pristine_git_object: e54b4fe34e5d05f8643f135b2ee43ad83878d35f
+ docs/components/stopservertoolswhenhastoolcall.mdx:
+ id: a0e65079ca2e
+ last_write_checksum: sha1:7255c505cafc4d9eda613cd38098c329fccd7aad
+ pristine_git_object: 890af332ed5920b4e3e0842a0d1b282fb67df137
+ docs/components/stopservertoolswhenhastoolcalltype.mdx:
+ id: d6881cc09fdf
+ last_write_checksum: sha1:f11f18e4ea5ba0d21b15367bcc6e15778aa533cf
+ pristine_git_object: 9b1a468cc36f433ba7fb2c0aa79650ba39f9523e
+ docs/components/stopservertoolswhenmaxcost.mdx:
+ id: 3d5f190bbd28
+ last_write_checksum: sha1:33b384261388809634674326d26e796b0b0cbf1b
+ pristine_git_object: 11ec52648be118f1d13af01e042dcfc2b602490f
+ docs/components/stopservertoolswhenmaxcosttype.mdx:
+ id: c2083926e9db
+ last_write_checksum: sha1:c9d19b690b52680526df5ecd9c401694923f70f4
+ pristine_git_object: 34953abc6de6ed5c79b5d279ac28eeeda9971919
+ docs/components/stopservertoolswhenmaxtokensused.mdx:
+ id: 9cdc05daefc1
+ last_write_checksum: sha1:c108a4ffa96be65bbf23cc325bbbcf72eda120d1
+ pristine_git_object: 33d4618b464d6a6fb0f663c9b36f1895a4cb6962
+ docs/components/stopservertoolswhenmaxtokensusedtype.mdx:
+ id: 09a14b719a59
+ last_write_checksum: sha1:4dcd3a9fd58efd9bcfdf81ccdb95c31f521e1512
+ pristine_git_object: 3818d9bfe79ed84f643f0c83acc52a9a6b17f843
+ docs/components/stopservertoolswhenstepcountis.mdx:
+ id: 5f6cb922fa59
+ last_write_checksum: sha1:06ef76461cdc29ae8aa8a5a6b6b258a185a610b9
+ pristine_git_object: 0544b66ff99affa86cd06afaba1ed7aea932e60a
+ docs/components/stopservertoolswhenstepcountistype.mdx:
+ id: 41af6b8d6e37
+ last_write_checksum: sha1:7eedd4d3ae889303ccd0d7d69ca2319d1741c51f
+ pristine_git_object: 709393f4936cb176e8a7ea5c9406b63512a4ca91
+ docs/components/storedprompttemplate.mdx:
+ id: 750a712bd91a
+ last_write_checksum: sha1:92052028678ac2d4b905b0f646976dc054288bf3
+ pristine_git_object: a9461bc3e848e3554a6101ec4c43988cf1239576
+ docs/components/streamevents.mdx:
+ id: e9baa20de483
+ last_write_checksum: sha1:6f55c435eea76405b2fd0e826d1fae0b3e6a3680
+ pristine_git_object: 149400c47139d6908783f1dd9cfd2700a211bfdf
+ docs/components/streameventsresponsecompleted.mdx:
+ id: f7c112325f05
+ last_write_checksum: sha1:968fdb7b3f668c102b94eb4069ea389b196afd1a
+ pristine_git_object: cd399518e63843cdca98e49ab9bfccc57166e43f
+ docs/components/streameventsresponsecompletedtype.mdx:
+ id: eade599586fb
+ last_write_checksum: sha1:bb7f8b52b58723b63784282fc23bff82a96ce715
+ pristine_git_object: 1854d017509749ea4056f864374f8609a60e2e3f
+ docs/components/streameventsresponsefailed.mdx:
+ id: 145096a2bdaf
+ last_write_checksum: sha1:7ddf65a8ebbd3a48f40b32b3f568ac3043d9ec44
+ pristine_git_object: 4c53cdcc151caefa0cd608d055e1c9af0d87f34f
+ docs/components/streameventsresponsefailedtype.mdx:
+ id: bb4fc1534206
+ last_write_checksum: sha1:904e6d2b6578234a38eecf125187a6c73dfbe312
+ pristine_git_object: cbec95a0f963603cdf9f877151b5a1c0fa916680
+ docs/components/streameventsresponseincomplete.mdx:
+ id: 4f76d6544571
+ last_write_checksum: sha1:4e52e8ba4f13ad9a1c7e312b4456e350f43f09b4
+ pristine_git_object: b493c3ea9d40ca4663ce4b3b26311575e5c18fbf
+ docs/components/streameventsresponseincompletetype.mdx:
+ id: 2c820f020fa7
+ last_write_checksum: sha1:51ddac4fa44dc865b81e9606911f8a056d2f1ed9
+ pristine_git_object: 1d886a31947bb57d58b175af018d271dd08efcdb
+ docs/components/streameventsresponseoutputitemadded.mdx:
+ id: 91fcf7f96bcb
+ last_write_checksum: sha1:0a5b3aa4666b452e5750a161b39e397133139785
+ pristine_git_object: 8121198a7c0b70e5c68c9b389d800d2a42aaaaec
+ docs/components/streameventsresponseoutputitemaddedtype.mdx:
+ id: "264576670340"
+ last_write_checksum: sha1:25052672d9b9ea1fe2562adbb4be939c3e251ad8
+ pristine_git_object: acf8df9004a0ca2f9398705fb8c8264e78342dfe
+ docs/components/streameventsresponseoutputitemdone.mdx:
+ id: b5ee1c8831c2
+ last_write_checksum: sha1:a52e215c4c85ac9e061d76342e5886d29a7e9786
+ pristine_git_object: 5d02fd8ea8745be6f1b4a217892f1697e00fc6bb
+ docs/components/streameventsresponseoutputitemdonetype.mdx:
+ id: 2fb7934965aa
+ last_write_checksum: sha1:a5fc58c7a48c29f682beaa9f30accf1a620dd670
+ pristine_git_object: 7671de0f55c2bd170b86ffb4682ad9e456a11522
+ docs/components/streamlogprob.mdx:
+ id: 67598a2734a4
+ last_write_checksum: sha1:b68b954c4c0233a97565785036243d8fd31870d1
+ pristine_git_object: 398824645fa342aa7ff2da54600d4a8759b83f0f
+ docs/components/streamlogprobtoplogprob.mdx:
+ id: 512e44d2c601
+ last_write_checksum: sha1:fa643d79e608574ac0210dbdebb293cae1d0af33
+ pristine_git_object: 972fa7f69f80fae904b94b8a10bbed2fa7bbf1c1
+ docs/components/sttinputaudio.mdx:
+ id: f4fc56cf1641
+ last_write_checksum: sha1:816a73a74abbff305ca8405d04870595d525b7bd
+ pristine_git_object: 70a2660b7c0bc35aed96124e1faa3852b3117054
+ docs/components/sttrequest.mdx:
+ id: 6a5e33cf6dbe
+ last_write_checksum: sha1:6fefcb5b5dd513388709f62acee929cde6bfb8ee
+ pristine_git_object: 198ca47de64cf983930c58cc618d3ef8c15d74a8
+ docs/components/sttrequestprovider.mdx:
+ id: d8b1bac8e745
+ last_write_checksum: sha1:e15551eddbe4c1f7c4515fa556d4873075512eea
+ pristine_git_object: 5eebff082dc885ed94ec0e6ceed8446c2ca104ae
+ docs/components/sttresponse.mdx:
+ id: a421f69065a0
+ last_write_checksum: sha1:3bf5f6d14c6e2586808ee5a0db3cd911af03ff7c
+ pristine_git_object: 9a61014568868a1f08581e5b7580feddaf379f8c
+ docs/components/sttusage.mdx:
+ id: 11bce3b257f6
+ last_write_checksum: sha1:a777bc390f180c1163612213633f2150a9566313
+ pristine_git_object: f0b56839c067ce29024888f689d379ed83f86ff4
+ docs/components/subagentnestedtool.mdx:
+ id: 12547a9efd5f
+ last_write_checksum: sha1:9141ce608f42d2c53e89f0e8e108252227a7366f
+ pristine_git_object: f8c149bf1aad26099c739360e137038a9e0e2295
+ docs/components/subagentreasoning.mdx:
+ id: 2e412fc3ecc2
+ last_write_checksum: sha1:095e527fa9f146290858b2c98b6a8ccc11755e37
+ pristine_git_object: 17ee212d76548c12b456eef6c7ee1e92330478d3
+ docs/components/subagentreasoningeffort.mdx:
+ id: cc922bbdeeeb
+ last_write_checksum: sha1:c41a98510c6e46da0cbdd0f1106d4595b8e63c22
+ pristine_git_object: 6ff0d51d2b5668291fb70f4cd5ad649fe3f4f6fc
+ docs/components/subagentservertoolconfig.mdx:
+ id: f7fa49016554
+ last_write_checksum: sha1:ca1963d4e1fdf93899b06c47d3b82662e4cd5a45
+ pristine_git_object: 3ce20c0c2fe0e438349c42e9edf60f2047ae976a
+ docs/components/subagentservertoolopenrouter.mdx:
+ id: 8ede88c6400a
+ last_write_checksum: sha1:2c6d5bf4755ade31c622cd4a4658d874e77042fc
+ pristine_git_object: c50f5bf89454fc4ce29845ba8a16cc94c9858f19
+ docs/components/subagentservertoolopenroutertype.mdx:
+ id: 36a519fbf209
+ last_write_checksum: sha1:14f4bf5f550f0dfddb8bd950e000ed431a5470e9
+ pristine_git_object: a93cd73684c2a51b27f8a1e13a09f980a676567e
+ docs/components/supportedaspectratio.mdx:
+ id: 236a2016da06
+ last_write_checksum: sha1:638d1fbeb7e634fd924c4c1c92a0cc69f5291635
+ pristine_git_object: ae925e49dfa250f27a1376567ed705c123aef3a0
+ docs/components/supportedframeimage.mdx:
+ id: f34dfb27d78f
+ last_write_checksum: sha1:a979de72a67038af692d17cdb379b1d58e7ad0c8
+ pristine_git_object: 64a19c185569b50eb0a3363b472c1c28807493f2
+ docs/components/supportedresolution.mdx:
+ id: 4dab32379c4d
+ last_write_checksum: sha1:9b1c448644f808e8a5c888108c174574a1a31fea
+ pristine_git_object: ea274d2a7ef04a6bb8c56105e2274d962081246c
+ docs/components/supportedsize.mdx:
+ id: c38f709222bb
+ last_write_checksum: sha1:8b721222c2bd5b4de7f6fa84b909ffe145e06536
+ pristine_git_object: e221cb32a5810c96165b8e0a5e6a955738ee275f
+ docs/components/syntax.mdx:
+ id: 0e7a97e89dd7
+ last_write_checksum: sha1:f3317e2b7efd9ed8d3317626429b481c39bd56f8
+ pristine_git_object: 62827a82d782671ed82209a07c3e5fe45d0c8392
+ docs/components/system.mdx:
+ id: c12fddb7dc3f
+ last_write_checksum: sha1:fe84fa30543a8883abdbcf4fb6ef4d7936264576
+ pristine_git_object: dbe433a69894078703441c765cecb0fe9508f44f
+ docs/components/taskbudget.mdx:
+ id: d8ef865b7ef8
+ last_write_checksum: sha1:42460b389a954ffdabeab826d86a568932bc5836
+ pristine_git_object: c98814d6f28a69a0e97fcf7cb57a55710bdc2513
+ docs/components/taskclassificationitem.mdx:
+ id: aeac8f9fc6ef
+ last_write_checksum: sha1:4b11a69d3431763ab8893ca3cd300fad6c50cc2c
+ pristine_git_object: 905d90909e4ca1ebf23788e908547d317c45b498
+ docs/components/taskclassificationmacrocategory.mdx:
+ id: d8faeb1866eb
+ last_write_checksum: sha1:3fdede5ad55103f7bc8285923ae59c5504297f90
+ pristine_git_object: 1f45abf4cf3a64bfee61d75bb37266d2810b25d5
+ docs/components/taskclassificationmodel.mdx:
+ id: d353dffe67fe
+ last_write_checksum: sha1:687cae9c2faeaf7a78369c8cb5fa5f8d810e7cc8
+ pristine_git_object: 137c9bc4a2d64d9a598f678d91b9df9166f5bfcd
+ docs/components/taskclassificationresponse.mdx:
+ id: 73f2878bc0b7
+ last_write_checksum: sha1:47dabfd5f462102b1da0123a49ce2da6da2b2ef5
+ pristine_git_object: 40e0bc7f5d2839fd0bf51cba48f1748216808aac
+ docs/components/taskclassificationresponsedata.mdx:
+ id: 1acdab4dc53a
+ last_write_checksum: sha1:0d724edd4627973eb325289ad9411c6260f9540f
+ pristine_git_object: a22f20ac9d5c3b1c2c8bd92290c53cc23bf98df3
+ docs/components/textdeltaevent.mdx:
+ id: 6badc3960bcc
+ last_write_checksum: sha1:f75988b1ac07ac21c455d798bdcdf57c3235cdd4
+ pristine_git_object: 8214536b8bbe7bf9494b6dc989234abc09a39c57
+ docs/components/textdeltaeventtype.mdx:
+ id: 4b1bcd9fb2a6
+ last_write_checksum: sha1:4cb8d245bf1c46d62a04df81d600676ca73fd2fd
+ pristine_git_object: 13ece4933e2ed3a37004e9ad6dfdb39f3de2e08a
+ docs/components/textdoneevent.mdx:
+ id: 3b22c48d308e
+ last_write_checksum: sha1:c084bb4235cf09d1b76f7081eb1fa1373bd491ed
+ pristine_git_object: d2d166000dc6596a6d5b0f69d05319c107496096
+ docs/components/textdoneeventtype.mdx:
+ id: bb12ccbbc7d6
+ last_write_checksum: sha1:6ca22dace0fb5e7dd05b700d6e32d3ed807df1f1
+ pristine_git_object: ce3ac0ebdc75725ec2ab945251c819a0144353c3
+ docs/components/textextendedconfig.mdx:
+ id: 061069626d8c
+ last_write_checksum: sha1:c2fc0a4e7fe5c8817e26afe1a646e3e9593d3a86
+ pristine_git_object: 04c08c1d74e51e7902360962f7bda67b70746feb
+ docs/components/thinking.mdx:
+ id: 8d7292f65441
+ last_write_checksum: sha1:747fc54885c54d140e7c398d5fd5de79606ce248
+ pristine_git_object: 2a631dc98969c3dd18eff57cbf4d630ce39dfe53
+ docs/components/thinkingadaptive.mdx:
+ id: d3e5fe2a4135
+ last_write_checksum: sha1:4582d6ef23b1e21fba755de8f75cd6d49675fd94
+ pristine_git_object: 970ce43cb7364b35d06aa17346d9396e95f405ec
+ docs/components/thinkingdisabled.mdx:
+ id: cf4dce085103
+ last_write_checksum: sha1:0d5c4141cae38ef701eb469c9cdb838c3737420f
+ pristine_git_object: ef2829f67a7bb69b05b3322713c87a46d5e725cb
+ docs/components/thinkingenabled.mdx:
+ id: 453ea2c27cab
+ last_write_checksum: sha1:ad555fb37bfcdb7e7ac537df4de7e028c71aed00
+ pristine_git_object: 533ba7c8fa879e91e3134d65f5f0282aca3ba170
+ docs/components/timings.mdx:
+ id: f8f7eb6e6313
+ last_write_checksum: sha1:4061554783746bdb572dc5eb4ae678a677fc6c5e
+ pristine_git_object: 8d52bfaecf3fa301b6e9466ed356adb0b9202085
+ docs/components/tokenizer.mdx:
+ id: ef12023b8d33
+ last_write_checksum: sha1:207a75b5e4a8301a6cdbd39605c0f398bd13e305
+ pristine_git_object: 54a7627079b16a50865cf6f2224abe36870c95fa
+ docs/components/tooladvisor20260301.mdx:
+ id: df2858dddd07
+ last_write_checksum: sha1:94a6e30c4bc7ff7771b99d3f09c87604423b2847
+ pristine_git_object: ee1f63bc170b35e5fb8da3390818160a2b4b93c6
+ docs/components/toolbash20250124.mdx:
+ id: acc36fba0c55
+ last_write_checksum: sha1:b0e3ad180f48dba955ae20481ae6ef55ace6b18f
+ pristine_git_object: d9f17ef27ea42b2251c85ffdd230af45f7293c75
+ docs/components/toolcallstatus.mdx:
+ id: e79e5ffbe798
+ last_write_checksum: sha1:338789050d562f0ac596d6a94783307e27a634b2
+ pristine_git_object: 71119be6746c87da4f46f192496bd269cd98128e
+ docs/components/toolchoice.mdx:
+ id: 332ea8495fd5
+ last_write_checksum: sha1:b65725095b022d7262f293076866841ec32f3c68
+ pristine_git_object: 4a4be403a109154164a55c4a1d2b05f82f5b97bc
+ docs/components/toolchoiceallowed.mdx:
+ id: 2e62b54eb471
+ last_write_checksum: sha1:a8c96649c4ba3e5cef672c74974fb5cb5aafc99b
+ pristine_git_object: b33a149ed34b20fc275c5d77f836e14b8b490d5c
+ docs/components/toolchoiceallowedtype.mdx:
+ id: bef41aac6932
+ last_write_checksum: sha1:00e69b23722c812ea28a000ba48fd6ae140fcc1d
+ pristine_git_object: 898ee05034c185fae78fd71f8e5d402480c6962b
+ docs/components/toolchoiceany.mdx:
+ id: 4af3ccbde819
+ last_write_checksum: sha1:0111f4cdaf62f04d616822ec48e936314e52cdf0
+ pristine_git_object: 444b701550ffe69731ce410ba95a31d68261d302
+ docs/components/toolchoiceauto.mdx:
+ id: dfdf03af8bec
+ last_write_checksum: sha1:3d6faf08e2c0b73a86dd5b6e01214b40f375e18c
+ pristine_git_object: 8759b2ff57e6e53cf04a01a02f7b7970d9e2c7f0
+ docs/components/toolchoicenone.mdx:
+ id: a65f80fb91da
+ last_write_checksum: sha1:561f5d9c0cf863b470e54961fb76a80dd96268a6
+ pristine_git_object: a042d8988f10a8cc18359547049853a409ad116b
+ docs/components/toolchoicetool.mdx:
+ id: 909ad21233d2
+ last_write_checksum: sha1:1d54c7dc7ebecdc917f17ec7a49c60e66b2c7bde
+ pristine_git_object: 08139fd78887214b913d7afb2c34f098bdc73b22
+ docs/components/toolchoicetypeauto.mdx:
+ id: b0c6cb5d3fcb
+ last_write_checksum: sha1:e86baaa3d57e24bbf7b4501888ddd9652aeaa89e
+ pristine_git_object: 6817216b64de42e834ab68a072287701e621daa8
+ docs/components/toolcustom.mdx:
+ id: b3ea2dbc7af5
+ last_write_checksum: sha1:dd0734eb86cbbba753632268613a2f2ebc8e8f78
+ pristine_git_object: 57073f649edd84b26f2395c46aef55c86e31ed4c
+ docs/components/tooltexteditor20250124.mdx:
+ id: 58d2a6f35f9f
+ last_write_checksum: sha1:bbc36d5c8d48b8971fed82553489759ca2379c0d
+ pristine_git_object: 0fe06a930a6a67a5a007185f892422f232389d3a
+ docs/components/tooltypecustom.mdx:
+ id: ac3c7f5f5fa6
+ last_write_checksum: sha1:bfbecb3b4e70cb8a4aa0379246f4ffbaae71b341
+ pristine_git_object: f5ff9bfa009e34e0326ff7ef88e82082e54b20cb
+ docs/components/tooltypeephemeral.mdx:
+ id: b005ae7a4f69
+ last_write_checksum: sha1:cb0079eb8c5809a9f76abb6349ad8a23e7f0c8f0
+ pristine_git_object: 48e6f8afc2a41ccac4be220dd5d5d475a4d36b71
+ docs/components/toolwebsearch20250305.mdx:
+ id: e583eb0b3bd1
+ last_write_checksum: sha1:59297ba6e78d528a5a6cc0bcbefd1301c21af308
+ pristine_git_object: 33510135de4236e72077c4acb6c8a8c65fe5f647
+ docs/components/toolwebsearch20260209.mdx:
+ id: dfc99c1c297c
+ last_write_checksum: sha1:e3adde8067e2e5e5504165e7b8ebf1ca743d8352
+ pristine_git_object: a70393e56b803a455f0ea3e82d9270ee84fed5fe
+ docs/components/toomanyrequestsresponseerrordata.mdx:
+ id: 282b92f982c7
+ last_write_checksum: sha1:976995e37e897805df9f3f50c0aae39e41447822
+ pristine_git_object: 09697e35761a40ad45f0715e05d25a9f57d30b31
+ docs/components/topproviderinfo.mdx:
+ id: 869c6745d5f7
+ last_write_checksum: sha1:6e10b9871f7eb7bf986ef79542e2eaf956a24cc1
+ pristine_git_object: 76323666a17efddd3cad64a4803afe612d375e1c
+ docs/components/tournamentstats.mdx:
+ id: 4e7cd43c4bf4
+ last_write_checksum: sha1:fcf38c7852517cc1ca206d8252d6965a3a6aef73
+ pristine_git_object: bf6cd57c58962523bd7ba842c71b39305a446bbd
+ docs/components/traceconfig.mdx:
+ id: 61aafb246ddf
+ last_write_checksum: sha1:22a923aff3d5ee121860116be8f5ae79dda77aa0
+ pristine_git_object: faeac4da1a7bbf70947da8fcf38246bba718b149
+ docs/components/trigger.mdx:
+ id: a19ce9db8778
+ last_write_checksum: sha1:b5b28ed637f381b8778df75d590a6845b901adb7
+ pristine_git_object: 2c9910c80c69478dae82130d15fe5ea79ed2911c
+ docs/components/triggerinputtokens.mdx:
+ id: 976c883cc61f
+ last_write_checksum: sha1:08a2c96b4935b69f70b0b324351f93dc57df4c16
+ pristine_git_object: 45784f009f3b4278413cbded0f51ca9f0888bcb3
+ docs/components/truncation.mdx:
+ id: d338e8ec18bd
+ last_write_checksum: sha1:c8bc50c016758d48320643ce2965fedba9b1e3f1
+ pristine_git_object: 6b46b4c151e73cf9efeb4bcbfb0343258a0ed9d5
+ docs/components/type.mdx:
+ id: d15dd4f8a580
+ last_write_checksum: sha1:9ab10f9a767e94d7da3f931b62a4f5bc36da9e4c
+ pristine_git_object: 496e8a8d4ba6503aa036e780f6aac53e5e049df4
+ docs/components/typeadaptive.mdx:
+ id: ed021c787cd5
+ last_write_checksum: sha1:bb6b3619ca5b6877ddd66dda0a2cb799c989ad33
+ pristine_git_object: 01eae6d76ebf42187c1dcbeaa43288f5df94e8cb
+ docs/components/typeadvisor20260301.mdx:
+ id: 6b8fbaf1abe6
+ last_write_checksum: sha1:a8d7df683cc00996868f4a8f16d43f5171f9786c
+ pristine_git_object: 92220371000c3ec2476ecbeaccc4f095d25a997e
+ docs/components/typeany.mdx:
+ id: b3bd6b0de96e
+ last_write_checksum: sha1:7d4c65b6740216e057d36ea498509249d9c97354
+ pristine_git_object: 658b179115ff4db7f09c792544b5fae73a480520
+ docs/components/typebash20250124.mdx:
+ id: 0f1fed4892ca
+ last_write_checksum: sha1:b57f67ff665ddf959a9078d1fcbd2b1eb9df7a6d
+ pristine_git_object: 02338a09349f6a610ed5313dd972a509b088b518
+ docs/components/typeclearthinking20251015.mdx:
+ id: 67f48aa5899b
+ last_write_checksum: sha1:14110e0a9ffa2fd935e6d0cc8a0ab17021bf8114
+ pristine_git_object: 1af8cc452c85ba10d50669082bfe65e5d2ed965d
+ docs/components/typecleartooluses20250919.mdx:
+ id: bb64f7361826
+ last_write_checksum: sha1:20633eca21d3116ae57aedad18eca64e80141573
+ pristine_git_object: 5be064a622f713124fcf746297a2dcdd76850088
+ docs/components/typecodeinterpreter.mdx:
+ id: c93f61b0fed2
+ last_write_checksum: sha1:13f5740aad556c24c2e9484da8e67e15b0d4d085
+ pristine_git_object: 6af79caed7c31fa5750415ace82eafd7a2ad53c2
+ docs/components/typecodeinterpretercall.mdx:
+ id: 9bad1b75289c
+ last_write_checksum: sha1:88de669f44eb1fb08ce07a972c635742fd80f384
+ pristine_git_object: 374132b2a749b431e0860c9c0a7135ec61878ca6
+ docs/components/typecompact20260112.mdx:
+ id: 6afc200110eb
+ last_write_checksum: sha1:67b122fb7d678523303b419575d85075c6cf260a
+ pristine_git_object: 8c90b7c0c4ccd514fd2b06a1e10c9879298978ef
+ docs/components/typedisabled.mdx:
+ id: 38f9c06b7850
+ last_write_checksum: sha1:708a451e2d389c0c40fed9aa44a6186837103a4e
+ pristine_git_object: 65c2b6da67afde9dcf0cddf87d95465bafb054bc
+ docs/components/typedocument.mdx:
+ id: fa9ad2eb2436
+ last_write_checksum: sha1:fe8fa4d17512f8263bea11e1e294e6079c223312
+ pristine_git_object: 328ae7fcb9399517ec9cdaebdb94c435649922e2
+ docs/components/typeenabled.mdx:
+ id: 2107f66972cb
+ last_write_checksum: sha1:47c1d819d31519b3d19a87f3389786d5c23206d4
+ pristine_git_object: 52ed7b166a48116cbd5a6f950a50f3f180c62a84
+ docs/components/typeexec.mdx:
+ id: bdffae9225e9
+ last_write_checksum: sha1:adcee4778c3a095280c7e3541c1bfec21eba0139
+ pristine_git_object: f35d6080ae445ba9cfbfd2a2bd75cdf3958a9f5f
+ docs/components/typeexit.mdx:
+ id: 231bf2edc972
+ last_write_checksum: sha1:bd9c1dad3d5a571e77ca43b230885c8cf8ea740a
+ pristine_git_object: a1b9dbb3db0e85d68fee022a5d9626d9660f9b4b
+ docs/components/typefilesearch.mdx:
+ id: 26f10940b506
+ last_write_checksum: sha1:08bc0328c13bb2364c99dc9094f0ae2eba46b48c
+ pristine_git_object: a3f18c8a20d24c2372a5255e23b19fc026a027f4
+ docs/components/typefindinpage.mdx:
+ id: de31fbca93d1
+ last_write_checksum: sha1:174ffebefe62a92ce23b56292c7bc0c70f1324a6
+ pristine_git_object: e56d1f3c1a0b22cef242276d176d47894c4b848a
+ docs/components/typelocalshellcall.mdx:
+ id: 5bf492bd8ad4
+ last_write_checksum: sha1:a66abfbde09ed71dfa93add4862e64b3b844d31f
+ pristine_git_object: 0af8acd63592cc7211fb13ed0ce921243b4f3c23
+ docs/components/typelogs.mdx:
+ id: 9b6be157ecfe
+ last_write_checksum: sha1:da3b6998aa72148cfe7ff2bbef5ab6a438797784
+ pristine_git_object: accf2ed99ce1962c6d1df51e0950841f3e41c16e
+ docs/components/typenone.mdx:
+ id: 1fbbd27c03b6
+ last_write_checksum: sha1:003d0b57065e35457a5f365aec76783fd735125c
+ pristine_git_object: 797eb174cde7ef02e12c4379cb24208c1406bef2
+ docs/components/typeopenpage.mdx:
+ id: 89a2b0de24a1
+ last_write_checksum: sha1:1cc4fa33245f661d60f3f84b69fd7e520efc916f
+ pristine_git_object: e7e1d470ec3543c8c3a962bf9067d0b2f9e95f7f
+ docs/components/typeredactedthinking.mdx:
+ id: 04adae6db206
+ last_write_checksum: sha1:3cbe8cf0cc55f1f67b552fa99c959e6d8b3ef577
+ pristine_git_object: c02fa818a7b8c748126d1979eaf46d9f579b6a33
+ docs/components/typeservertooluse.mdx:
+ id: 1247ec91e13e
+ last_write_checksum: sha1:426dc2920239071f856910e2e9b69493dd968f7a
+ pristine_git_object: 9c498fcc2aec9396db450b8ccf4296ac036af0a0
+ docs/components/typetexteditor20250124.mdx:
+ id: 6104a1c13bf2
+ last_write_checksum: sha1:041007e5b9c7d4ef048d0c380cdadedad4c6066e
+ pristine_git_object: 21cc14ae46b99547e0304a43c3f8b0333ed624f5
+ docs/components/typethinking.mdx:
+ id: f2c53e514069
+ last_write_checksum: sha1:aa074bdf3a3338e784c15b0315b124b360e9c05a
+ pristine_git_object: d2a690369a1e99d208acfd286221e27af361f382
+ docs/components/typetimeout.mdx:
+ id: 719dbf6b334c
+ last_write_checksum: sha1:97c8ec16454e0abc9eb1e4dc271e8f4736bef54c
+ pristine_git_object: 8a9237d79d973b552b8a32c245ce7f3ea9d66a7f
+ docs/components/typetokens.mdx:
+ id: 35a43c3706a1
+ last_write_checksum: sha1:237cb60d1b8ccb293e0e1d911d2010a02d17cb5f
+ pristine_git_object: b98ea9da912f1500a290c167ff26c705b52805f1
+ docs/components/typetool.mdx:
+ id: f86dd3b2e318
+ last_write_checksum: sha1:315ca10eda81bbf32e8d2e7d695598e09d80bfee
+ pristine_git_object: 4cef3b748c6ce9e9df0f407e2e4b4aca0c784e87
+ docs/components/typetoolreference.mdx:
+ id: d3d5710fdc90
+ last_write_checksum: sha1:c77fac65490534fec1463bcf75aa3252ddf9a9c2
+ pristine_git_object: ac0f247ea9664d3c815bd094fa8cf570c62726e6
+ docs/components/typetoolresult.mdx:
+ id: 07ae3f30e4a2
+ last_write_checksum: sha1:aa2931bc195ddc15bd18d9fac6948f8f24bfbe08
+ pristine_git_object: e7702ba4121c757b4f57d552a4f608bd4636e7b5
+ docs/components/typetooluse.mdx:
+ id: fd677e8ed9eb
+ last_write_checksum: sha1:4ca40aedbae56b068f0b2e4b06a9f885c0411a6e
+ pristine_git_object: 6e4df39fe15fe8783509a79bae43d19783689ca3
+ docs/components/typewebsearch20250305.mdx:
+ id: c5cd64905a32
+ last_write_checksum: sha1:70d29a41edfb246a4e50bf98bfca9df61809d075
+ pristine_git_object: 0eb55d9bee04b297fb97d45ca73536d3878481ce
+ docs/components/typewebsearch20260209.mdx:
+ id: e9da52a275fb
+ last_write_checksum: sha1:0199b41c05d93e272bc16f810d6a4c5915a0f05b
+ pristine_git_object: f9c864e42773897569d9dda09658306717fbb5cd
+ docs/components/typewebsearchcall.mdx:
+ id: f106073e7ccc
+ last_write_checksum: sha1:49a2fbfc2f23e1b0d5a0b06c3c83c1814faa4edf
+ pristine_git_object: 981349ba4f68bd68106c5604de599506315b3bdd
+ docs/components/typewebsearchtoolresult.mdx:
+ id: b8f83f24a5df
+ last_write_checksum: sha1:b8f03e26067f1299b775d15600559f6654733f3f
+ pristine_git_object: 1d9df7e9f1be8b0821a6e14f789438f9f89faed3
+ docs/components/typewebsearchtoolresulterror.mdx:
+ id: 13d925cf7789
+ last_write_checksum: sha1:5e9992e7fee86890fe8e1033f0b6bbbfc93e5776
+ pristine_git_object: ff44734cf33cb8a24c20bbfb96dec9ef2ac504e9
+ docs/components/unauthorizedresponseerrordata.mdx:
+ id: 74e10dac821b
+ last_write_checksum: sha1:5d05ecd86d6a093c6008c5fc80ff1d4093faf67e
+ pristine_git_object: 2b412cd70e911b8c1965a0197f6a5d6fe19dcaae
+ docs/components/unifiedbenchmarkpricing.mdx:
+ id: 65fd7d529047
+ last_write_checksum: sha1:a79219ea4353fe6838ca5ad1350e2da1abeb33bb
+ pristine_git_object: 322906a434abef54a1d02cf8700c272fa6e9c58b
+ docs/components/unifiedbenchmarksaaitem.mdx:
+ id: 17da67bd22b0
+ last_write_checksum: sha1:aebc8d03dec8e9c85c7aa87fe8547334297e504e
+ pristine_git_object: 0a22591fe6b7a32694c2c92165278da4f3473409
+ docs/components/unifiedbenchmarksaaitemsource.mdx:
+ id: 181f24319290
+ last_write_checksum: sha1:6b6b0883911fb085166e280f6f473337bf421956
+ pristine_git_object: cf9d11cd0bbe2ca2fba8ce44b85d29ed6b32f78e
+ docs/components/unifiedbenchmarksdaitem.mdx:
+ id: dcd6a798328a
+ last_write_checksum: sha1:92c1b62516a4320315d6f886a2714eb47f826f75
+ pristine_git_object: 95f66134be8fe2b94f9ba521e6894e2d0fc236e8
+ docs/components/unifiedbenchmarksdaitemsource.mdx:
+ id: 6b5899e6a2c9
+ last_write_checksum: sha1:d77003c307e4c82a0e521a02068a1217d37aa47f
+ pristine_git_object: a194185c8fda7c1377041151e57baf12b904ebfc
+ docs/components/unifiedbenchmarksmeta.mdx:
+ id: 7876023186a1
+ last_write_checksum: sha1:a261008f3aad806ce06a1caf8bb9ca2df7a520f1
+ pristine_git_object: ea52df6e00e46b6b3b21736ac5cf471f2965d1fb
+ docs/components/unifiedbenchmarksmetasource.mdx:
+ id: c6bc112e85a2
+ last_write_checksum: sha1:0ab7afdb2f104c771c5850e05e45f3d116da9704
+ pristine_git_object: 1bcb8e017d90d592e5838ad6c09c8bf67cf6d8f0
+ docs/components/unifiedbenchmarksmetaversion.mdx:
+ id: 994afa2e9d2c
+ last_write_checksum: sha1:d113d8b5aedeecb78fccd3451e58b42428906a0d
+ pristine_git_object: 23ef4c9a45aea5d918e554f7868f772429ef364c
+ docs/components/unifiedbenchmarksresponse.mdx:
+ id: 713d03de2410
+ last_write_checksum: sha1:b4145e36aca044cbbf6ee55583979669159d6da0
+ pristine_git_object: ee48e645716b05d6473f5ba0199fb84264a44d12
+ docs/components/unifiedbenchmarksresponsedata.mdx:
+ id: fd372e1c57e8
+ last_write_checksum: sha1:6065c5a9cec604480837b4018fe94ef1cb6d4b99
+ pristine_git_object: eb8045de9612900dea847a76e24965029dad03f4
+ docs/components/uniqueinsight.mdx:
+ id: 02fd71bcb47a
+ last_write_checksum: sha1:793e90c78ab450e36533710d3fad6f4a75432e86
+ pristine_git_object: 2dd2e0e312eae3044e8aa6ecb77210a8a9c9fa82
+ docs/components/unit.mdx:
+ id: 0bdb46a190ad
+ last_write_checksum: sha1:e0d1ce7e9a1a44e61886cc706c99f412c4c31d12
+ pristine_git_object: 83f68ad45191f3772161e6e74b618370f82b4df4
+ docs/components/unprocessableentityresponseerrordata.mdx:
+ id: 7171837ab497
+ last_write_checksum: sha1:47473559198e24e72ead5fd9ae6107d1c859ae6d
+ pristine_git_object: ef85de0e3899f1f4855e4a3dd7d7bf9df5157937
+ docs/components/updatebyokkeyrequest.mdx:
+ id: db0862ec6814
+ last_write_checksum: sha1:455ef2d62d3a47dc683e611a1e5b9943173f41d0
+ pristine_git_object: fcdb0bb2f50a9c63912e5dd911039e1f5d3b05a8
+ docs/components/updatebyokkeyresponse.mdx:
+ id: 9b4490c340b4
+ last_write_checksum: sha1:e80cd233e3de3358ea447fc32844fabb9ba121bf
+ pristine_git_object: 335feb18256a83af9c732525307d1432a718f3a1
+ docs/components/updateguardrailrequest.mdx:
+ id: 450912b18db6
+ last_write_checksum: sha1:7f4d97114ddca06c474d4a47ea585d6119d7ec89
+ pristine_git_object: 6127914dd10312a4fc00e387c9af8d2d2f1a7150
+ docs/components/updateguardrailresponse.mdx:
+ id: e00dc0a0c6e0
+ last_write_checksum: sha1:528476cf3a4f15900eb0f4d293498450f0b5079a
+ pristine_git_object: 9c95861831e9f31f54efd7d48d8f48eece10e369
+ docs/components/updateobservabilitydestinationrequest.mdx:
+ id: b54091567003
+ last_write_checksum: sha1:a49d260a3c096efeeda18b7f204ed6336c25aed4
+ pristine_git_object: 1a6d04101d79b08a5993638272a569695d6151c2
+ docs/components/updateobservabilitydestinationresponse.mdx:
+ id: be9661c3676e
+ last_write_checksum: sha1:c8fde493ab2c8285b0a800795e6106f2dbf3a63f
+ pristine_git_object: c7aba4370fef4f13a7640e16f1a5404bc640f78c
+ docs/components/updateworkspacerequest.mdx:
+ id: 9870d016bf28
+ last_write_checksum: sha1:b798c6d985770a44b3db121bb2aa6cd983ad5387
+ pristine_git_object: f7e959179cb3c4d74ad355125a253b88ef4819f2
+ docs/components/updateworkspaceresponse.mdx:
+ id: b9779063a1b3
+ last_write_checksum: sha1:729daaa0b8c1fb2d1857da765792f722f482e436
+ pristine_git_object: 28f14c82933639dfc0375c255a91fa0967881dae
+ docs/components/upsertworkspacebudgetrequest.mdx:
+ id: fd79f23696a1
+ last_write_checksum: sha1:9414b2f4067e9030768971e46b9d72b404fcd134
+ pristine_git_object: ce9dd9f2d5cfb7d3aaabfa58687e4562ca7c0ed4
+ docs/components/upsertworkspacebudgetresponse.mdx:
+ id: c06f43776223
+ last_write_checksum: sha1:0ebd781f97d45b2b85b8bbc639f369a2d3bfed2b
+ pristine_git_object: 6c975bc498c17b2e732e06eb447c7001bc42a1dc
+ docs/components/urlcitation.mdx:
+ id: 30f4b4a19fd8
+ last_write_checksum: sha1:bb9b6ff886f2ec6e039985276dcd724c08e19ac3
+ pristine_git_object: 0386b33d888adf79e39cf88370468cc0dd874ea7
+ docs/components/urlcitationtype.mdx:
+ id: 65cf0df11d05
+ last_write_checksum: sha1:e0462d6e3d3b4d7772f765fd19b8c58f16d229b5
+ pristine_git_object: c5fe94ebc3791026c16a9636c7d6077773297e19
+ docs/components/usage.mdx:
+ id: d84b29a6ea8c
+ last_write_checksum: sha1:e9adc633c75f1e77e76fe32545662cc27c6304fc
+ pristine_git_object: c400fc42927885901a17ce82529b39c2cdadce6e
+ docs/components/usagecostdetails.mdx:
+ id: 95d8a52fead9
+ last_write_checksum: sha1:d8b2597a2921b79c43fd30173a8c395cd60584b2
+ pristine_git_object: 646988e4def5b952edb718a68bc8c85b39c4606e
+ docs/components/userlocation.mdx:
+ id: d197ccf2b36c
+ last_write_checksum: sha1:c7078ea2cd00c001dcef6ce68c790b9d3d718e2b
+ pristine_git_object: 2b1814dbe5bc4583007dd638b6a4a9c08c0c81ce
+ docs/components/variables.mdx:
+ id: 3312b9777716
+ last_write_checksum: sha1:6ba9bb63173376b0dcb7ac22b859bfef3e3820eb
+ pristine_git_object: cd3d46d3af459e7b95090a8e74e22eed448b3fdd
+ docs/components/verbosity.mdx:
+ id: 8dacec626dda
+ last_write_checksum: sha1:77a815930df06dc0c0534ad059e49368be46d94d
+ pristine_git_object: 7dedd74d072b742dc84e8afafa3e2ae47dbded10
+ docs/components/videogenerationrequest.mdx:
+ id: b92ddbd15ee4
+ last_write_checksum: sha1:743e7c0116c988679d5d332d30e61835350b7cda
+ pristine_git_object: c624ac69002c061575e6bae9f4a1616a9be4058a
+ docs/components/videogenerationrequestaspectratio.mdx:
+ id: c14859c0d8c3
+ last_write_checksum: sha1:4ad4aae702af1cd2ddee7b443c35c9b3df6824e8
+ pristine_git_object: 67f56887bb4758559189e3e9e6123dff9a38df81
+ docs/components/videogenerationrequestoptions.mdx:
+ id: 1d67160e7e7a
+ last_write_checksum: sha1:8f1c4b3b0a67cce0aad25ef560ca635a929f8784
+ pristine_git_object: f3d6474edb250bfaecbdb3a1fa9c930e9587a46b
+ docs/components/videogenerationrequestprovider.mdx:
+ id: d6424dd5de9d
+ last_write_checksum: sha1:72aa46a3335220b579db56574ea179d150dbe2b6
+ pristine_git_object: 63d009579e3822e439042152c3062db52e622fcf
+ docs/components/videogenerationrequestresolution.mdx:
+ id: b4287dc60239
+ last_write_checksum: sha1:a3f036ac1637a950408f90bec2f628469b9efdab
+ pristine_git_object: 0b860ff3d717d0ec86fd0cf42a557cd7b0180d32
+ docs/components/videogenerationresponse.mdx:
+ id: 3a932213188e
+ last_write_checksum: sha1:7d170bdf13476392c6c7e2a32c99ca7c1e17d436
+ pristine_git_object: dd365941c8213459966629c69bbdd8134635b823
+ docs/components/videogenerationresponsestatus.mdx:
+ id: 637442fde0ff
+ last_write_checksum: sha1:9368ca45d569e511e5faf18118efd7e3341473a7
+ pristine_git_object: 5e612dc4b39b41e7d80b4cfc6942d730e650941b
+ docs/components/videogenerationusage.mdx:
+ id: 839f5b3e2353
+ last_write_checksum: sha1:2fe8379d9ebf459b5dc44510ff6c5473be4c1e70
+ pristine_git_object: 1916659065ee957050e522c051899e9e0c5b8d7b
+ docs/components/videomodel.mdx:
+ id: 7477360941c9
+ last_write_checksum: sha1:cfb8b48981d4b96121011a288d965e5c1fff08fd
+ pristine_git_object: ad8a6c3f8e9de205349a5a33cead5e355e5b9228
+ docs/components/videomodelslistresponse.mdx:
+ id: da08c4cf70a1
+ last_write_checksum: sha1:a2a799c8769d23a55955a85823ec6e59a1c13b68
+ pristine_git_object: 9199c3b3d19d8ada88382fa0d2cb2f0277ef3a8e
+ docs/components/videourl.mdx:
+ id: d08b4554c5c0
+ last_write_checksum: sha1:7ae6976a0228f2bc89c4378faa7c2126b8477748
+ pristine_git_object: 7cbbaeaa059c9bd9181ce53fa86817b66f675a0f
+ docs/components/webfetchengineenum.mdx:
+ id: 451a8be71be6
+ last_write_checksum: sha1:598232963ff36f262ad7932e30e7fc89e495f910
+ pristine_git_object: ee3957801804c250c113d79eedc6a389e325223f
+ docs/components/webfetchplugin.mdx:
+ id: 3bf8d3d97bb1
+ last_write_checksum: sha1:e9bf63c441692594c407f9a3b4a68ab0d8a5d89b
+ pristine_git_object: f46512871f0085ea139c9c6df52876129ede63b2
+ docs/components/webfetchpluginid.mdx:
+ id: 1ccbef91b255
+ last_write_checksum: sha1:1925438961b3a21a8ca964705e684f0496996a32
+ pristine_git_object: 962475a584e78c350aedb5f3134e4c1aa1ad1b7a
+ docs/components/webfetchservertool.mdx:
+ id: adf586974a70
+ last_write_checksum: sha1:e0026c4aaa5d05a567dfb16224eb7dd3f8263da5
+ pristine_git_object: fe93938c6cb8539b8b67d442a17c00ac086d169f
+ docs/components/webfetchservertoolconfig.mdx:
+ id: 91a9758a664d
+ last_write_checksum: sha1:1c319d3b2322905a434ad60a1e5422959f59efca
+ pristine_git_object: 1d52d81ac7f8c1ee44020eeece6cb5d1a053eb9c
+ docs/components/webfetchservertooltype.mdx:
+ id: 0f04046238f0
+ last_write_checksum: sha1:2637a8bc828a4f0e2f028b27a3b06368f7c151b8
+ pristine_git_object: d507399c49bbd3786ee88abd2f5fb8d761b82e94
+ docs/components/websearchcallcompletedevent.mdx:
+ id: 350a1bf7690b
+ last_write_checksum: sha1:5e0bfb9d396b093721651c66643dbd51d9cded9d
+ pristine_git_object: 34bcc1fe4358ae3ac57119af2258d4afbf7adf01
+ docs/components/websearchcallcompletedeventtype.mdx:
+ id: 8c9cbf82d0dd
+ last_write_checksum: sha1:5243fb23501a7c7655ca6218016548bd79120b92
+ pristine_git_object: e1e9088e26cdcc4bf1a8fed2eb5f0110a07cf441
+ docs/components/websearchcallinprogressevent.mdx:
+ id: 2e257ab60b45
+ last_write_checksum: sha1:e6f50b8204641bd767343fa9e17a580065b4c8f4
+ pristine_git_object: eaf3e60607cebd26079e7bb0b50bc9b5120eaecf
+ docs/components/websearchcallinprogresseventtype.mdx:
+ id: f8d21dc2dcd6
+ last_write_checksum: sha1:c60711390c27bb544ba3bf7da1be1e89590c86f1
+ pristine_git_object: 04ef37c8f50e6117c78a2379c38ea7861ba4b9fc
+ docs/components/websearchcallsearchingevent.mdx:
+ id: 12d2a63ebcbe
+ last_write_checksum: sha1:5acd5e40188568ac74a8000f3e95cf0717c491f4
+ pristine_git_object: 5cd28105364cb5a439c5ee06af07bae536885531
+ docs/components/websearchcallsearchingeventtype.mdx:
+ id: 378b44d122d4
+ last_write_checksum: sha1:4aa0acca402e507e0f5b53f700b19e8440b7c4b3
+ pristine_git_object: 6453f10f1843521ab57609e00cea4459984d565b
+ docs/components/websearchconfig.mdx:
+ id: 6d343d63543d
+ last_write_checksum: sha1:0a95768519dec7e4d01574b21f08c4f7feb7c1ef
+ pristine_git_object: 7fce2c52339b16ee22d21fd6983abf8dc8b3f5b9
+ docs/components/websearchdomainfilter.mdx:
+ id: e6aef0d8853a
+ last_write_checksum: sha1:e537f3dea8da557bc1a96ac339099088041ff5ad
+ pristine_git_object: 7f963cd91692d20ac4615c5300d332b19ec832c0
+ docs/components/websearchengine.mdx:
+ id: 2000e63cfaeb
+ last_write_checksum: sha1:495298bf169acc6e0adb86a97c5e412d371b1425
+ pristine_git_object: 32467b812630ca2f6679393d7398144d49e8bbf2
+ docs/components/websearchengineenum.mdx:
+ id: de0188abe418
+ last_write_checksum: sha1:7931b92ee21a06057d273be6f52e15ec649ab20e
+ pristine_git_object: d0c7f8329d3c98def79ee10dadd5c63b0cb6863e
+ docs/components/websearchplugin.mdx:
+ id: 5cb313bf543c
+ last_write_checksum: sha1:90537e686b540148dc8fae0847e79552b3e72b9c
+ pristine_git_object: c4cbc7b9551c40b5845c91b20ec4dede18149143
+ docs/components/websearchpluginid.mdx:
+ id: d033d5ea2573
+ last_write_checksum: sha1:11622d868a103d09aa6a02ad5253f8fae2e90004
+ pristine_git_object: 4e2731fc3c65857956cbd6acf8f2dc5566706116
+ docs/components/websearchplugintype.mdx:
+ id: 421e1c81422d
+ last_write_checksum: sha1:d39ead4ac6060a5ea41de963e1e713af210f9c31
+ pristine_git_object: 35edaa6c73e1f7c3731d7d5005897f72ca4ed496
+ docs/components/websearchservertool.mdx:
+ id: cf9994f5aba9
+ last_write_checksum: sha1:cc8bd65eb95f0a85c53c4d6f58281c70c28cff29
+ pristine_git_object: 12501386ea51318cdadc2b3dcbe001800005f906
+ docs/components/websearchservertoolconfig.mdx:
+ id: bb335e5d49e5
+ last_write_checksum: sha1:0df601c9f454e72a8dc54e8f654201f8d3304f34
+ pristine_git_object: f06444b67b2c7e6cd0a8790fe494d9a28ae0f7fb
+ docs/components/websearchservertoolopenrouter.mdx:
+ id: d1e3cf613d26
+ last_write_checksum: sha1:014a351e3ba7d11d72eeb622e088215abdf7d4eb
+ pristine_git_object: 1e3301d318413b4d2f2cb5568d5e01da1b134e4a
+ docs/components/websearchservertoolopenroutertype.mdx:
+ id: 0868b45e29e9
+ last_write_checksum: sha1:dd24a8e20fe1577d7c6d8fd4d65b32ec9456ba46
+ pristine_git_object: 4a6088e9b6d38fe27f6f9449a9407224bdcd319a
+ docs/components/websearchservertooltype.mdx:
+ id: 043a6dca8ee7
+ last_write_checksum: sha1:f6700362f96b7130ee4806ceabdf030293747de2
+ pristine_git_object: 0a2ba3db67360d54f59a357027ebb0ca67394ab2
+ docs/components/websearchsource.mdx:
+ id: 3ed4e793a3f4
+ last_write_checksum: sha1:9888434e41b03d41c2d668ec6b1c939cc20e4853
+ pristine_git_object: 870075f95e7bddd71785d1a9aebc82ec751226bc
+ docs/components/websearchsourcetype.mdx:
+ id: 3ddbc17b1145
+ last_write_checksum: sha1:0a7c17767c867b60614f2557b738b090b811c82f
+ pristine_git_object: a7be3b3d7329f05b2811e9961bd15903541be69b
+ docs/components/websearchstatus.mdx:
+ id: 10ad5bbdde7e
+ last_write_checksum: sha1:9c9476967dc3135c6443efb573c474acab396a33
+ pristine_git_object: d24fe5f411ca8e3bcbaad9e364d7e7613bc8aa0f
+ docs/components/websearchuserlocation.mdx:
+ id: 472951d8225f
+ last_write_checksum: sha1:7342cfe19e978ced434c23766ef8cd796198db49
+ pristine_git_object: dccb9d9a12273edb53744a22777a64e6d0f3ec74
+ docs/components/websearchuserlocationservertool.mdx:
+ id: 33dc2b3bb3ad
+ last_write_checksum: sha1:915d28609fce821be75c94f4bf185696ad904c05
+ pristine_git_object: 98a2e0b608cd854c23c7ddc0e0badb0de30423b3
+ docs/components/websearchuserlocationservertooltype.mdx:
+ id: 4b919bbed3b9
+ last_write_checksum: sha1:022a1fdc4b98ebc6f14e6c79c5f98f7239ecae64
+ pristine_git_object: e10fc7e428d0e3802bd33da844bce0ad241d553b
+ docs/components/websearchuserlocationtype.mdx:
+ id: 2df2844a96ee
+ last_write_checksum: sha1:1a58eaab78f5cfb3fba15aeddad9405b5ca13fa9
+ pristine_git_object: e8a689098106c445424b89fe5baa348824f3a36c
+ docs/components/workspace.mdx:
+ id: eea9c32d09c4
+ last_write_checksum: sha1:e5816ed055ce054c3e3579c4f3ffca7f2a44c34a
+ pristine_git_object: 897afc9c21843812ca8c08d3fdda1f891eb80e5d
+ docs/components/workspacebudget.mdx:
+ id: e941741a8d84
+ last_write_checksum: sha1:c94db9e8e6518f8da147deddd13cdb76a34609fc
+ pristine_git_object: d9aa348c48cff32a404a4cd135ddcdc3aeae4631
+ docs/components/workspacebudgetinterval.mdx:
+ id: 09ea43a006b1
+ last_write_checksum: sha1:08c36a36f2d1529da4bcc1cb6ec26f89e5a5d3f7
+ pristine_git_object: d6b8881a231b62710a462d3e95b63cba68216d6e
+ docs/components/workspacemember.mdx:
+ id: 488993b97756
+ last_write_checksum: sha1:38c9308c483bd10a4bcb1af4e1d1ced1a1c9151e
+ pristine_git_object: 3e77b3d5194165ae231ac649e92d74a25d9b5505
+ docs/components/workspacememberrole.mdx:
+ id: 61bd9cfaba50
+ last_write_checksum: sha1:53d06ae2c195423e5c8e87e73ed33664c20ab65a
+ pristine_git_object: aa60a54ac2096800d7ac3d9b1130beeb9507428b
+ docs/errors/badgatewayresponseerror.mdx:
+ id: d60591f67794
+ last_write_checksum: sha1:2c6bbb4b3b91f42e43bfc82ece58b32186ab6d6e
+ pristine_git_object: 62ce7a1a3bde35c8ce38409727739d8c9e6cc59e
+ docs/errors/badrequestresponseerror.mdx:
+ id: d595cba2d9a9
+ last_write_checksum: sha1:9ce55e58857e8f87b9a69bccd2023fef9a4bbf36
+ pristine_git_object: 5453987ea78be5e72cac82bb71023b40528c1cd6
+ docs/errors/conflictresponseerror.mdx:
+ id: 130bd0076f35
+ last_write_checksum: sha1:e996aed582dc99500d096ccb83cf68911fc40494
+ pristine_git_object: e3a48471610ada9efeb64f8e3443999afa6833e8
+ docs/errors/edgenetworktimeoutresponseerror.mdx:
+ id: 203457916ba1
+ last_write_checksum: sha1:c33c9d83e9a29351bbd7b2b28a6556672ac7603c
+ pristine_git_object: 5e48d2ebad3bb46df3a4e0bf0b22313865fcc403
+ docs/errors/forbiddenresponseerror.mdx:
+ id: 224f2ffa6660
+ last_write_checksum: sha1:004c2860216b8b04b4362b928c509a54cced9f9a
+ pristine_git_object: c520471dddef3c548f5481114e12be90b7bd5788
+ docs/errors/internalserverresponseerror.mdx:
+ id: e3cb72f51ee2
+ last_write_checksum: sha1:330b24172967b4b0bc97b4d58a455d8075a0c339
+ pristine_git_object: c4a95bf16f458aec79b343ea20006e05fbf87a90
+ docs/errors/notfoundresponseerror.mdx:
+ id: a387a1eb646c
+ last_write_checksum: sha1:34bc6d1c3d39c2ffc1c83490364d675c032e0698
+ pristine_git_object: c9c23ff0f6a2e8d17157c282cc6a9d7caa6de156
+ docs/errors/payloadtoolargeresponseerror.mdx:
+ id: a2428bf1899b
+ last_write_checksum: sha1:57ade2f54c10306bc800eb0390197b6ea96d9805
+ pristine_git_object: 06c96f02e63fc9d532d04cdf30b718594858663c
+ docs/errors/paymentrequiredresponseerror.mdx:
+ id: dddfbda01b46
+ last_write_checksum: sha1:214872e286b95ac78f8806d8787d837b5536cec8
+ pristine_git_object: 959733dad5b93a9265224c21c11e90795a560dcb
+ docs/errors/provideroverloadedresponseerror.mdx:
+ id: 86b8324f4884
+ last_write_checksum: sha1:9148d265697baed5a75d52a5ba06f4c079add6ae
+ pristine_git_object: 44e71a2b362b2907eb75d19f8f0a715a4cd437d5
+ docs/errors/requesttimeoutresponseerror.mdx:
+ id: d6a4789cc5eb
+ last_write_checksum: sha1:6d03c71193040f4229370eb7526f13149814617f
+ pristine_git_object: c7bdd746a3c0d98eab9c3d37cdb0f467013ec7e2
+ docs/errors/serviceunavailableresponseerror.mdx:
+ id: a3536716f3f6
+ last_write_checksum: sha1:b75ecc4a893b1688dd505df67b2b34e26fc92509
+ pristine_git_object: 978785d13401de872aeeac3b206e1f330db5dee9
+ docs/errors/toomanyrequestsresponseerror.mdx:
+ id: 86b383c731e9
+ last_write_checksum: sha1:cb80997427e487d5cd2ffa80f629bf59743fd181
+ pristine_git_object: dae39dad4f021c874b685558b8e59eb79301e154
+ docs/errors/unauthorizedresponseerror.mdx:
+ id: 67ef9f36961b
+ last_write_checksum: sha1:7378c72dd35e5bcae7316ade30f6a53dbb74c35d
+ pristine_git_object: 5a1e49f8fd03ef86c17aae606516498e0cb2c735
+ docs/errors/unprocessableentityresponseerror.mdx:
+ id: 83abdd4bab47
+ last_write_checksum: sha1:b1ff6bfecf10def4eb3a1d3f5be9b9cbf13ce926
+ pristine_git_object: f8c3a25b9388bdf08c42aebaefc8999f86444d6d
+ docs/models/internal/globals.mdx:
+ id: 97b492e9b34b
+ last_write_checksum: sha1:ddff7485f3cc1d9d01d082c38abe327e7ffee296
+ pristine_git_object: 905f480d8b03c82343c8b1a8b8669898fa79e1bb
+ docs/models/utils/retryconfig.mdx:
+ id: eb84a3cc692c
+ last_write_checksum: sha1:3cc5ffa2cf98a80d59818495896591a5e2c807c6
+ pristine_git_object: 5342a8f5681d437adc719527c45d23aac0ebe84c
+ docs/operations/arena.mdx:
+ id: fd0c961ea26d
+ last_write_checksum: sha1:48d0112803ed464cb9f9fe06d4b58f982f936522
+ pristine_git_object: 455ab607b237f29dd06d6548926f8ee08be410aa
+ docs/operations/bulkaddworkspacemembersglobals.mdx:
+ id: f198abbe4de0
+ last_write_checksum: sha1:ca25e8bae0fa1b09844c8ed66e174d7a8c06542d
+ pristine_git_object: a53ed3696251866af6412a052f44e6cb2d7665d8
+ docs/operations/bulkaddworkspacemembersrequest.mdx:
+ id: 4d62073b9e0c
+ last_write_checksum: sha1:3a908b54a28fb6fa5b1ad620723aea7414870657
+ pristine_git_object: 5b61022c5443a46904016af5a447dd0951639abf
+ docs/operations/bulkassignkeystoguardrailglobals.mdx:
+ id: "399016922095"
+ last_write_checksum: sha1:61c5b111db6c5d74b921a2a913ac0bdd396ad93a
+ pristine_git_object: c5e78a4b8f261e2cd00e2ee15ca6b378a2944dcc
+ docs/operations/bulkassignkeystoguardrailrequest.mdx:
+ id: d7bf7df426e0
+ last_write_checksum: sha1:ed94697637c8864c2ac10e9db35195ee9c1cd34c
+ pristine_git_object: 47d8a382f1f51afdaa136d30df74f5c15a60e2ab
+ docs/operations/bulkassignmemberstoguardrailglobals.mdx:
+ id: 2cfaa8b1357b
+ last_write_checksum: sha1:9ac6311813331818676ade417d0c30084f7f7b4c
+ pristine_git_object: 4b04ca8a6fbf2cdfe731ce0698995e4a6baaf1c6
+ docs/operations/bulkassignmemberstoguardrailrequest.mdx:
+ id: 3a83ef860276
+ last_write_checksum: sha1:eb1497dea2e4e7f6d90b82773d5cf7f0a2a0076e
+ pristine_git_object: ede199d37a6e07c1123ad600d8a48f16bd6501d5
+ docs/operations/bulkremoveworkspacemembersglobals.mdx:
+ id: 67680f4fc801
+ last_write_checksum: sha1:f39994a84f399aef92e86e08ede88473aac0514e
+ pristine_git_object: 9b483f8f228020caee504c2962fe474c987c362f
+ docs/operations/bulkremoveworkspacemembersrequest.mdx:
+ id: 9703a19d26d9
+ last_write_checksum: sha1:40e2797cb5830fa618aa89b2b011a827e40d6f95
+ pristine_git_object: 40b348890ce0a1b843f60339109c66068228d42b
+ docs/operations/bulkunassignkeysfromguardrailglobals.mdx:
+ id: fbd7faa5cbbe
+ last_write_checksum: sha1:376917fa12688d4e2f74ee10070829be10d0a26f
+ pristine_git_object: 0fee944ad1c2df201e0d078e2d9af7b36a04923c
+ docs/operations/bulkunassignkeysfromguardrailrequest.mdx:
+ id: 717f9426ddcc
+ last_write_checksum: sha1:7a7e5cb2e4797d31799ec09fdb6a705a1d218a29
+ pristine_git_object: fba4dbe777dd0960a8f2090ea0a662b9c088e14e
+ docs/operations/bulkunassignmembersfromguardrailglobals.mdx:
+ id: 1eedf1299413
+ last_write_checksum: sha1:1cffc4707e13b9e22506e7736d06b996f8c17703
+ pristine_git_object: e21cf59f2517ea21a281c5e6bb78d02e9e7b1e95
+ docs/operations/bulkunassignmembersfromguardrailrequest.mdx:
+ id: db4a10e02011
+ last_write_checksum: sha1:07a2b233999d732b3559f431337d40cbfb8acb18
+ pristine_git_object: de22a4c7b44e291012ca85daacc77bde58afbfa4
+ docs/operations/content.mdx:
+ id: 6f64feb2d798
+ last_write_checksum: sha1:329d9719c9e25478666963df7b79710aa626d988
+ pristine_git_object: 1df0aac22b125266e577419c135f63176473feef
+ docs/operations/contentimageurl.mdx:
+ id: 766d8d5a4601
+ last_write_checksum: sha1:6334bbbb12dde58bbbace7feee85fbe50436dcd5
+ pristine_git_object: d0e186ad162d7f0d0bbf68a5110e54f23e737d53
+ docs/operations/contenttext.mdx:
+ id: 537b5f749941
+ last_write_checksum: sha1:49c12ecbb5dfd1da81be814c3e70baa9c249d432
+ pristine_git_object: 08e418f7bcf3cf8142171de78bedd0243bda6854
+ docs/operations/costdetails.mdx:
+ id: a5015273e58c
+ last_write_checksum: sha1:90a330bfa37e208bcee6615af2ee7535c4416a26
+ pristine_git_object: 753493b8d505e9317dcaca6fc897da7e30e91d0c
+ docs/operations/createaudiospeechglobals.mdx:
+ id: 9b19782b0fc7
+ last_write_checksum: sha1:620e2236612f7cdf7dc23e0f975671e979d7e4f5
+ pristine_git_object: 78fe3a35c7c813e4554c8b8d3e403f4902a17c32
+ docs/operations/createaudiospeechrequest.mdx:
+ id: 097a81eed964
+ last_write_checksum: sha1:1a773adccf87e107b0648cc0034e97613378f47f
+ pristine_git_object: 176fe2508bf060b22bf9f2c8c8fd158a96fef19e
+ docs/operations/createaudiotranscriptionsglobals.mdx:
+ id: 3a50c3fec9de
+ last_write_checksum: sha1:df0aebe1971befd5930236620a6ea94dbec73898
+ pristine_git_object: 2427dcaa5a305401e2e863eaaa6a99bb53183c51
+ docs/operations/createaudiotranscriptionsrequest.mdx:
+ id: 68a813383936
+ last_write_checksum: sha1:a3ad7e4691917927539d6c614788da7f4d6b4892
+ pristine_git_object: 63faa868b09ae95876ac3df06e039988a7433f9f
+ docs/operations/createauthkeyscodecodechallengemethod.mdx:
+ id: a0b8389b8278
+ last_write_checksum: sha1:e1891262a1be872336e691be4dcedee58e95a407
+ pristine_git_object: a3c062d141925239a4d66db37e4c2e8040489c53
+ docs/operations/createauthkeyscodedata.mdx:
+ id: 96a3b71e147f
+ last_write_checksum: sha1:a49802a7d6ded38299eb5d2e18e8ad170fc468dd
+ pristine_git_object: 7089ba199783d6c5030b47b4a6fc10a42ddc8162
+ docs/operations/createauthkeyscodeglobals.mdx:
+ id: 9a3b43a7dab9
+ last_write_checksum: sha1:537fff7cdd69b9c37002a3a5da7970d1b32b589f
+ pristine_git_object: 4332a2403fb1c3b671a79402577634889335e7aa
+ docs/operations/createauthkeyscoderequest.mdx:
+ id: dc957c56c101
+ last_write_checksum: sha1:1ab68fc71bb22041efb8406f58c34c12d386ae51
+ pristine_git_object: cdafce622ad06d2835ea636cfd1ba7606a7c35a3
+ docs/operations/createauthkeyscoderequestbody.mdx:
+ id: 976d7ed7ca9e
+ last_write_checksum: sha1:70c621322a830c6891c417b57820953aa4bf9d86
+ pristine_git_object: 2b4c4db93adf3350cce0c884942bcf4c15b82a8a
+ docs/operations/createauthkeyscoderesponse.mdx:
+ id: e1f782dea5e9
+ last_write_checksum: sha1:42377b77453fdc76d20455839f520abee7107556
+ pristine_git_object: 5044f5777fcbceaac89ea96adc0ea769a9efc274
+ docs/operations/createbyokkeyglobals.mdx:
+ id: e631e8e4e0fb
+ last_write_checksum: sha1:7cac52a36f1682f8fdcbe9c0425b0bd07a1a6375
+ pristine_git_object: 7a4e3e75e1e56f2b24ccf59267fbf93b4ba61468
+ docs/operations/createbyokkeyrequest.mdx:
+ id: 091fcb472560
+ last_write_checksum: sha1:e19c5fbd990dc014fcbb3c307004323b9e656a45
+ pristine_git_object: f8b09da30a16c39bd745dfd810353b2d887372a9
+ docs/operations/createembeddingsdata.mdx:
+ id: 1bb218f30173
+ last_write_checksum: sha1:47448375c4de6ee644e5069f33bb759a52c4cc03
+ pristine_git_object: 07670e00c0d49d2e30cb3b94b2c321eaad49a657
+ docs/operations/createembeddingsglobals.mdx:
+ id: 11cf622f54b6
+ last_write_checksum: sha1:84a77bf7b6dd2233870b2af386f6d4bdd87d2cbf
+ pristine_git_object: 2325d62ebd4a28817cb1923f00fb05a74b905395
+ docs/operations/createembeddingsrequest.mdx:
+ id: 1dba77aacceb
+ last_write_checksum: sha1:b78814e2fcc4db2ce6e1d55b2e4a326f1bbd330e
+ pristine_git_object: 6d20f0154de8502a6deb3686908bba8496747583
+ docs/operations/createembeddingsrequestbody.mdx:
+ id: ce68e3b84ec3
+ last_write_checksum: sha1:78942806d1371286f52486cd13b7881da11dc517
+ pristine_git_object: a669d4e6b74d84f91888f9a8b354ad0b13c281a7
+ docs/operations/createembeddingsresponse.mdx:
+ id: 4db044e7c8a7
+ last_write_checksum: sha1:9b1ed48afb937e503da99a9d9f6c26ee036d84be
+ pristine_git_object: b845fd2c1cb8794159a4b5ee0ab0d315bfb567fa
+ docs/operations/createembeddingsresponsebody.mdx:
+ id: 6ae2fb67a8d9
+ last_write_checksum: sha1:08b93de7b4453a67131f7a9699363391073b0b78
+ pristine_git_object: 4efeda7aa813ebf97131645e6af8e49853731100
+ docs/operations/createembeddingsusage.mdx:
+ id: 4f9205ca2bb9
+ last_write_checksum: sha1:cda993a456ed0e22740a2d6d657dd499199e742a
+ pristine_git_object: 1050293af3353abc1dba846e61f3d6980cc126f8
+ docs/operations/createguardrailglobals.mdx:
+ id: ce6e792df15c
+ last_write_checksum: sha1:6542508eed5dbd74bf6812b8cc0cc9cfd3157d06
+ pristine_git_object: 89d6df049a07dd0c7fb980daeee97309cc3ce74a
+ docs/operations/createguardrailrequest.mdx:
+ id: 3d30aa9a4ec7
+ last_write_checksum: sha1:0440e47100b0ce6309e6ea0d16b7e4e9be50ac59
+ pristine_git_object: 906c993096e226923d9aac19bf0bb82ffd35936a
+ docs/operations/createimagesglobals.mdx:
+ id: 3eca6cb49159
+ last_write_checksum: sha1:9ac3837e42882bcb0edab9d0d801c0893d53d3e5
+ pristine_git_object: 98b5f6f8e4ff70e4a724f1a7563f4754af9d3203
+ docs/operations/createimagesrequest.mdx:
+ id: "245236481860"
+ last_write_checksum: sha1:ed27f120e971b7441f47c0004ddf93cca4d9b215
+ pristine_git_object: 5e9a2d730adb55e520be46afc169272181d301c5
+ docs/operations/createimagesresponse.mdx:
+ id: 852027a00620
+ last_write_checksum: sha1:f65739779d5b4cd6cbacf59817765623554abef6
+ pristine_git_object: 77636052b24b9c8973895543fc9bacebe8459844
+ docs/operations/createkeysdata.mdx:
+ id: bf8133a06827
+ last_write_checksum: sha1:3c025c7db19baa791496ea014626ae736a694aff
+ pristine_git_object: 61f267fb3079b5d62c7359131825e9871cccdf92
+ docs/operations/createkeysglobals.mdx:
+ id: ebcc738c53da
+ last_write_checksum: sha1:dcec0f5013ef76e33fc43437e5689185abf61cb1
+ pristine_git_object: 976d57a664c3b1c252dc9e89996e69fd6262ab4d
+ docs/operations/createkeyslimitreset.mdx:
+ id: ebd66f656675
+ last_write_checksum: sha1:f752d1a24614c55edb8547b24d245b3bdf3ced22
+ pristine_git_object: 89738fb95036853c42687c40a753fddec78d8823
+ docs/operations/createkeysrequest.mdx:
+ id: 4da7652df80c
+ last_write_checksum: sha1:eb2064be6cea0c4c35ca9ba42d28794a352501d6
+ pristine_git_object: 9ec01bf61826e888c544e698af19baaa8c51980a
+ docs/operations/createkeysrequestbody.mdx:
+ id: 77bb49febf62
+ last_write_checksum: sha1:6f150fbcbab58887eeaa41b37f2c511b6ec60879
+ pristine_git_object: 37ca00af34f104adb27c9675861130e30fcca1be
+ docs/operations/createkeysresponse.mdx:
+ id: 08e825fab080
+ last_write_checksum: sha1:ecbb7dd123519f348339649a9f038d44c24d12d6
+ pristine_git_object: f5caa2c479c5b9fa1f2f0c5ee88b1c0057c30c1f
+ docs/operations/createobservabilitydestinationglobals.mdx:
+ id: de09999b6578
+ last_write_checksum: sha1:3f7f4167ab7c14d54bac74001d241091abbb5939
+ pristine_git_object: 778aba14227f36282c39c9a4785c39f4eed4f12f
+ docs/operations/createobservabilitydestinationrequest.mdx:
+ id: 495bf0f61d65
+ last_write_checksum: sha1:673cc61125bed9f417e08c1ede0873fd9a345040
+ pristine_git_object: 3c62d6ca484755b21657c0c499e12f88762be6be
+ docs/operations/createpresetschatcompletionsglobals.mdx:
+ id: 7dfa93149d0e
+ last_write_checksum: sha1:873cc7294e76df7cde050b31326d76970b131c23
+ pristine_git_object: 47f3111585c9ebddf1b901bd83af5435f8bb77b0
+ docs/operations/createpresetschatcompletionsrequest.mdx:
+ id: 39f1178223c5
+ last_write_checksum: sha1:3a69a7b2dd97496c8eb4e9da41c0d4308da29b6b
+ pristine_git_object: c6bd7807763eea7b961d33013a53c7406708c246
+ docs/operations/createpresetsmessagesglobals.mdx:
+ id: 3480905d3f56
+ last_write_checksum: sha1:9a13fa917d7098a6677ea856484e949cbf276c10
+ pristine_git_object: 278c5d1f8aff8c827bfd6fde514002d2131ff121
+ docs/operations/createpresetsmessagesrequest.mdx:
+ id: fb3300b6e323
+ last_write_checksum: sha1:af4a30cca664a4541f4284442048bac11c47b5fa
+ pristine_git_object: 71d6249edb1c7fb01a6fb87fb81e5ad626d1b0af
+ docs/operations/createpresetsresponsesglobals.mdx:
+ id: 88e0cbfc3d73
+ last_write_checksum: sha1:d80f9d1e85e177cf07e66d04421929dfcbf02210
+ pristine_git_object: 9d4fce86d1d1de2ce743164a3f46d47a61c954bc
+ docs/operations/createpresetsresponsesrequest.mdx:
+ id: 6f3505cc8829
+ last_write_checksum: sha1:fcac68bcfe08ab50974d6b395244217e1731e4dd
+ pristine_git_object: 54dde0eb3c1b5ac1d83e5724e4d085f151d881ea
+ docs/operations/creatererankglobals.mdx:
+ id: 4cb9d6ca73a4
+ last_write_checksum: sha1:6af3dafb586c07947123d4aa815cbd85212e4332
+ pristine_git_object: e0e136ff279b76a3c927ff85bf5a8c46454f7d87
+ docs/operations/creatererankrequest.mdx:
+ id: 945e0e3ab095
+ last_write_checksum: sha1:c3b2ec46861ebf308300a4de1c47e0b080dc0db8
+ pristine_git_object: f0d351fc5e1348b126ff9bdb7ca184405ede80dd
+ docs/operations/creatererankrequestbody.mdx:
+ id: 70e89df7dc65
+ last_write_checksum: sha1:08cec5610e04408ed6ba5d9a2a02dc25121dac9b
+ pristine_git_object: b5640657b90287594f02c7c547637a208c5d63eb
+ docs/operations/creatererankresponse.mdx:
+ id: 1cc3705ce113
+ last_write_checksum: sha1:9eabc300f420fc0b4177bc4527ff849a7f05366c
+ pristine_git_object: 2d6beaa11af27b90eb30b947ae09e4b42d67c8ed
+ docs/operations/creatererankresponsebody.mdx:
+ id: 644fcf9015f0
+ last_write_checksum: sha1:ab893be11b175b17d107e1dfd3c2cb93b06d49b7
+ pristine_git_object: 9dc87532b08b0e353edbf536b886cb3481f4a8a3
+ docs/operations/creatererankusage.mdx:
+ id: 1a4c079d6547
+ last_write_checksum: sha1:4f30623b27b0c76513b0411954e6674161933c81
+ pristine_git_object: 66beef7ea2c9976553933fd4e1b0dfcede458576
+ docs/operations/createresponsesglobals.mdx:
+ id: 2c7b20a60b97
+ last_write_checksum: sha1:dd462e627e236e664aacb0c9eea5221711167779
+ pristine_git_object: 60b3ee5d2d34539516415a6edcf2c9947279ffa7
+ docs/operations/createresponsesrequest.mdx:
+ id: e7abcfe5f133
+ last_write_checksum: sha1:f95f4e6f0fbcdc09935f95d51eee08592c9b0d10
+ pristine_git_object: bd72e62c216e3d156639d7c36ea6241cba7f7a41
+ docs/operations/createresponsesresponse.mdx:
+ id: 405549d19438
+ last_write_checksum: sha1:a2ef51d1e93fe47903803316e036fe579ff69903
+ pristine_git_object: a51a1e375e5ec80ff76a1e585477dd2f6ac43621
+ docs/operations/createvideosglobals.mdx:
+ id: 84de29ff23d6
+ last_write_checksum: sha1:b0e6bc84afd5b4bcdb3f491c64b3f5c15e74d187
+ pristine_git_object: be83bcae410c1774dca5ede12e56fccf07e458fa
+ docs/operations/createvideosrequest.mdx:
+ id: 774cef074ace
+ last_write_checksum: sha1:98d8a617fec35a14e4c42446399e7e39304a0d72
+ pristine_git_object: 2bb242fb936d2a148caba00ef2336e91b374451d
+ docs/operations/createworkspaceglobals.mdx:
+ id: 9bfc0abafbf9
+ last_write_checksum: sha1:fa52011e5149bfd462745b9e921bdeb1c116ec4d
+ pristine_git_object: c85655e7356c063b464215ed66b7a0c545f52ce8
+ docs/operations/createworkspacerequest.mdx:
+ id: b4975e319320
+ last_write_checksum: sha1:bc45ec8548c8353bb942035391cf76f345367d6a
+ pristine_git_object: c4c5d7a85c470fb2c54aee1f816c0dd0b7da3226
+ docs/operations/datacenter.mdx:
+ id: bf5ee96a37bd
+ last_write_checksum: sha1:c0e9c06f8a484108aaf5a39fcbf4bc712193bc0c
+ pristine_git_object: 03cecfd4ec0719a6f5a1b8ea3ae2480f76b650aa
+ docs/operations/deletebyokkeyglobals.mdx:
+ id: dd77cb8066bd
+ last_write_checksum: sha1:dd56427b351443a57a82eb5dbca947ff14252645
+ pristine_git_object: fa05fb4e16ac69100faa6ccd7a45e4e287fa6778
+ docs/operations/deletebyokkeyrequest.mdx:
+ id: 5f6e81896314
+ last_write_checksum: sha1:2927f00b81e9bccb0d19ce46dfd3fdc23475eb4c
+ pristine_git_object: 7fdac9559bfcf2860dbd533e0d3ae974ab26f193
+ docs/operations/deletefileglobals.mdx:
+ id: b95c49d91968
+ last_write_checksum: sha1:1eaa5442be2df2702baf53f5dddedd40ce930fcc
+ pristine_git_object: 7cab840ae2623e4f8ccd5d34b4997e8243cd72d8
+ docs/operations/deletefilerequest.mdx:
+ id: fa38696c8455
+ last_write_checksum: sha1:7eb16774a8ae2220532b26d9f22e0bf84c66d539
+ pristine_git_object: 3202a43f729c1d8699d46ef23f62074d04114e08
+ docs/operations/deleteguardrailglobals.mdx:
+ id: f3c051209faf
+ last_write_checksum: sha1:1b12ecd3f259ec98d2377fceeb967163ddaba3cb
+ pristine_git_object: 0c506f590de345a5f884792ce0026862b61c3195
+ docs/operations/deleteguardrailrequest.mdx:
+ id: a7b7e64c7fb1
+ last_write_checksum: sha1:e993d4511c68b02e368f21a0b319b2068c6180b4
+ pristine_git_object: ba80054b8619991e06ee23b1ce40a97692b15c77
+ docs/operations/deletekeysglobals.mdx:
+ id: fd6447706ee1
+ last_write_checksum: sha1:34725257cc7da12269adca861580e36ab2b82d56
+ pristine_git_object: e89ca07d06154749b62757a6f0f8c3e4f12d35da
+ docs/operations/deletekeysrequest.mdx:
+ id: e86327cf7b7c
+ last_write_checksum: sha1:cfdb8b97deb4fcfdca215bb9308f35af15673fef
+ pristine_git_object: f7ef7a946fb16dd70800d19e1ca0278a1cdab69f
+ docs/operations/deletekeysresponse.mdx:
+ id: 1bfa5cbb0a5c
+ last_write_checksum: sha1:204ad6edf9caf90c97c8a345151a6c8749f51e4b
+ pristine_git_object: 5e83f2662630ab12bcee291939844451a213bf36
+ docs/operations/deleteobservabilitydestinationglobals.mdx:
+ id: c76d2f794054
+ last_write_checksum: sha1:148f6de31be77bc5067cf5428667ed4bab49e30d
+ pristine_git_object: 14ee5de06533c832070c74f4d6f27c2043e8ef6f
+ docs/operations/deleteobservabilitydestinationrequest.mdx:
+ id: 86192950ff34
+ last_write_checksum: sha1:c39ee4ad159c25a9bb988a1b0b32eab4ea45f58f
+ pristine_git_object: 6dee392d1c4bbd32eda1cfac08e8daa1e3ad139e
+ docs/operations/deleteworkspacebudgetglobals.mdx:
+ id: c1b4f6dabfee
+ last_write_checksum: sha1:f2e30630f5ff69ba236f790def147e41e145ddd7
+ pristine_git_object: f0aff81922ba7bfe738ac10ac7720b5f02e823f5
+ docs/operations/deleteworkspacebudgetrequest.mdx:
+ id: 58dd48cc2c84
+ last_write_checksum: sha1:962d94d374d48ef16de89151eb31d9e47df4c8d4
+ pristine_git_object: 1073b36b91e5b87417dce1ea6b698dfc619dcfc8
+ docs/operations/deleteworkspaceglobals.mdx:
+ id: 025d8a30e18a
+ last_write_checksum: sha1:acf30f3793da7067957595e3e103bed4c5fc4096
+ pristine_git_object: c7f6f46cb7fe3707737c51c7a1ddb435be7fec2b
+ docs/operations/deleteworkspacerequest.mdx:
+ id: 189f48e44c13
+ last_write_checksum: sha1:c70339065b01a136e26e797e4778d36a535b91ed
+ pristine_git_object: ba1a6161de90b0ebcb0ce62f3a95deeb7b4f1e2a
+ docs/operations/dimension.mdx:
+ id: b487fdd43b73
+ last_write_checksum: sha1:eb74d7de28b0132eb9599a10b080291e8f81d4c0
+ pristine_git_object: 3659423d80a40d89eb193f55099fea9480cc4026
+ docs/operations/direction.mdx:
+ id: 52770d31c173
+ last_write_checksum: sha1:106fc68d68ade35f65f54fbd79d0d310d7a9d620
+ pristine_git_object: 0f57411072fee59d70a2753c015a55ed750e435f
+ docs/operations/displayformat.mdx:
+ id: 0bcd4e2cc7e4
+ last_write_checksum: sha1:f473409aa6a76c7efeedb3be29cab7d90e336581
+ pristine_git_object: a444dfd6c1e87f8f92fd251e131bc3c9152af07c
+ docs/operations/distillable.mdx:
+ id: df8da9cf9924
+ last_write_checksum: sha1:52b30b85635671ef624f07f60ebd87d683312dda
+ pristine_git_object: 93477874d511c859f3ee4231bdfa4cd2e87aadd4
+ docs/operations/document.mdx:
+ id: 1a504e2aca09
+ last_write_checksum: sha1:1e30b267c156d32562c8feb5d0fe0c2bc15d11cd
+ pristine_git_object: 89efca13c84eb1ae5a5f01411ab3b74f2ed93979
+ docs/operations/documentrequest.mdx:
+ id: 6f53d7771158
+ last_write_checksum: sha1:e8d58e9d9db4e65c8cd2dca1c27bede5eb901395
+ pristine_git_object: 4c0dd9f859b91bbb16be2ef66b7172152eed02e2
+ docs/operations/documentresponse.mdx:
+ id: 341c9e73a4c7
+ last_write_checksum: sha1:847b221d2a019253796dfef6fab0ee5da1422834
+ pristine_git_object: 5dc0d7b0cd5f93f218882f150500b4fe4ae6b4f4
+ docs/operations/downloadfilecontentglobals.mdx:
+ id: 0ada32f1640c
+ last_write_checksum: sha1:ed4bbd8ccded9c65480b84fdfb54582b5e606516
+ pristine_git_object: 8415a66852abad293076598cc27010eddfcfa130
+ docs/operations/downloadfilecontentrequest.mdx:
+ id: 04df99863d55
+ last_write_checksum: sha1:5e6181d6eb82ac0b2616de79b2aecea9baa36c32
+ pristine_git_object: dcb0cb35b97a8dfa539c246bed8756b3aa8bf814
+ docs/operations/embedding.mdx:
+ id: 591dd7891964
+ last_write_checksum: sha1:8c8196e7ea5cf8a0a43a4495d721e4fa19530ffc
+ pristine_git_object: 166a8bd49cf3baede0bf5b2b6ec21743f8fe00f6
+ docs/operations/encodingformat.mdx:
+ id: 099473ef03ca
+ last_write_checksum: sha1:c9c5058c7e63b56beefe18d726003ccd57860191
+ pristine_git_object: 6da2037d90613380a2a2668902a8260d250c5d06
+ docs/operations/exchangeauthcodeforapikeycodechallengemethod.mdx:
+ id: c0511758f993
+ last_write_checksum: sha1:e92de1cca53cd22483fdb90ec899034f51318489
+ pristine_git_object: 388624202ecdbdff9adfc7021fc3e08cae1e4997
+ docs/operations/exchangeauthcodeforapikeyglobals.mdx:
+ id: bee83bebcd71
+ last_write_checksum: sha1:829c23ffbbe7a93920b29f67754371bada720570
+ pristine_git_object: 3e9fa32319cff53861fbb6549fda34659d0a8686
+ docs/operations/exchangeauthcodeforapikeyrequest.mdx:
+ id: 404d8c697747
+ last_write_checksum: sha1:2355b4a897f05fd15a8982f73b8ba13e781d4a3a
+ pristine_git_object: a52648cdad21604389c9985e7596f3df52cb76fc
+ docs/operations/exchangeauthcodeforapikeyrequestbody.mdx:
+ id: 8003f6bc3b51
+ last_write_checksum: sha1:34cffd849a4d4730a60337be4fc1d186ce40ebbc
+ pristine_git_object: 27265f4f71aae71dbbd5d1550357db78c7fcd554
+ docs/operations/exchangeauthcodeforapikeyresponse.mdx:
+ id: 64162c7ece40
+ last_write_checksum: sha1:ab0c02f32ff39de1f3da9604432708878cc932c6
+ pristine_git_object: 2642f99d77ceb5007b1b863028d73c07e48dac67
+ docs/operations/file.mdx:
+ id: 262d5e5a2457
+ last_write_checksum: sha1:bb735203bac5677c946bf404bf1e516635d39efd
+ pristine_git_object: 0c3c666ca80b93b693bd9b4798d8f511738bf269
+ docs/operations/filter_.mdx:
+ id: 79b9c7c02d3b
+ last_write_checksum: sha1:210f8d87b466cf10785abbd4cb2f9eb2c3e8576e
+ pristine_git_object: 3dbded7e52c79b46c586b5b459ef9febaf6f37f1
+ docs/operations/getanalyticsmetadata.mdx:
+ id: 7c66572b759d
+ last_write_checksum: sha1:8ff4758a1a3b63116d55a83821dcb0c8012050f5
+ pristine_git_object: 6eacfe52c70d16019f73e95081b0c34e99100b18
+ docs/operations/getanalyticsmetaglobals.mdx:
+ id: 8bafe89a1a85
+ last_write_checksum: sha1:6451b3dcd9b6394f0527318f7a7cc157ad5f7cb7
+ pristine_git_object: a44950e1176e48753af03d09a4506dc489dd0924
+ docs/operations/getanalyticsmetarequest.mdx:
+ id: 7cfc69f927ab
+ last_write_checksum: sha1:fd3237a80f14c82db51c19fb2f74e0fb4503540b
+ pristine_git_object: 9ca0cb3d97851806a31b2ed4ebb73fa29b580001
+ docs/operations/getanalyticsmetaresponse.mdx:
+ id: 79b7e7689e40
+ last_write_checksum: sha1:5d8e22e5c8f3c2711c493840f9b4f76c465b2735
+ pristine_git_object: f2a6915c19d9ee5282902183ffb82ea4fc466392
+ docs/operations/getapprankingscategory.mdx:
+ id: f533cbc2f61c
+ last_write_checksum: sha1:dddef3ed7370f63a996d8201282702598ba3823d
+ pristine_git_object: a40dd4f5196a4d8dae6b239f1d9919fc39a00f8f
+ docs/operations/getapprankingsglobals.mdx:
+ id: 9a85b1fd902d
+ last_write_checksum: sha1:d46a6c685861b6b4b3f76b9d27be658baf8004b8
+ pristine_git_object: 0dd87c38f141db84e0bef92f3892ff61547017c1
+ docs/operations/getapprankingsrequest.mdx:
+ id: bcd34adce28e
+ last_write_checksum: sha1:07836acd4dbcdaba0b4568e57d11bb00ed9583e4
+ pristine_git_object: 48980600a276e5c3d71984a0f63ef6e9833d5a6a
+ docs/operations/getapprankingsresponse.mdx:
+ id: 78ec0c166748
+ last_write_checksum: sha1:76d20b72282d029ef416eb608a3e63c176d09364
+ pristine_git_object: 8353352de1664ea1c2e14ef7350ddc487dc796e2
+ docs/operations/getapprankingssort.mdx:
+ id: 4d4c5fa80b4c
+ last_write_checksum: sha1:f32d425d8631ebfeb88abcb8f7e3a80e2559e51e
+ pristine_git_object: a9d72a3e2348b96a287c4ab584d317f565b9b831
+ docs/operations/getbenchmarksglobals.mdx:
+ id: 8fcba55e06c3
+ last_write_checksum: sha1:4336ce3b6aef620bad35ec56f076d3550243df73
+ pristine_git_object: 679923bfbff14ca3bc63ce5d451089b1996e5c6e
+ docs/operations/getbenchmarksrequest.mdx:
+ id: 704fb5d64a7c
+ last_write_checksum: sha1:506d8cf7a2eed421ae52c60703e3400cdfa3a652
+ pristine_git_object: c5acba5bb9a6a2ae287d03f0aef8da1bc49df8e6
+ docs/operations/getbyokkeyglobals.mdx:
+ id: ac592fd40012
+ last_write_checksum: sha1:1eac912896162f772846e2fe5e6f3b50ae8d20f2
+ pristine_git_object: 02962c39488353dfd39f51d29d145d0ed5abcdbd
+ docs/operations/getbyokkeyrequest.mdx:
+ id: 13473d1c826b
+ last_write_checksum: sha1:c504ae8e40669d44dfa9b33a59b17dbe041dc7c6
+ pristine_git_object: 7c25821298233727884352b886699753c83868a9
+ docs/operations/getcreditsdata.mdx:
+ id: 24936b7229aa
+ last_write_checksum: sha1:04c170b75b9f943bcf4143ff49bffbace613744b
+ pristine_git_object: b0a60e0c1113ccb14912b76ee45c7b78d29405e5
+ docs/operations/getcreditsglobals.mdx:
+ id: 0683a4060ddf
+ last_write_checksum: sha1:2fadb3446c67c94df90932244ce54c94928e7e23
+ pristine_git_object: e31d9868da2d9eb67881b9141a84236074aadfc5
+ docs/operations/getcreditsrequest.mdx:
+ id: 247f4981de29
+ last_write_checksum: sha1:07f4f5563cbb3c670e1e2fe005b3ccded880254b
+ pristine_git_object: 6e73894ac94404b37f34526a43fd3dde2c1f159e
+ docs/operations/getcreditsresponse.mdx:
+ id: 4ad99e00c570
+ last_write_checksum: sha1:8c55ba124c06064eaf758a9a3d61095870e7115a
+ pristine_git_object: 1f584bb9e540819ce7619172b06ad17edf8a8c34
+ docs/operations/getcurrentkeydata.mdx:
+ id: 08c92577eb48
+ last_write_checksum: sha1:1c2e45ddfbfb87e44a19f50f729a4942bf12433b
+ pristine_git_object: a73217d190349cf765961a1991eee4220ae77533
+ docs/operations/getcurrentkeyglobals.mdx:
+ id: 2397dfa14af6
+ last_write_checksum: sha1:59402ba0d664e5fab7daae4cea57dfc01e086460
+ pristine_git_object: 784c3ac351fd37acbe2b4c47c34fabe6b539dcd5
+ docs/operations/getcurrentkeyrequest.mdx:
+ id: 601da88b2df7
+ last_write_checksum: sha1:b633bbeaa50ce7b0c171f0d380ac29de3eb4d071
+ pristine_git_object: 720e0e050e35968f74596a1bd8d791dff97b2b5b
+ docs/operations/getcurrentkeyresponse.mdx:
+ id: 8b6709d01b8b
+ last_write_checksum: sha1:f2e184cd13408bc6e5776a6a286762ddd9880cc3
+ pristine_git_object: 9b358b3316457f17649fae1f83f6bc808392d1cd
+ docs/operations/getfilemetadataglobals.mdx:
+ id: e4f16f1ce98e
+ last_write_checksum: sha1:f736518bdebac4aa8c9caf9071e0670885bd83b3
+ pristine_git_object: 4b9270d76df3ac3ff1402b6ae3c5132d54c666fe
+ docs/operations/getfilemetadatarequest.mdx:
+ id: "092777656353"
+ last_write_checksum: sha1:460587859ae661d766c6e37a2eebf8bfd0b70cb4
+ pristine_git_object: eee139554482af3a619776aaa1290bbe2330067f
+ docs/operations/getgenerationglobals.mdx:
+ id: 43ac280f4639
+ last_write_checksum: sha1:1e3b8a4dcd3f112ae32edfca342dd01cc9bde7bd
+ pristine_git_object: 450a95a8459d989d93a5c215ed60a2abf93a641f
+ docs/operations/getgenerationrequest.mdx:
+ id: ebc796021e88
+ last_write_checksum: sha1:2da89c791d70402bae2584ec788652faf81f1811
+ pristine_git_object: 318c98012c3a56987e75fffcf066267c3f95cda2
+ docs/operations/getguardrailglobals.mdx:
+ id: d8849aa95555
+ last_write_checksum: sha1:a802cbcb2d24b1d4bbdc357da7fced803aaaa5ae
+ pristine_git_object: 3cd67137d69e6f556ef005674e41c83ae9e50da7
+ docs/operations/getguardrailrequest.mdx:
+ id: 1e6b86bd352e
+ last_write_checksum: sha1:61e6cae3e157e329be3ea0f60ed28408f55b58da
+ pristine_git_object: 15bebf62bb77b99ccfbb68dd33a2b38d42d12b85
+ docs/operations/getkeydata.mdx:
+ id: 6e826a999e6b
+ last_write_checksum: sha1:de6e522ebba30177bd7f5d8904727a4a67a959db
+ pristine_git_object: b41432d2311e2048a98077567e8b3f6ef35f78b4
+ docs/operations/getkeyglobals.mdx:
+ id: e0e92d532c82
+ last_write_checksum: sha1:5a61d6565f3977a90314a46626caa89a8ab97c32
+ pristine_git_object: 59d0a567fe449a901f3f72ce13d2c5409be2c1b1
+ docs/operations/getkeyrequest.mdx:
+ id: b822199da4af
+ last_write_checksum: sha1:d7e6b9e062d1b367b66a6125b3a7c4ea4a4b2cbf
+ pristine_git_object: 917f4073281196fdf9aa85f2d093ce3dd8b869b6
+ docs/operations/getkeyresponse.mdx:
+ id: dd773bd25661
+ last_write_checksum: sha1:037805f5241592eba4add92313f6d3f59a5e10b1
+ pristine_git_object: 52562a4f8d6f51440e6f77e6088e06a48096b0cd
+ docs/operations/getmodelglobals.mdx:
+ id: 18648d7998ae
+ last_write_checksum: sha1:7d198dc0c69e793b6681e2f96a76b7d43431cd4f
+ pristine_git_object: e253e026571c8d6338f30c3f16238bd327cf8ae7
+ docs/operations/getmodelrequest.mdx:
+ id: a1dedec7f5cb
+ last_write_checksum: sha1:9dd03394227751e01183040e8cbcdccc0303a235
+ pristine_git_object: 860150ab6c9ab788cf7a301f166324858a4a6f9c
+ docs/operations/getmodelscategory.mdx:
+ id: 48f6993f8f09
+ last_write_checksum: sha1:6e045772b0b54c0ebb2fbc9e336277c6c5f19bdc
+ pristine_git_object: 80c967a8fffe1ca9281b84453163783a68ebce28
+ docs/operations/getmodelsglobals.mdx:
+ id: e9687224ab43
+ last_write_checksum: sha1:2db140db026e8024d8bf2e63091e9bd29adef814
+ pristine_git_object: e6beafcf11154033e2951ae58103041a2af946b9
+ docs/operations/getmodelsrequest.mdx:
+ id: b2627beb1959
+ last_write_checksum: sha1:d945628c6bc1fdad3b7732e0fbcefc241bd373c6
+ pristine_git_object: 272e1449f6b0895e9311ba2f03c05edbf17dc225
+ docs/operations/getmodelssort.mdx:
+ id: 3cfd33e60661
+ last_write_checksum: sha1:0cc94491120ca9b9a92ac5d6181a51131d78b94c
+ pristine_git_object: 9a5681eb1112bdb27c7c6677b74a17ff2fb0a574
+ docs/operations/getobservabilitydestinationglobals.mdx:
+ id: d7ba84a5b9dc
+ last_write_checksum: sha1:281603c38cce8aea9f289fc0d49a455b56196e2e
+ pristine_git_object: aeec24b090786961321731931648295fee510d7a
+ docs/operations/getobservabilitydestinationrequest.mdx:
+ id: 1e9d2ebca083
+ last_write_checksum: sha1:2d2b10d8386ef072de32872841df001e210b84dd
+ pristine_git_object: 39b2655a6b6e82b4561b18678e4814179de7f2f6
+ docs/operations/getpresetglobals.mdx:
+ id: f53749364fd0
+ last_write_checksum: sha1:39cd5058e888946c2044c05c872d350bab5c100a
+ pristine_git_object: b3e3cb518efd431b8f07fdabbb4fcd51a024749a
+ docs/operations/getpresetrequest.mdx:
+ id: 88368deaa06d
+ last_write_checksum: sha1:2be1cd15da22768581cc979e5bbad0696683683d
+ pristine_git_object: 3738398908f81e0f5897a56411bc74619c04c1ee
+ docs/operations/getpresetversionglobals.mdx:
+ id: be6fdbd36a45
+ last_write_checksum: sha1:537ddefa8e792fa1ab19b7b7ce5833d9ee6cd733
+ pristine_git_object: 55879e9ba28b203a76ff9bfec2f9b0bdb517ae9c
+ docs/operations/getpresetversionrequest.mdx:
+ id: 970105a3a642
+ last_write_checksum: sha1:001bb931da274741dca567c87c4149c11c5e67d1
+ pristine_git_object: c7cf40110dc4a82e2d4abdd06e98d9a28637a016
+ docs/operations/getrankingsdailyglobals.mdx:
+ id: 0f9fa155d24e
+ last_write_checksum: sha1:b3f58d600e4791419b37f4a8ec65869d59424f41
+ pristine_git_object: 4bc1a2bf9e75dc1eaca4e1531a49dfbbea0dfb72
+ docs/operations/getrankingsdailyrequest.mdx:
+ id: a83322d91eea
+ last_write_checksum: sha1:ee987639475df96010b6a2732ecf9c7b4cfd2472
+ pristine_git_object: 1788b942b41cb5afa8bebb28c0387c2cc0381d50
+ docs/operations/gettaskclassificationsglobals.mdx:
+ id: 14d0010b40f8
+ last_write_checksum: sha1:6c967e8855540035a6f70fa895ceea0c9caf1cdd
+ pristine_git_object: 34e94c3bb8dfaf81a9243d097482f93ab08bc208
+ docs/operations/gettaskclassificationsrequest.mdx:
+ id: b4c12a5cf637
+ last_write_checksum: sha1:7f91cb78496179abe81547ed00168e0f0fc15a68
+ pristine_git_object: acb6b4834361e285dfb35c137f2aef8d551c59dd
+ docs/operations/getuseractivityglobals.mdx:
+ id: 9cbf7459a650
+ last_write_checksum: sha1:26d89a9bb9563265b796d096d7d2ddf892019244
+ pristine_git_object: f31e13179ad9060fbebe2fc50ac6d6ca6d5b013a
+ docs/operations/getuseractivityrequest.mdx:
+ id: 61b93f5b1403
+ last_write_checksum: sha1:684d952b0cad7763ea8c1261ab5b928a3b77bcbc
+ pristine_git_object: 6ff32ecb22719b7da65ec863fea77dc94bd30e53
+ docs/operations/getvideosglobals.mdx:
+ id: 54e17c2b195c
+ last_write_checksum: sha1:e9c91baed62379fa5fa3c78e1047f2a99435157b
+ pristine_git_object: 7dfb4628191e338ba786e81774d4cb69152d54c8
+ docs/operations/getvideosrequest.mdx:
+ id: 751150df8456
+ last_write_checksum: sha1:dd91989f271487fe03882f979e24cbd19ef1d306
+ pristine_git_object: 1b1c087538b67ecc69a464735f5af7bfbf777c1e
+ docs/operations/getworkspaceglobals.mdx:
+ id: 50abe112c1f4
+ last_write_checksum: sha1:c01276f8bf7cc4708cd3e6eeea83c4ac9d97ccf6
+ pristine_git_object: b3d863a26961c8bd70aacdc16af63335154249a0
+ docs/operations/getworkspacerequest.mdx:
+ id: 10ca52ac760e
+ last_write_checksum: sha1:8edfdfe1c8deaf39b5a2d6088b4d7654d1f2cd95
+ pristine_git_object: b9ee3b7202cdf3509b899ecb1fd8604c690d91c2
+ docs/operations/granularity.mdx:
+ id: 2506cdfb4560
+ last_write_checksum: sha1:4787c52312e8ea4369d246111d64a1576e3629ea
+ pristine_git_object: 8aa00fc17d55cd69ebbc8809649696fb3f29b7db
+ docs/operations/granularityname.mdx:
+ id: 94405df5bc6d
+ last_write_checksum: sha1:8411fa2c4566737be150bf3d64bb792f0a3eb650
+ pristine_git_object: 9d6dfd531f49a6b16998c97e5749cf4ea761dd94
+ docs/operations/headquarters.mdx:
+ id: 8b6a6ec3c5a7
+ last_write_checksum: sha1:0dc87fcfec205555e2a9530358f304a3bb9d56d6
+ pristine_git_object: 383ef28945fae37fdc69fce45b1f8a2903051031
+ docs/operations/imageurl.mdx:
+ id: 293fd3b07d48
+ last_write_checksum: sha1:60da856951b42feac34189d2b0067f434183832c
+ pristine_git_object: 693064d9726191f06ba4b94f890888fe16d28668
+ docs/operations/input.mdx:
+ id: ddb6746565a9
+ last_write_checksum: sha1:74287064fee8a49d89846619e4d2c28b1329f3e7
+ pristine_git_object: deecee2141ec430736c4c5da4f74ee7eee476081
+ docs/operations/inputunion.mdx:
+ id: fa09ca81a05c
+ last_write_checksum: sha1:6126fc355e98574f157b9b485ac850a0ec6f2a5e
+ pristine_git_object: 2394952123e253a775bb81426d6ee2d49911e97b
+ docs/operations/listbyokkeysglobals.mdx:
+ id: b77dfe46caab
+ last_write_checksum: sha1:203cef2704a0493a98ae74994baf54dd7789b998
+ pristine_git_object: 67a37d54c875cac0897804741a900aacacd3ddca
+ docs/operations/listbyokkeysrequest.mdx:
+ id: 4e8166d10be3
+ last_write_checksum: sha1:5eaf2c9cea4df88c16df3adb96b580a673490b67
+ pristine_git_object: ed0a6574ed139fe227e45fb9e5d07bdf680afca7
+ docs/operations/listbyokkeysresponse.mdx:
+ id: ad2f5a3c160a
+ last_write_checksum: sha1:8496c7f3080cd0ec5a42401a6cccfbd1be87968d
+ pristine_git_object: 213ea97a6bf34351ada3b72a70b7f7dcedfafe5a
+ docs/operations/listdata.mdx:
+ id: 949d8d9f5ac7
+ last_write_checksum: sha1:5f8b3da3cfe52a23525dd37725dcec786a295704
+ pristine_git_object: a35a3a39449f04a128480475a6b6fcba84221a18
+ docs/operations/listembeddingsmodelsglobals.mdx:
+ id: b9243861091c
+ last_write_checksum: sha1:d9c528e4b7a94045e306b112a6b10c53205fe591
+ pristine_git_object: fad77722bdedf3aa5902e0216dadbbbbb2331c66
+ docs/operations/listembeddingsmodelsrequest.mdx:
+ id: 280530b63070
+ last_write_checksum: sha1:aa92c46789315ceae419561330e80127280e9559
+ pristine_git_object: 76c365bf04a9c5fc1f461b0eda0d59d0122b22fa
+ docs/operations/listendpointsglobals.mdx:
+ id: 12c08333c32c
+ last_write_checksum: sha1:72d0a3a54e8fc8cdfa2812fa929c08669dec9779
+ pristine_git_object: 3e37c978ab25fa66fb056d5e2c16c460b12d0736
+ docs/operations/listendpointsrequest.mdx:
+ id: 0e9e4edb0be3
+ last_write_checksum: sha1:388d0dcdb47cef7da2d5216bfaf6eaf180f97db2
+ pristine_git_object: ae60c3675f77fb7422e258682416dcb039a9c39f
+ docs/operations/listendpointsresponse.mdx:
+ id: 342e9c72ba2f
+ last_write_checksum: sha1:b398d996d1cb789b4e23ee19a90faef92ecd6570
+ pristine_git_object: b3861b87c011781ff89d1e1ec9c9b603ca6c82cd
+ docs/operations/listendpointszdrglobals.mdx:
+ id: 6ac5eadde8e5
+ last_write_checksum: sha1:c2de5b8884069ef0173168581bd0b6f7fc43fece
+ pristine_git_object: 8f47131ceb083a221443075f4d8b071a441dc974
+ docs/operations/listendpointszdrrequest.mdx:
+ id: 79a986f37b56
+ last_write_checksum: sha1:df4a5a38de99a5941cbca75491c988b5cd2ae5cc
+ pristine_git_object: 70f27d808c5135c8d7331f46d5858c8a1eee4d8b
+ docs/operations/listendpointszdrresponse.mdx:
+ id: f8d0c52ac714
+ last_write_checksum: sha1:259ccd67ebae39f4ab027939482c3e337ba37312
+ pristine_git_object: 31012e2cfce20ea33c3e4781f8db798e4f33d867
+ docs/operations/listfilesglobals.mdx:
+ id: 1674db6bdeb2
+ last_write_checksum: sha1:e387e5f7c8e60d7b5f47d84ccdc1132cc0efc45a
+ pristine_git_object: 5e86176bf6809f16e19cd7006288ea8d55911070
+ docs/operations/listfilesrequest.mdx:
+ id: 86c9594f103f
+ last_write_checksum: sha1:e2231e9798368d5dd629bc1b92a0fa4fc88d2501
+ pristine_git_object: 567c8a2e0864b4e4264ccce371f98e7377d2a4ef
+ docs/operations/listfilesresponse.mdx:
+ id: b2a0050d55de
+ last_write_checksum: sha1:a6b61a40a390cfd71e6b83fd6a75a106c9f8486a
+ pristine_git_object: ba3f4b56aed07f6d26ac7c9bd1d1dc21d93245d8
+ docs/operations/listgenerationcontentglobals.mdx:
+ id: 37713baa8939
+ last_write_checksum: sha1:f893103835ccc22cc34baa4dce22480a7c000f0a
+ pristine_git_object: 8096c174f094f2e67da5c47a37a0758dd7498078
+ docs/operations/listgenerationcontentrequest.mdx:
+ id: 654686591d52
+ last_write_checksum: sha1:4c09fea10323a1814ecb59f2c70a2faf4a730d2d
+ pristine_git_object: d1caecbb5dd74e62c7e8b3085e3eaf1a00ce793b
+ docs/operations/listglobals.mdx:
+ id: 2348b7bb3a31
+ last_write_checksum: sha1:f37d23d79b54bd15e1e04e6bc5932e98d4abe15a
+ pristine_git_object: b13c7abdeef1d0c6fdfb5b362906dad389796de7
+ docs/operations/listguardrailkeyassignmentsglobals.mdx:
+ id: 57ec45abd557
+ last_write_checksum: sha1:7bffa6713c1eaf6ed91c47a840550f4f8175548d
+ pristine_git_object: 8b06bf79ef0136eebd08247c5e107c36713d30fb
+ docs/operations/listguardrailkeyassignmentsrequest.mdx:
+ id: 1f3612aa11b1
+ last_write_checksum: sha1:536f4de3aafe2825993ede03269fc2f81135733b
+ pristine_git_object: 92b4303d57d5a92d09eccebe89ce29cc42f31cb1
+ docs/operations/listguardrailkeyassignmentsresponse.mdx:
+ id: 5fdb6feb3568
+ last_write_checksum: sha1:45a796c2f1733cfd4c45730337bf19bd1b2fc4f2
+ pristine_git_object: 868475866cbe31dd0c2f39de0f6c0623202c24b5
+ docs/operations/listguardrailmemberassignmentsglobals.mdx:
+ id: 5a6353376215
+ last_write_checksum: sha1:107bbd24ed759d184e02e09e3823ea4980e88051
+ pristine_git_object: 98c69e74c27079bb78f0d089a3fd53ee31bb2109
+ docs/operations/listguardrailmemberassignmentsrequest.mdx:
+ id: 1917e0e3a204
+ last_write_checksum: sha1:dc5920b96cf681bd8796a98ad172d415d4b2e4b5
+ pristine_git_object: 740af2e6f0a003b11757222108b4dae97aaffc7b
+ docs/operations/listguardrailmemberassignmentsresponse.mdx:
+ id: 2ae2804974c3
+ last_write_checksum: sha1:0552cfa576c655c577099be969e31d51d1ac658a
+ pristine_git_object: 3c19a6f1878c76159113d284f3a7d8c2e69a8a87
+ docs/operations/listguardrailsglobals.mdx:
+ id: 176198c483ac
+ last_write_checksum: sha1:a5b4b960202dfb9845892c4583ea946eab0f3122
+ pristine_git_object: 60d11dfac28f167fcd257a77239460b24687019f
+ docs/operations/listguardrailsrequest.mdx:
+ id: 99334b4d6619
+ last_write_checksum: sha1:60fa8e18479e2995997fdb8c2e5dd0460179157e
+ pristine_git_object: 285cb55ce46435b741ac96d7f980a609067d432d
+ docs/operations/listguardrailsresponse.mdx:
+ id: b96388a22ab2
+ last_write_checksum: sha1:0996fb66661b831820683fa58ca3c0819783aa1d
+ pristine_git_object: 519808b7794ecf8c5951991a0857cb27106fc130
+ docs/operations/listimagemodelendpointsglobals.mdx:
+ id: ac044b2c8762
+ last_write_checksum: sha1:b8b8e4ba63cd49b7eb1b58f0d01c0c43d6cd6a43
+ pristine_git_object: ffac4de971311269df3f52da1bcb4e890373f543
+ docs/operations/listimagemodelendpointsrequest.mdx:
+ id: c3a8c32e1213
+ last_write_checksum: sha1:bcca7bd013ef888556ed7a02bceb2e6bc1b4f24a
+ pristine_git_object: 871687a00e5eea68acdbb0f93284abf4dde36eb7
+ docs/operations/listimagemodelsglobals.mdx:
+ id: 4cf50935ac9b
+ last_write_checksum: sha1:a62af1875f13449a8431be24da505e93664ddbaf
+ pristine_git_object: e3ad1251b89f950243e48021433ae193f4f32b69
+ docs/operations/listimagemodelsrequest.mdx:
+ id: e829f52a26d3
+ last_write_checksum: sha1:cb8b441a4e0138861a6cf660367f674093844590
+ pristine_git_object: 590e46d83ce8a470b44499464e1343584fc66805
+ docs/operations/listkeyassignmentsglobals.mdx:
+ id: dabab35850ee
+ last_write_checksum: sha1:08629027424ce4f3ce6232c32f9534bedb714162
+ pristine_git_object: a93efaec31ea64e16cf9a09ac88813f172ac9ba0
+ docs/operations/listkeyassignmentsrequest.mdx:
+ id: 3732b309bffd
+ last_write_checksum: sha1:328ea504ac6b28ed54ac0cd6e79700da69bb7d55
+ pristine_git_object: 449ce29f4869fdb1af34e99e17f84cd592ff0ac1
+ docs/operations/listkeyassignmentsresponse.mdx:
+ id: 47ddfae598d1
+ last_write_checksum: sha1:db21c52900652875d2ac4874de342a3b84d9b4dc
+ pristine_git_object: b26f687df2896a0dd19a691785e955aa2c2bfdb5
+ docs/operations/listmemberassignmentsglobals.mdx:
+ id: 56bd6dc7fdd0
+ last_write_checksum: sha1:e158a1bd8269bd8767fcc71933f4e1fca6026ebd
+ pristine_git_object: e5d123af9bbfc77d33bb5d418f3a2d01aeaeac84
+ docs/operations/listmemberassignmentsrequest.mdx:
+ id: eb73c6f654c5
+ last_write_checksum: sha1:d4724280fcab63a4bb9bfc8fbc1edb4f7c5efe8f
+ pristine_git_object: c49bcf39eb18ce07fee487e245125c212804deaa
+ docs/operations/listmemberassignmentsresponse.mdx:
+ id: ec7bd9eaadcf
+ last_write_checksum: sha1:594ec98db30067a16492c7ff17815ec332abeb8c
+ pristine_git_object: 0206ec09d46dd55f167558f0bd9251872d92e8c0
+ docs/operations/listmodelscountglobals.mdx:
+ id: 53a4fd1bcaa0
+ last_write_checksum: sha1:b4ea66aca7d27460aaeb13e778bb1a6096fa0e0c
+ pristine_git_object: 0daab751f0e30b136ffdd342831b3fc0cba5aae1
+ docs/operations/listmodelscountrequest.mdx:
+ id: 8cc6953df79a
+ last_write_checksum: sha1:0cb72611fd3af9192c6f9ace893cf03f1c38a421
+ pristine_git_object: 7791b12fbcf1bddfda2449a0396be5afef0ca674
+ docs/operations/listmodelsuserglobals.mdx:
+ id: 199f6a8dda42
+ last_write_checksum: sha1:4d1918ce9fa370cf27f0de2ad725033dcc5beab8
+ pristine_git_object: f0a800135df0c6e4799128a4fbc901c576c8c6ce
+ docs/operations/listmodelsuserrequest.mdx:
+ id: 01537864056e
+ last_write_checksum: sha1:6a40c5348b33b01ac4dd2d5daac02fb237efc459
+ pristine_git_object: 3b65b53fd19e841061b65013fe3adaedebaa5b68
+ docs/operations/listmodelsusersecurity.mdx:
+ id: fa5ad15aebfd
+ last_write_checksum: sha1:daa5aafeecb31a35e7cb1bbedc70b722f6a675a5
+ pristine_git_object: c7dbff35b7c3345c54c268f81a8ad4dac24cc5c3
+ docs/operations/listobservabilitydestinationsglobals.mdx:
+ id: 3a51e19188e6
+ last_write_checksum: sha1:fa7e365b06c4bdfcd6af99c72d23c4c63218e7bb
+ pristine_git_object: 40271fec1ebd01d287c48136738911b6d1a09349
+ docs/operations/listobservabilitydestinationsrequest.mdx:
+ id: 0ab2d0dfb05b
+ last_write_checksum: sha1:5692febdcbe15275ab90bc9a29e9a51916c710c8
+ pristine_git_object: c9f43abca5b0e275fbe27f254af681b80b77a88d
+ docs/operations/listobservabilitydestinationsresponse.mdx:
+ id: 7da9d153805e
+ last_write_checksum: sha1:d24fd1ff10e5422270e71b6a89f71cd1da952d59
+ pristine_git_object: da49e5fe54162c246f3e194847ddb7faf88fa8da
+ docs/operations/listorganizationmembersdata.mdx:
+ id: d96ba08cbfe4
+ last_write_checksum: sha1:d947bba247f864f0420d6184495be6b26845a966
+ pristine_git_object: 2469c6aef198ebaa68c4d18cc8e09473504a315c
+ docs/operations/listorganizationmembersglobals.mdx:
+ id: 421fd4978d8f
+ last_write_checksum: sha1:1802b9d1cb7ea779930cf4ab1984235d08d5a315
+ pristine_git_object: de31dc7f59ad20233f8c5de6f83a8b5b7fa2226b
+ docs/operations/listorganizationmembersrequest.mdx:
+ id: 080ced0e9b96
+ last_write_checksum: sha1:3e75ad238a52eccb68fdde21a7404ead101f2ab6
+ pristine_git_object: 8e2a8b90c065f170c41ccc6c43ae30985b005a80
+ docs/operations/listorganizationmembersresponse.mdx:
+ id: b2f1b50be996
+ last_write_checksum: sha1:40541c03ce17f8ef0abb6e7108524d269559c7eb
+ pristine_git_object: 5de552097eb9a6a6bcf271d3ce7e02f42052e3e3
+ docs/operations/listorganizationmembersresponsebody.mdx:
+ id: e36aa6e41fc4
+ last_write_checksum: sha1:f37f490c3663b59684b0cd71e6b2fb9a90ba16d4
+ pristine_git_object: 56cd9c557ca4ea3fdceef083055cbfe9111562c0
+ docs/operations/listpresetsglobals.mdx:
+ id: cb767dd10bb5
+ last_write_checksum: sha1:ad554214669ab509edce05d52d3391c39cb0d44b
+ pristine_git_object: 73d98355a657b6bdfff959896d52e81dcf1db355
+ docs/operations/listpresetsrequest.mdx:
+ id: e346ae8fa12f
+ last_write_checksum: sha1:a10c2669c9ed7c8cddae336edfb9810340755f7d
+ pristine_git_object: 165dbf2fb5db115c3f5696f0ae53d7341669bf0f
+ docs/operations/listpresetsresponse.mdx:
+ id: 70641d06b5cb
+ last_write_checksum: sha1:03ffba5a51581e31fe17f2cd32e5a1a0227b14e6
+ pristine_git_object: 0bd7386a53aab4cabc81cddc4513f30972675351
+ docs/operations/listpresetversionsglobals.mdx:
+ id: b44ac6e728cf
+ last_write_checksum: sha1:22fb467f53af1b9695413b01bfb56b85e533ab63
+ pristine_git_object: f97938ef045d215a2b32a571bcb1e62f086c85e3
+ docs/operations/listpresetversionsrequest.mdx:
+ id: 3ec15e417b29
+ last_write_checksum: sha1:6f9af524a7a4cab53fd6fb1e47620309ed8d184e
+ pristine_git_object: 268fd9aa1d4e47013752ee851e0b527da1fd0893
+ docs/operations/listpresetversionsresponse.mdx:
+ id: b6ecb3a03b2b
+ last_write_checksum: sha1:e44b07ff960b84e2b48a81627b4b90e1de10a52d
+ pristine_git_object: 794d77eb2d90d230d1abb28fd3b0bc895ba49ee5
+ docs/operations/listprovidersdata.mdx:
+ id: 79d7624ebbdc
+ last_write_checksum: sha1:2159620f48a37374a43dc2e6e8880ec6ec2e1f63
+ pristine_git_object: 10580e98d79315e499d33b48020dd1d250bcee53
+ docs/operations/listprovidersglobals.mdx:
+ id: 1d2740569f3c
+ last_write_checksum: sha1:fc6441c1ccf5d2799a851d92ba3865fb8f1c9081
+ pristine_git_object: 2ad08ac053c2954bcd9b8c05ae5987df134f89aa
+ docs/operations/listprovidersrequest.mdx:
+ id: 54a7007306cc
+ last_write_checksum: sha1:e2c9a820dd528cd3f2054096f30028ccd4aa9348
+ pristine_git_object: 5514d81419c43f76554823f1217ba764cb1f6ef3
+ docs/operations/listprovidersresponse.mdx:
+ id: 0d892052ba16
+ last_write_checksum: sha1:cd343d5103e7739bcc1a69e59544c0b914db0d17
+ pristine_git_object: 81b20bf491669a461e81d96ad4c5a4c6eebd046d
+ docs/operations/listrequest.mdx:
+ id: 2652e61cd671
+ last_write_checksum: sha1:3f45b1614330e8e7ef7f0dbd58e898d544b09e93
+ pristine_git_object: a48f6951d5b0e38eb791959348f76e1741e55cf9
+ docs/operations/listresponse.mdx:
+ id: 0fbda0f81ae8
+ last_write_checksum: sha1:ba97d1d6ae126c3e7a0e28d800705847377d2e86
+ pristine_git_object: ffadcfc3029043df64d38ed75fe5047adcc9f7cc
+ docs/operations/listvideoscontentglobals.mdx:
+ id: 3332db3cd666
+ last_write_checksum: sha1:a5c1c54148c4f70454639dc474aad4fe32b82149
+ pristine_git_object: 4a27d350e57afc7609bf300cc9c29284c75df178
+ docs/operations/listvideoscontentrequest.mdx:
+ id: f268ab3abad8
+ last_write_checksum: sha1:27d2ad97328f414fd64000ea79ac957c55f210be
+ pristine_git_object: 0ecef072f317dbaab5d08f51758832a8728f1343
+ docs/operations/listvideosmodelsglobals.mdx:
+ id: 4e0c92fe99b7
+ last_write_checksum: sha1:60cd72be3e25d755cf253efcc989082cd7ad2ede
+ pristine_git_object: a7fc9b7b236e7aa3fbc3aa63571c78ac07d7e48d
+ docs/operations/listvideosmodelsrequest.mdx:
+ id: 57c6a047320d
+ last_write_checksum: sha1:1e0656e8189fbf068e87df399fbab1d18ec9bcca
+ pristine_git_object: 5bd866fda7f5c40255e4ca96c119cdd3dcbfc48e
+ docs/operations/listworkspacebudgetsglobals.mdx:
+ id: 945b47c5330f
+ last_write_checksum: sha1:b305f8026f098d98c80f7ff4d32c3d6e95c3fa4b
+ pristine_git_object: 88549dbdc9877f40b1115285cba906c838fe0cfa
+ docs/operations/listworkspacebudgetsrequest.mdx:
+ id: fbaf80b58271
+ last_write_checksum: sha1:b9166455ca5f9dfbb1d692547ef54158685ece80
+ pristine_git_object: f6101881f6a54e2b999a60c6c607b2e7bcf103dc
+ docs/operations/listworkspacemembersglobals.mdx:
+ id: 0b0ec6b14941
+ last_write_checksum: sha1:ed137f5daaa24ffda73b29d91830b62782c75f46
+ pristine_git_object: c8f845c5520b7d515548724e90034eec4e2989f5
+ docs/operations/listworkspacemembersrequest.mdx:
+ id: 094a5435a3a6
+ last_write_checksum: sha1:655363c94d19fee214f5ca0283f5f8e4c2c10ddd
+ pristine_git_object: fe553b32e8a2e665d7f60820017710b9d1d1e759
+ docs/operations/listworkspacemembersresponse.mdx:
+ id: 1ea6e450f1db
+ last_write_checksum: sha1:69a0763e6d3816274d51b825514ec38b637a0312
+ pristine_git_object: 94558019b67d816d9deb6acc7508d3f9ab4419aa
+ docs/operations/listworkspacesglobals.mdx:
+ id: 796f26dced99
+ last_write_checksum: sha1:900a20b914fa6bf043585f1e0de3692510bab04e
+ pristine_git_object: 2a6be98ca184850ec13cade870ad4f4227b4ecee
+ docs/operations/listworkspacesrequest.mdx:
+ id: ecae2cf14ea8
+ last_write_checksum: sha1:a4f6b770fbad23c6a5c3e467a914e7c0351ffa05
+ pristine_git_object: b188a1a7101520b470b9ad831ce034ae815ad2bf
+ docs/operations/listworkspacesresponse.mdx:
+ id: 9c0a0733f9d1
+ last_write_checksum: sha1:221d74185d13f295869a041f5738375c7be31a23
+ pristine_git_object: d59e254c1f1552694d0f803b6b8222dd7f542dc9
+ docs/operations/metadata.mdx:
+ id: 2dd433f031ce
+ last_write_checksum: sha1:78b9ed1337be24abd728a68bff41a10a0e1421cc
+ pristine_git_object: 33c6b11a53f8fda8c493350c83f8f81b138420c1
+ docs/operations/metric.mdx:
+ id: 43ac1599200a
+ last_write_checksum: sha1:cfb8efa24bc87017aff709963270c9b414bc3483
+ pristine_git_object: a1b3a3e10a8fc5042c341319692cb2a643cdd9fe
+ docs/operations/object.mdx:
+ id: 6fa1fcf5620b
+ last_write_checksum: sha1:3727111f1223b76f5a9f21c89fba6c59ea31d428
+ pristine_git_object: 1bfe944c2456a33d0bd4f7a71094a9272621150b
+ docs/operations/objectembedding.mdx:
+ id: 7b3f50b8bbce
+ last_write_checksum: sha1:117a05f19125765347ad14820ef173667a7b681b
+ pristine_git_object: cd96e8c7a7669ec2320a1672eb70aedd7b5a17ef
+ docs/operations/operator.mdx:
+ id: 20ee6b4b086c
+ last_write_checksum: sha1:0c683aaa5927bbe8642d8dd15aae9db206db8d33
+ pristine_git_object: f14d7d1a7d88b8e281aadb00aafcbccec23cc025
+ docs/operations/operatorname.mdx:
+ id: cd9b4abc3c86
+ last_write_checksum: sha1:80ba4042763e10684eebd2c8da7ea75416cd15f7
+ pristine_git_object: 8acee540065370db1e6eb01bfa0b044a603e2fd6
+ docs/operations/orderby.mdx:
+ id: 5465d93e546d
+ last_write_checksum: sha1:5f10a8fd8a9a7b55fc023e33bc9250f4d801af35
+ pristine_git_object: 91c6769e0026aa486c3fb4a6672c3691b2a997aa
+ docs/operations/prompttokensdetails.mdx:
+ id: 346b38e82e1c
+ last_write_checksum: sha1:ece0f5c30ccaef159981265b3ac57381289e86b3
+ pristine_git_object: 0f0b54e43577a8a835cd971f82e48c3921e3d88e
+ docs/operations/provider.mdx:
+ id: c75b3bbeeaa0
+ last_write_checksum: sha1:c55d7af5c40483430e2debde39643c564ea19838
+ pristine_git_object: 1b6b620243fb2472e1bfe2acc7bbb646b8a82a79
+ docs/operations/queryanalyticsdata1.mdx:
+ id: 0e41beea77d0
+ last_write_checksum: sha1:f9a349b4fee07f786180e94b45f92002bfae0e56
+ pristine_git_object: 474b724d1f764895d6d117fdac2fe9725c8d3001
+ docs/operations/queryanalyticsdata2.mdx:
+ id: c8d9aa23c8e8
+ last_write_checksum: sha1:d9870c6532082640be02a08fd21103d51957066b
+ pristine_git_object: 669a0894f1ad8f3941ced34c9b050c838bd66b5b
+ docs/operations/queryanalyticsglobals.mdx:
+ id: cb09420b751e
+ last_write_checksum: sha1:7d80efa46a0a891ce600c6e33724cacaf71a4285
+ pristine_git_object: d808bb3991c4dd52985a0b22399ab7674285597c
+ docs/operations/queryanalyticsrequest.mdx:
+ id: 31b3b2905859
+ last_write_checksum: sha1:1617fdaabf9f16ddd5e8be702742d89d3760e114
+ pristine_git_object: 5b3c7c98d8cee9aa77138996c3d9af3e2bd3127a
+ docs/operations/queryanalyticsrequestbody.mdx:
+ id: 1b8d33b6ac1b
+ last_write_checksum: sha1:bd5e4998875dd2b73f5b04749ae013f108119a50
+ pristine_git_object: 79876b7e840eb330cecb69b748c1dc80bbb7d14e
+ docs/operations/queryanalyticsresponse.mdx:
+ id: 26c4b637ce33
+ last_write_checksum: sha1:3f778b3125815a89ceae9aaa735ffc846fef3de8
+ pristine_git_object: 6c45e21707d13bc9d815f869560108edbcf0abfa
+ docs/operations/ratelimit.mdx:
+ id: bf8418e811a5
+ last_write_checksum: sha1:c66424d6d623dbaed03bf281ecc3776a9706b244
+ pristine_git_object: f1aa5276e08870063dd5cf05731b703c3034cef5
+ docs/operations/region.mdx:
+ id: bff19f8bb679
+ last_write_checksum: sha1:1a743e8a62051c433127a609e131187a74e2a240
+ pristine_git_object: 051bb4d1cdb3bdbcd87b29419a4a408f10bb1555
+ docs/operations/result.mdx:
+ id: b68db2e6b7af
+ last_write_checksum: sha1:3ca42544567f285e78aa012de25ac52b5d082314
+ pristine_git_object: 510072b9f3e6d9dec6bb430010085d3e284d2388
+ docs/operations/role.mdx:
+ id: ee0d3c3547d7
+ last_write_checksum: sha1:11ebdfcfbf9a1197a42516d3daa0eaa3e2955f81
+ pristine_git_object: 9e1219b8c4da58c9ee1d0707aa809d3d3b54f372
+ docs/operations/sendchatcompletionrequestglobals.mdx:
+ id: 8ad074be0768
+ last_write_checksum: sha1:93462ef7b25e039e770050019663f6b41dbf4187
+ pristine_git_object: 290c9540b23562b48b6060a9006611efe78619b0
+ docs/operations/sendchatcompletionrequestrequest.mdx:
+ id: f5d3cb464056
+ last_write_checksum: sha1:40a3a958a12d3c6a5b2739f879f49324b7f469b8
+ pristine_git_object: bd3e6d5c14ab837a01c7b0388c69b9ce88492d50
+ docs/operations/sendchatcompletionrequestresponse.mdx:
+ id: 8cb7359a629c
+ last_write_checksum: sha1:710032d2b0328c856d9cf6d6eca279e0b960ff6f
+ pristine_git_object: ed3d7a92aa56dde65beae92df86cf13120828823
+ docs/operations/source.mdx:
+ id: 53486739ebf2
+ last_write_checksum: sha1:01b8fb26c5211183dee2ba17f235531cba037e5c
+ pristine_git_object: 20b67f6c8f15960455f78cb1fd44c6d8a065ac84
+ docs/operations/subcategory.mdx:
+ id: b3291e6c44b9
+ last_write_checksum: sha1:2594ecd2302b9515e5997f4fbaaebba4a9a0615c
+ pristine_git_object: af1d9e961714b356ae1a7cd86d64ff636215bae8
+ docs/operations/tasktype.mdx:
+ id: d3da8106d2d1
+ last_write_checksum: sha1:06aede3448490e1fb77b5c1b758238a11ce1dceb
+ pristine_git_object: 7cdaa5db9c5d84013c3aeeaf1f7493c1768c1fef
+ docs/operations/timerange.mdx:
+ id: 03a218211f06
+ last_write_checksum: sha1:3cdcfbfcdb71dcc17a0c3b4cd5704eac3718fa0f
+ pristine_git_object: dc194bad92caf2afd0759830559be89a8bafe5a4
+ docs/operations/typeimageurl.mdx:
+ id: 66578c3ea6a5
+ last_write_checksum: sha1:e3275995c5351075e0c4082a161891cf710b8fdc
+ pristine_git_object: 655e6725e598400009e8c53a72f28df6344c07f8
+ docs/operations/typetext.mdx:
+ id: 1028e314e662
+ last_write_checksum: sha1:21a2b31e9c9c12e1f1ea477ef497998cd4982b05
+ pristine_git_object: 7f1519173ad9246262a680667ec1b2286e15e778
+ docs/operations/updatebyokkeyglobals.mdx:
+ id: 5d2a09eb8596
+ last_write_checksum: sha1:0916c04c06677f218bd4a5e19ad03feb0710e682
+ pristine_git_object: 905abf791c1db3da9d3e5a639e7c0bce739a35ea
+ docs/operations/updatebyokkeyrequest.mdx:
+ id: cef280b21ee9
+ last_write_checksum: sha1:86da6f664f74203209024032ed6c1281cb696757
+ pristine_git_object: 546e001df35e2526f0e8bd92a6836be03cf7cc5d
+ docs/operations/updateguardrailglobals.mdx:
+ id: e3ce035d5a7c
+ last_write_checksum: sha1:6dc745162b36e08d38d6ea094282f5c45baf71f2
+ pristine_git_object: 0cd4bcb1e034aa7d2c4b5884cffdb1986e5f202f
+ docs/operations/updateguardrailrequest.mdx:
+ id: b3a26bb527db
+ last_write_checksum: sha1:61d23143ea26684dacce468f671014cdfa4ab811
+ pristine_git_object: b89a6072a0e463fdc6e8cf72fb69947c72771768
+ docs/operations/updatekeysdata.mdx:
+ id: d398ba596e27
+ last_write_checksum: sha1:082cc16d58504992f5ae5fc33c29a0992d8916f8
+ pristine_git_object: abc5d4117786c10c546e078bf4d323aa16ca056d
+ docs/operations/updatekeysglobals.mdx:
+ id: b28932f180bb
+ last_write_checksum: sha1:1f5778b747552e491bdfff8ae6f24fa13d94e772
+ pristine_git_object: 2b4abc3fc7e4ee68ce307d3c6762267cf6ec2ee0
+ docs/operations/updatekeyslimitreset.mdx:
+ id: aecd0e37e02a
+ last_write_checksum: sha1:5ef348abbf2f43cd813b1318903c3142e70a92ca
+ pristine_git_object: d128ade18d926c0d95c4795841ece8eaee76c761
+ docs/operations/updatekeysrequest.mdx:
+ id: 8e2d9fcdafd9
+ last_write_checksum: sha1:da1d7f64abd5a99ff7ccfc5bed51ed58e0faaa85
+ pristine_git_object: e6d3d7f0130773c07971473e1bc4e536b403a993
+ docs/operations/updatekeysrequestbody.mdx:
+ id: dc55066cca3d
+ last_write_checksum: sha1:28fd19213cd690e7aec9fa106db1b835094a9d3a
+ pristine_git_object: b293f36e7709b7bebad59271db0885d29711c2d9
+ docs/operations/updatekeysresponse.mdx:
+ id: a97d51fea627
+ last_write_checksum: sha1:75dc503b775f15779c028dd43954c878c76d7675
+ pristine_git_object: 942a8bf96ca51928e598d34fa497a58190cf0b5b
+ docs/operations/updateobservabilitydestinationglobals.mdx:
+ id: f85617547bfa
+ last_write_checksum: sha1:c1f4d1a72d38359c5bd04f2845a587d2ad09d493
+ pristine_git_object: f5a0ba069a934b5f912f0f249614832c436d55a2
+ docs/operations/updateobservabilitydestinationrequest.mdx:
+ id: d83497c7a77d
+ last_write_checksum: sha1:de57252c9ee61e445b637c961ffb2a5e16a8b6f7
+ pristine_git_object: 16926383142c262c3c0f352bb40319fa48082fcd
+ docs/operations/updateworkspaceglobals.mdx:
+ id: 053b3b5bb1eb
+ last_write_checksum: sha1:975e76f8c53dc170a42ecf80d01474518dda8944
+ pristine_git_object: 34ddab96d1fa3c6a7087e6503f8271fd9f09d99f
+ docs/operations/updateworkspacerequest.mdx:
+ id: f2e782002c04
+ last_write_checksum: sha1:f04d312af9e3ccc5ce53deb68cb6ade27c300dec
+ pristine_git_object: 086cdf63dfdacf09da11a66301f90245ac7cbb0b
+ docs/operations/uploadfileglobals.mdx:
+ id: ec9ebdf283f8
+ last_write_checksum: sha1:50f87018f87e3b469cd1f8a0795fc186faa0daa4
+ pristine_git_object: 41aa595e25196c37fde92a5e7ec72a55d77c8472
+ docs/operations/uploadfilerequest.mdx:
+ id: b4dafdae4a55
+ last_write_checksum: sha1:bec419780da7e4692473dc623f7c5f869e851269
+ pristine_git_object: 70188129763ff300a0f3faa45134f7299c9bdf39
+ docs/operations/uploadfilerequestbody.mdx:
+ id: fde4cc558d95
+ last_write_checksum: sha1:74a28c6834102e4511000ad118bb2892aa0d11cc
+ pristine_git_object: 4a9975fed03ab1d97c880283bedde17ce90906f9
+ docs/operations/upsertworkspacebudgetglobals.mdx:
+ id: 08d7f90d9b03
+ last_write_checksum: sha1:3fff3f45d7170916f5c4d12557a97cd9693bbac4
+ pristine_git_object: 67a0d7d1d0adf059607b9a3af6564590d9621f76
+ docs/operations/upsertworkspacebudgetrequest.mdx:
+ id: 52d731cc0309
+ last_write_checksum: sha1:799249ddfb07a424dc30f5653dcc8c60a123ebc8
+ pristine_git_object: 47fed589ac984de05fa549aa790c7e8aae98e342
+ docs/operations/usagelimittype.mdx:
+ id: 5b5490f35b61
+ last_write_checksum: sha1:70ef5b79b5514976823edf8da81f7bd8d9f93015
+ pristine_git_object: 8541eefab0e7110d9a895d66bebd1779e456a264
+ docs/operations/value1.mdx:
+ id: 447e93c2bc33
+ last_write_checksum: sha1:b2c81e4b7897f8beaaed9e3891f2a77d57ef1734
+ pristine_git_object: 4d269a48eefb02feb81b720b2b21cc298b1d52e8
+ docs/operations/value2.mdx:
+ id: ebf32fddf22e
+ last_write_checksum: sha1:18f440dbfdcb2498771fe53a98b054d4d76f283c
+ pristine_git_object: f72dd54a6f1db3e758a924691b07ec17f38bc01e
+ docs/operations/valuetype.mdx:
+ id: 29a8210305d2
+ last_write_checksum: sha1:5ea5c9a100089970356c552e3d9792c6657d0143
+ pristine_git_object: 87a439af5a321a5133bcbe2e5cb5b15ca45a8e7d
+ docs/operations/window.mdx:
+ id: cdb33aa5c15a
+ last_write_checksum: sha1:36234c180ece9d264d313db08936d040af86cb8f
+ pristine_git_object: 52168404b9b71ed5151ac09d81cb9e148f1a600f
+ docs/operations/zdr.mdx:
+ id: 198b78abdff6
+ last_write_checksum: sha1:8a61e4b23d0f7e8376b2227d6c87ca49a473f7d1
+ pristine_git_object: f265978fdb338b412232349476bf1e874833c9f8
+ docs/sdks/analytics/README.mdx:
+ id: 281aa5320be1
+ last_write_checksum: sha1:04cc5064d83eda6623841e7052f0fe7de81c833f
+ pristine_git_object: 4e5df61630ce21da071bcc35a50a8cca491d6e4f
+ docs/sdks/apikeys/README.mdx:
+ id: 27fcaae1c346
+ last_write_checksum: sha1:cf0d94f5457263da55ad5b310c06473db4f5ae80
+ pristine_git_object: e5b775ce85d6766e7213de36d4f917892687e9e6
+ docs/sdks/benchmarks/README.mdx:
+ id: 5b483a6770ba
+ last_write_checksum: sha1:580442b871377a1d5191d9d3d1f30b20667115fe
+ pristine_git_object: 072d78b5b5aedcdc34724557e76cc0fa03994fba
+ docs/sdks/betaanalytics/README.mdx:
+ id: 239279ebf01b
+ last_write_checksum: sha1:721b90a76008fa9876ce046a84a7b54bae0dcef8
+ pristine_git_object: 716e4631b3b48e11081ed70ca5acc5826b8a6383
+ docs/sdks/byok/README.mdx:
+ id: 17792f3b180d
+ last_write_checksum: sha1:18692d1b1454837b1592113fe1aaba1b1d37a805
+ pristine_git_object: f1da2da04de257540172ce771ed1b665f0da9010
+ docs/sdks/chat/README.mdx:
+ id: 1dd859c23fe1
+ last_write_checksum: sha1:b6c104dc6b0c3461a2264a95d886f860e7277780
+ pristine_git_object: 390ca7cf2ff70cf7a4273cd1c8c13cb58eb32971
+ docs/sdks/classifications/README.mdx:
+ id: 4786130ef02a
+ last_write_checksum: sha1:87ea3518b4147ae7833b01da7be92d41a4b49df7
+ pristine_git_object: bed5f74e5e8269cbba66943524ffa5206c933de3
+ docs/sdks/credits/README.mdx:
+ id: 2ba51de8de3f
+ last_write_checksum: sha1:08de2963f78b645eaa14fa8511552bae2ddccd75
+ pristine_git_object: 414ae2830c58add7ad904cc9ffc5b46ed65058df
+ docs/sdks/datasets/README.mdx:
+ id: 15e5ab0183de
+ last_write_checksum: sha1:91e92cf17fa0a3a1729a8777bad701e69aeed404
+ pristine_git_object: 9cdcae1f6c83a4b1918d00c221f619978967f490
+ docs/sdks/embeddings/README.mdx:
+ id: cd71581df291
+ last_write_checksum: sha1:627e1efaacb2a29cb97e9d184ead987d95008bed
+ pristine_git_object: bf8b8c511bb6de4fcb0f24060788581aa51ef1a7
+ docs/sdks/endpoints/README.mdx:
+ id: 62dfac9f7b71
+ last_write_checksum: sha1:05fc24509aa174b336fbe7d1a95faf7beca9bca3
+ pristine_git_object: 741c77c1982e1f7fc1c2352ce5199c921f9ee82f
+ docs/sdks/files/README.mdx:
+ id: 1a0c257e330c
+ last_write_checksum: sha1:475d99ba1b2bb8b2826cb43cc729753fbfc0acf8
+ pristine_git_object: 5327882a8d7463846af3285afa1bd38432cec275
+ docs/sdks/generations/README.mdx:
+ id: a754fecc8514
+ last_write_checksum: sha1:e4276fe2f85be0fbafaf573fe58d17b7236d0652
+ pristine_git_object: b29ea120367f5944c6a71e31f6c3d5e07ab4b798
+ docs/sdks/guardrails/README.mdx:
+ id: a0cd4218b8fa
+ last_write_checksum: sha1:b6543c22a38aca53d7bfbc8d41ed482965fc3b3c
+ pristine_git_object: d164a1da79b0838bd68f0a6560a0317eb86e0226
+ docs/sdks/images/README.mdx:
+ id: 534a6c102c4f
+ last_write_checksum: sha1:cdebfe56dd55af4bf9248c8a61366d1a6c6b894b
+ pristine_git_object: cb61de85f54743e18a3e9ff2a861ffc510af713f
+ docs/sdks/models/README.mdx:
+ id: 58f1ca464e0b
+ last_write_checksum: sha1:13cd9e4631b4e19a7db5ad93ce63d66358ffb935
+ pristine_git_object: cc84c8d7382e6cee53ceb625344dadeefbb48b5d
+ docs/sdks/oauth/README.mdx:
+ id: 42b5079343d2
+ last_write_checksum: sha1:60ecae1338bc4487fbb050b6044ddc08dd7d1685
+ pristine_git_object: c8f7dfd9fd46b60a5814250f8cb2de313166e2c3
+ docs/sdks/observability/README.mdx:
+ id: 75811527e651
+ last_write_checksum: sha1:83e566a1ab2ca84c1139d44060b3740a9a543e1d
+ pristine_git_object: 869bf82e6c2a769a2017220c38e6a6ef1fd270fd
+ docs/sdks/organization/README.mdx:
+ id: f41b85542db0
+ last_write_checksum: sha1:05a25a46b97551c8b92fbe3ec2eb736a562ca8bf
+ pristine_git_object: 6e199abaeb2f5269a885637d65bb176fd235a61c
+ docs/sdks/presets/README.mdx:
+ id: eeb505928d52
+ last_write_checksum: sha1:6f71a463dd8d32e2a002e86c3ff37a44350b54af
+ pristine_git_object: 5e8523f49f3809d1a9f0af88342148d40cf8bb4d
+ docs/sdks/providers/README.mdx:
+ id: 5ea9af111324
+ last_write_checksum: sha1:570b55655ee7602d3807c3218e450741f634eed6
+ pristine_git_object: 7571e2581a73919541d9712f6c1f88f9c0d2b4c9
+ docs/sdks/rerank/README.mdx:
+ id: 68cdfc7f7dca
+ last_write_checksum: sha1:e72927c64eb545386bb50e9d30e8092392f2eb0b
+ pristine_git_object: cd1b341b1b7c0284b9ba9b102bd8020e0d7ce707
+ docs/sdks/responses/README.mdx:
+ id: abab319e080e
+ last_write_checksum: sha1:c93ea3f5b1bedad1e7ac32b47a28dc3fc1bc8bae
+ pristine_git_object: 03281f8cf709ebb9a81700ade4cf9bc0db665eb6
+ docs/sdks/stt/README.mdx:
+ id: 190b0dc9a5d1
+ last_write_checksum: sha1:7647525772ccfd7b3b3653eaca748e0e785941b0
+ pristine_git_object: a5097c97cbefb52415e2c830b7869525e994a9da
+ docs/sdks/tts/README.mdx:
+ id: cd1132543884
+ last_write_checksum: sha1:8930237642313a1db6fdce5f7ea2b0680dc7c5ac
+ pristine_git_object: ece7fa92f85b1d8f702ecf2855f7267120d4efac
+ docs/sdks/videogeneration/README.mdx:
+ id: 9a8fa04c3872
+ last_write_checksum: sha1:7d3c54cf2daa98e25df18bc27cc4ca30b2b1f03f
+ pristine_git_object: 429ca7dad6a66516aec6bb1e674af1e09dc42dd5
+ docs/sdks/workspaces/README.mdx:
+ id: 0c75d023ef6b
+ last_write_checksum: sha1:29a4f4699004ed16b9c980463a649576b30fe035
+ pristine_git_object: 37f2346cb81f6c7712df90b676b5084808b609b5
py.typed:
id: 258c3ed47ae4
last_write_checksum: sha1:8efc425ffe830805ffcc0f3055871bdcdc542c60
pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544
pyproject.toml:
id: 5d07e7d72637
- last_write_checksum: sha1:83883613f4ce5a35940a61255018ae96c5b161a3
- pristine_git_object: 2c73ae5647842e85c54240de3c2634ef1644c424
+ last_write_checksum: sha1:77dc4bb23124c68a4514773255a6be898795a345
+ pristine_git_object: 0ee40fce00c555f4ae902fe221bccbc7bc2cf960
scripts/prepare_readme.py:
id: e0c5957a6035
last_write_checksum: sha1:77f44b60b98bc126557ec27391f91dfba764bb54
@@ -6366,144 +6402,144 @@ trackedFiles:
pristine_git_object: bea18a51afb92e94dd85c09dedd566cecd468288
src/openrouter/_hooks/types.py:
id: 265bf3035ab7
- last_write_checksum: sha1:77f7fb66371bba9fb16a209de6ff3b76eb6a5ef8
- pristine_git_object: 07ace03229fd3267623c8f48665d2c3a67c3565d
+ last_write_checksum: sha1:60b6add35a1f0e631197e0fa54da49785143dacf
+ pristine_git_object: 86713cfea633e09d33b3d4e65281071fe20e6137
src/openrouter/_version.py:
id: d8d15ad6c586
- last_write_checksum: sha1:9191ddd2824cab64aba72a37907c39c13bae5e7b
- pristine_git_object: ae046a12bfe3757e47b922caa4ee98754663db43
+ last_write_checksum: sha1:07a6785b54ea278e7f66f25b16dc131011c8fbd6
+ pristine_git_object: c2263273c453c720d864cf483e26066fd7edb1e2
src/openrouter/analytics.py:
id: cb406b5aaabb
- last_write_checksum: sha1:6d47d1ab3da9cb4ac9f0a2bfe442f1a82a614f35
- pristine_git_object: ea004eaf47a1a48622d4a4276fba1e329d5559ab
+ last_write_checksum: sha1:9e709b71dd0611056dc0cec6150b578defe32841
+ pristine_git_object: ddb44a129e8f45e7524fe5615a23f1ccc70bbe71
src/openrouter/api_keys.py:
id: 876fac88fff6
- last_write_checksum: sha1:9dc40b10044a433ab5718c6db5122648c9b1d44a
- pristine_git_object: 6c2cdf75cb4578b25bfd7cd17bd99b982a4a2e36
+ last_write_checksum: sha1:3148f6ca155d917643f21e9e505f3f478d79b464
+ pristine_git_object: 76eafbc60f7d5375ff4d4199ad90cd5d8f93e3e0
src/openrouter/basesdk.py:
id: c5733c5a1e12
- last_write_checksum: sha1:71f242fd9955e5a17a8d055e2210cc2708bb94fc
- pristine_git_object: fcffdcc6eaa61a4b79f7f1f76458eeb27e8f896d
+ last_write_checksum: sha1:65769ff2cb5473f85b364c6213a0ddc8c68644ea
+ pristine_git_object: 7a562e21c7e66c9db666ead83748b73adefe4278
src/openrouter/benchmarks.py:
id: 178d2ad8d706
- last_write_checksum: sha1:1a4280d54c5db249e7089d03c304f57c51765b04
- pristine_git_object: d29a685964300932a574e77d64558f7a34e97796
+ last_write_checksum: sha1:d9ad86c5125ca8e42125fb886e86583fa3ea5b50
+ pristine_git_object: 1b503c89b32b0381c93ee627e74428ae37286e33
src/openrouter/beta.py:
id: fffdf54fd8f5
last_write_checksum: sha1:7999d9294e23e166c6b27236262f1fb40139a4d1
pristine_git_object: 9c02cc64163adf027507af763e7b612d3b704adb
src/openrouter/beta_analytics.py:
id: 81988b170188
- last_write_checksum: sha1:56eec7f30bf7d6cce1548863eae879b339b2a76b
- pristine_git_object: 9db10e868aa38e1c38036d55416f7bb39c71bc0d
+ last_write_checksum: sha1:91cc3d033be8ad49f3d2a67e9dd1ead470c4016f
+ pristine_git_object: bcf5829eba6df16f8984b756a46c8836b799dc98
src/openrouter/byok.py:
id: bec352462ae1
- last_write_checksum: sha1:1368b36fa52094caafdd2d9a50f6b4b762c8983a
- pristine_git_object: e915cbb90c56bf622de74204ebc8e62cd4af92ef
+ last_write_checksum: sha1:14ffff34cdb97e81dd5ef9d7ba0f105b09b7ba48
+ pristine_git_object: fcbfd1acaba89492d5ca7a58aa1126073d5cd5d7
src/openrouter/chat.py:
id: 723fdce15c1d
- last_write_checksum: sha1:045ca733908a82e099a0c2a76c6c498025827391
- pristine_git_object: a1894915bd32aee65f019885634eb7908970a046
+ last_write_checksum: sha1:79e9c02b4a16cae3c202b5ae0bfd6cd1d0d6f89b
+ pristine_git_object: ab93b1be035fe591f6c8fac84b57ecad89ff5b1a
src/openrouter/classifications.py:
id: 4f2efc24b95b
- last_write_checksum: sha1:9a80e34828aaa3aa2bb2ecca3b665d4cb454d68e
- pristine_git_object: 2654cbc562cc83940a6713b68f3967cb3f9dcfbe
+ last_write_checksum: sha1:3ab6fcd9ef679cd2149ec8dfbb4a86109cd152ad
+ pristine_git_object: ad3d247954547814054c01989a2dff3d12b3e4e1
src/openrouter/components/__init__.py:
id: 81754e97b3f4
- last_write_checksum: sha1:d82d36a0074b74d4556f1226230bc17565ec0171
- pristine_git_object: 581b01ca5299006b8b6596ea466a7b26810e594b
+ last_write_checksum: sha1:08af0c2202383ec06d9bc58553df3ceb68272edd
+ pristine_git_object: 192d30802850b8d05e199dade47c0e86deb3c689
src/openrouter/components/aabenchmarkentry.py:
id: e2e0f0b48c82
- last_write_checksum: sha1:1b6b66672fb80dccdc39843a98bdef6d7d804364
- pristine_git_object: dcf36134b499bea29d47a0aa4df1eb2963955f75
+ last_write_checksum: sha1:fab4d9a24d2cea937bb749d46c5f83941e99d65c
+ pristine_git_object: ad39bd9765938465f06b5422706fc867db11e468
src/openrouter/components/activityitem.py:
id: 3bbe7d35f459
- last_write_checksum: sha1:32b873ba5c0a9dbf5f0cf32c0217ce17395ae69e
- pristine_git_object: 2f00349d0523c4686115fb2039b6f8fe7043e849
+ last_write_checksum: sha1:478bb399829efe851d28bf5124f35cd7ca522665
+ pristine_git_object: a234e6ddf7aec8c7c3d6bd5e4118015c8fbff274
src/openrouter/components/activityresponse.py:
id: 0bd8d79c3144
last_write_checksum: sha1:db8e3247cf9eb2c235d32949d36f7ae95870e8ed
pristine_git_object: 1138e6f6bc025546a86877749ce83aca4c46499a
src/openrouter/components/advisornestedtool.py:
id: 768fcc6bad2b
- last_write_checksum: sha1:199df787c5418a426e0c2104945f381890d461a2
- pristine_git_object: e21d2d2322aad32dabda485132c4046d2ec6de89
+ last_write_checksum: sha1:9c4303eb7fbefd1d7200cd588e7ab7e55db791e8
+ pristine_git_object: b661de1ec0b9a84d331d254e9f63656229d3f2ec
src/openrouter/components/advisorreasoning.py:
id: d5af5c19fc73
- last_write_checksum: sha1:db9d67036b51e37b98ea76b383528af3d48f6ca6
- pristine_git_object: a2ab43864d385b5554fc911cc9ee9ebe9893c10f
+ last_write_checksum: sha1:0fd32e4ff2d89f7cea861d6e691e82a7e1ff62f2
+ pristine_git_object: 0b87e3c6bde34128215d2228f2349a44ff453a5b
src/openrouter/components/advisorservertool_openrouter.py:
id: 4442cd9ad387
- last_write_checksum: sha1:c1825628e0bbba268e5addad89e7abe6e45b2926
- pristine_git_object: 923d26368a221b79e489ab8bfa4356e05cbf2a5a
+ last_write_checksum: sha1:74597f510ec8044437d9a0f5abd6465152141c1d
+ pristine_git_object: ffec551949aaf877801193abb0dd8ed6d015453a
src/openrouter/components/advisorservertoolconfig.py:
id: 683887bb9db3
- last_write_checksum: sha1:2bcc6dfe509c99927ae841738dd58457f8fb79d5
- pristine_git_object: 4540be9c1c0935cc1a3c4c3445a272c4616abb8d
+ last_write_checksum: sha1:3a801b02cc92e02a00f0e26f377fb93a6893641a
+ pristine_git_object: d92e19f8e9bec36933cd3e5d7ccc1690f14b168f
src/openrouter/components/annotationaddedevent.py:
id: dc032c9ad744
last_write_checksum: sha1:8e5d49d2b57114df7f4559b611d40769e65f9f78
pristine_git_object: 597a5e01e843b06758f9c49b32d5d18d473dd106
src/openrouter/components/anthropicadvisormessageusageiteration.py:
id: 121ee5a5d831
- last_write_checksum: sha1:dc0947f15ab23a783f4146c03b046351836300c7
- pristine_git_object: 86b0175b497b07f6deb5f31edf994183c891d1e3
+ last_write_checksum: sha1:3c5f92c130f9ce8d291bb69116c822b64f6d50c4
+ pristine_git_object: 7b83b750e97a5dc510e7b174473ab778578ba6fa
src/openrouter/components/anthropicallowedcallers.py:
id: b51c080db25a
last_write_checksum: sha1:250ea2824392b7c385c4375a029a256f3d10afb4
pristine_git_object: 500de1c23584b0c3d341a266cae5b820ea386dec
src/openrouter/components/anthropicbase64imagesource.py:
id: e6a1034d5833
- last_write_checksum: sha1:4c1263288e19feb63ec62817f9ea77707958c746
- pristine_git_object: b49ef8cacd77d250f3aaa013a02fbf693d1bef16
+ last_write_checksum: sha1:620eaa571df716582c5ff6477520355ae7d69f27
+ pristine_git_object: 18b184048404fbe618885292b9977178804775f4
src/openrouter/components/anthropicbase64pdfsource.py:
id: a4fa00bbe8ed
last_write_checksum: sha1:a7ab626cc971478afac1d68b71c49b497e4b8662
pristine_git_object: 870c2e75705a43762b7aa2797e5b0cde4fe40d87
src/openrouter/components/anthropiccachecontroldirective.py:
id: ffa72802cd82
- last_write_checksum: sha1:d1bb4e32bf3463f8d5c05c2aea74b2acdbf5134f
- pristine_git_object: 4b2567b583ce4e52e0607a0fbdb15a1d617df029
+ last_write_checksum: sha1:c73ec323b8d1e650f51d91f00b824804e4b9f6c3
+ pristine_git_object: a9292b2d0dc104b016f7bc2600275d87fbd9ecac
src/openrouter/components/anthropiccachecontrolttl.py:
id: 2ec3e3546afe
last_write_checksum: sha1:338e193bd6929eb6ed69da9bdb4e608e5db6121b
pristine_git_object: 05a105c6e4f6c9037f953e4620576a8494645865
src/openrouter/components/anthropiccitationcharlocationparam.py:
id: 6f6f0732b22f
- last_write_checksum: sha1:a7d049bcc5d0a330259b3d9cf108bc9813f131bd
- pristine_git_object: 08a89abd4ff0a298d2acb18ba2c5679ccaa9bbc1
+ last_write_checksum: sha1:f06cdcdd405abb4222450f027fd38f29b05efbec
+ pristine_git_object: 4f0862e0351e9c829cc98c7e72037f095712a093
src/openrouter/components/anthropiccitationcontentblocklocationparam.py:
id: 057124c0e6c3
- last_write_checksum: sha1:fa10a8053e547b3aa5b6acfee29f78dd49c77112
- pristine_git_object: 8763d42f5d83efc480dbb58dedeb54aeb4c12605
+ last_write_checksum: sha1:d7e044721195f51ef8ce3b63296a83f0b4fc98b6
+ pristine_git_object: 7bdfee1f4171c8e17b2d9b919bc8486c86fa4db6
src/openrouter/components/anthropiccitationpagelocationparam.py:
id: "8776686778e3"
- last_write_checksum: sha1:5d18922be6bdc1f6accf996602fc9927ec2c6bf7
- pristine_git_object: 24af0c24590fdfb65a1ba4a6ac88bb1f4482e1a6
+ last_write_checksum: sha1:9a7144f078d7b404bf3d90eac0d3a16a24ba3bba
+ pristine_git_object: cbe0a66bb0fd32915d5f1379990f0b55b1be34e8
src/openrouter/components/anthropiccitationsearchresultlocation.py:
id: 3bed26599605
- last_write_checksum: sha1:47a91f6d42c222e92ef50ed86dc086cabcbfe4d0
- pristine_git_object: 2c3548be8462d3940c937a5dead7d55454766bd8
+ last_write_checksum: sha1:2dd310e399d7957ff933cd7163b7ca9f9fc348f4
+ pristine_git_object: 8a90ed4f254de659efca56a8ad691dcca505bf1b
src/openrouter/components/anthropiccitationwebsearchresultlocation.py:
id: 1a120a6f2e0a
- last_write_checksum: sha1:997517abf99c9f97c4c76936f92a95f40eb0cf7f
- pristine_git_object: e64d16928a4efa5c07e431a317ec573963fe9310
+ last_write_checksum: sha1:e4841838144a600bbc556aed274ecdd56aa2b51e
+ pristine_git_object: 4d061c61a4c7c6cee32194f7fe3ab9bebf00ec6f
src/openrouter/components/anthropiccompactionusageiteration.py:
id: fdfc1ef0420f
- last_write_checksum: sha1:a30d2b6892509f226083dfd421f0b633ecc614da
- pristine_git_object: 5b00555a9e606281c749d7d147ae58ca0868e396
+ last_write_checksum: sha1:67b10e83d2fc7777319f6c51d4e5cc7539b9eccc
+ pristine_git_object: 50ad24f32ec87623c006381c477c46f44d84c753
src/openrouter/components/anthropicdocumentblockparam.py:
id: 2c3093530540
- last_write_checksum: sha1:db21d071f7ea9b0597a83da88697c1bc11d72981
- pristine_git_object: 9aef9c761fdb61ab7c4ff753b4dd2023e27def1e
+ last_write_checksum: sha1:904f1546a7a69df231395f33cb5b1b71ae0c2611
+ pristine_git_object: 686764bb6991204328c5017ab636e3d38a4f2f09
src/openrouter/components/anthropicfiledocumentsource.py:
id: d824b52285d7
last_write_checksum: sha1:5d3c89e2d60df0116aed28d9a2274cf61536af41
pristine_git_object: 06ab054ee7227cb2186c19c108145d8e19646044
src/openrouter/components/anthropicimageblockparam.py:
id: 71cab07562d1
- last_write_checksum: sha1:66f59a1cce48420768957b63bb84ab02da6c144e
- pristine_git_object: 05e677372c952726c9cfdfbcbc80b04ef62c7b82
+ last_write_checksum: sha1:7077151d8ef411a85bc3cdafb17ae7969c8bf7cb
+ pristine_git_object: 979d0464c4ef00aba59e1431a2bbd3568c411246
src/openrouter/components/anthropicimagemimetype.py:
id: 2434bf06fc4f
last_write_checksum: sha1:2016e4ef5d678a2af645d50cb02e022c3918d494
@@ -6518,28 +6554,28 @@ trackedFiles:
pristine_git_object: 8ff4915a203908a5ae986f28357b7211590912d2
src/openrouter/components/anthropiciterationcachecreation.py:
id: d8eff6dbf240
- last_write_checksum: sha1:54740194c3948b6066d700b47f54f9b42912ae15
- pristine_git_object: 9447771803562a9dc7c9509c87c63ad65a914757
+ last_write_checksum: sha1:866b822649d4b03cced63686a99ca0d4335a7c4c
+ pristine_git_object: b32195ebb448bdbab0e35219afa6e5f03d671874
src/openrouter/components/anthropicmessageusageiteration.py:
id: d94b609d7d8e
- last_write_checksum: sha1:64cce42227c30259261e6c0e9958a17e2afddbde
- pristine_git_object: 0c76c28951383fc04cc9a95224811a0692d058fb
+ last_write_checksum: sha1:6949f3d16ef26c66e909304d5fcfa4dad55cd74c
+ pristine_git_object: 49e169b42f244778d55f8b09908b76a1736488b6
src/openrouter/components/anthropicplaintextsource.py:
id: ed38ef79c74b
last_write_checksum: sha1:b6584da4f7255412f12de31e02c522fb84d4cfd0
pristine_git_object: d16f6dc9a2449185ef45731cbcd0a78c266745ef
src/openrouter/components/anthropicsearchresultblockparam.py:
id: bccb7c6b3128
- last_write_checksum: sha1:2917cf9fe9a10f160359e7f43ecdcaf7bf172ebe
- pristine_git_object: f953ecdcfaf801ee1f89d23b3463642adbd85221
+ last_write_checksum: sha1:aa8fcc04743f07cf8a72b3cbfaae212524101700
+ pristine_git_object: 5925732967541b0d598ac249f372e5b18f975b0d
src/openrouter/components/anthropicspeed.py:
id: 7e39c29f3d89
last_write_checksum: sha1:19e37bf7ec082d89258f44674405811cc8a010ad
pristine_git_object: 4f9c2bc739541b12c381e3d6265184af879cc1ff
src/openrouter/components/anthropictextblockparam.py:
id: f387daeeb940
- last_write_checksum: sha1:315ad4fb2c0cede75e5b8dfe3d8dcd4842a03322
- pristine_git_object: 38b493a385198c09105ea265b7df96d068a8bd15
+ last_write_checksum: sha1:f58942e9bb462aa291affec04500e112495a9acf
+ pristine_git_object: ed10fdcf8fdb3fcc18a59ea6cbaa1035bb987a5f
src/openrouter/components/anthropicthinkingdisplay.py:
id: 5d63f1a15f67
last_write_checksum: sha1:388d60bbe78d3b848744564f91b31142d7bfc7e3
@@ -6558,8 +6594,8 @@ trackedFiles:
pristine_git_object: 97aca7f4209ba9ad038b97e35b9b8b8cd0e6e168
src/openrouter/components/anthropicunknownusageiteration.py:
id: e0c582be1ffd
- last_write_checksum: sha1:7c50a515d361fdd0008f1c04a4babdcfe15c1b55
- pristine_git_object: 5bbd2e0feacf932a927422a0ea9667493d9904cf
+ last_write_checksum: sha1:e1480de604880eb711f691b92a53c93f784ac439
+ pristine_git_object: 2bf0af881edb2ce3c4de011979d1827abc8af48a
src/openrouter/components/anthropicurlimagesource.py:
id: 291b4d476bb8
last_write_checksum: sha1:e6a8b32f053bfbe3debb8940b03135d1e8a00eb5
@@ -6574,24 +6610,24 @@ trackedFiles:
pristine_git_object: a984e7a5e0de4d93e4a65582d97b8eb9c3b1a1ab
src/openrouter/components/anthropicwebsearchresultblockparam.py:
id: 7a85be31694c
- last_write_checksum: sha1:a87c04e8e05b3424f44a8ed55225b1bcb05b40b2
- pristine_git_object: b9df82ce0fe6474b55bdfb8bc79b6fa4492f3546
+ last_write_checksum: sha1:5a07a65d06ec00547fd81d5d80e79057114911fe
+ pristine_git_object: fbd558eeb550c32dc2bffdd12a5815e8f290fd91
src/openrouter/components/anthropicwebsearchtooluserlocation.py:
id: 11ce6e19f6e8
- last_write_checksum: sha1:43e5b88a03a2c16cb48e58bc33090ff8934e47c6
- pristine_git_object: 888de6cb6bf49187c71e5b0fd2474cdc05f27e9f
+ last_write_checksum: sha1:fdd868a707022da7b015d09f9ebda5907939c6f8
+ pristine_git_object: 194443c59209df1e181a0d750331dc7ab587efcd
src/openrouter/components/apierrortype.py:
id: 04798f000cd5
last_write_checksum: sha1:c504f52290f8fa4f49d73cbd2c8b4aa8b695e612
pristine_git_object: cb48803e55aa039bcfa8232328dd2874db8d73e3
src/openrouter/components/applypatchcallitem.py:
id: 532887f6dcc3
- last_write_checksum: sha1:fd5ee933b7c7ab2160bc5dc95e967a67700201d4
- pristine_git_object: 1a5f1e022b2cfbea90c13746a0bc3dfad1328fa5
+ last_write_checksum: sha1:c87ffa0059eefbdc6909548fe3999e1948954fd0
+ pristine_git_object: 798b10eb6f7d278489b3513139bf7126f8338375
src/openrouter/components/applypatchcalloperation.py:
id: d1e3d8983106
- last_write_checksum: sha1:a5404122c3cb4d91cb0f3096abca8d953caf0e33
- pristine_git_object: f0188f4465178b75362c6bcd0eb385d7804b1a57
+ last_write_checksum: sha1:1a37ef1d590fb76ca84d1388dee339b14166278d
+ pristine_git_object: 444529466ac47a0dde7ed9c858b5f7371a88541d
src/openrouter/components/applypatchcalloperationdiffdeltaevent.py:
id: 59d7d1eb8040
last_write_checksum: sha1:6734b7c0e87b123d7b5c3967597967a41b42e54c
@@ -6602,8 +6638,8 @@ trackedFiles:
pristine_git_object: d03decfa67050aa2d35106caa46d4aadd03728bd
src/openrouter/components/applypatchcalloutputitem.py:
id: b412ea6dde1f
- last_write_checksum: sha1:9056677a3c330dfcf563b8689a5ff348fc7c450d
- pristine_git_object: 1b768e6e402356ef39d9754a1031bded2d9d6959
+ last_write_checksum: sha1:a80dbf0ac1fe549bbb6f0bcf1e20c80d06a9cddf
+ pristine_git_object: 7d543c9b5f8a149de01b6ef9fb30a1e33e6c72e4
src/openrouter/components/applypatchcallstatus.py:
id: e92aac2d606a
last_write_checksum: sha1:c5cd7c843e94088b14774838c28a96ad291d1de6
@@ -6626,12 +6662,12 @@ trackedFiles:
pristine_git_object: 0be07495eeb9ab2be9421d1a5deda27859865e57
src/openrouter/components/applypatchservertool_openrouter.py:
id: 60c161a64fd4
- last_write_checksum: sha1:3c406ce2874327a95777f92b53996eba3403cc35
- pristine_git_object: 158c52b8fb174faa5f41a646453d24fdc51f780a
+ last_write_checksum: sha1:94512968af4f0471a320e061cf7bb2fcdf1f2848
+ pristine_git_object: daf2de613539ace18f05ad7848bddf93d55ac0e9
src/openrouter/components/applypatchservertoolconfig.py:
id: 57e332dc2e56
- last_write_checksum: sha1:d41203a12c96018db9821e6ec9431948e727cac1
- pristine_git_object: 61d5a3b48c1532da0ad50272fb4940ea729502cc
+ last_write_checksum: sha1:600967624e7e8b63052900e2b2ac19210bf46270
+ pristine_git_object: 62209939f2244426eea63795a0a6ae1e6064a0e3
src/openrouter/components/applypatchupdatefileoperation.py:
id: 73750662eb69
last_write_checksum: sha1:e3df65fa2392ca6b770c64009b7b79a6532a70f8
@@ -6646,32 +6682,32 @@ trackedFiles:
pristine_git_object: 2ccc3d9be586133e5d5138c77eacefa243987fb5
src/openrouter/components/autorouterplugin.py:
id: cf49add5d1ae
- last_write_checksum: sha1:d507fa850102005c888956a1f6db60fabe61ffd7
- pristine_git_object: 665aaa0a7c00f99dc717c95f8bb94bb21f925ecd
+ last_write_checksum: sha1:e4ad3fb36054b4d0d05321f07fa025611e76c878
+ pristine_git_object: 64a0715572155d0eb3bd297b886670e97837c843
src/openrouter/components/badgatewayresponseerrordata.py:
id: f7a33d30d269
- last_write_checksum: sha1:338789c4e0dc85ac1c949f3b7d35127f7309bb98
- pristine_git_object: c1740ad4dfdd4c583b6fc1b4e85e1e0136bb4aeb
+ last_write_checksum: sha1:10101bc2689deb825e4d679096376666c6094ef5
+ pristine_git_object: 08905537423555f6dcfe5325d62cdf371b3035f9
src/openrouter/components/badrequestresponseerrordata.py:
id: 8a9249ed4bdc
- last_write_checksum: sha1:5f8d4edb53ad9fa297aab2c3ece9d43190af0fcb
- pristine_git_object: caaacbde392cefe0e8be9a0991b42fa653909bc2
+ last_write_checksum: sha1:50745795ab618b1720cddd1e596bfd96e99eba4a
+ pristine_git_object: c59b958cb34640b4cc6329be5154480e4116929f
src/openrouter/components/baseinputs_union.py:
id: d85e19ff642b
- last_write_checksum: sha1:12249be51b825a297fdd94b2ffd19fcf0d221707
- pristine_git_object: 25128bdb864052bcc6310b50d7dddccaa89a23dc
+ last_write_checksum: sha1:0d8178381a828cc9db2f7b7eb36e0b657f0e1d52
+ pristine_git_object: 56b48e741547abaae734d07a4022808fb082f899
src/openrouter/components/basereasoningconfig.py:
id: 8bd09a7e873a
- last_write_checksum: sha1:c7c812629a7fc46f8064bc874b77424b30df9226
- pristine_git_object: 22bd982575db23648faceab9dbedf75fa1f1cb38
+ last_write_checksum: sha1:1519371cc541bdec60a88b183b45717cd60d93c2
+ pristine_git_object: 35d8ea7747973582b749e258443a1450e74a589b
src/openrouter/components/bashservertool.py:
id: 1c5881bea648
- last_write_checksum: sha1:d219a3a7a7b6437eca2cd0e4ed943e29225531a7
- pristine_git_object: a3021f927334a614ae7df011d85a9d089110a3c3
+ last_write_checksum: sha1:fd74247241c7371ff595e3b5e8fb1cac31f66ddc
+ pristine_git_object: b2a50762374284e45d7850991774618c9367c488
src/openrouter/components/bashservertoolconfig.py:
id: c8c5bf3fd9a8
- last_write_checksum: sha1:81677982839193e28247054976677c9a0b6b9420
- pristine_git_object: 4ccf38dd2b387e4446d55f152c7998b78871995b
+ last_write_checksum: sha1:d183602699550fe088b4c95bb0f351fd83b477f1
+ pristine_git_object: 7bb32209eef6480a06cf0b951686520ca9d006a4
src/openrouter/components/bashservertoolengine.py:
id: 4648c91620a8
last_write_checksum: sha1:a4bc825f816c6207d69d3ca51098d05d14b0d69a
@@ -6734,56 +6770,56 @@ trackedFiles:
pristine_git_object: 219148fc990faf0541310cf55cf11ffbcccc2e55
src/openrouter/components/byokkey.py:
id: 94a3339e7dfc
- last_write_checksum: sha1:18628a1bfee383851a284845bd810df629974fc3
- pristine_git_object: 033a6f367e4da3d56835bb0d593042f24bfa0930
+ last_write_checksum: sha1:11e7b469b0d452443fbda99208bd1af4e020796b
+ pristine_git_object: 47ef267b5e0f7b615b0cd66018728e3f47440a66
src/openrouter/components/byokproviderslug.py:
id: 6738a8516caf
last_write_checksum: sha1:2b105bacb46fd7150af7f079241fab2ba6700322
pristine_git_object: 38050fde0204f069cb2568fafc91338a7051c92f
src/openrouter/components/capabilitydescriptor.py:
id: 368790a86f10
- last_write_checksum: sha1:13a2fe668fd9d3fdb2d6941cf7a14b49f8168066
- pristine_git_object: 3b40c65b1bd2d08a6d01c3ec69023bd64a72907d
+ last_write_checksum: sha1:a167551924ee82b4b5876a0ab698a45fe8c87a95
+ pristine_git_object: a1cb577d9835d93914b06761e2cad3ceae2961e2
src/openrouter/components/chatassistantimages.py:
id: 993f9dcd8575
last_write_checksum: sha1:0b6be31bb9c8b3bc8f2098af5b2bd12b62a710bb
pristine_git_object: c7866f6fa8967c301f6aa11b0b0431384ab79556
src/openrouter/components/chatassistantmessage.py:
id: 16355b51794d
- last_write_checksum: sha1:262463011bb166384398cc28bb4ee158990c4e71
- pristine_git_object: 60b919a36d0f637df0e20d85d7b3dbc613828651
+ last_write_checksum: sha1:dc84d9b000613474d9cdd0a9851fd16f105252b8
+ pristine_git_object: f000d9086ad3ff80dfb47d1c4da15c745849f10e
src/openrouter/components/chataudiooutput.py:
id: 99984fd282ee
- last_write_checksum: sha1:d6daea59d700227f24194133cbf8c08bb2f8d26a
- pristine_git_object: 0ce4edfdee4b3f90d38f64e2d0c2ea861bda095d
+ last_write_checksum: sha1:d2f5aacb72a261437e357c10e5bd6af16cb61323
+ pristine_git_object: 7b5a13be15078d37ba17bbb8f6778dbc4510ba50
src/openrouter/components/chatchoice.py:
id: f511174c4629
- last_write_checksum: sha1:7c37937628dac76596825dffbeb2335bec99cc97
- pristine_git_object: 8651759272bdcf01eb65fbc7bd644e8c0aac8e67
+ last_write_checksum: sha1:8b29e3308736e34bc8c0a8cad41dae13611d001f
+ pristine_git_object: c15a10e65fa8a31c2d99626820e783adb172d5e3
src/openrouter/components/chatcontentaudio.py:
id: fae7bc57e73f
- last_write_checksum: sha1:23f5a430c45dc89780b16c3f4d2dcf8df6f0fee8
- pristine_git_object: ad506c0e68b77dec2dfcc3acadc91a3c15a3927e
+ last_write_checksum: sha1:9c81e5b2600b24b12e9f1b257b5f779032bc4f6d
+ pristine_git_object: b937a2df121366183d40d9f124c9f1bf21b798db
src/openrouter/components/chatcontentcachecontrol.py:
id: fa34483583b7
- last_write_checksum: sha1:6c8e40f1358dccece301730dafd3eb00d4aea805
- pristine_git_object: 7263adce89ef130ad94504dd600ba19deeece3d6
+ last_write_checksum: sha1:e34eec1c61fdbf41456cb25b3704f4f26c7590ac
+ pristine_git_object: e23d40503368f1c30d2bd3335b9196fea2094c51
src/openrouter/components/chatcontentfile.py:
id: 2a747b8033b8
- last_write_checksum: sha1:f8ea4e6c0999d2ae59e1b6de39dd2bad07599c87
- pristine_git_object: e737cbd7318fb553946f2c5a9986a9630415016e
+ last_write_checksum: sha1:1203efad65c0e72e18fa600bd8ebbc72a82340fa
+ pristine_git_object: 07d3d043d87c42754ae89493b4cd6f91c43967c6
src/openrouter/components/chatcontentimage.py:
id: 6897abcd5da0
- last_write_checksum: sha1:3e4d1947edd8b77f1ebd804e91423221e6d33682
- pristine_git_object: 45430fd36f0e76600b818778af749de0969ae34f
+ last_write_checksum: sha1:e511b166d8568787289e53486fef5faad6462a4c
+ pristine_git_object: 44c4909c0745edcd9a401f2c9354c5ddb0a3c952
src/openrouter/components/chatcontentitems.py:
id: c4253e14cbd3
- last_write_checksum: sha1:e17966663f37a773e5ab5fc0c5e7e09f3ab9aef4
- pristine_git_object: cb153a030d300afe41950e098d219bbdce2bdcfb
+ last_write_checksum: sha1:37e2b4391a66d6676ceec464a762810a534d369b
+ pristine_git_object: 61415b0c78602a7fabc4bf7f62ac869bacf38195
src/openrouter/components/chatcontenttext.py:
id: 5301d8af31e7
- last_write_checksum: sha1:34e58197e8536c49997b2f2ac68aa7c654dd17d2
- pristine_git_object: 4367bde935d5dfab2b33cb2aff89101790350be8
+ last_write_checksum: sha1:8c30921c5e1530becb0f646866787aa3d1deab13
+ pristine_git_object: 86d0a046b85b9caba7f628344d55febb71936ca9
src/openrouter/components/chatcontentvideo.py:
id: 42859cb5a9f4
last_write_checksum: sha1:f60354c6602613f3f8628ca29330a6037fcf20e9
@@ -6794,12 +6830,12 @@ trackedFiles:
pristine_git_object: 48b8e57ca95d7dd50e7172de375eadb6d052ad35
src/openrouter/components/chatdebugoptions.py:
id: 03e05dcf9b0e
- last_write_checksum: sha1:fdd09315ba85dabd93ef0c1e9911309d58c12374
- pristine_git_object: 777d93efafd1f357560467682bc13d33c98a160b
+ last_write_checksum: sha1:52d89c7c7ad343bd9d1dcc84a13f4091eb3510ad
+ pristine_git_object: 309df1015b07e05ad2d692ed73ef1224535e8582
src/openrouter/components/chatdevelopermessage.py:
id: bcba94e8d19a
- last_write_checksum: sha1:e9aebdfb1010b763874467a3c540b5588ec9ee1e
- pristine_git_object: 175218a937ea755e521289b92486a7d67fdcb907
+ last_write_checksum: sha1:2b4737de643f073848fc04d15a53d55f9dec9855
+ pristine_git_object: 56dcbb97ee27d5cbb79616e6d039bee74b8d2e47
src/openrouter/components/chatfinishreasonenum.py:
id: "331394791883"
last_write_checksum: sha1:98f6b15af15986f5b3e9ac60c29bf9e5a70eeb5f
@@ -6822,12 +6858,12 @@ trackedFiles:
pristine_git_object: 7a6140f2b8afb0cde9b031322a4284c9cbce7e33
src/openrouter/components/chatfunctiontool.py:
id: 1fcf92f8a7da
- last_write_checksum: sha1:914ec1c354458da1d6634f12ad3f0149dd588f6a
- pristine_git_object: e0f23b38e09fdac95768ba454244919f3d496007
+ last_write_checksum: sha1:f5a4e444028732635ae55ff627f8f3e4f2d5695b
+ pristine_git_object: b62a155adffc32102f97f4160386c212b943c875
src/openrouter/components/chatjsonschemaconfig.py:
id: d2278e414fab
- last_write_checksum: sha1:69efa91d33e4767058c2d377814b820bb5104ab4
- pristine_git_object: 013154427936561c5aeb7180b325a033c26c23c3
+ last_write_checksum: sha1:73791c8aa5f3dec4a25903dcc9c61118fc88a4f3
+ pristine_git_object: 4b3aa418ffaa0a13a57301e54c932fc158c376f7
src/openrouter/components/chatmessages.py:
id: 3425ec393ea1
last_write_checksum: sha1:e5a58c98ecacc9b4c72a147c458532cc78a7d898
@@ -6842,56 +6878,56 @@ trackedFiles:
pristine_git_object: 8bbde153b53887e426989fd5b0486b6dc1122810
src/openrouter/components/chatrequest.py:
id: 5e39eaefa9cf
- last_write_checksum: sha1:eb9f865918863ceb12508060f3bc8605f3a9a87a
- pristine_git_object: f60f367c641cb92d48bbc2873bba0704800165d9
+ last_write_checksum: sha1:795fe5c66c8e44878d3769d1068d5591bd0a7a40
+ pristine_git_object: 3ab5ba1d64a4f1cb214ff2428a6cfa31054d8774
src/openrouter/components/chatresult.py:
id: 9062fe2935fe
- last_write_checksum: sha1:b44dc25412b1206cc188d9516191a273d0f3e4dc
- pristine_git_object: 85bb6c1a31b0f762b4a87928dc67114c954efaed
+ last_write_checksum: sha1:2ff1963c54e7e79500115c8549c8d395f4e336d1
+ pristine_git_object: e91d16101cbf8b5a711b7cca945f22df34c966a3
src/openrouter/components/chatsearchmodelsservertool.py:
id: e280d3720327
- last_write_checksum: sha1:d16ee5aeba32baddf132119bcc46cf390020da63
- pristine_git_object: 5c78164f31cfe7fe8d8e64f6b25e8bcf90084b77
+ last_write_checksum: sha1:4fd2e8787d4c8dd0e85ffd2d945b9b685e8222f9
+ pristine_git_object: e6ea5476493ccd7f2573b74c4e1bb2fce69b653e
src/openrouter/components/chatservertoolchoice.py:
id: eabe3865e853
last_write_checksum: sha1:67a9aec17ded5a161972cb77d09054c95eef4c5d
pristine_git_object: 51b7a93a2f8db581f9d80803428d3ea8a19a73ce
src/openrouter/components/chatstreamchoice.py:
id: 356768c2edcc
- last_write_checksum: sha1:bb475a522fedfb04084c1b6b0e7cb5d8a0d4cdad
- pristine_git_object: 9166d93e4c351c7465ba67e2e7f4708038d6ef2b
+ last_write_checksum: sha1:a5a78ee48ac7eba3e3b353fa184ff5cf8239095f
+ pristine_git_object: 688a877f59a952691935907b0c49c9bd2bbaddca
src/openrouter/components/chatstreamchunk.py:
id: 16cdd8d4a3d1
- last_write_checksum: sha1:c3efdb1447546f143f33c51b8971fe0677828f70
- pristine_git_object: 1f00ab137cb7ede250f76d8bd0d1d50397c31927
+ last_write_checksum: sha1:3a34fdfd8ef6736c1874fc6c5e6464dc8efff9ac
+ pristine_git_object: aec4bc5d54dcaf65774110e4eb0d1838d750136d
src/openrouter/components/chatstreamdelta.py:
id: 7484252729d4
- last_write_checksum: sha1:2e1a6408c51e6519337e01c394f4ce7695edf573
- pristine_git_object: 8d0c74c413e531eee7b7130e3cc3d9286a262229
+ last_write_checksum: sha1:c7317ebedb5092f9cf645bb3f349edc547e7f191
+ pristine_git_object: 6eb10789605e60d0c0345b0794f1f7711f1f1907
src/openrouter/components/chatstreamingresponse.py:
id: 045cf83786aa
last_write_checksum: sha1:9e087f1821b264bf59828aae7bd7f9c35b838d74
pristine_git_object: cf5a90d9a20e7221f68d66a3338a9526a0cd06be
src/openrouter/components/chatstreamoptions.py:
id: 85e752c7d55e
- last_write_checksum: sha1:9e989c9b9282d3a014d3933e6d2227ca242ae1f6
- pristine_git_object: 48eb279a4e3d4e04c484f5da2feb90e49a585fba
+ last_write_checksum: sha1:d7d661e0383d4fa5917835a729be493f4f4a4a0b
+ pristine_git_object: cecb204b76fe64d7778394e00975e625741c5856
src/openrouter/components/chatstreamtoolcall.py:
id: 7afc3bcd51e4
- last_write_checksum: sha1:a7d37d8e6e0fd2c6db08f2ab9dce9cfbe4be92b6
- pristine_git_object: 461213986d44d0e5e79e8f2bcce4ac1892f639d0
+ last_write_checksum: sha1:7a10ce6c1c1f30a6b03076ad7147199a6d7fcbd8
+ pristine_git_object: 936fefc210c5b6b9e94ea708035b085b59aed2f4
src/openrouter/components/chatsystemmessage.py:
id: 72524b9ccaed
- last_write_checksum: sha1:e2ebb6daa6d430843678c7102b2d7b542155a8a8
- pristine_git_object: a9e7bb12af12d0dc6592de4da55bdf23e854a76b
+ last_write_checksum: sha1:c959c5330a7ce6afbd1367da6ed8dca4bf539dd4
+ pristine_git_object: 99beec8548456e1f72d01fce5f098d93616bd4b5
src/openrouter/components/chattokenlogprob.py:
id: 6ddf9cf44f5a
- last_write_checksum: sha1:e205f6e2e60d32d72f64ca67543b8524e5dd3c84
- pristine_git_object: 2a82b99eed3d853ea554205049989e048aea45e9
+ last_write_checksum: sha1:75641fdaddc42fea10d46e9974c051f3393ff94c
+ pristine_git_object: 1a689698a4213f215d8dcaa4ce1aba831d9cf4c7
src/openrouter/components/chattokenlogprobs.py:
id: f173ce5bcc37
- last_write_checksum: sha1:8656ce700afff96f866555500521923d274c5aa7
- pristine_git_object: 037f8b50e5fa0dca36a9754ff01db39b63950ab6
+ last_write_checksum: sha1:0716d288da45384f8caecdd7197ebf80c24da55b
+ pristine_git_object: f450b8ee5394cac5f96b431db97eb34f5aadc612
src/openrouter/components/chattoolcall.py:
id: 494372b36e05
last_write_checksum: sha1:892f2a4800d448de1f1735ae91e301a6475b5189
@@ -6906,40 +6942,40 @@ trackedFiles:
pristine_git_object: 2ccba8386486b7a730816a9829b01754935a2e96
src/openrouter/components/chatusage.py:
id: f224a054bf45
- last_write_checksum: sha1:b97beddfd0229cf3d993948cbad3bd45ca76d7fc
- pristine_git_object: 8eb123a284d3fe9604c0f97ec225da377b0fbd88
+ last_write_checksum: sha1:3cdcb6cbf944509ef966f90f7d6e3af967323277
+ pristine_git_object: 1410ca9d1ed4032acb4a59569be77cea2fb4432b
src/openrouter/components/chatusermessage.py:
id: 7777191e729a
- last_write_checksum: sha1:1ecc9101c05178427d73e455de4d679ac8d78015
- pristine_git_object: 9092aa329bdd58891c2c6f92a6d9c4228b37400c
+ last_write_checksum: sha1:6e9d3d1a827832b947bbb688a8f78f43aaaa9f81
+ pristine_git_object: d5ebd465c8d843f4bc1f0763d136d31960ab2efa
src/openrouter/components/chatwebsearchshorthand.py:
id: 13091b97a3f6
- last_write_checksum: sha1:21a8e196d7c9d03202f8f124a306dfec61ee47b4
- pristine_git_object: f97f261399616ef7087857e422d044a4c6f38878
+ last_write_checksum: sha1:5f0a816474fb5767093d1657410765d4904879d8
+ pristine_git_object: 9d333c1da7bc71abf85294ff59f8d144312e19b4
src/openrouter/components/codeinterpreterservertool.py:
id: a72c520afbf9
- last_write_checksum: sha1:f6123d9808c530e0b042e0a30fbb1a11a82096e6
- pristine_git_object: 67d4cf9e411c21528c7a5648e9a4c31e9f99e316
+ last_write_checksum: sha1:89e529b98c4b42a9d573f9234ee44f702e8bfcb7
+ pristine_git_object: 5705d69dd9befc2934968d159c161a5c9acd0e16
src/openrouter/components/codexlocalshelltool.py:
id: 74a77b6a8b21
last_write_checksum: sha1:135cdc82ad9f65401da11274c786e471888e27e7
pristine_git_object: ea86f79f7e10d7584621fb804ac56e7bb79578ba
src/openrouter/components/compactionitem.py:
id: f1535c3a68c3
- last_write_checksum: sha1:b4922929d7588f19227f70092050063111a6cef9
- pristine_git_object: eb9ac6983a6423622c1f8f027b6e9a898c0374ec
+ last_write_checksum: sha1:c344678bd27fea9bae0da60dae93aff484483a20
+ pristine_git_object: 0c6d74912168fc04a0d756e9fac3b914e0ca6106
src/openrouter/components/compoundfilter.py:
id: 0cab72c7a3bc
- last_write_checksum: sha1:8ff3005f188637f3a82bfb4c842ac1eed8fdb8e1
- pristine_git_object: b32ff67d3c2096c21d785a9eb037ff4bd293cbe8
+ last_write_checksum: sha1:7bc0251dcf6c06f0fd00c9cadee2fa6a1e88ea82
+ pristine_git_object: c80781ee2b1d3f3f7e2b0063b0fbfd16937039ac
src/openrouter/components/computeruseservertool.py:
id: 10d96ee539dc
- last_write_checksum: sha1:62b38f9910153b95695824e7820f0f3bc2f85b35
- pristine_git_object: 8f6128f97f9b7ea70c3b4453aee67fb2bcde2db0
+ last_write_checksum: sha1:ae5e0b764f246b7d8c65598cdd788cb890a8bdc4
+ pristine_git_object: f8c70070d4069fcb7ad697a1d1012ea0a95c1a02
src/openrouter/components/conflictresponseerrordata.py:
id: 212cdf3bcdda
- last_write_checksum: sha1:ee91dc17cf80f2aa72eb976fdf60ad4c094ca45b
- pristine_git_object: fdbfb1678062f33794f10f032a13f127c35a7db7
+ last_write_checksum: sha1:95dd7cb791476d2d2481760f73aa5186a3a0a4a1
+ pristine_git_object: 39276ad8ec6b05029b36b32fab7a81befdff85eb
src/openrouter/components/containerautoenvironment.py:
id: 0c41c2609d28
last_write_checksum: sha1:d6b8b06b51d5f0ffc28b1644843a8fa8a576d31b
@@ -6958,32 +6994,32 @@ trackedFiles:
pristine_git_object: d5ba92a250e53b44240e5dedb4473cbabafd65ad
src/openrouter/components/contentfilterbuiltinentry.py:
id: 8506c7d8aca9
- last_write_checksum: sha1:851b5909b1172792dca14b769907c01c0252499c
- pristine_git_object: 294696be09b025418763830ade2f594898bf3b4d
+ last_write_checksum: sha1:40ccbb53ae8a8f1e14ea0ef87fe9a62d3227dcda
+ pristine_git_object: ae3d7d5a0eafdfd78e6ce5f1ebe6eb8c15b365f9
src/openrouter/components/contentfilterbuiltinentryinput.py:
id: 98fd75740393
- last_write_checksum: sha1:4dad4352ad3f4d527ec7e5a6643b36a75eaa6437
- pristine_git_object: b51baca5c8e5517720f77eb928a1f5ad58ac0aa5
+ last_write_checksum: sha1:4e5b2d32d259a3b19e1db9a522466957f9bea46b
+ pristine_git_object: 50a14b214439c74b201df7f4664653aeb3e4153d
src/openrouter/components/contentfilterbuiltinslug.py:
id: f222de10f841
last_write_checksum: sha1:130e56231d8a3a4fd16516bf7734097471118b66
pristine_git_object: bbc07e6bf29faada2c71a0fd44fdaf3286b94f4b
src/openrouter/components/contentfilterentry.py:
id: 149ebe184f88
- last_write_checksum: sha1:4e40edff6184741aeeb1f2c7416e9fbb451fc1c3
- pristine_git_object: 856522d0916c23cb1d2f6573a417958f15e34bcd
+ last_write_checksum: sha1:63dcb28479bc328253a4d102a6c191fa0e515394
+ pristine_git_object: 882178bfe6217c6cf9947ca1ce9fe67d07830262
src/openrouter/components/contentpartaddedevent.py:
id: a074d4f3e193
- last_write_checksum: sha1:016196b914b861c920e8cea01b04207bddd5e286
- pristine_git_object: 019b9064d04bf201e7599e79e605ca249bfab61b
+ last_write_checksum: sha1:ce0fc4800d5dae3328f0185add65758d149c5d4a
+ pristine_git_object: f6f49db019724dc58f2836d0539aa393d8c7690f
src/openrouter/components/contentpartaudio.py:
id: 27c65df752ab
last_write_checksum: sha1:2cc9b156c69f4769f2277b8c8066791ab51794a7
pristine_git_object: 450ced1e1faed9dcc988279bae621546157aa0cd
src/openrouter/components/contentpartdoneevent.py:
id: ebc3878afbf6
- last_write_checksum: sha1:8394f718a55af4ff9b1b0f8302e974d320f8cf7f
- pristine_git_object: 8a7f7380eb02f24f57819fffc03f8f06b70e3c84
+ last_write_checksum: sha1:71cf847ec7a41ad93ba243ae60e903f9d8aefaee
+ pristine_git_object: 3cd3ed829d83dc03c0323a586e2fa1c0d7bf7a0b
src/openrouter/components/contentpartimage.py:
id: d6af351c330e
last_write_checksum: sha1:22c7d09037d2aca7022a4e1e507d44d2eb051a89
@@ -7010,32 +7046,32 @@ trackedFiles:
pristine_git_object: 7d5b6f700b28296f6879a4a87d65a794f3e96cb3
src/openrouter/components/contextcompressionplugin.py:
id: 0262a4f96713
- last_write_checksum: sha1:288a9cf2f3b3a0d90a71ac60f4c4a6f03f6f2444
- pristine_git_object: 22758a015ceb978263246b58da19d382ae38938e
+ last_write_checksum: sha1:b2dc98af85d08deb61c90a5ecd9b20380a0db5ac
+ pristine_git_object: f6e8d18d3b51501a3a2b7d7527a64fa02b9b1726
src/openrouter/components/costdetails.py:
id: 513b4309de6e
- last_write_checksum: sha1:10436fdda1161f93c711bc0e758d9bb029a36ace
- pristine_git_object: 7880cdc0b0ce6f4629616820c1e10997a7ce3468
+ last_write_checksum: sha1:1308d1504b1f78427467c6bf58776f31baac2a2a
+ pristine_git_object: dbafc2878cb3185fac34919e2f789b26dc86f70e
src/openrouter/components/createbyokkeyrequest.py:
id: 238e868445b4
- last_write_checksum: sha1:b2059c1109dc8176e07584010f957b4feb18a124
- pristine_git_object: 1287f0a83fa8853b745bdf1b990cea4a8b1ecacd
+ last_write_checksum: sha1:c6523331919e4e590567d570ecc47ac51152a23b
+ pristine_git_object: 4202c110ce2032a2378b06202319731b1d74b1ba
src/openrouter/components/createbyokkeyresponse.py:
id: 2b6c5e13270a
last_write_checksum: sha1:a7a2a40b9ac16a975a4c5ecc8802fc0b7785691c
pristine_git_object: fcfd9d646f216fdbb715cbbaefa4382d75750b79
src/openrouter/components/createguardrailrequest.py:
id: 34d69149fb33
- last_write_checksum: sha1:4d55f63837eb18cfc0cddf215896c02082453dc8
- pristine_git_object: 36bce65769a9cd0b1c0ff55ea7ebba19f3839c66
+ last_write_checksum: sha1:4138e0c0ec26c3ec904a49846f9ed70f65227a0e
+ pristine_git_object: fb9dae6f51b5cd214cc05653f92014e87bc029ab
src/openrouter/components/createguardrailresponse.py:
id: b4e1bdf1de5b
last_write_checksum: sha1:ae20a5e7425510c240e5697d847b1cae65940bd6
pristine_git_object: d6c4a4dc73222668daddc2a1788d314ff30e8fe6
src/openrouter/components/createobservabilitydestinationrequest.py:
id: 58587fb98a32
- last_write_checksum: sha1:40e34d00fd653d5281f195e2a00ec8bbc52812cf
- pristine_git_object: 65aab4386d68d49d7691d381d177455721dc4687
+ last_write_checksum: sha1:b8a96311602687e9280550674d0d840f2916ad06
+ pristine_git_object: b7bf9755acc084c2f17f3787dc5b70e354b0efe4
src/openrouter/components/createobservabilitydestinationresponse.py:
id: 9a8561661e52
last_write_checksum: sha1:730054c12ad209d5f83b88825c946fd6f322e6e9
@@ -7046,16 +7082,16 @@ trackedFiles:
pristine_git_object: ffdb3753adda06f3d93b505ab17657337c66067c
src/openrouter/components/createworkspacerequest.py:
id: 3785d9b207c2
- last_write_checksum: sha1:49ef014d2611e4c399c28d05763f5e1ad076b25b
- pristine_git_object: e068f80885a98542edd9fef71c90ddc1647bf8e3
+ last_write_checksum: sha1:26d39e88354ea17dc3a9c0156ddc8769dbae33a4
+ pristine_git_object: 0596d01d9ef84ac315f8c1e1272dd16aa51517db
src/openrouter/components/createworkspaceresponse.py:
id: 986d9ff993c1
last_write_checksum: sha1:7e9028b437a9e33a7541ba222cf01e6629f5c74d
pristine_git_object: 54c7b43902b4c72a43cf4ea1fa965edbdecb5304
src/openrouter/components/customtool.py:
id: e83b0c530680
- last_write_checksum: sha1:df7d648e8a112d0b6222eb43edc62fa227c1f195
- pristine_git_object: d2437932aeb30a0ad8cf1a31192afa86dd89a8d4
+ last_write_checksum: sha1:dd98af372d2b335ad698fee5400a45da2548eed8
+ pristine_git_object: b7e376784645507cdcb45de88df193ebf28349e7
src/openrouter/components/customtoolcallinputdeltaevent.py:
id: ee80a0e981a3
last_write_checksum: sha1:784ec213ebcf9a386aa3f0528602089181a5baa2
@@ -7066,60 +7102,60 @@ trackedFiles:
pristine_git_object: 308a29665db6048780b3d9d3dad551110e002cfe
src/openrouter/components/customtoolcallitem.py:
id: 232ac63226eb
- last_write_checksum: sha1:a1ec646d50681fa4106fb0ee63d2b4fc2f4084e8
- pristine_git_object: 486f76dc6d1207486f815919e9bb18354f418297
+ last_write_checksum: sha1:2d78ca6daeaca1efb8e594327a972bcbd97c1928
+ pristine_git_object: 3e47f14839dadbbf30303e0b1e703802a3eaedf3
src/openrouter/components/customtoolcalloutputitem.py:
id: 533940b12cd2
- last_write_checksum: sha1:9702dd53b6f12e5fbc9b6d8d8b19fbaa4cb712a1
- pristine_git_object: c8201422a35e2c12c9e4321c3622f95f76a3234a
+ last_write_checksum: sha1:35d003dc2704b61038c6f776f59fff5d4c4e8677
+ pristine_git_object: b80b24da37f0c0ace34a5d9e95e54e226086419e
src/openrouter/components/dabenchmarkentry.py:
id: 5f5745cbfe75
last_write_checksum: sha1:4416b41c6ca98d790893113ed5f6c3e0157e74dd
pristine_git_object: 35a1a90cf109062a379cead396c3d7b94cc7f810
src/openrouter/components/datetimeservertool.py:
id: 444350bd66f4
- last_write_checksum: sha1:ce9c7aba930c6a8764ca762052912d6533ccf53a
- pristine_git_object: d98c3fd0b630abed2a013cb29e2382002949c1d5
+ last_write_checksum: sha1:067ed533ffaecfcd1a0a210dda73856d2e076273
+ pristine_git_object: 31a1f9079880f06fe82b0c0b2329689ca33efb4f
src/openrouter/components/datetimeservertoolconfig.py:
id: 96ac233137bf
- last_write_checksum: sha1:0e20ce9fd09b64922e63b1bf37395bb80ea3e440
- pristine_git_object: 3eaaa33c3856a99254c617bcfe98693f31db1234
+ last_write_checksum: sha1:517e732ef770053a80dbb1f471a0f9a00254f91f
+ pristine_git_object: 0858da197cbf8f41d4df6688a392eaca783a8700
src/openrouter/components/debugevent.py:
id: 5ecad6212326
- last_write_checksum: sha1:437a5547042617c66b1e59e25388d77729dd28c4
- pristine_git_object: e163680e5e5e254a73a0646e4b562cd0b46065d0
+ last_write_checksum: sha1:47eb04a24ca8c2c28bd554b1967cc1ffc35169a1
+ pristine_git_object: 3346002a864567eb5d6b0601b4851c4190db64fb
src/openrouter/components/defaultparameters.py:
id: 548f4f885c22
- last_write_checksum: sha1:ed72fc048f61ec663361ab2206cd140c35971a0e
- pristine_git_object: 26ed6c6d3d1615aa9b6130e1c751e0d72c138f3b
+ last_write_checksum: sha1:b4441a938ceb4511d0207256d0cfed6ca6d9ed4d
+ pristine_git_object: dccefb2123d06d6d9920e7035f21a8ab5e7b86a8
src/openrouter/components/deletebyokkeyresponse.py:
id: f9a1e677521f
- last_write_checksum: sha1:7e0f7e27823afde2d4c336e6c04bd8c182400822
- pristine_git_object: 19946d23691aa52b2c97b15bb262a1b9a0849585
+ last_write_checksum: sha1:371aa071eb7da7c466521eed203e32e441c6abb3
+ pristine_git_object: 3e3a7de0f0b5ad0657df890e2764c4437f0357e5
src/openrouter/components/deleteguardrailresponse.py:
id: c3ac908331ef
- last_write_checksum: sha1:8984f78ae6a2b3ee8b16d7f0018622ba725c1583
- pristine_git_object: f31843cfe4e36f3f6371837221b6966fabaa563a
+ last_write_checksum: sha1:6a5ca367dfad148ce7f01d14044efbef37b36d2b
+ pristine_git_object: 0c4b2ec66b592fb5be3ac587a5c6d60c84069384
src/openrouter/components/deleteobservabilitydestinationresponse.py:
id: daf99e240820
- last_write_checksum: sha1:a75abfba1a9f68da81c513c235873049d25e915b
- pristine_git_object: 376515665c29fb3aba74b18df0c722d8e6b4e9e5
+ last_write_checksum: sha1:485d3e763c2edd7ccd69926e2ea872eb6d031fdc
+ pristine_git_object: 28a54ebbcd00a3b64b50c6f221b4e1e7856797a8
src/openrouter/components/deleteworkspacebudgetresponse.py:
id: f9b733ad07c1
- last_write_checksum: sha1:a3af24b608183853aa1693f678b46cf1d0841d2a
- pristine_git_object: 774a3ea237987fb9f78794678ec35fad50fc5641
+ last_write_checksum: sha1:9bbbb1e27113d3ccebf7adf47b6554acf6139cb2
+ pristine_git_object: be71670d56ec18a0a0e604a39c808b7a52e827fa
src/openrouter/components/deleteworkspaceresponse.py:
id: 5e45e8064f69
- last_write_checksum: sha1:4e326914693c0d0caf901651cf214f73df624f64
- pristine_git_object: bed459583970617979bb6aec394bfeb161274514
+ last_write_checksum: sha1:fd6cebc186ef821f569a079ab7dd2bae2acdcdfe
+ pristine_git_object: 708dfac62530c5fcd29f6bb0be113dc34fd24718
src/openrouter/components/easyinputmessage.py:
id: 72619a312585
- last_write_checksum: sha1:5d1d0bb1b9d9b1b219e59c38da859119e3e9419d
- pristine_git_object: 60dabdac82555caed537bd848b2095d12ec19647
+ last_write_checksum: sha1:6fe16f2a35b373420e6b5289132da3557a3daaca
+ pristine_git_object: acc023a14c9edefd377c7d213fa928fd046ec999
src/openrouter/components/edgenetworktimeoutresponseerrordata.py:
id: dc53aae5b171
- last_write_checksum: sha1:5f40d76eafb399dfee5f6e5a8cc6eb94ecf3ff8b
- pristine_git_object: b44fcaf3b15716035fc7bb13cac592f120e7afbf
+ last_write_checksum: sha1:cfbbb83051f349bedda3d81a81ef2d3aea2916d6
+ pristine_git_object: 9e421b3c133cc1ad340ec2eff50e1b9b8d8750bc
src/openrouter/components/endpointinfo.py:
id: ce049670b5ae
last_write_checksum: sha1:914f173c73fe1035e56c9acf4ad9e23555bde95a
@@ -7138,8 +7174,8 @@ trackedFiles:
pristine_git_object: 468dba815ec1bb9a06cbf8983c8f13f2c585db59
src/openrouter/components/errorevent.py:
id: 8e87043bec43
- last_write_checksum: sha1:ca2fd0001394a54cbaaf07abb827184f58e1de9e
- pristine_git_object: 83b6cd340292e31f23e5d4638e9e45753f612b7d
+ last_write_checksum: sha1:a8930d46fd48231b5350bc284c138c9264638fad
+ pristine_git_object: 0b90b1c374c54aba3b1129f296456dc301ccb185
src/openrouter/components/filecitation.py:
id: ae9f50481422
last_write_checksum: sha1:3e94a2b7245fb44ae818f78168767980f41e6559
@@ -7150,48 +7186,56 @@ trackedFiles:
pristine_git_object: ee75b85ee8d580fb1fb71bee31adbfd2552885c3
src/openrouter/components/filelistresponse.py:
id: d0c949679c66
- last_write_checksum: sha1:8426dcfad214046837ae4d227af96bf75772f24a
- pristine_git_object: 689329945ffca1f92e2283d4f0cf7ac4df1c55c4
+ last_write_checksum: sha1:b0f20d6162369b24e09e5d9c5121077e2f6d3f3c
+ pristine_git_object: 3b40324c33b8a4fa19d3940a5cc797bf2f75d202
src/openrouter/components/filemetadata.py:
id: 31b55c7f5dbd
last_write_checksum: sha1:2543bac9ec9d7174e47fe375a5eb936fd5e5f720
pristine_git_object: e128dc9b415b5eb362a076ac1c1c59b500792c96
src/openrouter/components/fileparserplugin.py:
id: 1120c86c0856
- last_write_checksum: sha1:a23fe386c1606aebe30057fec1d20516b5984f7e
- pristine_git_object: 4c88871d5537324d62eedd0ab15204f1a279ebbb
+ last_write_checksum: sha1:9738be43f64002d681539c37cc3dd882a00670f5
+ pristine_git_object: 28d11f1db89da075d07a2e97fd03e3e1df26b53d
src/openrouter/components/filepath.py:
id: 9e37fa73a86a
last_write_checksum: sha1:65fe062e78f2716c180230379cbd3419f8b36e49
pristine_git_object: fc29881e08f5804dd5ba0ab66572d6c74f83e0c4
src/openrouter/components/filesearchservertool.py:
id: 8ecc4d4a0ddd
- last_write_checksum: sha1:59cdd1d8a27a94f52302d611952e2258957802d4
- pristine_git_object: 974ee97d94c9bed742537fdaae159554e752202f
+ last_write_checksum: sha1:f6de01b0ed57b987896035e7e21681ca7fe7f1f8
+ pristine_git_object: 5f5b45a9f0fc9dc42d1ebde7ac80354be5f0b2bf
+ src/openrouter/components/filesservertool.py:
+ id: 725f58d5d419
+ last_write_checksum: sha1:ea2af05c4a8f992c2edeab81e6ca4279b4978010
+ pristine_git_object: 7e9f36a52234438568462ea061f782505a599c26
+ src/openrouter/components/filesservertoolconfig.py:
+ id: 8353a3e97cfc
+ last_write_checksum: sha1:8cbb3c05f6f3304e3f54c0f8bfb8d11a0ac0cdc3
+ pristine_git_object: bca5442a696e2489662d71d5bd7e26fb4c0eaeaa
src/openrouter/components/forbiddenresponseerrordata.py:
id: 93ae47a0c337
- last_write_checksum: sha1:dffd1d7517d9ad6ce139089de52a0308c2b234ec
- pristine_git_object: a758f01d6d46b68516167fe9b4989cdae25bd308
+ last_write_checksum: sha1:1da3bc6a3399aa3539b27e96c400b23bb6fd188f
+ pristine_git_object: e790a632c692a86ef53ec0bb8d4fd41e99d4efd1
src/openrouter/components/formatjsonobjectconfig.py:
id: 4b0126b22c9f
last_write_checksum: sha1:9a42065639d0380af14f787748916a8ebb458599
pristine_git_object: a530b83d7202df8626a379619592e71c964eabf8
src/openrouter/components/formatjsonschemaconfig.py:
id: 93c37c13510f
- last_write_checksum: sha1:12fe39900dbf181a893b751663549a6fd48232ad
- pristine_git_object: 4a08f89d026da9db0e46ee1354adf1156f0a28fe
+ last_write_checksum: sha1:290254893b21e72fa2735ed761b21d062f3b49bd
+ pristine_git_object: f748cc223bfa2ce5c63917c9343265c69ebcf749
src/openrouter/components/formats.py:
id: 26f57c67a9d5
- last_write_checksum: sha1:addc98a1b6687d0edbe18bed1de17af4cf17e03d
- pristine_git_object: dcf042155235b73273a1e0e5ef29a505a911e98f
+ last_write_checksum: sha1:b8d471e2e143264746f23bca1dfc12342d3f6577
+ pristine_git_object: a1ac8c3e5cd7867483b647b1b7f756ee5fa82814
src/openrouter/components/formattextconfig.py:
id: 2e01bed905b9
last_write_checksum: sha1:c192d45b9530804e6e75ec40829b50b9f1adf5fd
pristine_git_object: fddfc9b96954944ee881adc12430c9cb38aa835a
src/openrouter/components/frameimage.py:
id: b0ed6cdd579c
- last_write_checksum: sha1:6ca944c66b46bfef8a46c72e1d6958662b77af90
- pristine_git_object: 9e5aa13a34ab0d55be29560be0c2995661181620
+ last_write_checksum: sha1:1a0daab524e69a8ce13f133f7ef7ccac857bdecb
+ pristine_git_object: 00319c889b8f1ea0a610026fb3cf964b3d472c5b
src/openrouter/components/functioncallargsdeltaevent.py:
id: 4e8187066efd
last_write_checksum: sha1:d618e8c717d93159fd21fe457d03a85549498a71
@@ -7202,12 +7246,12 @@ trackedFiles:
pristine_git_object: 613c2bbaec296ed9b0da13f249ef96b9314ff9ed
src/openrouter/components/functioncallitem.py:
id: 5e69afffd660
- last_write_checksum: sha1:0517e6c41fd95ca5252e59e0e618b96581ae3fcd
- pristine_git_object: 82a1e6393654f4c9ff71ff2a9226f65898e365f4
+ last_write_checksum: sha1:94c192e67b0c0c2cca046b8fc5caa296f0c0d9d8
+ pristine_git_object: 8d9002fa30aea04624c233b970eb36001a764f40
src/openrouter/components/functioncalloutputitem.py:
id: bf659aa04e7d
- last_write_checksum: sha1:05314adb9f62ac4ace7eb3f265c5dce9350d2247
- pristine_git_object: 842269afc3af0e15d7a720cb87aed32ae2c40e8a
+ last_write_checksum: sha1:006096fba13309e9a89538fff78282c9766367dc
+ pristine_git_object: 0f61f4d39093773a2106f60211a1413ad0d001fb
src/openrouter/components/fusionanalysisresult.py:
id: 8c88c59e344e
last_write_checksum: sha1:d1ca69c25b7e3ad67b93d94853e2054ed5e0258c
@@ -7242,40 +7286,40 @@ trackedFiles:
pristine_git_object: 223d8c97f88e2df5734d52f644ef633868d3a110
src/openrouter/components/fusioncallpanelfailedevent.py:
id: 59fae63a6e30
- last_write_checksum: sha1:2dda55a36f728072bc5a6d9669b5bf03bdc51ea5
- pristine_git_object: e1ac791907e1930190b5559681a1b7ffea94fff9
+ last_write_checksum: sha1:3fd6c9053f39a49eb78a5815db21ed152819e8ca
+ pristine_git_object: 3498ab2fab37702eb4f6fd5378db5fb5f267a3c5
src/openrouter/components/fusioncallpanelreasoningdeltaevent.py:
id: bac5f1ccbeb6
last_write_checksum: sha1:5f358080a345ce85fb357b95f3e7487150f6a9dd
pristine_git_object: 2836ce37ac58b2b90568bbd6247fa52b982ef131
src/openrouter/components/fusionplugin.py:
id: c0b307f15bb0
- last_write_checksum: sha1:c9185b16495e4c4a4affe84485c13cbe06a844be
- pristine_git_object: d019e1827c08f8d3708e890b7008145a4938587e
+ last_write_checksum: sha1:32d5b66ef009951e271bbb65455346bd6d090b8d
+ pristine_git_object: c04ecdcae607f61c7e2b4f5a1be03501cd53b011
src/openrouter/components/fusionservertool_openrouter.py:
id: a1d6d3aefe6f
- last_write_checksum: sha1:db6085cf3a96f2ff93707bd0209f59cfe153f467
- pristine_git_object: 5729ea0c31a0ce7283a77316282ea77c91f13ae3
+ last_write_checksum: sha1:5946f3beb667144593dfb06796f51995ce8140ad
+ pristine_git_object: 0015e263bbb2d817af89780610cc8f25ff852e73
src/openrouter/components/fusionservertoolconfig.py:
id: 0d1d229c531f
- last_write_checksum: sha1:b0b2c44af496c446fd6bbf1396f1f97f696eff5e
- pristine_git_object: 9d5ec202c11d21002eaa7b6724d62e0710c42522
+ last_write_checksum: sha1:c5575780c1be8d9c66c13298d00a93ff004d386a
+ pristine_git_object: 5803dc6d2b2c74d2b7270233aef9d90524dd8d53
src/openrouter/components/fusionsource.py:
id: ce20a4a9f32f
last_write_checksum: sha1:2141dd1dd9396035bf8070878c9ec945331514c8
pristine_git_object: c60f29915ce3fed38a693d10b8c2de868f8ee728
src/openrouter/components/generationcontentdata.py:
id: 0140215b5b46
- last_write_checksum: sha1:09e15ae2acc4f44084e2206ea51e6a06f4c5ee11
- pristine_git_object: 065679a3408bbfd07e86646a6b3aa135cd573973
+ last_write_checksum: sha1:03d676ea95b0ac1d6e0f8e036c4e1c028fc540ad
+ pristine_git_object: 2005a3b5a63bd66175dbfdb93bf58e5c1d6cb0e8
src/openrouter/components/generationcontentresponse.py:
id: c3f3f745a193
last_write_checksum: sha1:0a87a329f4b565c773d730ddc74595c6a0d64ddc
pristine_git_object: b762f6507fe7c7456df88a9400f82587fd6d63c9
src/openrouter/components/generationresponse.py:
id: 84d4e3e7da8b
- last_write_checksum: sha1:1a0ae994291dab8c32afe0b129ceb15c588807d7
- pristine_git_object: 5c2e03b079308bea3194df1d176a04d63660018c
+ last_write_checksum: sha1:423511d795aa2e6bd3a9ba6030e56b9382092998
+ pristine_git_object: 4016d8a89215e895229a8d79b2f5e2bc70fd0d0e
src/openrouter/components/getbyokkeyresponse.py:
id: ca3a8db80018
last_write_checksum: sha1:9b428028a01ffb73915a278096ca51bd1c660326
@@ -7294,16 +7338,16 @@ trackedFiles:
pristine_git_object: 3c24129bdebdfb21f5d5b1f2e973b2efb3fbdf99
src/openrouter/components/getpresetversionresponse.py:
id: 2175d9fa777c
- last_write_checksum: sha1:cb5b03c3882ca42a654c54fcfac51745f307848a
- pristine_git_object: c7fbebcf19b04a07eab66bc22732b25de0d3ad27
+ last_write_checksum: sha1:200d7a21b0da01ee15de359057da7259e0d367bd
+ pristine_git_object: 122b9e8c5e75dcb27a5d6fa7a7f5c0c794241970
src/openrouter/components/getworkspaceresponse.py:
id: d993d0c4c3da
last_write_checksum: sha1:918535730d1c352bcc8fd2342e1c4cea89bc357f
pristine_git_object: acda534cb0ced2a391479b720434cf0f57f46276
src/openrouter/components/guardrail.py:
id: 67ee78dd06e6
- last_write_checksum: sha1:0ee86031c907b1fda6e8f6fc2f80d76db2534289
- pristine_git_object: ec0d13984df644fea39ef2e985116627aa2e7291
+ last_write_checksum: sha1:d3c96a79c8f1b033378f4c2f21fd74c172457185
+ pristine_git_object: b087dc33e958e24a59a4e04584d9af3d6538a990
src/openrouter/components/guardrailinterval.py:
id: 01687fc135ab
last_write_checksum: sha1:430f886f371b85777346de663202d62708cd84cf
@@ -7314,8 +7358,8 @@ trackedFiles:
pristine_git_object: d24d5e2bf337e19bb80a1aa24b8b27c93d67f1b1
src/openrouter/components/imageendpoint.py:
id: 6466b0bedef0
- last_write_checksum: sha1:b619627cc7e24b774b1786f763b2d5c8db766e1d
- pristine_git_object: 8d392046999ddf1f251215f892b6bb3371ed1e9a
+ last_write_checksum: sha1:631323f2b22eab12462b5951c1f07cea65fa20d8
+ pristine_git_object: 7fe018a98be35b5b49e48aec938ac4223859cfb6
src/openrouter/components/imagegencallcompletedevent.py:
id: cbf654faeb3e
last_write_checksum: sha1:8fb3e34408dd8b167afc6aad641de9cc2483c9f1
@@ -7334,28 +7378,28 @@ trackedFiles:
pristine_git_object: 5f17d77c25a82ad2bf7b1211d05ee665b6fee35a
src/openrouter/components/imagegencompletedevent.py:
id: 7a791a02cb5b
- last_write_checksum: sha1:df249afb22b4d56c3493cf8ec506e7ecf06402a6
- pristine_git_object: e767efe399701e27924a1fa2e98d44d78e3715a1
+ last_write_checksum: sha1:bd73865dd7ffd0ff9ec34b2edd484e4f0a3bde61
+ pristine_git_object: ca3f68a4504570acfdc9c095ccdecfbb636c30f1
src/openrouter/components/imagegenerationrequest.py:
id: f8291a7be9a0
- last_write_checksum: sha1:d44c19ab94704abc128c6172e0fe89bd0ba57fe4
- pristine_git_object: 6c0fe3e3c349ca204e3f6aa7a3f1281853c8d651
+ last_write_checksum: sha1:5332c2cd26dbb93e94c927f20babe1d060388242
+ pristine_git_object: 5d2a7e6371e56cfadd302a67a10d00deef0373cc
src/openrouter/components/imagegenerationresponse.py:
id: 53354cd0cbfc
- last_write_checksum: sha1:073a770f1574629ec4e8ae59f6a365fbca9ace3f
- pristine_git_object: 64b059a152dab4754cdece4fb2021249f76444a7
+ last_write_checksum: sha1:8c42a25c58b589aad6031d2c1734eabcf1a1b143
+ pristine_git_object: 7eddf64ed888d59494938f38e2b9035e7ba2b38e
src/openrouter/components/imagegenerationservertool.py:
id: 9c95bc975f2e
- last_write_checksum: sha1:b7e0d9db78b0b7662cd34a31e593842cea5ef990
- pristine_git_object: dfcb122b1ce68cc165b0b86b603b658670320eff
+ last_write_checksum: sha1:f87c338c9b54030623f7f3e32f08a064e411f76c
+ pristine_git_object: 6e4cf9a3bd6eb13429a87a31c22864f56567e889
src/openrouter/components/imagegenerationservertool_openrouter.py:
id: b7499cf15b3a
- last_write_checksum: sha1:2a253a105b37e5e1b6b3b9345cdaf64ebe65f703
- pristine_git_object: c9609dbda39bbc43666c9625cf58baf469a6160c
+ last_write_checksum: sha1:37b4e32b48943100d6a3c894c514a9785e08c797
+ pristine_git_object: dbae6498aa50378e218374978a5669eb14863dea
src/openrouter/components/imagegenerationservertoolconfig.py:
id: 76f45207c1be
- last_write_checksum: sha1:065e1ab5d5e29f01bc86428ecb438ad9f7f9dc7b
- pristine_git_object: 0fdc8f67a8af50e789e2ae73d647d9ba43b703b2
+ last_write_checksum: sha1:9ad8a69110b449f362cca95a9b98358ff41390ec
+ pristine_git_object: 2458156e5adc142fc2eb8bb438f0ef4410c40ae7
src/openrouter/components/imagegenerationservertoolconfig_union.py:
id: d1c630a1476a
last_write_checksum: sha1:50d45b5a787e8cc9024c05b31e4113993ffe4038
@@ -7366,20 +7410,20 @@ trackedFiles:
pristine_git_object: eb59bfd0d4b89dde72504f8aa57533c689474ced
src/openrouter/components/imagegenerationusage.py:
id: f51151e8dbfa
- last_write_checksum: sha1:94b36c85779166c24486c3f8cb59dd5b5e96f227
- pristine_git_object: ddc1c84536c4579a40f3c58482dc0ad3dc74b5bc
+ last_write_checksum: sha1:810fd7e3dd1808d3c846fa4791ce3ba728dc32d6
+ pristine_git_object: 83ae9b1bc1e7624550cf432b440c20ebe6eb16f5
src/openrouter/components/imagegenpartialimageevent.py:
id: f88cea0c67fc
last_write_checksum: sha1:2ee76cbb50b60ebe624bdfe0769a7bbdce047cd0
pristine_git_object: ad454de88a0dd65f464fb25a982d3c4060d17994
src/openrouter/components/imagegenstreamerrorevent.py:
id: 15c890eb8a08
- last_write_checksum: sha1:3472a96f7a2855a043011f43d5a72eb51ebd5458
- pristine_git_object: 9396413a957395a3fb784b80a443f12cf35948cf
+ last_write_checksum: sha1:29a04e6dc39f00f7784cc9228348a3b6f129b416
+ pristine_git_object: 80006d6d186baf7838a40a93839cdea5375256f2
src/openrouter/components/imagemodelarchitecture.py:
id: 5f3e50733fe9
- last_write_checksum: sha1:207defb8e73dde6e8f0f431ddd1c26c00671cd8b
- pristine_git_object: 5e93aaa1401ef96452bda0ff80d520b190968d86
+ last_write_checksum: sha1:cc9bee6400f1b7b65ff1c86c5d6bcd5eeab03209
+ pristine_git_object: 01f0cb5e15bc03592cca4d25a3d67ebb990dd433
src/openrouter/components/imagemodelendpointsresponse.py:
id: f3d538d38ec2
last_write_checksum: sha1:e10cae58b2bb98ab1a0df6fc162f402ac1561d3c
@@ -7398,32 +7442,32 @@ trackedFiles:
pristine_git_object: 9c5a7a430aa6103cc10052b1d6c278181071180c
src/openrouter/components/imagepricingentry.py:
id: 58bd958fe130
- last_write_checksum: sha1:62645aeb8bd8ea04844616e6f21e7c863585a2fd
- pristine_git_object: 8a8700461f2731e8ca7e1b62d6c41d5afc24d015
+ last_write_checksum: sha1:9dd0062e577388192bf1664c5c00189d46f976a8
+ pristine_git_object: 4e4c1cb067ac9184362a7284906f13c442cc152b
src/openrouter/components/imagestreamingresponse.py:
id: 7de5604ae99c
- last_write_checksum: sha1:5ac700ab9ab34476b5831d438747e2ca89d0b9c5
- pristine_git_object: 74c8f0665e48d0442fd6c67e86bce01b3c948c6e
+ last_write_checksum: sha1:9148415c3a30065e7b1c373818a4d2ae4fc73ace
+ pristine_git_object: 877d1986f2a7e941f17532061468b5115a7b0d7f
src/openrouter/components/incompletedetails.py:
id: 1984e5246b23
- last_write_checksum: sha1:494eaf7185deb1ef3b12d4e81711a8aec012445f
- pristine_git_object: 56dc0963b67dead0ad9f529fd7e3275e95af73eb
+ last_write_checksum: sha1:573c1e6509ff2a9e1224725ec74e69f1c720eb09
+ pristine_git_object: 313c4e71ee7627cb0cbef4cef3d4923b4360fe31
src/openrouter/components/inputaudio.py:
id: f8f101a46dda
- last_write_checksum: sha1:93bf549be043e2a083944c3dc42912827efa4e43
- pristine_git_object: 00e2180bab28843dd022391c6985d4eca733a6a3
+ last_write_checksum: sha1:c323d92f2fa9c816a3970b8d10b5ad025d223cfe
+ pristine_git_object: bb86cd0457cc66119ec6ec16bb9a76c04aa21c23
src/openrouter/components/inputfile.py:
id: 19d9367db0d0
- last_write_checksum: sha1:953c4a25890b45eeb4f4bd56c619fc212ca03ff7
- pristine_git_object: 7a6dacdccea14227eed247b8c2442a79578608e1
+ last_write_checksum: sha1:9023228b52b9ac6a301f753b897314fc87f27c14
+ pristine_git_object: 96197cab114700e6069a4c291679a82804fb2361
src/openrouter/components/inputimage.py:
id: 995d068f1073
- last_write_checksum: sha1:4fa2c93999bf024faa82d33f8f36856158cccf93
- pristine_git_object: c249efe66d797aac2bff3331387041b07f1edcac
+ last_write_checksum: sha1:c04dcb20e1eb3b22c1da233029e4a0c8502215a0
+ pristine_git_object: 0e7edf2ba9a0c7cfa1e395b240ab55ada9bbd436
src/openrouter/components/inputmessageitem.py:
id: 6c5260d62714
- last_write_checksum: sha1:22efb4355a4409f396b6d239df77c9a95d71b05f
- pristine_git_object: 0a812fcfc111c04d875fe3d6d9209f7ef975a6c6
+ last_write_checksum: sha1:98b5f65b95e9b984ed78a2555e58b33ded517f41
+ pristine_git_object: 654f64256a1cc0fdcdcf60c22e0bdc99256fba5a
src/openrouter/components/inputmodality.py:
id: ffa999fb401a
last_write_checksum: sha1:da607c1deed71fcc11d880b7cebe92471e2ec5d4
@@ -7434,8 +7478,8 @@ trackedFiles:
pristine_git_object: a3d84a96f4553a320f5eee5d63f6bc5c244ab446
src/openrouter/components/inputs_union.py:
id: 17d6239cb6a7
- last_write_checksum: sha1:eca7ea806a85fa773c405400b3315d683e437df6
- pristine_git_object: 04903b8142ac2c58379ec807c0086a13898bcba0
+ last_write_checksum: sha1:289d1c1eb23075d285491f8fab2bf4d8dc941c4b
+ pristine_git_object: 1371934ab909d77965b050958080277ca8988f09
src/openrouter/components/inputtext.py:
id: a995ae96be99
last_write_checksum: sha1:0e30dbfa1813d3e69e0ccd2511f50080cce0fb6e
@@ -7450,32 +7494,32 @@ trackedFiles:
pristine_git_object: 4a58daf7d055e111ebf204b18ee413203f06b745
src/openrouter/components/internalserverresponseerrordata.py:
id: 91397805fa13
- last_write_checksum: sha1:cb5655008ac7209608b832f0d28de8c21a0831c5
- pristine_git_object: 499f4923723d9e027cfc90e8481de44a123134b0
+ last_write_checksum: sha1:5eda19511efdca45761dccc80cc678ee705a49f0
+ pristine_git_object: 6742b2ecb43dab3f9d37e634cbc09650de79171f
src/openrouter/components/itemreferenceitem.py:
id: d3c42b5f11fb
last_write_checksum: sha1:25fd74f1c34307a97931e1d2c138a1db347218ad
pristine_git_object: b5a0bc16faa52f26d293eea18183e4d0b0bbb901
src/openrouter/components/keyassignment.py:
id: 07a64362e7fd
- last_write_checksum: sha1:769458eeb21e1b275a63ba7bdf70a60fe9506a8f
- pristine_git_object: 1598e46441729cfac244f806248a72f124e289c6
+ last_write_checksum: sha1:4b47a6f1ab4992ec81d7236ca28dbf94d3a4fbaf
+ pristine_git_object: d334197ca0822a32f5f98a7548b254a37ee7d110
src/openrouter/components/legacy_chatcontentvideo.py:
id: b06bf8b4b644
last_write_checksum: sha1:13c50b1957251e4819fc8ac6545c64cfe940bc8f
pristine_git_object: b5dd4d1a0d29169acd66c3b92b04dd9cf5291f79
src/openrouter/components/legacy_websearchservertool.py:
id: 8b28b05b8756
- last_write_checksum: sha1:37cbbf1104b56c555401afe6263a7c67401ca3c8
- pristine_git_object: 963b59056bc54e6af6900756850f25a755baed2c
+ last_write_checksum: sha1:bff7d5ebd6a54d3a598aaaeccefd18a04bb9b489
+ pristine_git_object: 5628eb8718f0a2fb6664a4e4a11e84a20409a991
src/openrouter/components/listbyokkeysresponse.py:
id: d5f63cba5dd9
last_write_checksum: sha1:97cd54e94ba4996ebb43252ac31aa70511e0328c
pristine_git_object: 3cbde84c8d3cc12e69b9788bd365dc39f9fa27b8
src/openrouter/components/listendpointsresponse.py:
id: 7662d5774bdb
- last_write_checksum: sha1:47bb7a70d674ab63a157333c6c11cd36f1f41a6c
- pristine_git_object: de4f12152b4ff4ba981538c21fdf4567b7b6cdca
+ last_write_checksum: sha1:bb4c49e9a214e9282919cc712239ee7e48c53041
+ pristine_git_object: 9618ef276af10174085e61119ce5d53e9849a1ec
src/openrouter/components/listguardrailsresponse.py:
id: 78fbd2689b5d
last_write_checksum: sha1:d3103f2ff7aa2be788ef4aacf6a068497779cca1
@@ -7504,42 +7548,46 @@ trackedFiles:
id: 64fa8723acb0
last_write_checksum: sha1:2546a0136f06ab451e7df5d1af7d32029e5f4719
pristine_git_object: df7bc125a2e1135e8e83f6032810d879d06934f7
+ src/openrouter/components/listworkspacemembersresponse.py:
+ id: cfe46d91c277
+ last_write_checksum: sha1:f5d86b2ad810be375324b6cd281c4f41f6864419
+ pristine_git_object: 911823770e39cfeb2d632eaa0796a4de58c26147
src/openrouter/components/listworkspacesresponse.py:
id: 0c5f98eddbf5
last_write_checksum: sha1:53b10630a44ccc43fa86a34e9a3f5a64f08488c4
pristine_git_object: b70d4bbc7e84bc0f9ae3beedb8784bbc46aae9c0
src/openrouter/components/localshellcallitem.py:
id: 0b6a39ef0319
- last_write_checksum: sha1:1f597aa2fc434cfef556f8c5f07f9402c1c99c2b
- pristine_git_object: 00560d64813819940abefe8bf2ef88fd2ff6f5d3
+ last_write_checksum: sha1:4969185e0d35909e8fb3597a16a71d3ce0977c45
+ pristine_git_object: 5f661878cd074fc063a074cc90c830fb9ed827cb
src/openrouter/components/localshellcalloutputitem.py:
id: 762eac87313a
- last_write_checksum: sha1:e77e55b6ba383571090b89807c486a2442470cf2
- pristine_git_object: c1fc1796eb8097b9a73a50f8927b7b5290e04f8b
+ last_write_checksum: sha1:4afbcd94aab30d63f7315d7590c5feff0e183add
+ pristine_git_object: 24a827a217bdb72ab7529b0948245eba2f1a2871
src/openrouter/components/mcpapprovalrequestitem.py:
id: 30c0962de16a
last_write_checksum: sha1:d823d5a2d589949bc94d4f76dde21f8654695272
pristine_git_object: 3c56ace657bb934609744a7055f0ed0e3b3f5431
src/openrouter/components/mcpapprovalresponseitem.py:
id: b39dfe6b18a0
- last_write_checksum: sha1:ffcbf766b3d7997fac0755aa4c0092d8622512ef
- pristine_git_object: 3231df92cdf6fc65cda2ad77243e0332aa504916
+ last_write_checksum: sha1:a10d7a429144da649ca8218295f76f782e0da7a3
+ pristine_git_object: 75dc3be4f7c24488c28233a5717191a0dcfe538d
src/openrouter/components/mcpcallitem.py:
id: e56a30943ca4
- last_write_checksum: sha1:b3105515c3f44e0c6a8e503cc1004235bcf334d6
- pristine_git_object: d593dd4020308ddd8b4191cf3afc2ae6163d0820
+ last_write_checksum: sha1:8a7f13a8e9fae0a9460882b1babff33cfddb3089
+ pristine_git_object: e5f3723605b0446a0a8b6b38acb9d528332fc5d2
src/openrouter/components/mcplisttoolsitem.py:
id: f2dd3ab36ae6
- last_write_checksum: sha1:c5e513e2923b074ddf393946b831e7037ac1cbb6
- pristine_git_object: 305621bddb2ea4f663b694d17be70b6f99d38b50
+ last_write_checksum: sha1:559bfa92486919f7e06191636602fa98470763c6
+ pristine_git_object: 710c3db1513d3b12fc4c0899f899acfaa642573f
src/openrouter/components/mcpservertool.py:
id: bb8aeb03a111
- last_write_checksum: sha1:014b01dd6253437640d2b3fbd084cfddb2399073
- pristine_git_object: 2a2dce01b6afc66f15150a51245ed0a781347c0d
+ last_write_checksum: sha1:c263b8a5a2837971a0542b30d5358f75b528c85d
+ pristine_git_object: 2b0489b5e316cf3de65f823f3df062c56ac7000b
src/openrouter/components/memberassignment.py:
id: c11eba01a3db
- last_write_checksum: sha1:db9d3c5dcd61a231f7c93bc92a5adce4a4811ad6
- pristine_git_object: bf257605d2a5dc41234cb9fcfdda939948b26388
+ last_write_checksum: sha1:f62f58b6177b88e5d3bf5a580ee1a0c7487da6f5
+ pristine_git_object: 7650d341b543e486d5b0a61afbaa9792aad14b63
src/openrouter/components/messagesadvisortoolresultblock.py:
id: e36ad7b5263e
last_write_checksum: sha1:4aeab70302022153c511d68625d64d91d699fd3d
@@ -7550,32 +7598,32 @@ trackedFiles:
pristine_git_object: 05b041967edf0ab2d8458f9f0fc3577f0a55fcfc
src/openrouter/components/messagesmessageparam.py:
id: ed8bbab6720d
- last_write_checksum: sha1:0f53182e86a40e39319eba4da2cbfc14cbd97a3e
- pristine_git_object: 2eb70cadb07a2fefe8b43146a22744ca9d8c8271
+ last_write_checksum: sha1:4e5fb461702f78194596d7de570c7da25f05249e
+ pristine_git_object: 8a9738b371fb0ed0cd30d0bb7cc237fc7168eb92
src/openrouter/components/messagesoutputconfig.py:
id: 54d1e297f740
- last_write_checksum: sha1:ced57d515995fb4a3fe9b8088dc212b5edf28a13
- pristine_git_object: a5410bd961e2ce450b97e6a5702a336731b2e0ab
+ last_write_checksum: sha1:01e41c73a07af6167f6934394f6e1f419f7ab878
+ pristine_git_object: 9b033dd8570e1d71ddb61a63a4b320d3003bd3ef
src/openrouter/components/messagesrequest.py:
id: 72b1f339024d
- last_write_checksum: sha1:da2e9563eb32013861d1c138ee3ed341cf77091c
- pristine_git_object: 2ccd8d8f6441a0401323ea5bb80203cced06f12d
+ last_write_checksum: sha1:ea318958da35e90201812d01dfb04608212533b3
+ pristine_git_object: e87ddbde100b658e3d6378cca6b123c8e162b3a9
src/openrouter/components/metadatalevel.py:
id: 0eede47eef62
last_write_checksum: sha1:b4e7e6fc4e9016b65008e9ebbfcc6f018fe89ced
pristine_git_object: 1257b38d2001f34078cd1b052c20264e81a95e57
src/openrouter/components/model.py:
id: cef3adaa772b
- last_write_checksum: sha1:53f544fe39ae08cde33f99c5d0bb4b6cc1555301
- pristine_git_object: c0345109fb1717ea27010605984c27e1137426fd
+ last_write_checksum: sha1:f38b9a67b113ed0772e1aa50571c884c64b479f6
+ pristine_git_object: a76656cf0dfc106b6c1a80dac3b53d0114aa68b6
src/openrouter/components/modelarchitecture.py:
id: b37ac27e512b
- last_write_checksum: sha1:e1dd41aa140b2ca2c3bbf15abf74e034d42b0166
- pristine_git_object: 2da26c7abc1b7e2b895a056c72d90bf8c8efa6b4
+ last_write_checksum: sha1:4cb5ae4ebd310085d58966528958f7183f2ca9f0
+ pristine_git_object: 1fb1dbcc44f43ac47d0f3c8af94298235461399f
src/openrouter/components/modelbenchmarks.py:
id: efd0b01b6775
- last_write_checksum: sha1:3cd5ff77d780c3b9ddbeea46e345fcb77ba7a829
- pristine_git_object: 37d57a208efec04590ecbe69485e2b70a13dbcab
+ last_write_checksum: sha1:71dd3f1be37b6ea21345316025cb106488a9a4c9
+ pristine_git_object: 466a8274140ec2d35bb15233371be4555a79e915
src/openrouter/components/modelgroup.py:
id: ffb5492b0d39
last_write_checksum: sha1:75da0e0a977d4fd2908506683548c7a8c878b869
@@ -7586,8 +7634,8 @@ trackedFiles:
pristine_git_object: c197cb2c527296adff2c3cfd9e49bcbc48087ce7
src/openrouter/components/modelreasoning.py:
id: 58bb3f2d75e0
- last_write_checksum: sha1:d7decd330533b566bda99e6b4b5e120970cf61f1
- pristine_git_object: fa73b90a1b4b140d6b9ceb9ac284142c4d95e4d7
+ last_write_checksum: sha1:d08257c7937f0b3cafa64c09da32ad86d1206239
+ pristine_git_object: a757560d4f60c863dca160d748a01c91aab072e9
src/openrouter/components/modelresponse.py:
id: 023136e6dedf
last_write_checksum: sha1:af84587984cbe6341f59f176b08df43096ac48c6
@@ -7606,112 +7654,112 @@ trackedFiles:
pristine_git_object: c2db9e78ad403cc9c27269d0be222ec85706446d
src/openrouter/components/multimodalmedia.py:
id: 0a12ae380c2d
- last_write_checksum: sha1:2e35b4bec2402b723fd8deef7e2029917d7f2e6c
- pristine_git_object: 2cd306cd65f9caf6333e7b1cc3e49ee33d250d21
+ last_write_checksum: sha1:0a59453c9f9264886dc6d4474129b17ef9db6b5e
+ pristine_git_object: d71cb727cef8619b62b83f2b3a7cc9e18d8a60c2
src/openrouter/components/notfoundresponseerrordata.py:
id: 6ebceef7a039
- last_write_checksum: sha1:b57cbe36f5a56241d3736f59a6a10f974751feb4
- pristine_git_object: 5b8ca0ce252ca2fc909770c5c338793b05877a91
+ last_write_checksum: sha1:da12b33a06dfce17c97c999f32f8811d31cf669d
+ pristine_git_object: b7549df72da73d670f982fe20ef99434cbde4051
src/openrouter/components/observabilityarizedestination.py:
id: 8926882c1d18
- last_write_checksum: sha1:d9dfd8b65cbb889188c000cf4dfee81f18a0e1ba
- pristine_git_object: fdcc98dd16e3e38d4e3d2bea91139ee62ac41570
+ last_write_checksum: sha1:6cbe740aa20cd27d81b5d5f4e229f3cb99520972
+ pristine_git_object: d1fb60540d3025e8291ae44d11fa70292a03075f
src/openrouter/components/observabilitybraintrustdestination.py:
id: 432de20d1c77
- last_write_checksum: sha1:1ba768fc9387674e430704553c6f8e202f3396ac
- pristine_git_object: 7980758411748f3fa6572b1d6cc4ce880f2cfb0f
+ last_write_checksum: sha1:cb07d68cd8e5ebdebd80df9002670edfbb387b03
+ pristine_git_object: 37016dc2b49d4a53c2cd52693cca6b1c22a33a75
src/openrouter/components/observabilityclickhousedestination.py:
id: 0bafb43cfee3
- last_write_checksum: sha1:435fbc1308f18b3de2fc9b1ac59bfbadda3e8ff5
- pristine_git_object: 7a65ddbf223dae22b08819f0f7d29d0fd719cfd9
+ last_write_checksum: sha1:58837a323c39db28cf1d9f62a492581e11153b52
+ pristine_git_object: 6281200824a518e2f99fb8b40812f950ea02e78f
src/openrouter/components/observabilitydatadogdestination.py:
id: 2b99c86aa089
- last_write_checksum: sha1:efc7eeb2eef9722dc913b8becb8145339a74f669
- pristine_git_object: 8043ffca2d6befe0d55f99f2680dc0eb006de93a
+ last_write_checksum: sha1:457bd1f4c85b6e63456f2975fb915aba7d293a14
+ pristine_git_object: 40cafb2eefd976ca48e6b5c77b9b00b2cc2fc348
src/openrouter/components/observabilitydestination.py:
id: f02862444a3d
- last_write_checksum: sha1:5dfc984fe4fe009ecf28a8cb83f9ddbbd9e71976
- pristine_git_object: 340a94c501d3d3ad11f20cf4e8865af49a059668
+ last_write_checksum: sha1:182ba82fb2aee3f33a975ce8eb2ef978bc0b46d2
+ pristine_git_object: b7a1d2f385159ff27bde884ad290db7878ccdfb1
src/openrouter/components/observabilityfilterrulesconfig.py:
id: 98476c1c326b
- last_write_checksum: sha1:3e7a055391b5f2f279bd63fcc1fcb9c2758a620a
- pristine_git_object: 25fc9cf1ba263cb0b3a2a6052053f1b36d0a8722
+ last_write_checksum: sha1:2f0154d62e8ae85dfced48bfbc4d5430bddabc18
+ pristine_git_object: 76f042e250255d33d9ed6626f1dd0be51f2fb4f3
src/openrouter/components/observabilitygrafanadestination.py:
id: 36c8f26bcf6f
- last_write_checksum: sha1:7da5854a2a876ee5de01748f335830d9b76a1bcb
- pristine_git_object: 184ba8b4ca540d9d6e41d7602c98adb30f052d0c
+ last_write_checksum: sha1:d7fc978dd9c663490f1a7a8c12b07097d7985688
+ pristine_git_object: 677a4cf65e3b058e7ef1f071d7f8bc5c01c61b66
src/openrouter/components/observabilitylangfusedestination.py:
id: 46cb7e3719a7
- last_write_checksum: sha1:7a361db96534f6de202006e65d650f693f44b740
- pristine_git_object: a2ceb50a62032b228c3c5d88e43cf9e04e2968cb
+ last_write_checksum: sha1:0c2467b00f95fe865e9642559ec446c785f5ce03
+ pristine_git_object: 961d42456fce6d3776f789b003cb80155c752e51
src/openrouter/components/observabilitylangsmithdestination.py:
id: 90dfe215aead
- last_write_checksum: sha1:deecad5a2a928eb50256121b2dbd22d129ca5d19
- pristine_git_object: cbde97094b8e38c7ba9dea8403370367053a2695
+ last_write_checksum: sha1:6438444257ddcf7b0dd960b7c3c9def0d35c9a30
+ pristine_git_object: 84d1b83002e6cf1f607640ffd9b5eeec1de36503
src/openrouter/components/observabilitynewrelicdestination.py:
id: 6294b06c08ec
- last_write_checksum: sha1:3e86bd883c890ae8bb49615717cccb6e52a123b0
- pristine_git_object: b0560ca9de4802cf7db780c8af9482bf03c31672
+ last_write_checksum: sha1:196806cfff2c8f12ba1b6f9bb6633313e8cd3b5d
+ pristine_git_object: 3cae22bcb04d6094f03a12366172bb1977e8b527
src/openrouter/components/observabilityopikdestination.py:
id: 404c6ff48b85
- last_write_checksum: sha1:ac0bc9ce725b0d1655128b8a799dc1271224c740
- pristine_git_object: eaf453b8df41874cb8cc700624d6573a39c030b9
+ last_write_checksum: sha1:8d75f916c39e2edf1edd163863c35fdddb2cf154
+ pristine_git_object: 1be42b17ae73de94549bcc95df4d21aae2c751d2
src/openrouter/components/observabilityotelcollectordestination.py:
id: dc77f211456a
- last_write_checksum: sha1:b7b74469814f54fd705e20f8ddc7a3698e338731
- pristine_git_object: f58eeb0e280d818eb10f1487f1d0d73f877d44c9
+ last_write_checksum: sha1:9ba48f1c3485f2b25fad34418b3521a3b433d051
+ pristine_git_object: 00e7086f0b662bdcd4bf9d00fb868a4b20c4ccec
src/openrouter/components/observabilityposthogdestination.py:
id: 3a9f4942fcf9
- last_write_checksum: sha1:9392b36c72f3a5bdb65c08c58f0ffa6e9d70496b
- pristine_git_object: abee5d8177121baa58015df90b2a644b73ed6a4a
+ last_write_checksum: sha1:172b08b0319de0c958df70569fd72879f374c1a3
+ pristine_git_object: 3062e97464b4fe247f74dd91854dcb030d045081
src/openrouter/components/observabilityrampdestination.py:
id: 8559b9e7501b
- last_write_checksum: sha1:2b808db5bda297b15e8bc63be5a7698ee08fcdd8
- pristine_git_object: f8e119cc297a620040dd7d35edc99d7ca54b15b5
+ last_write_checksum: sha1:7982e1567132bc31a979208c7736734292e04c6b
+ pristine_git_object: dd28ccf7866ed9fb8d5c5c661a953bf4dbb15993
src/openrouter/components/observabilitys3destination.py:
id: 2022d25fe7d6
- last_write_checksum: sha1:1e9c3b34e9cf23a8fcb751bf54ab35eb828d8a50
- pristine_git_object: 96ea2a8e90e13bef34e0a42ef09e09f3284571f9
+ last_write_checksum: sha1:c05eef3b3b935f0f5889afa2f63d467965beb333
+ pristine_git_object: 5c400317212875cb2656d9097838b8b5b3d04587
src/openrouter/components/observabilitysentrydestination.py:
id: d27b8b37d1f8
- last_write_checksum: sha1:4a1ee1ed06b89d143a2cbb85e19818b3a591cc63
- pristine_git_object: 77f86c72f1182db88568c4eafb8422f23bec9a91
+ last_write_checksum: sha1:b76c6eac97e52bf9543711d21ab575e97fe1439c
+ pristine_git_object: 2c1a346e9a0493ac54a69be42631f83f537daf84
src/openrouter/components/observabilitysnowflakedestination.py:
id: 4e4136c11a0f
- last_write_checksum: sha1:136aebb1696d75080861153d3fe3608895885604
- pristine_git_object: e6552f7abcfa18b702d31d6dc1a57a7ba31fa215
+ last_write_checksum: sha1:d39b4fff4f9c39643e5cf02123540e3eb22e573b
+ pristine_git_object: 9dd853c88111c1f2f729ec82736832d1b391f73c
src/openrouter/components/observabilityweavedestination.py:
id: 6ee5e9677e6c
- last_write_checksum: sha1:4f8991159946750cf3ff1ab9dd0364f9d204e241
- pristine_git_object: 8474c7c74b1dd40e82080f24960692b7085a5080
+ last_write_checksum: sha1:a47c8b7e71a1d6095e6a2e55b15dfcc1fd8fd9c3
+ pristine_git_object: 81e7305b843bd67a80917ec5698b430ab7c5f6cb
src/openrouter/components/observabilitywebhookdestination.py:
id: 2f942be86581
- last_write_checksum: sha1:a7c50d871c8d6ed60f6d999c60b2bf4d2ede5e9e
- pristine_git_object: 3eced6d5cce8cda2d1798bea93e340c30b5a2c87
+ last_write_checksum: sha1:03c3c17e3dea02893688ce46784f9ea8461bacc4
+ pristine_git_object: 344abac0c40b1b4e21d986e70be1e7ee80fc2b4d
src/openrouter/components/openairesponsecustomtoolcall.py:
id: b1a8a20b6710
- last_write_checksum: sha1:3f2a04c33ec98b85b78daf38019ad29e77556b6f
- pristine_git_object: a7c4d28268ea6f20aba851547de1ba49bc525296
+ last_write_checksum: sha1:700948fc28ef6c2c4ae5774fc02e256fabbbfced
+ pristine_git_object: 8e86d12f007b0b0ea4762119eb16ea9eac5019bc
src/openrouter/components/openairesponsecustomtoolcalloutput.py:
id: 54a2863b76bd
- last_write_checksum: sha1:eecd71438611310be3df2938cae7ad164a144b4f
- pristine_git_object: 1fdfc5564527f668aaef926ea22784195be86660
+ last_write_checksum: sha1:8f5fe8e7880c2302399f1406b467657c3b7b52b0
+ pristine_git_object: 4cfede4cecef4d5aa4f80aff3d321cd4e1555b95
src/openrouter/components/openairesponsefunctiontoolcall.py:
id: f201e89f8dcb
- last_write_checksum: sha1:288f5a70d1b7227946d18e12e106445dec191965
- pristine_git_object: 2c0fa25be233851bcacb262a2a448320c95b595f
+ last_write_checksum: sha1:6cb86a7da1d9f11a1e9ad0e5d08173f85205ee4e
+ pristine_git_object: 2351f7f08aabcf15cc6ed810a537ca4638bcd8fc
src/openrouter/components/openairesponsefunctiontoolcalloutput.py:
id: 1440f5810305
- last_write_checksum: sha1:d24140b6566a04d5962fa967d28575c828502bf9
- pristine_git_object: 491f3fa16ca666e3509eaf389e803927c5c6e80d
+ last_write_checksum: sha1:dcccebe0945e97f1c16d848147a1e09070a91fbc
+ pristine_git_object: af8258c63d88899948741f0597c89203e461fea1
src/openrouter/components/openairesponseinputmessageitem.py:
id: 90c7fe9366e7
- last_write_checksum: sha1:3cdac28f313ad612a2b31f40b4437c7067078305
- pristine_git_object: 5aedf6b16d685bb9048349dfdaef06b1c289dda0
+ last_write_checksum: sha1:629ebc3b56ae4570554eef76220d9394d189ac0d
+ pristine_git_object: 3dedde3ce07be821316ef8b9eda0999071d5946b
src/openrouter/components/openairesponsesannotation.py:
id: 092d7d770eb3
- last_write_checksum: sha1:54d0c47c3486c15abd9a45622fa31607a946eaf6
- pristine_git_object: 1303f981ea1190c46bfcc6e538995a7a630fe4ee
+ last_write_checksum: sha1:7fed7001721d065ceb1644217e397d7c76ee7203
+ pristine_git_object: 004a5d0f7a7466f47ac553beb0b27a79343c900a
src/openrouter/components/openairesponsesrefusalcontent.py:
id: e65dad8b00d3
last_write_checksum: sha1:5891412e704c1af0b69bdebf44e2555f6e8117cd
@@ -7738,104 +7786,108 @@ trackedFiles:
pristine_git_object: 08d990d8cc07b7928158fc55784cd9d613f4c58b
src/openrouter/components/openresponsesresult.py:
id: 78f7e33b19e6
- last_write_checksum: sha1:ab91e0c198cfeddefbf5b1b5b33e7bb9b08b948c
- pristine_git_object: d53fb70ebbd7108d300c78b82ef884289ca6dc7a
+ last_write_checksum: sha1:f3d493060704b56a9f609d2bd26ae812f759fbf2
+ pristine_git_object: 757158f7fb2b382532308b7863bbe591400fce4a
src/openrouter/components/openroutermetadata.py:
id: 87062f38be59
- last_write_checksum: sha1:5f69423c82ec021b04be5d518f2b75acf671dba8
- pristine_git_object: bc1d7f3bc726cfe0451e543ce7d8adde0d0cf305
+ last_write_checksum: sha1:65c4b563aea67eb15f1fc6d859856a081a1cc78f
+ pristine_git_object: 09b552bda339d8fd4339b5acb5bfed31594a92c9
src/openrouter/components/openrouterwebsearchservertool.py:
id: f5400a5de3cd
- last_write_checksum: sha1:e1cd10158e15f88d5c2903b1508a42d4006f4f3f
- pristine_git_object: 0f83d4405d1f2f7892dea255eac01aa34bd8ee2c
+ last_write_checksum: sha1:5b8eab2b521a639688131143ee39e513e6da524a
+ pristine_git_object: 73c09231284a8f982d7770a7a78fca403b374826
src/openrouter/components/outputadvisorservertoolitem.py:
id: aa64bddfa26c
- last_write_checksum: sha1:020c7b0593a1b20ea9d20bc408f636b5134cde2d
- pristine_git_object: 0387112161d086667df5f53bd6b50c3fcba65d0c
+ last_write_checksum: sha1:b78d01e397edf8bfba32463a097e89f9fc0f9261
+ pristine_git_object: aef6c89e87880fbc321285f5fc3a0932b14c90ad
src/openrouter/components/outputapplypatchcallitem.py:
id: a755b7e7b924
- last_write_checksum: sha1:85ee2ac5528e9a5799f76b77038b582266278845
- pristine_git_object: 14c02013831202f1de640a03d98c0203efb7e62f
+ last_write_checksum: sha1:bf8899f5f931b06a03c8c5e92307909a21dd29bd
+ pristine_git_object: 183c5517cc49967e483846fde66a888334aa4383
src/openrouter/components/outputapplypatchservertoolitem.py:
id: e38119e7e094
- last_write_checksum: sha1:3f5d04634c8ea8f2877e8116c6b76a94be2dc695
- pristine_git_object: 96d4daccc1132eab3f6157549b853766303e7dba
+ last_write_checksum: sha1:898c5619f737c6d387df5ad4b389d1a24780274c
+ pristine_git_object: 919f2bb6ec91d62dcb223c15e2a25d2830b75ac9
src/openrouter/components/outputbashservertoolitem.py:
id: 39d03767e214
- last_write_checksum: sha1:1f60c9358728a826bba8a6226f11deba788120d8
- pristine_git_object: 2b9fe1845eb56d368106f217c9944027868b6263
+ last_write_checksum: sha1:4bec4680ba72e28bbf8d64abc72cd876222fd9fc
+ pristine_git_object: daa5bcc66591a1ecbc0328d25a8039cc0d70fe14
src/openrouter/components/outputbrowseruseservertoolitem.py:
id: 73bff94d7284
- last_write_checksum: sha1:0428a118986766743c6ba142b7a68906f2fc8331
- pristine_git_object: 4e7aac5b5ff66ad429b406d62b8b6cec6824313f
+ last_write_checksum: sha1:6835f17b73a909e8a49ce9ba1257d43c62eeb690
+ pristine_git_object: 3366466ab412cb62051880b09619babda8d200d5
src/openrouter/components/outputcodeinterpretercallitem.py:
id: f3d69267994b
- last_write_checksum: sha1:202fdff43e5e87df78451c84cde2966560932b89
- pristine_git_object: e32218266e3fa7b434a9c6b2a075c5e15e11c238
+ last_write_checksum: sha1:19c1c83023a655dd2941baf6b8c3d6ccf37ada6d
+ pristine_git_object: cdf3d63b6bb7309da0c094232a08de2b8af9ad8b
src/openrouter/components/outputcodeinterpreterservertoolitem.py:
id: 628c3093647e
- last_write_checksum: sha1:65f7bd8c941e9c16533c5cdbc309d46ebeb106ca
- pristine_git_object: 50a002ff46a064755d5fde512da95f4d2397ef6f
+ last_write_checksum: sha1:a26aaf9a1ce42a37ff68404c98e62f76f745a10e
+ pristine_git_object: 8820add39183035bdecc5ca43448fe54a638dd36
src/openrouter/components/outputcomputercallitem.py:
id: b6b688951964
- last_write_checksum: sha1:6277e30250e00908ebdf47710d20b9d7bf54e684
- pristine_git_object: 6d1009d4e2ce8adda879e3ba997ace6a25ece010
+ last_write_checksum: sha1:a46bdc1ca42226d66cb63cbc5a912a1b8b6c1c0f
+ pristine_git_object: f13810cd113a0518faad0d890a5e8fca0e8b9e8f
src/openrouter/components/outputcustomtoolcallitem.py:
id: a5deb8d3fe6a
- last_write_checksum: sha1:1ecf1244f7a1b542b3af8be19abb8259a295e952
- pristine_git_object: 5c3049d831dc561e2456a4b43269cdcee98fca1e
+ last_write_checksum: sha1:bde13f24234b1f3f4e70faa1738a867ca0d54044
+ pristine_git_object: 07f9ca2043674a2e7727ecf665579ced80ee5834
src/openrouter/components/outputdatetimeitem.py:
id: d7784d04fba3
- last_write_checksum: sha1:95710e9c510d4b205ae5c52e512377a999c5c1ce
- pristine_git_object: e84df923deb29f9ff6c2595fb92d8cbead3cf3f7
+ last_write_checksum: sha1:aa341f4d24991cfb5bd596707852b99d6336c95e
+ pristine_git_object: 379dd07b98d04f3279b933965133bd78f774fa6a
src/openrouter/components/outputfilesearchcallitem.py:
id: 61b88e4356a3
- last_write_checksum: sha1:a26855c34e42956077678a9c80c5472bdd478447
- pristine_git_object: 0c3c4ba7a473e037d8621fbf5de7d6bd69d1395b
+ last_write_checksum: sha1:432848dedf66c315d4b443f48514aa017acd7aa4
+ pristine_git_object: e6a7eb5fd67aefc3057e3d7b3fe78d836db3ffbb
src/openrouter/components/outputfilesearchservertoolitem.py:
id: 9e99e5ff3288
- last_write_checksum: sha1:a961e64e1d2852f409e3696d07f5a461d938f648
- pristine_git_object: 1916f7da478607126180a8d7e25dcc56cd36c93f
+ last_write_checksum: sha1:92d8a86195e7438b174cdd5a919f6943f08f5826
+ pristine_git_object: 5be878556b892a54a5931400f92d0f171224428b
+ src/openrouter/components/outputfilesservertoolitem.py:
+ id: 552155de1bb4
+ last_write_checksum: sha1:7f77012ef034ec1635c2bdf6219b6b1e0b46834d
+ pristine_git_object: 5f30e958618a659ecc83c746240144961c6bf6e6
src/openrouter/components/outputfunctioncallitem.py:
id: 516ed67b5406
- last_write_checksum: sha1:95288879078c977eb5cd2e63218ebffbc666ad22
- pristine_git_object: dcfc7a806fbf5794ad168bca00344b005e0d16ee
+ last_write_checksum: sha1:2dcba52e87aad59459a33bd5cd665a32c6372db9
+ pristine_git_object: 13dc4afc3516bdb0590427677835c1d1590c9d9d
src/openrouter/components/outputfusionservertoolitem.py:
id: 1d798a2bb7ae
- last_write_checksum: sha1:72cd3cdd5e1f505fe58c30949b4ceba8faf49644
- pristine_git_object: 0e8e4e6ed1d5e8c5fb613c6fb1c6beee033087c3
+ last_write_checksum: sha1:6015789e687721a2f4c9313afa5ae564381920e3
+ pristine_git_object: 78b73afecc9c83608207aa23b5f0996d1ec3d33f
src/openrouter/components/outputimagegenerationcallitem.py:
id: 48d20dc00e1c
- last_write_checksum: sha1:6795b316ac97958ba4381cdd4d6cc6108d7bd1a5
- pristine_git_object: abaaa53610171f25ed9d814f355f9a600101b254
+ last_write_checksum: sha1:8e69c6dfc3704621446b9025b092177a3aa1826b
+ pristine_git_object: f53fc0792634dc921e8d70237794b0683b328cee
src/openrouter/components/outputimagegenerationservertoolitem.py:
id: cb34639447d7
- last_write_checksum: sha1:21f58c84bea8a3ace8b91bba914e54cf62dad70e
- pristine_git_object: a94bd0964eb714782858820e0db39afc28a0dcc3
+ last_write_checksum: sha1:e544987af045a28c582d7b0abd877c3b75292193
+ pristine_git_object: ae47b1b9a43823bc6f6f83bbc911aa8c0768152e
src/openrouter/components/outputitemimagegenerationcall.py:
id: 0b4cbdbd733f
- last_write_checksum: sha1:f9ea61a170b8e516108d2d59b0e7df9d264d3aad
- pristine_git_object: 897c4727eec2497fe15e5603187e24218c08ac87
+ last_write_checksum: sha1:0ecc5cc9dad95b19cb6d4d7bb1dcdc8f2074b703
+ pristine_git_object: 94af810bbdb87fb8c6800645354f7ec4dd067e7f
src/openrouter/components/outputitems.py:
id: 90f107de3116
- last_write_checksum: sha1:e262597f5269a4d4374500a0bc9b43701cc938fa
- pristine_git_object: da3d920280394d094a6745d0770e57373df1afc5
+ last_write_checksum: sha1:278d94da113ba85ced7ae5e84b4c8b3c36a7d2c5
+ pristine_git_object: f828fba44f1de7265e267d2201dbd3043fc5cfa1
src/openrouter/components/outputmcpservertoolitem.py:
id: bb8c2536a58e
- last_write_checksum: sha1:6cbe556b2268af0142d982007b273cc43b7605c7
- pristine_git_object: 259566184ef98b93f30329b961e8598da36f572e
+ last_write_checksum: sha1:28d33c9226ff4ce6871457fa1fae384b590f676c
+ pristine_git_object: 58c21511449abfea7eeb5b667dadcf011b936bdb
src/openrouter/components/outputmemoryservertoolitem.py:
id: 4b0dc2fc5f41
- last_write_checksum: sha1:452622e2debedac3ccaed0365ba612644d7ab8e7
- pristine_git_object: 204cc7d4f1e68e56852c9f3449a336ac516f3019
+ last_write_checksum: sha1:2faed502f16ce3da8192ad19418f2e8c5b1f5e99
+ pristine_git_object: a7be8fb12363ac8ad56892fdd53eff1823cf9410
src/openrouter/components/outputmessage.py:
id: c6828e87dbd3
- last_write_checksum: sha1:04dc553699acda6552a0bc461c9eb74245b9670b
- pristine_git_object: def0cb71f27238b4e3ea52e6e1eb3329cdc4e184
+ last_write_checksum: sha1:6482b4450541a4e0a8f21d168240ca7787a7bf49
+ pristine_git_object: 4fff8bd8bfef7b4836b83244659d12fe3b5b43fd
src/openrouter/components/outputmessageitem.py:
id: 97dec64e783f
- last_write_checksum: sha1:0ef0488f60686e827be3a3f73d6d1f8b6808b850
- pristine_git_object: ec59a9d5b4c96843033bd73783a7b923fb741928
+ last_write_checksum: sha1:00ec6be9de848f8e999b47143a6412e5319552a6
+ pristine_git_object: 3a2a1f8c800da3f544943e7c75c26c367bdc9495
src/openrouter/components/outputmodality.py:
id: 74c79e4cad45
last_write_checksum: sha1:a7e7205a3469166de2bd6649d94b8da6475cc3bd
@@ -7846,88 +7898,88 @@ trackedFiles:
pristine_git_object: ccd5283d0d31048059abf6ff85677b5d1f9f4b7b
src/openrouter/components/outputreasoningitem.py:
id: 0bc0568f44f9
- last_write_checksum: sha1:3c460a262ff94910ea443fa6ac7d3f6608c3209f
- pristine_git_object: 50eff94f87fe82aba4fe330ee61e79ab885847fc
+ last_write_checksum: sha1:f9d305a4f98f5e52124410b587ee9fc8541f9497
+ pristine_git_object: 46e8472bd73ac53a7362d86f8c7ec2ad0414e7c7
src/openrouter/components/outputsearchmodelsservertoolitem.py:
id: ba87dc220c62
- last_write_checksum: sha1:f9682aae6fc8cafa19217af10d745180cacde1e2
- pristine_git_object: f94949d2e5aedf4873295efcdf87f0f5367c1d32
+ last_write_checksum: sha1:ab0ce5d348f099e4ff76f6b49f5007bd480eff3c
+ pristine_git_object: b9f5ac2a2c060ebf5f4e348a8ad7523757f37b2d
src/openrouter/components/outputshellcallitem.py:
id: 9c6a586d3cac
- last_write_checksum: sha1:b63e3c90c37f8a6b6d49d386f6417754a8ebad8a
- pristine_git_object: d2ecd9f116e9c752bdef5b972f6a69ab9ee7e8a0
+ last_write_checksum: sha1:5e15c61abee491ebe71071b5626cc9b2f9fbf4e9
+ pristine_git_object: b5840770d05d730618b0314cb97dc7d49e43158b
src/openrouter/components/outputshellcalloutputitem.py:
id: 9962f4d291a9
- last_write_checksum: sha1:58a7a14968db8a009756f93f8b37071ee2b169a7
- pristine_git_object: fca6bbd43fe7716ba4ab12bd9ee9d016c3c62800
+ last_write_checksum: sha1:4c661e84741d346a7d5586b5df1120d1609e86d7
+ pristine_git_object: 18a1f6df264fe768bd78d5c4b7c1c030ecec7b37
src/openrouter/components/outputsubagentservertoolitem.py:
id: 7480e835aa08
- last_write_checksum: sha1:ca9160c28b0f21992ad64925b587f13a4fee0756
- pristine_git_object: 35e06653f101cc5a4cd4cb173818e75fe2e52bce
+ last_write_checksum: sha1:c40f96bf2c5e27c2e6a4d91be46ce02461f6f2bf
+ pristine_git_object: bec70ef526ee26ebdfe6681b7366cb62d081e9a6
src/openrouter/components/outputtexteditorservertoolitem.py:
id: 2a5dc9318fe6
- last_write_checksum: sha1:75ce53e78b352b0427acfb5310b2500ee76351dd
- pristine_git_object: 6b7dc1cbaf7ed7d2943a8c336990c032a9c638a1
+ last_write_checksum: sha1:fc1bf715ac0084d7390eb75152f0f27994654fab
+ pristine_git_object: bec8c97af1334b3cfe4631b5bf725e801720bcb1
src/openrouter/components/outputtoolsearchservertoolitem.py:
id: fb4ec737039d
- last_write_checksum: sha1:cd368fb2d7f2cff91351c5922291f025177b5fe2
- pristine_git_object: 45dfd93dab49766840806b9263ab64da9f6fe0e5
+ last_write_checksum: sha1:63915305498f6bc6e2617ac0a0d42dc30a1b7470
+ pristine_git_object: e9d0b14d646329a6d366939dd8c628245c8b3a0b
src/openrouter/components/outputwebfetchservertoolitem.py:
id: 2b12eb287cdf
- last_write_checksum: sha1:1faafdadd295f064d2d39c12330f256abb2dcf46
- pristine_git_object: 71c97ae1ae222c114c3d0480b265031c47aa54a1
+ last_write_checksum: sha1:60ec6ef59d691699c092120ea7dffed824197872
+ pristine_git_object: 9b139a07d00c0fdee897f87e2336838f3a4130bd
src/openrouter/components/outputwebsearchcallitem.py:
id: 8c94cd441023
- last_write_checksum: sha1:6a078038a7059883f05accf9b0d59b7c065ce66f
- pristine_git_object: 63fe1138ee646ae9cb5fd8056157207ab2885149
+ last_write_checksum: sha1:80e10b29932f6f3bbcacdbdf98f00d2c4c4bc384
+ pristine_git_object: fd19c842ecd8817dd85cb4146591eba0e90a9d23
src/openrouter/components/outputwebsearchservertoolitem.py:
id: b1fcca0b3fd3
- last_write_checksum: sha1:a26e4a615a06a4e3e5841a6b69682694c5b2d9f9
- pristine_git_object: 7d63fc52581d5f5eaaef5509467ea7f37eec7c5b
+ last_write_checksum: sha1:fe18ea4e95294b30c6c22efd3941cd0cf660b94b
+ pristine_git_object: 15fb96b79c77ff9798139470e3d26df0b119a89f
src/openrouter/components/parameter.py:
id: d76aede00388
last_write_checksum: sha1:bfd3c5f0f386b8c743f724c52ba51d97e49a1757
pristine_git_object: 9aaebc4cb7eefdce97f37e89d6d719e524d148e5
src/openrouter/components/paretorouterplugin.py:
id: b239c8e11899
- last_write_checksum: sha1:9d070d49f1983cee493ba27cba80c41e6133aaf4
- pristine_git_object: 6b12a70411a04b73112da5192baf0131b7f0ff36
+ last_write_checksum: sha1:683d7762d520e3b9d08a3e976bc3bfd3ceca931f
+ pristine_git_object: f010e7df96d242b4b636a3112416a28b7a5845ac
src/openrouter/components/payloadtoolargeresponseerrordata.py:
id: 5209b3a61cc9
- last_write_checksum: sha1:ba13b793314af45716d3ed5572abaad213d01850
- pristine_git_object: ee1a068a86dbfe24300a5ee6220dcd90c6a860d9
+ last_write_checksum: sha1:41c9cfe04f098a0f8c3971e6dfe490c27e783413
+ pristine_git_object: e644b9411ef99f556f8a212cca6386c8c5459743
src/openrouter/components/paymentrequiredresponseerrordata.py:
id: 9a2591c3e458
- last_write_checksum: sha1:351fc58b6c4d4411e75389ef73b7f20744383822
- pristine_git_object: 83abd1e8a1155c9b715dcb00ea854b65868cd2aa
+ last_write_checksum: sha1:7fb9dcb46077104a5fea8bf67f1205cd914cd2e4
+ pristine_git_object: 2ddc388dc692422714e0270553fcf47b8af129f1
src/openrouter/components/pdfparserengine.py:
id: 7de19e0839ba
- last_write_checksum: sha1:8863b097a3f85ef7cb5c73101db8cebafac81a37
- pristine_git_object: 36c5f8f3b56ccd23df6f7a4bd30a6c834359fd25
+ last_write_checksum: sha1:61749f514e36bd601e5e87dd043bd8132373b1ed
+ pristine_git_object: 324fa11748ead3b9ca4bf20ccd3bf4c9fb001ddb
src/openrouter/components/pdfparseroptions.py:
id: 704219f4af59
- last_write_checksum: sha1:ebaf4590ad78b4082b86fd9689ae447ab787a7dd
- pristine_git_object: 4510e737dd18154f31fb91ea607db550c11f8290
+ last_write_checksum: sha1:3c05b6604fb099f9f9cb2766c95f1776f527f980
+ pristine_git_object: c041ce5a6b595b5a731bd97653b778830e58545c
src/openrouter/components/percentilelatencycutoffs.py:
id: 00ca8d5c0100
- last_write_checksum: sha1:81d6bd48f353122c5106ecf3a8540588876fb2d9
- pristine_git_object: fa8175fcefc672bad9edcc8612dcc447723a723e
+ last_write_checksum: sha1:9296ee4dc374853276f3a73b713c6e120c736f5b
+ pristine_git_object: 0680a1343209214f98777e6cfbe13d862d703f7f
src/openrouter/components/percentilestats.py:
id: 9c88efe57f70
last_write_checksum: sha1:c66a32149756893be4e46f16bf166cd9e36dd9f0
pristine_git_object: e979e11469df4f37098d5804ffd3e5da217468b9
src/openrouter/components/percentilethroughputcutoffs.py:
id: 652397163aaa
- last_write_checksum: sha1:409e8a4c017d03a4f852bdbfae874fd126a434d5
- pristine_git_object: 17b28ced7a9ad1df064a5509d55b1ead8cb2a4a5
+ last_write_checksum: sha1:a97289b7fd364d4d4d55eaceb452ec0891e97359
+ pristine_git_object: d4fad42e2a9de3a69093e54375086c2e23854ee0
src/openrouter/components/perrequestlimits.py:
id: 5a170d7d1f2e
last_write_checksum: sha1:9b269bd87a1f704a0f0fa731da57cb35bc960674
pristine_git_object: d572e3bfa6c8a55afa7d4f057fa17186652a98a1
src/openrouter/components/pipelinestage.py:
id: b87ef92fdac2
- last_write_checksum: sha1:f3f59e51956dabc99e4006fba125ca1c334c5cbd
- pristine_git_object: a5a763d022ed39dab6e7ab05ce28582d408d42de
+ last_write_checksum: sha1:3ced429ce8fc615df880ba5eda954b42f53329cf
+ pristine_git_object: ddecb911ec93889d93c0f80020370a023323df94
src/openrouter/components/pipelinestagetype.py:
id: e84fda1bf034
last_write_checksum: sha1:ada3c3cbb5726f94c566c172bb3b682f0efbe9fb
@@ -7942,32 +7994,32 @@ trackedFiles:
pristine_git_object: ceb4be7e491c27a88e8c5987268e9cea098317e8
src/openrouter/components/preset.py:
id: 13d4da7b6a00
- last_write_checksum: sha1:3e041a12828e5381280fe04b4a865658c5025796
- pristine_git_object: f1a974c26cef7c16c23f4812f8f43818f5ce1157
+ last_write_checksum: sha1:dd78b534b89481c4c85f5f9b0ab61d1a0e5a0e4a
+ pristine_git_object: 9c2ceba75bfaeef2944108ca1b43f1f9dc7cd7c1
src/openrouter/components/presetdesignatedversion.py:
id: de6fbdac35a5
- last_write_checksum: sha1:a581657de9f8ea01864d545cf33aa30fca30fb33
- pristine_git_object: 620f08f9b5c6a90fb633f9a7c7eac1579b961c4d
+ last_write_checksum: sha1:73b938d83aa874074acc6cc2f40cf8beeddc1d8a
+ pristine_git_object: 504c90eaf1414f42f25d1559dbf44e107f3cbf4b
src/openrouter/components/presetstatus.py:
id: e35ad4382937
last_write_checksum: sha1:e780890fa7c4d038ef24695e40748875ac58022b
pristine_git_object: ded8bd39849de0f3dabccdce497157d5dec83058
src/openrouter/components/presetwithdesignatedversion.py:
id: c79d75630cd0
- last_write_checksum: sha1:b2d4d09c7afbba3511e283c31d6b3b66ef90cdfb
- pristine_git_object: cb5c91085cd5934b4f855a06a7c6e66c891cc32b
+ last_write_checksum: sha1:70b29008c23c5cc138b6261d4717c8c5174055fe
+ pristine_git_object: 6828e9dd037e51ac1409380429e4aa86f8446211
src/openrouter/components/preview_20250311_websearchservertool.py:
id: ecfe1a37c34f
- last_write_checksum: sha1:72e4f22d63e92e59e9fc25c94f4a740cafff4f80
- pristine_git_object: 89dfe4a5ae66cd8962926ada97c3f9af6cdca614
+ last_write_checksum: sha1:51b131fca288db6925b444804158dd87f5e8b641
+ pristine_git_object: b2ebdf07be0b3a2ef96fd7bf9fcce576d4687668
src/openrouter/components/preview_websearchservertool.py:
id: 9c02777285ce
- last_write_checksum: sha1:cdfe8de71406be25b83fb21f2c596005b76620af
- pristine_git_object: a1e76de564452ca1da39c261e9c098ba911f7a9c
+ last_write_checksum: sha1:5a8cef31c58d98bfd7a9cc97671b9720c3306ade
+ pristine_git_object: 7decade6f14207bbfe9bc35a620406a7e681b899
src/openrouter/components/preview_websearchuserlocation.py:
id: 40414eada27a
- last_write_checksum: sha1:52707a8a06e2c03a4c671f909e42c6d1da6dabed
- pristine_git_object: 72dd15242d7d35b2b493f90d0cdebf6f8a51d684
+ last_write_checksum: sha1:0e241830bf9014e8ea814465c573711d8a7caa2c
+ pristine_git_object: 90bdb267893360608210843a5da0d5d68e80d41e
src/openrouter/components/promptinjectionscanscope.py:
id: e78ab231a530
last_write_checksum: sha1:f257e3ae2b6385cf758e891ba02601c435e92098
@@ -7978,36 +8030,36 @@ trackedFiles:
pristine_git_object: 009c1401a29123f18887b48c03f9c2a8b11ca2b5
src/openrouter/components/provideroptions.py:
id: 73dde6c8f359
- last_write_checksum: sha1:f53a3ec58bd7380337d7011ac312694692ea683e
- pristine_git_object: 160b700e8c5f2824932928daad552979ef086bec
+ last_write_checksum: sha1:ddde99f94118559796f316a1f05de70060f3bee1
+ pristine_git_object: d84b93dea4982ead0bd8a069cb0801a8e02447c0
src/openrouter/components/provideroverloadedresponseerrordata.py:
id: 5b693682570e
- last_write_checksum: sha1:41a977452d58b52cb9d4b3a85f4b7970529352d5
- pristine_git_object: f3d7756851495a1f1cdbf62fd62d20ff0ea07bf8
+ last_write_checksum: sha1:1ebc4527736f1e174ab37c84bea8a169fda9f8b8
+ pristine_git_object: c85a381a5f596fcbc2e3e599a65e8d03d62fabcd
src/openrouter/components/providerpreferences.py:
id: cdd58c8d664d
- last_write_checksum: sha1:f3d54af0f02fd2ae3f2fd0aba05c77419f79562a
- pristine_git_object: ce5d942a25ef1bda1af7d40e5c98418550fb34a3
+ last_write_checksum: sha1:381d12826558a405f980ca338413e472296c12a2
+ pristine_git_object: abbb3cb3d7d8946aabdbd5e6b07b2e45954f6948
src/openrouter/components/providerresponse.py:
id: ad3887be54c5
- last_write_checksum: sha1:fcaede27042d7d3fc2252a8950903eeb298abcb7
- pristine_git_object: 5cad4c141cd79f69eeae90dd17063a9ba3538723
+ last_write_checksum: sha1:98ca4edc575c9c99ba342a4a490268308a0ac4e8
+ pristine_git_object: 757907b8bdc224a0b94835fcec085a9f85172d45
src/openrouter/components/providersort.py:
id: 348e382bf494
last_write_checksum: sha1:57551507f95cd2e16ef995e1c13f859fd0726152
pristine_git_object: 7325f369b561dc4bbc73cdd97c72526c718d1085
src/openrouter/components/providersortconfig.py:
id: 02719ff8dcd5
- last_write_checksum: sha1:349b29e136a62cfd3f7cba439fd958797ac4ee31
- pristine_git_object: 4e1073b4e3c10943c7035376f9984cd6559653a2
+ last_write_checksum: sha1:d45c5195b22199a5f03a1a749a861f110c8a3a13
+ pristine_git_object: 1798ae9dd8c2e4b629bb99cc5c643827895e8231
src/openrouter/components/publicendpoint.py:
id: 848aa2ef9129
- last_write_checksum: sha1:2e389b5e4301174b4c8aaa5e0c679d6872ddd67e
- pristine_git_object: a7d3e523472feb11203aa79bd081fa87c0ed6503
+ last_write_checksum: sha1:d8788cb95c89974e6339ecaccc6202dfae871225
+ pristine_git_object: 270a46db728bbf80ab3c89fde25d71c61f93434e
src/openrouter/components/publicpricing.py:
id: 96d115d83cc5
- last_write_checksum: sha1:1980193d2339dc13b08d1caabb235b0b8bcb8ce3
- pristine_git_object: 09a1bdd6ec5d204533288516de6d01ae20be218f
+ last_write_checksum: sha1:41f834b27573c1f621c99883d27e231a1384c846
+ pristine_git_object: fc3f2cdb028345dbeda1c0a6a1493647286f1cc9
src/openrouter/components/quantization.py:
id: bde317b3d703
last_write_checksum: sha1:96b042899bfb818f20d282be76ad37fc948a599d
@@ -8018,8 +8070,8 @@ trackedFiles:
pristine_git_object: 76fabc08d96646862e7a1618d39d84934a25b5e4
src/openrouter/components/rankingsdailyitem.py:
id: 9aab72b1d643
- last_write_checksum: sha1:c753fd7363f424f144710ceb18456f882d7b6e6e
- pristine_git_object: 7325fa4619692b4c395e6b6d068519bd37d4b063
+ last_write_checksum: sha1:356cb98c9d721ada4faab5a6e6e8e80088f81f2d
+ pristine_git_object: 46a16b3c0cf8812c044b01b5916aaf87cc1d525e
src/openrouter/components/rankingsdailymeta.py:
id: 067dec7d316a
last_write_checksum: sha1:2993b72319acc7dd79ae670539ce5dcea3dd9353
@@ -8030,28 +8082,28 @@ trackedFiles:
pristine_git_object: 9adc8e68c6993b0490e8d14e1d2c0f15694dde97
src/openrouter/components/reasoningconfig.py:
id: 754fc31a7b69
- last_write_checksum: sha1:ac6669cbfddc54d2305d8389881406dd7c79f046
- pristine_git_object: 6f390d64620676f40a90ad32fe54c03f7224faba
+ last_write_checksum: sha1:49e4159a5318afffc7be6061d809c91c6fe26924
+ pristine_git_object: 7e37f18a825c059606ec701dd94dbdcd3343f2c3
src/openrouter/components/reasoningdeltaevent.py:
id: 6de06228d1f6
last_write_checksum: sha1:efff164cfffbf6b89ab270ac4912243649149457
pristine_git_object: fce551fac40c914beb4d8db48ad8f0acde7c2212
src/openrouter/components/reasoningdetailencrypted.py:
id: ae7d7526c9b5
- last_write_checksum: sha1:91114e68c6610a4d70a813ca3b188d5f1a02f238
- pristine_git_object: 0cfaff93983cceca55a02f8cda020db7a9024121
+ last_write_checksum: sha1:df579e34f32d49b348ae1fc8e74904ac4edb03a3
+ pristine_git_object: 0ba2daa8d62116e1122638e2c703e89428cd742d
src/openrouter/components/reasoningdetailsummary.py:
id: 53bda5c72dc5
- last_write_checksum: sha1:ad22f1d6a12836d5324048fd9965e4a9fd1b536b
- pristine_git_object: ceab1ea50261bf588a3175889c1e9a439ff9643a
+ last_write_checksum: sha1:db665a5b9c7ca3be181719df3c81f07ce3c127ea
+ pristine_git_object: 21c892cca33d183be9be5609f29c363a1377662a
src/openrouter/components/reasoningdetailtext.py:
id: 62f254529b87
- last_write_checksum: sha1:1cc4802602df372dd93fe48a8d422768ee395cb8
- pristine_git_object: a21b8ede1b4c9405cec2d3b2937c8c4fc7ee6a44
+ last_write_checksum: sha1:11f1a343ff00bc19ac05702a810b3f4c9aca5c7e
+ pristine_git_object: 49b08a205274f8aad7af7c5c910a7dbc73c12588
src/openrouter/components/reasoningdetailunion.py:
id: 3326e0b80cdb
- last_write_checksum: sha1:94b5f9d7b3f65acd1a77db4d4cb843623bef587f
- pristine_git_object: 42ce66369bbd7e527e12cda8b48ba50971f8674c
+ last_write_checksum: sha1:ba9766e0906ce06081ef33e5889ca7c0af870e13
+ pristine_git_object: 78e5924ea5aff2f91111acd8348907ff37c738e9
src/openrouter/components/reasoningdoneevent.py:
id: 5d7fc847e949
last_write_checksum: sha1:456aa0d5bc1ca2e46d2dd494d3d0f78d77ca23bf
@@ -8066,8 +8118,8 @@ trackedFiles:
pristine_git_object: 3145901807a1b03565dab73b2738b14f27919f52
src/openrouter/components/reasoningitem.py:
id: 4345f446ad97
- last_write_checksum: sha1:1b76e91974e6f37f29bc7db90d5d4207f7c333c6
- pristine_git_object: 43d3ff5e66c9c6761fb2fb78219452d77675dd04
+ last_write_checksum: sha1:609a0510506f8dc70ca9cba07040b82ebdc9ec9f
+ pristine_git_object: 40ee3f6c1a1e249d988950ebe49d1ad6f8c05dc1
src/openrouter/components/reasoningsummarypartaddedevent.py:
id: 006a060524d6
last_write_checksum: sha1:acd510a13e5cc8df7dcca38040af2be0a37a689b
@@ -8106,28 +8158,28 @@ trackedFiles:
pristine_git_object: e09987ebcd2b8c39d61a8a766655bd275d4e7039
src/openrouter/components/requesttimeoutresponseerrordata.py:
id: 2c5f5ceaf22d
- last_write_checksum: sha1:2173f6ce9aedc0f4afbb76167bae56d0db186ebf
- pristine_git_object: 50be74aa7d8198c25ecf4d858077ddded9fb740f
+ last_write_checksum: sha1:d5a7d414013a59cb8ce0a82cda3309103dd9d597
+ pristine_git_object: 0ba1a63f3d052eca0f3475c036feafe212d1e77c
src/openrouter/components/responsehealingplugin.py:
id: 06608e027868
- last_write_checksum: sha1:11dc1c5534543ffe4492fbaac23f6a264519a693
- pristine_git_object: c13279f2c2943981b51b5dac402c82c4a07f63e7
+ last_write_checksum: sha1:f4ee2caaa09379c52353f8920109f5e3e95f2274
+ pristine_git_object: 27f0ef5ce4737a56b263f8ce5f0a3973f1441c39
src/openrouter/components/responseincludesenum.py:
id: dff573cddd73
last_write_checksum: sha1:71e46afb70c23cf988579d27b6df3ebf421f1684
pristine_git_object: 9da58c5b22cbe284a9fa130b63c7d8ead77669c5
src/openrouter/components/responseoutputtext.py:
id: cbc203c3ff40
- last_write_checksum: sha1:0ead2b72e02365330f7aafcec8a81d51a849cd59
- pristine_git_object: b1c89ab1d6cd0305229efbf134e168e7e223f772
+ last_write_checksum: sha1:c0c6ff17b402f0cbaf8d58add175f1026b0a4097
+ pristine_git_object: 900bf08ec940565a8cbf55712a437775db00ca46
src/openrouter/components/responseserrorfield.py:
id: 565a88fd70a1
- last_write_checksum: sha1:3efa77fc8cd3aeef21266d3dcbf47717f7856830
- pristine_git_object: d3c77624292ba0985104a6125e462c305a633d84
+ last_write_checksum: sha1:2547f2be40063fd0c897edd541c38485ddbd598f
+ pristine_git_object: 1c7f8a0ef6bc011cd6196c4a4c77a94b1cbb6b73
src/openrouter/components/responsesrequest.py:
id: 8c850080ec5d
- last_write_checksum: sha1:20d13187b1c6e2530e2bcdaa7c3f551e99065121
- pristine_git_object: 683fab4a6f2fba854b0d920a787307f4977e94a1
+ last_write_checksum: sha1:101e67249f64b2d28693f05935aa964a94109467
+ pristine_git_object: 53cacf214278aeecf2d9219374316ebde6c1c726
src/openrouter/components/responsesstreamingresponse.py:
id: 142379f3bd90
last_write_checksum: sha1:a48d6f3610f5d15248ef4d25a0d88a0a4a1a9db7
@@ -8138,8 +8190,8 @@ trackedFiles:
pristine_git_object: d47bd379ad5b3e0e548581340f4afaaf54d1d8ce
src/openrouter/components/routerparams.py:
id: 4563ca5dc421
- last_write_checksum: sha1:c1d9388e903d23bdb4ab21334c9fe57c4d4db095
- pristine_git_object: ae952a332acd3de14461078bce81279c90dcd54b
+ last_write_checksum: sha1:8f9dc9a02a6a3a4f0131ad36d8d7cb2c4525a97f
+ pristine_git_object: 264be6707d18f8d48992c6c339a735401d51d79f
src/openrouter/components/routingstrategy.py:
id: 553fefb9814c
last_write_checksum: sha1:5db57f3fb6368777e8c2713eba613830d4f647fb
@@ -8150,28 +8202,28 @@ trackedFiles:
pristine_git_object: 7faa97b80bfc0d362fd89c255adb708a4f7afc05
src/openrouter/components/searchmodelsservertoolconfig.py:
id: 6a1174213084
- last_write_checksum: sha1:fbafd5baf44fa1f922a357a77ca0ce89eecc54d1
- pristine_git_object: 559ecad60dc51d3a30a5b40421fd0e1e5db2aaed
+ last_write_checksum: sha1:4e4cfb2275ef0d6410f9557ab6a8f28ac8e9ab16
+ pristine_git_object: bec955b7d4d90d03e90d82c61320c6aa5e70b997
src/openrouter/components/searchqualitylevel.py:
id: 8fdb148edfb2
last_write_checksum: sha1:05a1ae3b774381f4d20f62c02cd413125be4c321
pristine_git_object: 450aea60f799bd4eb7e8e53e9fa24a376062c62f
src/openrouter/components/security.py:
id: ae2ca334218a
- last_write_checksum: sha1:e6bfa94172df4c823ed9dd83b9b2614e6890d462
- pristine_git_object: 1870d08b6911340102b37f396673f35e4c8b99f1
+ last_write_checksum: sha1:4f739c60ede675286c18e898f4cc9505480897a4
+ pristine_git_object: fce3d0742de43f714ec40da747e6dcf7ff5e4075
src/openrouter/components/serviceunavailableresponseerrordata.py:
id: 606d51d201e8
- last_write_checksum: sha1:8b76218af34c1287190b8d4ac5d7fc3545bbbac1
- pristine_git_object: 0b28bb2db7b7c195366e992bb71c03ac30cf9280
+ last_write_checksum: sha1:275a171422155df8447f1b250f0a8af61d266b68
+ pristine_git_object: b6859e9f7f8b9ffcd41b62013816e8408be0cb25
src/openrouter/components/shellcallitem.py:
id: 0b3b4f503413
- last_write_checksum: sha1:917b39b2347de74ab3040a1b4f1d0ed6efee4a9e
- pristine_git_object: 892539bfbacf3ee6cbc4a2e834215f0d84db2ebc
+ last_write_checksum: sha1:30e23c3f175ce7de796559c5399b4fb0e67e387b
+ pristine_git_object: 3a5faf691f19ecba9d901040a9055c9d388d7877
src/openrouter/components/shellcalloutputitem.py:
id: 54409ebc9cdd
- last_write_checksum: sha1:5f26e4cef8b9e91e32f7d475d3b5e68ac87e9b03
- pristine_git_object: fb4b3007a890802b57b3433c56451b92a0e29761
+ last_write_checksum: sha1:f77f853c44ac5a2cd384e828915f1cf5a2f7e980
+ pristine_git_object: 872701b549bd8a6edee29931adfa86ffb87e229a
src/openrouter/components/shellcallstatus.py:
id: 3627230aad33
last_write_checksum: sha1:c026c8544f66c0ae9bdfa83b9d63502ee8f2907d
@@ -8182,12 +8234,12 @@ trackedFiles:
pristine_git_object: 7e26325a31eb3ed1dbd4323a0e61afc1f6bd885f
src/openrouter/components/shellservertool_openrouter.py:
id: 6ec5747cf94e
- last_write_checksum: sha1:0ebabd7cc8b56974b1a2ab5d8c7a979b189626ed
- pristine_git_object: 304313b820cff232b5f15758293fc16e480415fe
+ last_write_checksum: sha1:3612e515e486291bfc7e89d7a8a08fde5705407f
+ pristine_git_object: 0778136a1b4e03775ab17f69f3536f06e98e0cf9
src/openrouter/components/shellservertoolconfig.py:
id: eab9ca1aa376
- last_write_checksum: sha1:784a1ef685b02abcbad5bb37be33fa3c86c9c579
- pristine_git_object: 35683098c15603e62032623494c36ab1d340e8f6
+ last_write_checksum: sha1:50279d498af202473ab9ae77e170fb6a07aed523
+ pristine_git_object: aaa115f0224c807ceeaac7a80358894409e7aa0f
src/openrouter/components/shellservertoolengine.py:
id: 8a1dda027cc3
last_write_checksum: sha1:d8dd2e5aa21fd779a52853a0c496ed7a16d99bc4
@@ -8198,8 +8250,8 @@ trackedFiles:
pristine_git_object: 418953ba7366a6015934bf8795178d79adb03b89
src/openrouter/components/speechrequest.py:
id: 2a9400167112
- last_write_checksum: sha1:da489c793ab8886a370ae9dd07a1bfaeed1e3a86
- pristine_git_object: 96f8d132f4a6e0ffff4187f5810b3b040d462d4c
+ last_write_checksum: sha1:110111aca3452c99b2c8ae365956737d935ae5ba
+ pristine_git_object: cb7e1b2a4626b9424b4c4c564a084d1ad2f15b3d
src/openrouter/components/stopservertoolswhencondition.py:
id: 2deeda4209ac
last_write_checksum: sha1:581e0ee62776d42bf598b9f68b998faabfecd3ce
@@ -8226,12 +8278,12 @@ trackedFiles:
pristine_git_object: 85c82e9d2446cae784225165851af3bdcb468b03
src/openrouter/components/storedprompttemplate.py:
id: 6be99e870ecd
- last_write_checksum: sha1:6b7d17641d9e2b52010962cb586e32f99254db79
- pristine_git_object: ffb7a43e64bfef2809683fe60a5d17744ea345c3
+ last_write_checksum: sha1:a2517acc28b7737500752931b8588cb07b17d06d
+ pristine_git_object: a27d8806096c5db215e83fc89b4700ff94d3078f
src/openrouter/components/streamevents.py:
id: 331636234c76
- last_write_checksum: sha1:cddb5b06cdaf9ad42dbb49ffa918b8cd19b36749
- pristine_git_object: 0761a9610b5a27a071785b4e8d849410aaf64623
+ last_write_checksum: sha1:b049ae1a8dd7b46726b56557e2b7440182960a7a
+ pristine_git_object: cc94aff80f6eb55e18385bc4a80db2a881d238e2
src/openrouter/components/streameventsresponsecompleted.py:
id: fd244f61371c
last_write_checksum: sha1:011e0930c7994f64dbee78c0a4c2fa5d7167d8ab
@@ -8254,44 +8306,44 @@ trackedFiles:
pristine_git_object: f94015b84f011f33a2ef571d4789c87cf9dd758b
src/openrouter/components/streamlogprob.py:
id: b69b8f2bb578
- last_write_checksum: sha1:ebb53f7ee5acf6262f67574a27fd35b134691bd8
- pristine_git_object: 44e37608374c05189542fec1faaf76667ab55f28
+ last_write_checksum: sha1:9324caa46d05d2cec47094c94a7873c96aac73d2
+ pristine_git_object: 7c0cb667be23df067072f2d03b6ea7330e97ebd8
src/openrouter/components/streamlogprobtoplogprob.py:
id: e39bb8998edb
- last_write_checksum: sha1:cd5570f2a08ea1c0315dfcbc0e4d704610adca41
- pristine_git_object: 49f4ae2d09fa5d311465a0a77f7cede0f97f779a
+ last_write_checksum: sha1:aae5b69a7dc7ced3af224d28b6ab485ad33ff2ef
+ pristine_git_object: 79b6d3487431628f261a66e552bd97668ded59a2
src/openrouter/components/sttinputaudio.py:
id: d59edf301037
- last_write_checksum: sha1:ee9580093ccb22ec4d5e2cdc6f9ddddd33d84d56
- pristine_git_object: d1b15b44f530c920110bc808980fc89a00e3c879
+ last_write_checksum: sha1:758dcb0aa6ccf3f2dd73b8d8d2771d339a2fecc2
+ pristine_git_object: 76c4b466e22e57b34098b587e95cb358089dd87c
src/openrouter/components/sttrequest.py:
id: 5fb1d469e16e
- last_write_checksum: sha1:689a5d34bdde544d8452aebaab7b86041069dbdf
- pristine_git_object: 7900460ece223b9c29f719b47911f39c1ecd862f
+ last_write_checksum: sha1:04621e286373ed7b188a3c171f83c93cb89c67f1
+ pristine_git_object: d5497b98e6de245a4839b80079bf673be05d70ae
src/openrouter/components/sttresponse.py:
id: 2dc8eb8daaca
- last_write_checksum: sha1:7af7b04e09abeccee24863ae133cf811e9453b8d
- pristine_git_object: d50a8c428ddd5293b059d3d15bdf1e46b2306a27
+ last_write_checksum: sha1:31cb20245662006e6459e662152c80e97778d77f
+ pristine_git_object: 19ff065a62373dfe9e0c97842d4ee173a175f5b6
src/openrouter/components/sttusage.py:
id: abe8329af787
- last_write_checksum: sha1:213749fb8f5389bc607b75300b6fcff714c83b6d
- pristine_git_object: c7661d13e6970fcb82970968a85d5e8507bc0c0e
+ last_write_checksum: sha1:4b7b79be71c2d1e392aef738a37d2d75f0bb29c4
+ pristine_git_object: 1feb5db4da1422d55744c5a4bb10eabda6c50c4f
src/openrouter/components/subagentnestedtool.py:
id: 911a465973a0
- last_write_checksum: sha1:5b58207526a92f946b0ee20248d194f4289e2939
- pristine_git_object: 8e1417b1cf116bf26060143dcab214d2623bddcf
+ last_write_checksum: sha1:beb2209144b032e109c4afe33f440728423d7594
+ pristine_git_object: 4a62a2c02e57b75a1c75c2198c9737cfccc0188a
src/openrouter/components/subagentreasoning.py:
id: 2715ebf26eb3
- last_write_checksum: sha1:ce0a8989c3e42612edf46770a0039aca05b949de
- pristine_git_object: d2d508152e2a4339602d010776894f76210b3abf
+ last_write_checksum: sha1:79917bf44c183cbd5f7b9e9a9ce60ef288e4f0d7
+ pristine_git_object: d34c619b85be547eaae9ae7f96fad370de5c0b43
src/openrouter/components/subagentservertool_openrouter.py:
id: f08524c6985a
- last_write_checksum: sha1:771b71aae9989727ea3564615f06da7f08431705
- pristine_git_object: a33e7690f45117da788ddfabe9ad4102ac3605d0
+ last_write_checksum: sha1:0b2445fa5606a93513afcfb9ac4f451603022e77
+ pristine_git_object: 51cf1e2c1b8603e4933bca7f8ec389a010d4ad4f
src/openrouter/components/subagentservertoolconfig.py:
id: a8425c790cb6
- last_write_checksum: sha1:a885325a7612357dbb9454400433cc485e6ca420
- pristine_git_object: 27bb1e45236dcdda4d14d5c09bac867d86cf1ace
+ last_write_checksum: sha1:f434a1ff30f069c379b1809edd62b0435998156a
+ pristine_git_object: eb9f276769106934801d88ce9d2c5c5c67fe1bc2
src/openrouter/components/taskclassificationitem.py:
id: 86d4bab5ebf3
last_write_checksum: sha1:16176fda0ccd16b0be59bb5c4b74db78eae02f36
@@ -8318,8 +8370,8 @@ trackedFiles:
pristine_git_object: 9bc3b1fd09ca7d4be981ceb7b10e14fb157dbb5f
src/openrouter/components/textextendedconfig.py:
id: 150a449e46de
- last_write_checksum: sha1:81f539fffffee92247de216b1ddc9269b02fcd54
- pristine_git_object: 89224c7a342575e694ac269e1773c4c2a0ad5c07
+ last_write_checksum: sha1:56b0dc5aaacd994dfa1f16900a4fe1b4eea2f222
+ pristine_git_object: ffae73647f1060eeb9f46a4d331de6b9760dc5d9
src/openrouter/components/toolcallstatus.py:
id: 32339139c3f3
last_write_checksum: sha1:a75631cdb460f190aa10d5557519519d1ef5fbe3
@@ -8330,76 +8382,76 @@ trackedFiles:
pristine_git_object: 999b399bc6f5ad2be3bb87f813d0ed1fb5ec2614
src/openrouter/components/toomanyrequestsresponseerrordata.py:
id: 4dc67ae011a1
- last_write_checksum: sha1:e30024f0469a52dd7d249f8bc3b8c2cd28212790
- pristine_git_object: 19fda103cedcccd94e8feac9ee0a069454b06868
+ last_write_checksum: sha1:0c0adf2f729b6542380b70f82bf21d4cb5f97d44
+ pristine_git_object: 2446e9664a739abb8216b6461997e51d9c069e44
src/openrouter/components/topproviderinfo.py:
id: 0517ce43cc77
- last_write_checksum: sha1:5180e3c9ddd7aa2eb66276b46f4170c794ec508e
- pristine_git_object: 475bda8f58fa58a990f06d935b3280ba91b2bffe
+ last_write_checksum: sha1:f99bf790e69be8c73a5680b9cfa0b97fc03528f7
+ pristine_git_object: 6e119e6b3855709568f41ab53095c41aebd2cc5f
src/openrouter/components/traceconfig.py:
id: 19375fa88b9a
- last_write_checksum: sha1:f8f931bcc35e0b4cd45669a77fddf7fab812da16
- pristine_git_object: 644b9be533d692ffc34a9fb5f563f69aa0438ca3
+ last_write_checksum: sha1:431e9244c3205cb6def45359e8f60feb64a1d3dc
+ pristine_git_object: 5ef25d66b7c711b0324087c001b9eb013f798222
src/openrouter/components/truncation.py:
id: 88f4e4be9fc0
last_write_checksum: sha1:69e1f9d19ad27b82d882031c100f8a607344f8af
pristine_git_object: 1f8bea3c63592dc738f70d50eac8c69e2e755096
src/openrouter/components/unauthorizedresponseerrordata.py:
id: 7d9755fc8395
- last_write_checksum: sha1:d614e72cc67bf6c4da7f57cf0f4367de726ec06d
- pristine_git_object: 0fc3c7c3991891ae00ae2f624df78d21e0ae05a8
+ last_write_checksum: sha1:522dffa2a90f3a8e03fcb966ad5c44ba1bdbc17d
+ pristine_git_object: b1fee6c3b765d5d2592a594a788c1a1c3882131d
src/openrouter/components/unifiedbenchmarkpricing.py:
id: b08adf1a31d0
last_write_checksum: sha1:e8d1cb425c61a7094f50a73e59cec6d64dc34204
pristine_git_object: bad387cea54fcab00e8a7fe54780dd97a29d72c3
src/openrouter/components/unifiedbenchmarksaaitem.py:
id: cc8382ac1af5
- last_write_checksum: sha1:39fc6f0409234ec30e6bbdba2736e278abda8756
- pristine_git_object: a01518d4c996f16bd740489684b20a9682db0f0e
+ last_write_checksum: sha1:7c82b5274f6b8a9a89cfe2472af093bf23731a7b
+ pristine_git_object: 9e6db28829540fc20c08a6c1523980a5289bdf7e
src/openrouter/components/unifiedbenchmarksdaitem.py:
id: 946501943ce2
- last_write_checksum: sha1:22bbe61dd833db3da96796ebfdcd3141dd0ed126
- pristine_git_object: 0bb8159d555e263bd875bd42e1cf0e552c3573b5
+ last_write_checksum: sha1:c554401eb1ef4fb597743004c4bcf77afbd059ba
+ pristine_git_object: bc4d5b68d8a9d2e5990b8e663857ee9e26a0e806
src/openrouter/components/unifiedbenchmarksmeta.py:
id: ca02b44f633a
- last_write_checksum: sha1:fdf3983fad9a3c119c88a1fe5e3d314787dcf248
- pristine_git_object: 6106104d5249ae04075f1905f330b5aeaaaeb02c
+ last_write_checksum: sha1:2c279a103b3634a6776209e96dc5e66494307cb5
+ pristine_git_object: 36d695e2906102ac9fe51e24e8bd80c1e57cccc1
src/openrouter/components/unifiedbenchmarksresponse.py:
id: 4f7bbccaba03
- last_write_checksum: sha1:f0775bb4427be9ad7c01942e5048a103647a78eb
- pristine_git_object: 8f064226057a3d4d331cee102713813a208452cc
+ last_write_checksum: sha1:19f9e62d134ba7b680d1ddd5a889c879feef169f
+ pristine_git_object: 7145a0840a470a47f17ea8126012ff6c935e11c3
src/openrouter/components/unprocessableentityresponseerrordata.py:
id: e8ca4a51f994
- last_write_checksum: sha1:d9ff0dea491e12d5ccb28607eb65f00fe8d694aa
- pristine_git_object: 1c70ab3d8b23363543675abe5d3b3566aea113e7
+ last_write_checksum: sha1:f9e13313f56f785b451364a4a41d692af67d2432
+ pristine_git_object: 72a7e1d544432de700e38172425930ba6fcdef93
src/openrouter/components/updatebyokkeyrequest.py:
id: 5edad69c278d
- last_write_checksum: sha1:3eecf8d3d312f2b4182149cefada105817ebce75
- pristine_git_object: 9fa7cf678582d4bba8abca16fb8c85b455a13ebf
+ last_write_checksum: sha1:c4c5bb57979e5251e5423cfe19b22036a6f8cb54
+ pristine_git_object: 865262ac26028a07c34a2d678882320af9f674fc
src/openrouter/components/updatebyokkeyresponse.py:
id: 31338080f7cc
last_write_checksum: sha1:794d77355ae37451076a6b5754c6c8cc77063047
pristine_git_object: a3664695c9722c531f7694851da76e51c2efe4fb
src/openrouter/components/updateguardrailrequest.py:
id: 6a557cd822a0
- last_write_checksum: sha1:db8b40859e2bfd1621859c11221fa5f36c46e53c
- pristine_git_object: ec5240af3f22a0f0594eabb321e8a2fe070dfcf8
+ last_write_checksum: sha1:cbdb7d942739143b727a64ad5330116c96aa6402
+ pristine_git_object: d80389ace4e8b02227c7b1fab4496789761a26dd
src/openrouter/components/updateguardrailresponse.py:
id: 7b068d26ce31
last_write_checksum: sha1:2b63cbb90747f07f775d9a22e80f74c67221fea8
pristine_git_object: df833960211cc7ed2a2a42fddbeafda0092e1c0c
src/openrouter/components/updateobservabilitydestinationrequest.py:
id: d7a39fe04386
- last_write_checksum: sha1:263118409610b46eec310464be179a5a70f7cc42
- pristine_git_object: 1709ecff0d5fee2a11eadbdef457cf4c017bcf84
+ last_write_checksum: sha1:3a4279ca4f9680d2a4c41464b04ace5971a125ad
+ pristine_git_object: a344284f904d781583b0f493839fe11930b5afc1
src/openrouter/components/updateobservabilitydestinationresponse.py:
id: 187c51d2b3a4
last_write_checksum: sha1:cadc62b37feddb4281e471d15627a9a1bef32cb1
pristine_git_object: 95abc42170d9ebeadee791d15c2bbc643720f1dc
src/openrouter/components/updateworkspacerequest.py:
id: 78d86b3b0a63
- last_write_checksum: sha1:0dc21aeddda84729d3fce7ef38e1cd5798eacf99
- pristine_git_object: 8271be1596210a1c6efcf3d5bd0f132ec1e7d115
+ last_write_checksum: sha1:ff25d835cf026e5401004b26067c778c9e85fe38
+ pristine_git_object: f1569fcf850aeb022abbc604d6b5e206d26db6eb
src/openrouter/components/updateworkspaceresponse.py:
id: 46253fa9690a
last_write_checksum: sha1:4708e7e4cbfddc34ffc9ed4808a88bb5b4a61ebf
@@ -8414,28 +8466,28 @@ trackedFiles:
pristine_git_object: 9a475c8ef84a0d5e731d6245354a983c5b0fe503
src/openrouter/components/urlcitation.py:
id: fe4578e64ea3
- last_write_checksum: sha1:af1ca23af13d8d44bdd093b44f7d9ed9e8683070
- pristine_git_object: 04aa99c21f2b8226e90c1c6bab0ca3d4722932ed
+ last_write_checksum: sha1:6c7d8e616c55f8239c7bf46ebf237fa536b6c462
+ pristine_git_object: a0491cc8fd3bd9986146cb1176e27d5b9c9beb60
src/openrouter/components/usage.py:
id: 965ca6748bf6
- last_write_checksum: sha1:5f86e0218099e33187e8238eebd3bf1aef5d6c74
- pristine_git_object: b140a02148be319bb2aeb0287bdd6e031ad6a3a4
+ last_write_checksum: sha1:859ca57d253deee9ccf672095bbe59b52df571d3
+ pristine_git_object: 62c5e14fb1646a51b213ce3b5f822d0dc75ad979
src/openrouter/components/videogenerationrequest.py:
id: 70e3c9ff288c
- last_write_checksum: sha1:1e17df29049bc37407c363437f28cd56504ff88e
- pristine_git_object: 230d48746fee477d943c6b9b01bbe5242dc1c95b
+ last_write_checksum: sha1:bb81c3a4684e20898148e1415980457732da28d2
+ pristine_git_object: 1f383a973b0d3f20605db372c24c9e9204c95d85
src/openrouter/components/videogenerationresponse.py:
id: 541f1321b072
- last_write_checksum: sha1:051ace67776106616ec4c8e55cf2df9a99855d0f
- pristine_git_object: ab182a8151bf251a7cb587e3a8dcf07337a468e9
+ last_write_checksum: sha1:18c3aa7845f63a9614286b1a27b6098eae1c4951
+ pristine_git_object: 2b0301ba6bf8c85efd8d85145cf39e4f0d8c5bcd
src/openrouter/components/videogenerationusage.py:
id: dded36eba597
- last_write_checksum: sha1:eb24fec1c15bc48a958af8c40ac51ac1edf7a3ea
- pristine_git_object: 2b555be30b2462ae3065ed6a78918ba764289dae
+ last_write_checksum: sha1:a19d286bfda3ca9a373128c5118f3e6715060470
+ pristine_git_object: c6f80ef4af6effc740beb6e0f1abfee653340717
src/openrouter/components/videomodel.py:
id: a544a49f7891
- last_write_checksum: sha1:4d900058a40b08ca5ff6b1060c995befc79e9413
- pristine_git_object: 04170e1a7153868b8eef47234859263800b9c61d
+ last_write_checksum: sha1:783bcd7f4da21fc28da0e241eea621349e0fb378
+ pristine_git_object: b5760b387fe91903005ba7f5346001cc15b51e8f
src/openrouter/components/videomodelslistresponse.py:
id: 2e9d1ce2cf19
last_write_checksum: sha1:b94977aa6941f7cf15c889f1b7cc69b50cd35856
@@ -8446,16 +8498,16 @@ trackedFiles:
pristine_git_object: e4f9ca16aa1370113efe57ce1b4a3a1345a11b64
src/openrouter/components/webfetchplugin.py:
id: 805ebc159f19
- last_write_checksum: sha1:b163f5009c5051b3af1e70ed5c5c5318b58d61f6
- pristine_git_object: 51bb7ff75edca06c3c72094b954da6a2eb587e24
+ last_write_checksum: sha1:335f91ce69815c099393680a41d7d699bfdd4335
+ pristine_git_object: b5b9fd4bf6d15320423dfcbfcbf68d88f7a6deb5
src/openrouter/components/webfetchservertool.py:
id: f861247ea1e0
- last_write_checksum: sha1:76761dfd639356b765783eb5205226ec317a69c9
- pristine_git_object: cbd34b30aaef5cf4262526df86edc35287b10787
+ last_write_checksum: sha1:3dd8b3e0c87b3615c30fba187ce353873b971924
+ pristine_git_object: 41281b86b1f612cca0bcb6dfaccc63489042ca95
src/openrouter/components/webfetchservertoolconfig.py:
id: 05cda975d2bd
- last_write_checksum: sha1:49b23bf7e8d930bee11d9f4cc38765ddcc152b4c
- pristine_git_object: 9b8cc5ce32dbde9b365e404efa3cecc12a981d53
+ last_write_checksum: sha1:ba83fcd603576bbd2b7e36e40f5df4d9bd47f15e
+ pristine_git_object: ba34507f55158e509a76c60ccbd12d980d7f7f51
src/openrouter/components/websearchcallcompletedevent.py:
id: a5818af2b521
last_write_checksum: sha1:538a39bf773415567086a28ff2cde66fd37ea763
@@ -8470,12 +8522,12 @@ trackedFiles:
pristine_git_object: adceee794cf8135f5db3b2d741dc6e4de9c4e968
src/openrouter/components/websearchconfig.py:
id: 3884d9509e8c
- last_write_checksum: sha1:dc811c64e3524cc7e82b6582b2ef8266879bafce
- pristine_git_object: 173266170f568db4643c24ab9094d0e9dcd20aae
+ last_write_checksum: sha1:c248e857a66dc84dd3bee697c38c5708f41d8b5e
+ pristine_git_object: 7478eed04a26073e0604c52d482f22df8fc9ef3b
src/openrouter/components/websearchdomainfilter.py:
id: 4a7307ed2ba6
- last_write_checksum: sha1:043839dada28f82b33f70534895e98e7ee6ce7f5
- pristine_git_object: 64d3c5f2138e19cbe4f4444e006ac826be48d808
+ last_write_checksum: sha1:8754e3ef0b0c92fd72db36bbebada0d4fedb079c
+ pristine_git_object: 20bd1b8097661625894b73fb16eccbe5451e27f5
src/openrouter/components/websearchengine.py:
id: 9e028088afc7
last_write_checksum: sha1:cd81a891b0304187d5abbb7e9972543333e51bf8
@@ -8486,20 +8538,20 @@ trackedFiles:
pristine_git_object: aba36c1943f9b8e57d5e6f95d8b707263d95f738
src/openrouter/components/websearchplugin.py:
id: 1d872d1792a7
- last_write_checksum: sha1:824232ea50b6befbbfae9537d44c42fa2b84b26e
- pristine_git_object: 3c8e46d68d02d7b60ccfbfc9ebcbcc92a443bd54
+ last_write_checksum: sha1:47e4951d6c60dc26e595ffd3e4eb032c5d3f3cf2
+ pristine_git_object: 324037856d9c5a39675e4a2237eba61ac471dcee
src/openrouter/components/websearchservertool.py:
id: 32c7333e3c21
- last_write_checksum: sha1:9007ba9f7d118dd7dbd76337dd02958ba246c209
- pristine_git_object: bd0d3e0f376d973b578523860b9a3e032126fa5c
+ last_write_checksum: sha1:350594b998b01c6fcd074726458419f767e8446e
+ pristine_git_object: 353136f1fe350535582f8800b4c37b606eead82d
src/openrouter/components/websearchservertool_openrouter.py:
id: 3fcedc999f5b
- last_write_checksum: sha1:81c68c3a06f55fee5b6cf18730f3bb0141d168a4
- pristine_git_object: c5717ed5a3d7adf2ef2777ed76233365c1d5b443
+ last_write_checksum: sha1:d5c34450670513a4fed73afc86670fc77f19a247
+ pristine_git_object: cac816de64f204cda6c706eee57f0d72b8b860eb
src/openrouter/components/websearchservertoolconfig.py:
id: ebdaa99d47da
- last_write_checksum: sha1:320e97195a43445ed95326ff74030dff5e92723b
- pristine_git_object: f48839e652a6ca5c851539956081107b74580c7d
+ last_write_checksum: sha1:5f9c19c63541cde91a2616be6ba8b90d6d96e39f
+ pristine_git_object: 8928f4994e491abd85589b6fc9a8e8b68726cec4
src/openrouter/components/websearchsource.py:
id: a1fe81b68a7b
last_write_checksum: sha1:fa30e5813682231d742fb6861f0fe92f655c8e81
@@ -8510,48 +8562,48 @@ trackedFiles:
pristine_git_object: a607c88285f5f8b8e0f057750cde1b6cd14244df
src/openrouter/components/websearchuserlocation.py:
id: 26eff9609a46
- last_write_checksum: sha1:060077a0757338ae1b6bbd3d194b4771b6e08c90
- pristine_git_object: bdb5b03c5e524404f4aeb7123b0410b645ac8a74
+ last_write_checksum: sha1:30cfffec9ed7c8c74a3e3efb721b8c2376ea1e3a
+ pristine_git_object: c2eacfc660e060ec6efb6ce4fd2a2f2e453081dd
src/openrouter/components/websearchuserlocationservertool.py:
id: 34efd6600d16
- last_write_checksum: sha1:d283241abfbab4b0d36dbba7b6ca227c0403e375
- pristine_git_object: bf4bb709e49cc25a82b441246ed709308a1360c2
+ last_write_checksum: sha1:f81b1f856254c0368a9f207b898e2a24e2c1a2b4
+ pristine_git_object: fda00ebca117e6d3accc21c5252351f77cf34692
src/openrouter/components/workspace.py:
id: 682282304bd8
- last_write_checksum: sha1:ad9199698aa5679829b846839c25235b3039f457
- pristine_git_object: 583db0c55612de3aff4fcbad1983d489eed9bbf0
+ last_write_checksum: sha1:748e9bb8f30836a9532e53ca99fa542d9e505039
+ pristine_git_object: 14a3bf113337d9a6423f15449367b710eb37a632
src/openrouter/components/workspacebudget.py:
id: f80c6983502a
- last_write_checksum: sha1:309911d5acdd7e25aee8fd071f6e0b7beb6a3470
- pristine_git_object: 4f7d4793b398f3f352b91f7bcbc702bb9252bd95
+ last_write_checksum: sha1:14f6ab02291a2222836247463c57ed42d568a6a9
+ pristine_git_object: f5b0bc94ab254047f463f39337dc9a773afd76be
src/openrouter/components/workspacebudgetinterval.py:
id: 44cdcfecb7bd
last_write_checksum: sha1:24f6ac0bea17f6fa1b609e6363b7d4ee828df302
pristine_git_object: f311c83dfdce68e803f5dc23e12c639ad0031be8
src/openrouter/components/workspacemember.py:
id: b510f727fe9c
- last_write_checksum: sha1:63595d8ce7e9df050f1bc97f7cf70b4215da09d0
- pristine_git_object: 9ece87803cfa8b3ab38c0dffdfbd8de176eaaed5
+ last_write_checksum: sha1:cc6c8880763f294494616a3daa84c8822d4e3f08
+ pristine_git_object: ad78361d147d2edb7b5772c14501d9c25a2000b0
src/openrouter/credits.py:
id: cdc961937101
- last_write_checksum: sha1:2d49b088f5895c7d1b3167d6d99d304221812fb6
- pristine_git_object: 0a376fb8ee2df0be8546458e0008a2fbc0fd492a
+ last_write_checksum: sha1:7ac37671d3de537eb98f15239d531e3ab3928a59
+ pristine_git_object: 791cdeba11d6c5e9e9381760fd8cd8ca86233b22
src/openrouter/datasets.py:
id: 2378f80d1d6a
- last_write_checksum: sha1:057b0dde4e051f2cf5cd9fd5b82bbe45eb8fafc5
- pristine_git_object: c483912549b3243f73b300bcea343914e66ef211
+ last_write_checksum: sha1:a2941625198705ff1585bb7e8ae7ba5c110d43e9
+ pristine_git_object: 04200589b12afe8bf67a158b99c7b9c11e4dab5c
src/openrouter/embeddings.py:
id: 0374ace39067
- last_write_checksum: sha1:8622e7717ef639f2ee452d295c4b2c957a2fe13f
- pristine_git_object: d8426527b3d4f0d8b9398646f1b701b4cdfa7dc3
+ last_write_checksum: sha1:bdfaf3f9ffa1e337c0cc62b5a956a53c7863f24d
+ pristine_git_object: 9f0b5ce3612b8e56070f8cc69e890aaeb98491a9
src/openrouter/endpoints.py:
id: 465bbf2b7939
- last_write_checksum: sha1:fced76a1fcb464e0375bb2b0ba848535f34df5dc
- pristine_git_object: 871bd5b1b9a164b36ae2047afd20cfeba88828a1
+ last_write_checksum: sha1:0c4ec93f6309edfb7f009679c04f59fa2a62232c
+ pristine_git_object: f9537f6f4365d21e42c662bb995e88b7fb5a6f06
src/openrouter/errors/__init__.py:
id: 366154d0d60a
- last_write_checksum: sha1:84e5bdd52a3e99fd8bbbd718fa4f075ae0df4f64
- pristine_git_object: dc5ef68c20dea9461abf913779f5f0e21defc829
+ last_write_checksum: sha1:6d4e463d60596f3eaf527d5ae08577a3b17337bf
+ pristine_git_object: cfe7cbb6a75e5b5eb3b25b630ca206f5654d6742
src/openrouter/errors/badgatewayresponse_error.py:
id: 818c3605ce23
last_write_checksum: sha1:abf8470143de24b708943ca1fa0b7bcb2b4e84b1
@@ -8630,444 +8682,452 @@ trackedFiles:
pristine_git_object: d858f3b578b189d20b89d0dfc1a6b829ff5897ff
src/openrouter/files.py:
id: 7baf7ee1f5b3
- last_write_checksum: sha1:8186736d2d9586f07ba2a236e9524f171c466ce5
- pristine_git_object: 6af040bba3f2bd74a5950e073ef02d0e9a3c473d
+ last_write_checksum: sha1:0835637e39ff5f43fd04f2b428c861c87d1963be
+ pristine_git_object: 0c46d08795e4f68a47d310d5636e004fd9088208
src/openrouter/generations.py:
id: 70e1c21042bc
- last_write_checksum: sha1:f7df8719bf188b05a29b8694e6c2db7adb262bd3
- pristine_git_object: 409e169fc5f43a0eea65b7568588c25c82abb46a
+ last_write_checksum: sha1:c513500d0aecefad46e4e791094672dd8a31e6f2
+ pristine_git_object: cecdd21a8e07352f8fa8d44e9018e01dfd918a99
src/openrouter/guardrails.py:
id: 705839f34e66
- last_write_checksum: sha1:137f03185776ee3f734609612e37aef1d3e2f178
- pristine_git_object: 50249a344d342b955acdcaf9796466b9e8c3a1d1
+ last_write_checksum: sha1:e525be9e5746b7b1cb6d170ac74cce37f010004a
+ pristine_git_object: 4add1c7f1f5608569227ae476d820fa412e33745
src/openrouter/httpclient.py:
id: e9311185443d
last_write_checksum: sha1:5e55338d6ee9f01ab648cad4380201a8a3da7dd7
pristine_git_object: 89560b566073785535643e694c112bedbd3db13d
src/openrouter/images.py:
id: c4d7adf63ae0
- last_write_checksum: sha1:b936333eef102e8b53441ab985eb259c73712131
- pristine_git_object: e96036fee4a23a6b204dc00594e17e9ae875e19d
+ last_write_checksum: sha1:00ec5394bd5507e972b99d119ce27e8b3a0d47b4
+ pristine_git_object: ebdec2dfff7323a1abe95b3143396cc0a91deb6d
src/openrouter/models/__init__.py:
id: ed73b93abb3f
- last_write_checksum: sha1:fd931d5c2d58b5f9189cc897e038d6d78e362dab
- pristine_git_object: 726fc5eb391035492b4bea383d91cb7e23da04d3
+ last_write_checksum: sha1:932a790ae66ccd7d7022b39c659bcf72a664ebea
+ pristine_git_object: 77e06a0c81b1ba9619b7a61341015304d678abf3
src/openrouter/models/internal/__init__.py:
id: b60fa9c4293c
- last_write_checksum: sha1:5beaf7e5a713d3eead465c6edcfdeb7f8076175c
- pristine_git_object: e7070a1222c2ed3fa3f6f54e6f122cae7ff9a449
+ last_write_checksum: sha1:645614c353010830c3a28359d170ce3f3fea3c20
+ pristine_git_object: a661631dcd716b1c9d45650528d6b038f463731d
src/openrouter/models/internal/globals.py:
id: 1e9d361b36b6
- last_write_checksum: sha1:2bd2439b5618dfdae8069269f37e726c4d6f8ab8
- pristine_git_object: 701741bbf61e70c9dd84199249f2aa1192c30a18
+ last_write_checksum: sha1:e75583988683684a4fd8a5bcb0a1aaf4bff097ad
+ pristine_git_object: 5b741456655ff48919d17ffd552a6410f0587966
src/openrouter/models_.py:
id: 4e1ae1fe5b98
- last_write_checksum: sha1:a7c6147e39e65b8f095216fa688db975b208c000
- pristine_git_object: fa1d34325bda6a2f8125735bb0b14231dfa218b4
+ last_write_checksum: sha1:3c9aa7ec25ebd7cf7eb43a4d31cab845658fd484
+ pristine_git_object: 02dd1c2072829766214cfdbcb9a3eb098f282e33
src/openrouter/oauth.py:
id: 1948ce27255b
- last_write_checksum: sha1:5e44e649bd946fb42c10b8a8f8fb9b6d894278e8
- pristine_git_object: 185de12d9f87d04c4fb7f0ca8c54dba9f62924d8
+ last_write_checksum: sha1:8d6ba30594d5674164f045d6655914b801268f72
+ pristine_git_object: d6a938412d5c82be874e958ba4a3043bd46284d3
src/openrouter/observability.py:
id: 6a17f32d3f33
- last_write_checksum: sha1:1e31c36f61ec2a2c224c6ad0b0f5b2a09e758a3b
- pristine_git_object: 37ee42a638f5fce69fc7db1e6b86efb51f381582
+ last_write_checksum: sha1:760a86891fad356e60d36c619e02d7c710f10d70
+ pristine_git_object: a1dea9b45650cc42a6f60447c032fa46b102839a
src/openrouter/operations/__init__.py:
id: 9afcea1e7161
- last_write_checksum: sha1:3c7911bf0b16974fea948f5f28471866c933f4d4
- pristine_git_object: 8bc044fca36a2e72d87795ebafe99c9f43e38312
+ last_write_checksum: sha1:58c06e81675a137ec84b13517f78cf1020874f2d
+ pristine_git_object: fc51690a99a6041a78762af05e43da30f15875da
src/openrouter/operations/bulkaddworkspacemembers.py:
id: e0ed56117619
- last_write_checksum: sha1:2b9c73dd8a24d6c479d50118a309e4e0969ca7ea
- pristine_git_object: 32dcfea12b195a499c91c55aee78aaa0144e60e0
+ last_write_checksum: sha1:5c44eb0d40fdece3ac084615f6c6082be4cf1d5a
+ pristine_git_object: daa5e7d796465de841eb4196cc453b575f38bbbf
src/openrouter/operations/bulkassignkeystoguardrail.py:
id: 6d8435d51d9d
- last_write_checksum: sha1:2136b0223191e5d8159c77cff06845958930184e
- pristine_git_object: e0401f525afe24f77e962fa5e64994b6c5ebe2ce
+ last_write_checksum: sha1:3fc81414be744f2f496ae26c4f0ff161e41808ba
+ pristine_git_object: 72a2a89db4099ce31090745e59dd0112c10f2ebb
src/openrouter/operations/bulkassignmemberstoguardrail.py:
id: 079706f81038
- last_write_checksum: sha1:7c8fb1abae40f33c8d467f73b3779503469cad1c
- pristine_git_object: 80a1cb770eb34221c7691abb44849bb6db23322d
+ last_write_checksum: sha1:518a4f77ffd54d28cecf03adb4bcd42a6dbcdd24
+ pristine_git_object: e3a4c9099b42ea25e84618e58eaf9fe9dae5d1ec
src/openrouter/operations/bulkremoveworkspacemembers.py:
id: b5f68d465d4d
- last_write_checksum: sha1:1fbd3d2660a4261d12c97b464bc445f4dc24c891
- pristine_git_object: fe0ebfd7d6f5e748ba7105c848c94fe3ed6598ea
+ last_write_checksum: sha1:a798060d0316f356eba1ce9c75cc454a7233e8ba
+ pristine_git_object: f9a80e6a1aff29c2f531515a194fa9db31d7cecd
src/openrouter/operations/bulkunassignkeysfromguardrail.py:
id: 006249615b0e
- last_write_checksum: sha1:88df9d073f73c7d1f0fb70e46a109b17f84f04e8
- pristine_git_object: 4f4862308bc488f32696cfe91a5110b7bf28ce39
+ last_write_checksum: sha1:ae582c12bcc139e6fe9e5fca683aea01f87ed607
+ pristine_git_object: d01945a57e80e66931cdfc22cde669f0db901b09
src/openrouter/operations/bulkunassignmembersfromguardrail.py:
id: 8127aafae1ef
- last_write_checksum: sha1:a4c24a2e84c611856ed0ea45168b31cd5b8e1dd0
- pristine_git_object: 3613dcf6d85a45e916983f238cd807695433b401
+ last_write_checksum: sha1:7e1a34d0a1629bd6ed183a85b71a6897202a02bf
+ pristine_git_object: ff2fc0c099bd5ade18b89e6d39698293ae65e87c
src/openrouter/operations/createaudiospeech.py:
id: af9df6195878
- last_write_checksum: sha1:a3bd0bd212bfd34631dfd07b265f3be23e0ef458
- pristine_git_object: dae7b28a11b1c100ddf9c66f175d0d583a4506ca
+ last_write_checksum: sha1:5beec05ba93a68805ad27e05603265864a608dc9
+ pristine_git_object: fe1cbc4a51e44f1e9cc5b618664b7a4d11a51bc5
src/openrouter/operations/createaudiotranscriptions.py:
id: 53f76e1550e4
- last_write_checksum: sha1:f72d4be6f461aa2d12344394c1d8492f9018e035
- pristine_git_object: 01441144f8433569cb0846df23bbafc9b790a1de
+ last_write_checksum: sha1:80072ad426adddceec1d13756ba0c239cbad7014
+ pristine_git_object: 4e8414f223370bff1e4f060919f36f70da6ec40c
src/openrouter/operations/createauthkeyscode.py:
id: 4253a437de22
- last_write_checksum: sha1:87f7a4f6bceb89cec0c961e4ed57a20918a0b603
- pristine_git_object: 344b269c059ecaf93f8858694dc85e062c7425b5
+ last_write_checksum: sha1:874492b64266fcdc5a7f3cd988d71326b7796a5c
+ pristine_git_object: 84a5dc9683502288ce5ef4b508c8f13b1a396bf5
src/openrouter/operations/createbyokkey.py:
id: eaeefa9fe0c2
- last_write_checksum: sha1:856828a03093b93a93edcc907531057f473e3447
- pristine_git_object: 523d24efa869d63a145167b94e811671b84c5cfb
+ last_write_checksum: sha1:7e371b512bf4d80820881e0dc1868cb0861ae2ac
+ pristine_git_object: d96c756e911994eaf6ef695a059f7575d69ff63c
src/openrouter/operations/createembeddings.py:
id: fe1160a960e9
- last_write_checksum: sha1:55a231d6e9a2f2a76c3fbc1f8af893e393e08bc3
- pristine_git_object: 6459cab7e1a597f5a1b24f690d845b4ee8809236
+ last_write_checksum: sha1:b268603b5bade55ac49a04e3ce217858ab3174b9
+ pristine_git_object: 699e98674ffe69fea3bd1b8df9383cd558884c19
src/openrouter/operations/createguardrail.py:
id: 52ed4b2f5903
- last_write_checksum: sha1:119141c01d19df6b6d090b67f80145e3bf4d4d60
- pristine_git_object: 75b9661b38be99f2a067eda4051592111301bed1
+ last_write_checksum: sha1:d4351fdd66f1fa2bedcfc9a974c7f4ff6c68a6bc
+ pristine_git_object: 15a2748b29de7795c7751cd6d9d171a85ead1d83
src/openrouter/operations/createimages.py:
id: ef9b8b32ed45
- last_write_checksum: sha1:d88655f88d52b99844fd4bdd2a07554543f3ce65
- pristine_git_object: dcc89c263d4ade2a6cee42a3d42c343546cf313f
+ last_write_checksum: sha1:a1a8152a7c5a29004c17a9eed5b796a69dbe9db6
+ pristine_git_object: 8216a656ec1412a034878e257bd9de9e94fa8da1
src/openrouter/operations/createkeys.py:
id: 64ad31fdaa6c
- last_write_checksum: sha1:41931fecbca34b228d5fe6230810eb6bf9271250
- pristine_git_object: 6d18cf707841629cc63ed2ed56aacd67f639a717
+ last_write_checksum: sha1:1a2ca941bdd6ba1ca36ed801469564c5ae886e83
+ pristine_git_object: aea3bdb497d2d0bc6d38bc8858eaccd15b3532fb
src/openrouter/operations/createobservabilitydestination.py:
id: ce29c303fb0d
- last_write_checksum: sha1:b5e942c26b5cffe3a0fd0f44fbdde320f25305da
- pristine_git_object: 3f22b575217335f5c8adc1bd1583c31a0920eba4
+ last_write_checksum: sha1:b9dfa5198721adbca45f48b7fb632bee09780fff
+ pristine_git_object: debb2873f91e98e56a12c112f59f1c7634dfd4df
src/openrouter/operations/createpresetschatcompletions.py:
id: 946ce40bf5bf
- last_write_checksum: sha1:221fc298430723f7899e0118a88aea00fcc76acc
- pristine_git_object: e1ae37ed7a64ee216d45a45f16028f6257d89473
+ last_write_checksum: sha1:89f255f235167dae2d4cd41ba0e8c49cab7026c2
+ pristine_git_object: 2bcf91e05810e50c395875449e273dae5afb49ff
src/openrouter/operations/createpresetsmessages.py:
id: 62021b3fbcdd
- last_write_checksum: sha1:79ce90ae1e5a1b792eec146bbcebc638675a8765
- pristine_git_object: 0b7172f2a37cb7fdcbe2a4b2ba98d73f0bbafc41
+ last_write_checksum: sha1:ef33fadff276b4626c2ccc7d5f38361b33011f8d
+ pristine_git_object: 90392c9cc65b122ca8774c1935960f2888c64ce5
src/openrouter/operations/createpresetsresponses.py:
id: 42f8d73c9c81
- last_write_checksum: sha1:71d1d253871a1184c8dfc9b96b2fbbac58d9f000
- pristine_git_object: 7dce093fb03ebc70fe263f21dde6c5e7c2ac47a6
+ last_write_checksum: sha1:05916f443a7d08b3f5a86bec00b617e267f59e33
+ pristine_git_object: becc8c5f5af5402ce510eda9784ba2ff675d6a94
src/openrouter/operations/creatererank.py:
id: 99b5d368a168
- last_write_checksum: sha1:ea1518fd51b909230af090339f512d7f620d6e16
- pristine_git_object: 3e701dc377bc2ebc9a92261129a70952cdde4bc3
+ last_write_checksum: sha1:a4d3ecf4ffa75b4d66563cefa86d1582624ae128
+ pristine_git_object: 3786a979e8f38a527b3cdfbd08798f67948a9480
src/openrouter/operations/createresponses.py:
id: afb834172b62
- last_write_checksum: sha1:4526e1e256c74c89f40e9e68074a52ce566b37a0
- pristine_git_object: 8f95daa0dff26dfbd6c0e19775665ef548102ea2
+ last_write_checksum: sha1:3cfb72d6b7dc9c55dc3955b53b0a7326a11f4688
+ pristine_git_object: a0925b14a4c830b168dd050798329cf364122091
src/openrouter/operations/createvideos.py:
id: d52f6a4a3fe4
- last_write_checksum: sha1:12507b8087961d8efe67590e8c5b93f47a9d1a23
- pristine_git_object: 3892fc759bd022cdbbaf830f5f20f655131a6d90
+ last_write_checksum: sha1:dbcf7068a23f48a5d4cfd9c8150206731a40cc9b
+ pristine_git_object: 237b8eb3903791681beb0ef12f6ec14a1a98b76d
src/openrouter/operations/createworkspace.py:
id: 690a809c4592
- last_write_checksum: sha1:897268bff3352aff34ba62f6622ee3ba17406752
- pristine_git_object: 1757be8d72bad9c0076d5492babb798eba2b5582
+ last_write_checksum: sha1:9fa9c78f3885742f76db1a54deefdfd192fc9c49
+ pristine_git_object: 15b96d1cdb7b54e4c9d14d443779be0b619b0e4a
src/openrouter/operations/deletebyokkey.py:
id: b1b2c6b06913
- last_write_checksum: sha1:c6e283d2af7bf36388aaf91b6bd433b1605b2ca8
- pristine_git_object: 08c3b34c3f8fe29087074fa2359080b3637af8c6
+ last_write_checksum: sha1:90aad5198d43e289d99c7b2eb66353de7593a68b
+ pristine_git_object: 2148ca98c6cde1506783e9c5f2f522226a27e428
src/openrouter/operations/deletefile.py:
id: 7035af059141
- last_write_checksum: sha1:0b9bc5395e72cb1a00240cae9643defcde0b4472
- pristine_git_object: 961175c5f8e02c50f4f2f20a3e0935f8bfad0fcb
+ last_write_checksum: sha1:4f596bb18e5215da2066466ec7b6be7374a64d44
+ pristine_git_object: ea64b3b8d043b0c5593817d7e7a7abdbcc96cb05
src/openrouter/operations/deleteguardrail.py:
id: 1fbdb98bbb85
- last_write_checksum: sha1:e245a5061592daf839d38caace9cc38abbce879d
- pristine_git_object: c69e9ced3d22240edafbed449752f6d6a09fa649
+ last_write_checksum: sha1:9205bdbe64c2902d51ac7c6bddc8677af5b14ed7
+ pristine_git_object: a8c58e7fa8dd7e781d70c87ecc427f3fdff59ce9
src/openrouter/operations/deletekeys.py:
id: 0bd72d53b0a0
- last_write_checksum: sha1:de3ec2a557ba007482a9d7ecaecef00cb6ead537
- pristine_git_object: 51d48818bce022ab5e9514ea48429e3aca75e997
+ last_write_checksum: sha1:afcea9fd7d8e963f8a73c4f025b83bf6455dd45c
+ pristine_git_object: 998021c4bbe713d9a81ebb79348e6f9e246964bc
src/openrouter/operations/deleteobservabilitydestination.py:
id: efcdc4e7e19d
- last_write_checksum: sha1:022cfc9eedb230a84c9994e788ebb074df8042d1
- pristine_git_object: 865b4d17b94571a016e9971f7288f2fb0747957e
+ last_write_checksum: sha1:975fb2edbcb96c6e890d1ed6ce2101ae261600d8
+ pristine_git_object: 92560ae6d7ad4399f3f1f8a2bf9347ac5f0d7283
src/openrouter/operations/deleteworkspace.py:
id: f92017ce65e8
- last_write_checksum: sha1:ac9aa22002cf938a69643dac44c38ab7d702c31c
- pristine_git_object: fbfef8826b9993d95d355ec0335f943e97a75bda
+ last_write_checksum: sha1:4ed5d02547fd400d801117e13ae108f6256fc591
+ pristine_git_object: b27b1bcfab51efa2b5c42021ad5580b6cec06204
src/openrouter/operations/deleteworkspacebudget.py:
id: 4043f35925db
- last_write_checksum: sha1:f3997826fa17abb166a08eeab99d3c27dcabb2a6
- pristine_git_object: 7b8d62d7e25a78951fdd6b24f40be4172b912351
+ last_write_checksum: sha1:1b6fd5acfd6b53525c8dcff26148535d5acf0401
+ pristine_git_object: b61191d8c3c9ab9da453e46c871231bda0e2628c
src/openrouter/operations/downloadfilecontent.py:
id: 6ff3d391a23f
- last_write_checksum: sha1:a5848ffcbfeaa295c496e3a5a5527a7d236e6c4e
- pristine_git_object: 3d4be3f79e0f677bd91164894c8a45d161bc6fe1
+ last_write_checksum: sha1:0f210f7c9b84c8c8e3ab32ae4ad16b6169880ccb
+ pristine_git_object: 8da6ef059396e5e5127957f698930b4737470e1b
src/openrouter/operations/exchangeauthcodeforapikey.py:
id: 37bdd1517a07
- last_write_checksum: sha1:963c95a165a35ae235d9b03d31c4e029de0246d4
- pristine_git_object: 4e4295d69ef4c06a932c3141568c61cb72ebee4c
+ last_write_checksum: sha1:fb531dadbabcc38e5a57b0bd3eda846790fac93a
+ pristine_git_object: b6895f4b95be5ea3777e7b3004cd267795637bf9
src/openrouter/operations/getanalyticsmeta.py:
id: 013673a37aa5
- last_write_checksum: sha1:decceaad3f96dfa3d433a8ca8a4e5fcf2c8b408f
- pristine_git_object: bdec790c32149d39da2defaee9b2e0e27711e32e
+ last_write_checksum: sha1:800b8064b10a9323e0ab4e5b983df631bac8c2df
+ pristine_git_object: dc728a09fb420c00c185bcffec5fc2e2dab64d1d
src/openrouter/operations/getapprankings.py:
id: 5ffd23dafcc1
- last_write_checksum: sha1:c9011252cc7862d8c35b4ff2f3c82003c98953de
- pristine_git_object: d19ef64ed4dcc19027c95ba19c9b37ed301ebb72
+ last_write_checksum: sha1:e0744bc48799da7cccfcef8e5432c59a59aab288
+ pristine_git_object: e5f42ea07b617b12dff18f2a067bef66a81f35e8
src/openrouter/operations/getbenchmarks.py:
id: 5fb88644491e
- last_write_checksum: sha1:03d0020dcfe87f6f0d8e9a36f6374ec4bba3f8eb
- pristine_git_object: 480c2f31a1714ecdc1e83b34fb2a1fca0be5aa99
+ last_write_checksum: sha1:dd712e430db5c813a352a711430da516f17381e6
+ pristine_git_object: 493d52d35d2e11943a848c1186605425ee2de8b5
src/openrouter/operations/getbyokkey.py:
id: d141452bd88a
- last_write_checksum: sha1:16c33afc84cd0d3a68e977e739a59d14dfd3bd44
- pristine_git_object: 04945fd4eb11ee104cafcc6a06730b3f1c52a9e2
+ last_write_checksum: sha1:d6d391b230d90f51945144e63e9c53772650bd7b
+ pristine_git_object: 6021faa4de45bfaf200eca955b62f4b5b3113804
src/openrouter/operations/getcredits.py:
id: 83155df53da5
- last_write_checksum: sha1:8b1eccdc3313fb35c0d5fdbfe63dbf64f35d460b
- pristine_git_object: 54ebfd677a4050866cb070a1889169842f08f08a
+ last_write_checksum: sha1:89afe99cd26e560d8dabb211bfe37f97e0f80f45
+ pristine_git_object: 0c48cd8cb2742ed71558ea6d9cd488ccccd74e79
src/openrouter/operations/getcurrentkey.py:
id: baf3e38db22c
- last_write_checksum: sha1:9d59301c91d1a0056c8817195ea4e33d0ca68a08
- pristine_git_object: 2d26173fd7e4555e188999eee1e282e85b68c73d
+ last_write_checksum: sha1:9b319545564a485e70d13d5396a7e9a62cad1f57
+ pristine_git_object: d0062378b98ef20bf17dcc00a219edaa1da24424
src/openrouter/operations/getfilemetadata.py:
id: 408c34486769
- last_write_checksum: sha1:c8eec522d3109c0c9376729fa438af918b2c29ea
- pristine_git_object: 6a7ddf0774a233d065042406ca2067bd7b684ec1
+ last_write_checksum: sha1:d2c26949cad5e845994a582591f439ac052d3052
+ pristine_git_object: 4614554b2cb444352d81ccb398f414a566b03f91
src/openrouter/operations/getgeneration.py:
id: d7c64961334f
- last_write_checksum: sha1:7c919236caf0943f145d584024a85bb663f0e911
- pristine_git_object: bf21d05e955bbfc62ed484b566555bafe0049e10
+ last_write_checksum: sha1:c593bd5ddf5d9d0424a4b84401785cfddc90049f
+ pristine_git_object: 2799b1f4d7b5855af3b621dc1cfcd41a8a24fcb4
src/openrouter/operations/getguardrail.py:
id: 9b3309b59c64
- last_write_checksum: sha1:f83b3d52731324d0bc87c382196b84713e77f6da
- pristine_git_object: e3a2ca2914e9add5060e7efa73dd268d5e32a9a5
+ last_write_checksum: sha1:76d3d0f15b487afef177e4b5148bddb814795b0f
+ pristine_git_object: 3d69c1678d900400234631c4ace61a9f8354efc2
src/openrouter/operations/getkey.py:
id: d9769da90865
- last_write_checksum: sha1:511b994a0bd1241856b06184f05433bec3a16733
- pristine_git_object: d2370a94a10fadec861d31e6fd1a9b2566e94d22
+ last_write_checksum: sha1:485773a029e23cbe69b3e303df82995df05c693d
+ pristine_git_object: a614dfb5191b329723e78255517cdbbc51985698
src/openrouter/operations/getmodel.py:
id: 90c926cd726f
- last_write_checksum: sha1:f09d4d15678f12e6110cad664349f392f3ef9ff2
- pristine_git_object: e45056283604220d3395365bedfbaa1d1df13095
+ last_write_checksum: sha1:3ba2f12410841c49e329821b8eaec5f87d5882c1
+ pristine_git_object: d5a47b01285b12f05d46240e253a934be63f0a00
src/openrouter/operations/getmodels.py:
id: 5bd5dfcb0125
- last_write_checksum: sha1:36ec35c9ccd82c18555c383a5c495b4b12ed26bd
- pristine_git_object: eb0f9558006e935a60cff6a401e960cf29f7fcff
+ last_write_checksum: sha1:6d13fdf573bd5a4ff65484e3358d36d5f5e17a7d
+ pristine_git_object: af887b941b69db369b1623fd2a19abeef6ef967d
src/openrouter/operations/getobservabilitydestination.py:
id: 15b49f22aca9
- last_write_checksum: sha1:89cbc1ea42d52efd81f18ebe90094c204fbe88ad
- pristine_git_object: 3a79bcb425563eb0cbebc8103d20966f07173654
+ last_write_checksum: sha1:351b050b646c9e2dbffaf27633cbd38b30047169
+ pristine_git_object: cb8301dcc5299e58abad699c2e27b3e78c78d70a
src/openrouter/operations/getpreset.py:
id: 8819dbeb2074
- last_write_checksum: sha1:d42d0b432018ea72a6c924b5d5e949e8afebc22b
- pristine_git_object: d0889139102d911511bf6013e6ed328d122181d5
+ last_write_checksum: sha1:035b83ddf36d83cba7892aac4763ee973f0f83e8
+ pristine_git_object: 95dbd5c272049df2b34ec7a511858b2d017e917c
src/openrouter/operations/getpresetversion.py:
id: 220006e17d37
- last_write_checksum: sha1:8854b742529106290bcc2600bc3a36f0bc8f199d
- pristine_git_object: b76d22dce4db994d55b6db8d7f174d3378aa381e
+ last_write_checksum: sha1:b7a8663b5a480eb0dfc5ede991ed40600c35b31d
+ pristine_git_object: cbcc9abe2ab38d7e7bd3cbc79acfda4da6b630e0
src/openrouter/operations/getrankingsdaily.py:
id: 61dd0325de08
- last_write_checksum: sha1:4a96c332bdd9d5e9bf86b7bed29e65f387ea52b6
- pristine_git_object: 2e3cf71acfb8771108bc32503a5b87860e5f2d91
+ last_write_checksum: sha1:a5953f86dfb31e77024412d02cc56b7a485fdb76
+ pristine_git_object: efa494faf3208ec621c97b156196a27b1c61b018
src/openrouter/operations/gettaskclassifications.py:
id: ba6156d68acf
- last_write_checksum: sha1:2806a5eaf999c66cc50e57fa258b7c6ef06bd340
- pristine_git_object: 793d2ca73527fee34611019499c0b5f51b361758
+ last_write_checksum: sha1:c569572d21aa766ac542d5c535208e8b1caae503
+ pristine_git_object: a8b610cad3ca3792798e40b31cada48b0ed3845b
src/openrouter/operations/getuseractivity.py:
id: 560a0e01c2c3
- last_write_checksum: sha1:88c8f4fe8019dc79934cf6b566111bf34d4adb08
- pristine_git_object: 3e29cdf18f4cb933124841e7685f2a6956dc4622
+ last_write_checksum: sha1:91bbb6f67fd71874baf0c61b8004bfab589385f1
+ pristine_git_object: 35ab9ca4d75b4e37483cd379f73afdbaf0b60d3c
src/openrouter/operations/getvideos.py:
id: a5f626467a69
- last_write_checksum: sha1:00f000b3fab29247f632c12bcdfe71a579a2ee6a
- pristine_git_object: 3a120ed0aacd7ac94b3421fc1439e1308d53f83f
+ last_write_checksum: sha1:007242bbdda9cb2f7d02fb6a04c5aa000d317a07
+ pristine_git_object: 33c1a6954f0a39db00ca6c6cb6f0f99b4696eba0
src/openrouter/operations/getworkspace.py:
id: 2ead327ab15e
- last_write_checksum: sha1:d9c6371c14333537e74d326634bc2ed2dbbeb76a
- pristine_git_object: f4d279e42c326dbda828b4a875cd152cfa0ae14a
+ last_write_checksum: sha1:3dff8a41dc00770f6233f94b8233655f8310bc49
+ pristine_git_object: 1075e4c49f582db35eb921aa25d2b2baeb803dd3
src/openrouter/operations/list.py:
id: 3ced31e3804e
- last_write_checksum: sha1:aeaae46cbe0e9403241e50baab791212404b29a0
- pristine_git_object: bf9965a274d7249abb169adb43c8358b1ee73105
+ last_write_checksum: sha1:122d025a3a5ac362ee969b2b0d800876569943a0
+ pristine_git_object: cc90375e9aac23107e57e18e6adecc38f544e185
src/openrouter/operations/listbyokkeys.py:
id: b6dd42b3e05f
- last_write_checksum: sha1:d0fdaf6fac9d2364ee0b092f5808b85e1e03421b
- pristine_git_object: dcbff9f3f4f59d1617c9c793c9eb1a212c313905
+ last_write_checksum: sha1:ca0276ecb273e8b62e43937369d7b059ad73d9f1
+ pristine_git_object: 2ec07724128bf2fb6152e84694f31b4234279e82
src/openrouter/operations/listembeddingsmodels.py:
id: bf749a1f23d6
- last_write_checksum: sha1:654a4e7e7b486f1d321eeb11ef7a7fa928e501a6
- pristine_git_object: a4042eeccfd06d6fb1e5de741f1eb25e29347654
+ last_write_checksum: sha1:19ed80a098e6e1b43bedfcccb11b4c8d8794541c
+ pristine_git_object: a019232d0cfcaccbca305f9d9aefccd0a5023df9
src/openrouter/operations/listendpoints.py:
id: 62b7a5f21dec
- last_write_checksum: sha1:a6d36bd19eac1f2a3f1142ded3f7fc928230d633
- pristine_git_object: e1cef6f827b14d7d0a9a52348563e0afa80a02bd
+ last_write_checksum: sha1:1aa9ca7cc8e0376cc77fe81403e2664ecbd1abb2
+ pristine_git_object: 6f25eff59336f48df0ac3c184cd0df135bb1212d
src/openrouter/operations/listendpointszdr.py:
id: 588bf206e92f
- last_write_checksum: sha1:6d8e90c542ae6344e403767a3a4f8ec5d1d4dc75
- pristine_git_object: 23e735db74e27dc35e80b2f72cf386b0eeeb116d
+ last_write_checksum: sha1:dd1cc08d8779d71a9ad80e0ad764fea72b3fb846
+ pristine_git_object: f5bd1f67dc835230e6d282e0500cbf3b5781eab4
src/openrouter/operations/listfiles.py:
id: fd89527f4236
- last_write_checksum: sha1:76a902a7cc595f6c1949a73068c72ebc0afb7b41
- pristine_git_object: 834ff78375ff803f605ed95a3e3f86f5961b3bc6
+ last_write_checksum: sha1:89b86758d80347b2ac21f01eae0a835884527c23
+ pristine_git_object: 75fdf629ea1573a1bf6962a862cecaa7c050a4bd
src/openrouter/operations/listgenerationcontent.py:
id: 2f086d74631c
- last_write_checksum: sha1:922e30991bb7b3ef69e2672a2b969d74ce0b838d
- pristine_git_object: 8d195009671fdd52cc86795bc1612fa3ddb79364
+ last_write_checksum: sha1:d2792123b36f31d0bcb2ba00e1843a1b04287983
+ pristine_git_object: d57feee9926b76b03d1ec5ed8655cde8310b8192
src/openrouter/operations/listguardrailkeyassignments.py:
id: ee9d33f4de6b
- last_write_checksum: sha1:51cdc972a09b21dc3610b634bd0837a8d3b5b249
- pristine_git_object: 1278683af12aa38dffba0433813102017117f309
+ last_write_checksum: sha1:6837feb62ec5d172f6588933821232ad73fa08f2
+ pristine_git_object: e7a2c31fb2451fbbc836d1356d156db8e9a7a933
src/openrouter/operations/listguardrailmemberassignments.py:
id: e36e679b02ec
- last_write_checksum: sha1:d056cb9d72107ca518ce627a5af27a15c7644eaf
- pristine_git_object: c9c8c3ec5ea6ebcf1e160aa1e3ec41390bcbdfe3
+ last_write_checksum: sha1:de031b827a456c84a7d92790fca5ddd06780aa7a
+ pristine_git_object: 84076b7480837071db3d745f0fee690bd7809a01
src/openrouter/operations/listguardrails.py:
id: c99a9e7be93c
- last_write_checksum: sha1:f82932a120516264880ec2defa377bb03a56071f
- pristine_git_object: f91db9e67fe3a10b2fffd681a517a65eee4df8c8
+ last_write_checksum: sha1:c908e642caa02b7904355cc6dba6f2c4d9a83d1f
+ pristine_git_object: 461e691429a7daea86a57f6d08df1bf4e9f78833
src/openrouter/operations/listimagemodelendpoints.py:
id: 40fd868ead3f
- last_write_checksum: sha1:a59e2ecd4a27fe12141b7dd34befcae00c1d6206
- pristine_git_object: 15c606cc2a3a7a5c6825124c9ea09c7f9a9c31ad
+ last_write_checksum: sha1:2f4ba55f45f8fe4b5ce56cb6781fa8db455f8927
+ pristine_git_object: 900b5b667c40d718a33233580d21de0b8dbf9fb9
src/openrouter/operations/listimagemodels.py:
id: ad2131e4aa6c
- last_write_checksum: sha1:aefb1c9ab70ad8d1e53e2bd636807c12f4c5744c
- pristine_git_object: e5c89ce75ede0c49f529ffced4a041b1d05d48f0
+ last_write_checksum: sha1:b5bbcbd02ce54cdc8bb1a2a3a424ca93c73f90bc
+ pristine_git_object: 01655ae02036acf433ec5f54fd1d9323a55f0684
src/openrouter/operations/listkeyassignments.py:
id: e26c11d1bd3c
- last_write_checksum: sha1:2c4e9b2dac5566beb3b4f1331686ec45c174e021
- pristine_git_object: ae0bfca10fb38c10916c0420f78d3adf3706f544
+ last_write_checksum: sha1:bade55d5aaef4f6d9437c24f0bcb39b645af05ae
+ pristine_git_object: 2aee3fc4636c77ba4fcf5884a4000a1a04ee58a8
src/openrouter/operations/listmemberassignments.py:
id: a993b5549126
- last_write_checksum: sha1:b234a47a5b0cfad0cb47377ade93531c194dd4bc
- pristine_git_object: 55c93baaa92a759cd94969ba1e79aff33241cd3d
+ last_write_checksum: sha1:f0aab0c649c589a7d76cdaa9bbe4f0529ade66de
+ pristine_git_object: f8e0b658a596aaab401ff4feb3fa633f56f831f2
src/openrouter/operations/listmodelscount.py:
id: d588d81b71c2
- last_write_checksum: sha1:53314179fa961048fec7f4580962167c29020de7
- pristine_git_object: 3d8a59ac661eba1ad0fd192e0b58513435641be2
+ last_write_checksum: sha1:359fe33759ae50d8180ab793a32b42045a28e3af
+ pristine_git_object: 797af26e7d4985305600eb79b3ede8e78379d13a
src/openrouter/operations/listmodelsuser.py:
id: 16eb5946cf60
- last_write_checksum: sha1:bf9aee7db7762dcd082791962b962940dc7e16be
- pristine_git_object: d25eea81bff3710243fca5874e934c024ab1f007
+ last_write_checksum: sha1:f77768589018acd0395e98b9a313933872834d84
+ pristine_git_object: 6070772eb28a5452620eb4ebebfa2bc5c2310a4f
src/openrouter/operations/listobservabilitydestinations.py:
id: 40d2ffa975ee
- last_write_checksum: sha1:e6214f3e639b5495977cb32a9b8a3780e4b0f8e2
- pristine_git_object: 02233af5e6ecda1c0351d0b294c137ea0e3f5d3f
+ last_write_checksum: sha1:3f7de2adcba23902d0abc08728d82bb138fa93d1
+ pristine_git_object: 465e357cbbb90b0d1be4f7e223332bc14e5deb71
src/openrouter/operations/listorganizationmembers.py:
id: d40a3e0e2b38
- last_write_checksum: sha1:201eccb7b2352cfeba4e2fb05dc23ae2ebe92e6c
- pristine_git_object: 6d918f6f02ce6f0690ec93314d5982f098738b27
+ last_write_checksum: sha1:d36b77a9962c1808572789f535a04acb51e64685
+ pristine_git_object: 15662f480a26a6b35a299d2845556ac4b8bbddf1
src/openrouter/operations/listpresets.py:
id: ecdc7097aab7
- last_write_checksum: sha1:3739d378e7fb4142e0dbc5978bef54fbf2f77066
- pristine_git_object: faa98f18e5dde101dc43834814cf0aadd2866c31
+ last_write_checksum: sha1:5f23af709ff305b4a1ddb26fd972a080a9c5d134
+ pristine_git_object: bf21a246c75309e027a8ee69eb19f610a26af61a
src/openrouter/operations/listpresetversions.py:
id: 697cf707300b
- last_write_checksum: sha1:ba246bce7d15d2e52fac15403891aca8bd86e391
- pristine_git_object: 48185b77921c712a4f32c17421a9192e98be8cd3
+ last_write_checksum: sha1:47eabd5ac45fe37bc05f0c57faea512fcb6b1c05
+ pristine_git_object: 36052fb3de83cfafd1c021ac8ebfa56110eb55af
src/openrouter/operations/listproviders.py:
id: cf6e2db15118
- last_write_checksum: sha1:384fc4522eedd74a186ed24077a116ef2b77dc42
- pristine_git_object: c4e51800a7c11cb8c6f74e485c0bec84016915ce
+ last_write_checksum: sha1:decee82d2b55738162cc47f02f56c592d53f9ee9
+ pristine_git_object: 80bcd4b8e5d9e5f92ab4375175d6ee3a826a2e94
src/openrouter/operations/listvideoscontent.py:
id: c27f9deb98f8
- last_write_checksum: sha1:d677eda0c9d826b1e9b391c27c3d9aca1f7c75f2
- pristine_git_object: 5ca3eefcbb9a2246615691514562083c63a7c213
+ last_write_checksum: sha1:7eadc5d4d5f52469c09740d08f56970fafb407f2
+ pristine_git_object: 410bfaa47422156064f54f6db11801ff6e335a56
src/openrouter/operations/listvideosmodels.py:
id: 77ba4890284b
- last_write_checksum: sha1:9bb93fb1d1d71effb5f4dc58cef9d7b2265a92b7
- pristine_git_object: d1497b8429e19d06cc674940e2641b3ed2222ca7
+ last_write_checksum: sha1:52b9479599cef9511b68b6c1f5561a42a039bbe4
+ pristine_git_object: 8ba436e2c6fdebf05777a000c7eb09586462a0af
src/openrouter/operations/listworkspacebudgets.py:
id: 1310fb7e01a9
- last_write_checksum: sha1:4d0ee7fb9e5b8344fa5ce67610f025e4ea3d5638
- pristine_git_object: 266dc8cc98d784363d63541ae064034d424f0d13
+ last_write_checksum: sha1:83b3e498943e3c5a239e2c50e9d417b1f5d227fb
+ pristine_git_object: a65454da5ec6727d99312d56c64324edd8615685
+ src/openrouter/operations/listworkspacemembers.py:
+ id: 9886d508d283
+ last_write_checksum: sha1:c83463410e0899b9f5b686e2155f69340c7acff7
+ pristine_git_object: 9a8706fcb1a1761c4e636dba74866e239e8d51a3
src/openrouter/operations/listworkspaces.py:
id: fe94c6f61835
- last_write_checksum: sha1:d8845cc07779359b6d9b29ff4a2367e8c8eeb942
- pristine_git_object: 236dc188826db184deca4a749dab47e58c3dd637
+ last_write_checksum: sha1:2458a0c8d4834fa046496a68620b66c5ba55d927
+ pristine_git_object: a242ff323f23dfadad254b76440114e66db4e744
src/openrouter/operations/queryanalytics.py:
id: d76c63ff66f6
- last_write_checksum: sha1:98dad6fd5c6ea5ff4e6c8cc322f401b86f608335
- pristine_git_object: d994e559237bc03c0bb51c739ea351b1031d9d06
+ last_write_checksum: sha1:7866c71f371c0dbf9e1cda9be336bbf1d0e30ac5
+ pristine_git_object: 705a3eaf0ce3e1b7cc9af6f96dbbed4fe0f67f50
src/openrouter/operations/sendchatcompletionrequest.py:
id: d9fee71bb577
- last_write_checksum: sha1:130a25fdb3f44490b68ca99153c0cccba25db87e
- pristine_git_object: cb1c3b3a4fc4819a912f052fa779cba9fd0bb191
+ last_write_checksum: sha1:0cba4011b8e305270ac30f88cb7ab59b6aefe619
+ pristine_git_object: b065e38c8d449348c4d133004653607e4194da6e
src/openrouter/operations/updatebyokkey.py:
id: 486f4ea60120
- last_write_checksum: sha1:abf8f1f9145140813a1f96d90b728577f0ffaae0
- pristine_git_object: 1bf28a90e5f22a789112a93c9848f78233df156c
+ last_write_checksum: sha1:a170382e38c66128bddbe8ea18c034d1350910da
+ pristine_git_object: cf8b4ee9febb198afe12c27d03c72902eaa8baf0
src/openrouter/operations/updateguardrail.py:
id: 6cfb33d7d40c
- last_write_checksum: sha1:fa9ca7390db4e4b45d514f821c008748af8e4c8e
- pristine_git_object: b3675a1d1a828f26750e5b7ac98fb7cf42ed49e1
+ last_write_checksum: sha1:bf4f6b9899c176fa012acc607556a66d6e85a51b
+ pristine_git_object: 3787f0ce396fca69bdd7bce99d8054fec4dd23d6
src/openrouter/operations/updatekeys.py:
id: 56fb213253a8
- last_write_checksum: sha1:d7eeeaae7c738016d176985c529b9a60df5f7966
- pristine_git_object: 8ea23655b38916560ec65dc2f37842812add7c3f
+ last_write_checksum: sha1:d859ba1d953fae4a232076e0c173491a3c89031f
+ pristine_git_object: 61a0eee34a0084c64f8fd69659cbb981a3a23d6b
src/openrouter/operations/updateobservabilitydestination.py:
id: 18e06708d1b4
- last_write_checksum: sha1:3384214864aaba28a6cdf2ddcd55aae16bef9a3a
- pristine_git_object: 749f0f72822f811653a4b89cf491388ce284db2b
+ last_write_checksum: sha1:d490e19e8698ed5193df9d06673f975cb3a1410f
+ pristine_git_object: e2819c904941d06f664a29312d9515150412ac44
src/openrouter/operations/updateworkspace.py:
id: 2e9960985cbc
- last_write_checksum: sha1:88c11ee7a31bc5e2267981d882a01a2a71aafe55
- pristine_git_object: 4ab7929896a5dede1fa4cf9ce6acfaedd99160aa
+ last_write_checksum: sha1:0b74790d6673ca8bb8c203d97c5a6ce8128a16df
+ pristine_git_object: 4441056786e1495816e8dc057a29795e86380ab1
src/openrouter/operations/uploadfile.py:
id: f9dc565da045
- last_write_checksum: sha1:6ebd83512ef670b3a9201aa8518267ba243a3070
- pristine_git_object: 579e1df65e14d2416c7bad356524f788f4705c67
+ last_write_checksum: sha1:d73fad089275b4d32a718e63baf48926899f6bca
+ pristine_git_object: 29a37b944dfd1855409f064503e348ce50d13cf0
src/openrouter/operations/upsertworkspacebudget.py:
id: 67d4a2962257
- last_write_checksum: sha1:9c22e7ab1812a88df9d8a291aeae6677c89778eb
- pristine_git_object: 9e55fa4d95b147b80c3907ae03e76905563ca2a8
+ last_write_checksum: sha1:e251aa9f18cef5e265ef4d65cfbda42af411d2a3
+ pristine_git_object: 228942b37d54273e752786186a49bd1b4ed4a787
src/openrouter/organization.py:
id: 6f4c63c416e8
- last_write_checksum: sha1:4ca00158cd6a4971e7a4cf6da1ef084da25630d9
- pristine_git_object: ad2e7f86b6138cf2b2137345155e2b3a5784fb46
+ last_write_checksum: sha1:b60a04c6f8482981e03f69fb357c8c183a187225
+ pristine_git_object: d24bfa86c4b67290033a18eced04435a3fc3d69f
src/openrouter/presets.py:
id: bd0c40379dcd
- last_write_checksum: sha1:9072880166c0921a928c3898a91de6fab8d5bcd1
- pristine_git_object: 4ab1b9cdeb1929ce264f5d6d19c63f9f7231d6a6
+ last_write_checksum: sha1:ff4882369524258936055676e9516ebeb68959d5
+ pristine_git_object: 83085f60d38d0cb0b5540b8dd1cc1dfb7dc613ee
src/openrouter/providers.py:
id: debc4c48f149
- last_write_checksum: sha1:f39f155f26e6f5e4fb5b7e0f577a8c49536f6bb3
- pristine_git_object: 1c940641b8f61a395bf8a37f203a8fbb6ad41d4e
+ last_write_checksum: sha1:11dbc607825edee8dcc84b39ee8171e097c47acf
+ pristine_git_object: c1fd70812d86dcc34e9f111325c50b988fb4aa1f
src/openrouter/py.typed:
id: 89fd03eab092
last_write_checksum: sha1:8efc425ffe830805ffcc0f3055871bdcdc542c60
pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544
src/openrouter/rerank.py:
id: 8dbc1be8d76f
- last_write_checksum: sha1:c3dc646c7c7452d90b659c7611ba82eedc9a4b8d
- pristine_git_object: 96401a2fe86fefe574e073952ca235e71953fbec
+ last_write_checksum: sha1:948125ce756a89cc0fb82dac1fc12b90cf2498b9
+ pristine_git_object: 76378ffba1806e0ca66fc873db1a568be0becebb
src/openrouter/responses.py:
id: f2108fb635e1
- last_write_checksum: sha1:2d50009bcadc43406cab3a16fb72feca6c54ec82
- pristine_git_object: e80404c46cf9516ca4ad7bdb1760a810d5a3850e
+ last_write_checksum: sha1:9d6782aa347b58754a77cacbd85c3fec63febbac
+ pristine_git_object: 28b31f4ca269976764c47bd9a27f4d942e08f1d4
src/openrouter/sdk.py:
id: ee9846c4c9c5
- last_write_checksum: sha1:d64c6bd75bb3ff1b610ab0fc5fee0b79fad100e5
- pristine_git_object: 8fe36b2268f2f87ce9e0cf5e140002564fe69e65
+ last_write_checksum: sha1:2247537eca7f88a8f36e53fe011904b98569ad52
+ pristine_git_object: a6a9afda84aa6a6c36bf3ea4ca6a04761ab86e26
src/openrouter/sdkconfiguration.py:
id: 55773bb98d7c
last_write_checksum: sha1:c01826125c31a8b8bc99d9d679782c8758fae001
pristine_git_object: 26433165a0b1c25d7bd3115b9b129b18f2dc9387
src/openrouter/stt.py:
id: fc0c2f669423
- last_write_checksum: sha1:85b66bb07b0d906fc30f5077056fad632f34757a
- pristine_git_object: 3b12f69849adc34582f75bb873ca1d15f562a187
+ last_write_checksum: sha1:da4bb584de8f5e54ae6d9b6a5d07c3bc6cf41558
+ pristine_git_object: a5f03a72b9dd5ad769366fb71c07c57d7510fc56
src/openrouter/tts.py:
id: 5055d4b95f1d
- last_write_checksum: sha1:4097f8545f7276c8d1e007e35ac90e2006300c69
- pristine_git_object: 66886a4afd9e8195f2e1910741b3ee7d2e2b13cf
+ last_write_checksum: sha1:727a19a0df768153cbe2d8351394a2e254f680ea
+ pristine_git_object: 68ae54d07c464e69738c16bebf77d06d0d7f2141
src/openrouter/types/__init__.py:
id: 5eab536205b7
- last_write_checksum: sha1:140ebdd01a46f92ffc710c52c958c4eba3cf68ed
- pristine_git_object: fc76fe0c5505e29859b5d2bb707d48fd27661b8c
+ last_write_checksum: sha1:f9ad14217f832e74f594285960125add50324be9
+ pristine_git_object: faa268137bc01c9d08cfadc4797017db48747a96
+ src/openrouter/types/base64fileinput.py:
+ id: 78a06688cf05
+ last_write_checksum: sha1:1522687ae3398374c35710cad993a6e82b5ab99d
+ pristine_git_object: 862566fe2b1db830276b390e136e65090e5963d2
src/openrouter/types/basemodel.py:
id: 369e2d46ed57
- last_write_checksum: sha1:615d0b364fa924b0fef719958df34596cc7c1ae2
- pristine_git_object: 231c2e37283a76082f1a064c7aae47f8ee4ee694
+ last_write_checksum: sha1:10d84aedeb9d35edfdadf2c3020caa1d24d8b584
+ pristine_git_object: a9a640a1a7048736383f96c67c6290c86bf536ee
src/openrouter/utils/__init__.py:
id: d2221baccf50
- last_write_checksum: sha1:5d88356c206a32c694ae113178ca6325a9fc612a
- pristine_git_object: 87192ddef2589a7778f85e1cd715d6d1e61ae0a6
+ last_write_checksum: sha1:823ec82074fd04545cce2ec8011d5feb1abbcd64
+ pristine_git_object: 7d59884432525433dde5b893c3c6dcbe6e01a81e
src/openrouter/utils/annotations.py:
id: 8999bda9dad2
last_write_checksum: sha1:a4824ad65f730303e4e1e3ec1febf87b4eb46dbc
@@ -9076,18 +9136,22 @@ trackedFiles:
id: b95b8718acc3
last_write_checksum: sha1:c721e4123000e7dc61ec52b28a739439d9e17341
pristine_git_object: a6c52cd61bbe2d459046c940ce5e8c469f2f0664
+ src/openrouter/utils/dynamic_imports.py:
+ id: bbd138b4ea9c
+ last_write_checksum: sha1:a1940c63feb8eddfd8026de53384baf5056d5dcc
+ pristine_git_object: 673edf82a97d0fea7295625d3e092ea369a36b79
src/openrouter/utils/enums.py:
id: 110ef7d92d87
- last_write_checksum: sha1:786ba597f79dca6fbc0d87c591752bb8d775ecb7
- pristine_git_object: c3bc13cfc48794c143a64667f02e7949a8ce3fcc
+ last_write_checksum: sha1:bc8c3c1285ae09ba8a094ee5c3d9c7f41fa1284d
+ pristine_git_object: 3324e1bc2668c54c4d5f5a1a845675319757a828
src/openrouter/utils/eventstreaming.py:
id: 521c9b089a6b
- last_write_checksum: sha1:bababae5d54b7efc360db701daa49e18a92c2f3b
- pristine_git_object: 0969899bfc491e5e408d05643525f347ea95e4fc
+ last_write_checksum: sha1:7d1dc68f8b48486ab646653aa05cc38752e1f912
+ pristine_git_object: a8d4fe5cc88d3c7337339e1b36a61bbf7ca8c4eb
src/openrouter/utils/forms.py:
id: ea40240d85c2
- last_write_checksum: sha1:15fa7e9ab1611e062a9984cf06cb20969713d295
- pristine_git_object: f961e76beaf0a8b1fe0dda44754a74eebd3608e7
+ last_write_checksum: sha1:a971cdb120ad3d416d296d5d0ad89e4808350a7f
+ pristine_git_object: fdf0dc9b2a67bca773eefe6b471498cccaa83424
src/openrouter/utils/headers.py:
id: 27516e637dba
last_write_checksum: sha1:7c6df233ee006332b566a8afa9ce9a245941d935
@@ -9098,28 +9162,32 @@ trackedFiles:
pristine_git_object: db55cd38e1db5cedb7be0b0f51c0d8243de126e7
src/openrouter/utils/metadata.py:
id: 9e56bbf6b778
- last_write_checksum: sha1:c6a560bd0c63ab158582f34dadb69433ea73b3d4
- pristine_git_object: 173b3e5ce658675c2f504222a56b3daaaa68107d
+ last_write_checksum: sha1:e703e5cbb5255144aacf86898d1420529afaaff8
+ pristine_git_object: 5abddd588837ac297050ca3b543627faadb350a9
src/openrouter/utils/queryparams.py:
id: 01286f49bf3b
last_write_checksum: sha1:b94c3f314fd3da0d1d215afc2731f48748e2aa59
pristine_git_object: c04e0db82b68eca041f2cb2614d748fbac80fd41
src/openrouter/utils/requestbodies.py:
id: 1273a1cf70c0
- last_write_checksum: sha1:e0a3a78158eba39880475d62d61be906625676b8
- pristine_git_object: d5240dd5f5efffabbd9aefa2f4a349511a9c75b4
+ last_write_checksum: sha1:e1fef575283b7fe7fe2ad392dbbb3fb105309124
+ pristine_git_object: 591415af8e64baa410627b507d2740afb5387d13
src/openrouter/utils/retries.py:
id: c4cf78e73a9a
- last_write_checksum: sha1:5b97ac4f59357d70c2529975d50364c88bcad607
- pristine_git_object: 88a91b10cd2076b4a2c6cff2ac6bfaa5e3c5ad13
+ last_write_checksum: sha1:3585b891142f30a597fbf7a2f0340700babef8e4
+ pristine_git_object: ca7b59efebbbd9545744d0207ef42725c4cc5143
src/openrouter/utils/security.py:
id: 2fb038256ad8
- last_write_checksum: sha1:2ace8b34d8b3b0bb6bb3b12f5bd0ea3853807877
- pristine_git_object: 6996c79fd27d6f77a3d8224e81bbfbe798d20fc8
+ last_write_checksum: sha1:780d572b5b3554ac39a20d6ece07b0977121fdd1
+ pristine_git_object: 35a59a63030e1c6443c4819012d9157d88e32428
src/openrouter/utils/serializers.py:
id: b163f58f6f87
- last_write_checksum: sha1:a0d184ace7371a14a7d005cca7f358a03e3d4b07
- pristine_git_object: 378a14c0f86a867ca7b0eb7e620da82234c0ccc4
+ last_write_checksum: sha1:7485f1425b0661fd84836186570df90207eec6af
+ pristine_git_object: 1031ed930bad5ece220cf7416a56c29f40f0588b
+ src/openrouter/utils/unions.py:
+ id: c3e422902f03
+ last_write_checksum: sha1:cd6201e6f43c51545a32f5bd4ac9f508e1ba0c29
+ pristine_git_object: 2434640235f9607bd894361dcba872ceb5b26533
src/openrouter/utils/unmarshal_json_response.py:
id: 3cf8a2573121
last_write_checksum: sha1:8e77f7d9ad09be56c5e97a3c3d5b16bd20a4aa0d
@@ -9134,12 +9202,12 @@ trackedFiles:
pristine_git_object: dae01a44384ac3bc13ae07453a053bf6c898ebe3
src/openrouter/video_generation.py:
id: d0a90c1b8efe
- last_write_checksum: sha1:a857083fe9fe2766e7c083dce8778a30dd0a0b03
- pristine_git_object: 14d0c5e4e7757eeb383e460784073b8f05accd82
+ last_write_checksum: sha1:5d725868d1a14ca3d64562f0da54e9b130ff7560
+ pristine_git_object: 4a82cde858211c0f5a01b08980cee0e9e3d0f52c
src/openrouter/workspaces.py:
id: cd6c533b1802
- last_write_checksum: sha1:7b1a29a2c1faa68ef30ccd0c8e61dfe535b90314
- pristine_git_object: 1b82a9360ac6b08cee12e674770f7681e2a5e6f4
+ last_write_checksum: sha1:cde38a8140d790751ffd6bb013a4c702c112aa6f
+ pristine_git_object: f3cf390c8f027710aaf32e794fa5229f0447b991
examples:
createResponses:
speakeasy-default-create-responses:
@@ -9147,7 +9215,7 @@ examples:
application/json: {"service_tier": "auto", "store": false, "stream": false}
responses:
"200":
- application/json: {"completed_at": 1704067210, "created_at": 1704067200, "error": null, "frequency_penalty": 3967.09, "id": "resp-abc123", "incomplete_details": null, "instructions": null, "metadata": null, "model": "gpt-4", "object": "response", "output": [], "parallel_tool_calls": true, "presence_penalty": 7468.94, "status": "completed", "temperature": null, "tool_choice": "auto", "tools": [], "top_p": null}
+ application/json: {"completed_at": 1704067210, "created_at": 1704067200, "error": null, "frequency_penalty": 3967.09, "id": "resp-abc123", "incomplete_details": null, "instructions": null, "metadata": null, "model": "gpt-4", "object": "response", "output": [{"content": [{"text": "Hello! How can I help you today?", "type": "output_text"}], "id": "msg-abc123", "role": "assistant", "type": "message"}], "parallel_tool_calls": true, "presence_penalty": 7468.94, "status": "completed", "temperature": null, "tool_choice": "auto", "tools": [], "top_p": null}
"400":
application/json: {"error": {"code": 400, "message": "Invalid request parameters"}}
"401":
@@ -10567,4 +10635,21 @@ examples:
application/json: {"error": {"code": 404, "message": "Resource not found"}}
"500":
application/json: {"error": {"code": 500, "message": "Internal Server Error"}}
+ listWorkspaceMembers:
+ speakeasy-default-list-workspace-members:
+ parameters:
+ path:
+ id: "production"
+ responses:
+ "200":
+ application/json: {"data": [{"created_at": "2025-08-24T10:30:00Z", "id": "660e8400-e29b-41d4-a716-446655440000", "role": "member", "user_id": "user_abc123", "workspace_id": "550e8400-e29b-41d4-a716-446655440000"}], "total_count": 1}
+ "401":
+ application/json: {"error": {"code": 401, "message": "Missing Authentication header"}}
+ "403":
+ application/json: {"error": {"code": 403, "message": "Only management keys can perform this operation"}}
+ "404":
+ application/json: {"error": {"code": 404, "message": "Resource not found"}}
+ "500":
+ application/json: {"error": {"code": 500, "message": "Internal Server Error"}}
examplesVersion: 1.0.2
+releaseNotes: "## Python SDK Changes:\n* `open_router.beta.responses.send()`: \n * `request.input.union(Array<>)[].union(OutputFilesServerToolItem)` **Added**\n * `response` **Changed**\n* `open_router.presets.create_presets_responses()`: \n * `request.input.union(Array<>)[].union(OutputFilesServerToolItem)` **Added**\n"
diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml
index b77fabd..c997d33 100644
--- a/.speakeasy/gen.yaml
+++ b/.speakeasy/gen.yaml
@@ -16,6 +16,8 @@ generation:
requestResponseComponentNamesFeb2024: true
securityFeb2025: true
sharedErrorComponentsApr2025: true
+ sharedNestedComponentsJan2026: false
+ nameOverrideFeb2026: false
auth:
oAuth2ClientCredentialsEnabled: true
oAuth2PasswordEnabled: true
@@ -25,14 +27,16 @@ generation:
schemas:
allOfMergeStrategy: shallowMerge
requestBodyFieldName: ""
+ versioningStrategy: automatic
persistentEdits: {}
tests:
generateTests: false
generateNewTests: true
skipResponseBodyAssertions: false
+ documentation: mintlify
preApplyUnionDiscriminators: true
python:
- version: 0.10.8
+ version: 0.11.3
additionalDependencies:
dev: {}
main: {}
@@ -46,6 +50,7 @@ python:
authors:
- OpenRouter
baseErrorName: OpenRouterError
+ bodyVariantOverloads: false
clientServerStatusCodesAsErrors: true
constFieldCasing: upper
defaultErrorName: OpenRouterDefaultError
@@ -53,12 +58,18 @@ python:
enableCustomCodeRegions: false
enumFormat: union
envVarPrefix: OPENROUTER
+ errorSchemaValidation: true
+ eventStreamClassNames:
+ async: EventStreamAsync
+ sync: EventStream
fixFlags:
asyncPaginationSep2025: true
+ conflictResistantModelImportsFeb2026: false
responseRequiredSep2024: true
flattenGlobalSecurity: true
flattenRequests: true
flatteningOrder: parameters-first
+ forwardCompatibleEnumsByDefault: false
forwardCompatibleUnionsByDefault: tagged-only
imports:
option: openapi
@@ -71,18 +82,25 @@ python:
inferSSEOverload: true
inferUnionDiscriminators: true
inputModelSuffix: input
+ inputTypedDictSuffix: TypedDict
legacyPyright: false
license: Apache-2.0
maxMethodParams: 999
methodArguments: infer-optional-args
+ methodTimeoutArgument: timeout-ms
+ methodTimeoutUnits: milliseconds
moduleName: ""
multipartArrayFormat: legacy
+ optionalDependencies: {}
outputModelSuffix: output
packageManager: uv
packageName: openrouter
preApplyUnionDiscriminators: false
pytestFilterWarnings: []
pytestTimeout: 0
+ rawResponseHelpers: false
responseFormat: flat
+ responseSchemaValidation: true
sseFlatResponse: true
templateVersion: v2
+ useAsyncHooks: false
diff --git a/.speakeasy/in.openapi.yaml b/.speakeasy/in.openapi.yaml
index 187c9ea..11afda5 100644
--- a/.speakeasy/in.openapi.yaml
+++ b/.speakeasy/in.openapi.yaml
@@ -4536,6 +4536,7 @@ components:
- $ref: '#/components/schemas/AdvisorServerTool_OpenRouter'
- $ref: '#/components/schemas/BashServerTool'
- $ref: '#/components/schemas/DatetimeServerTool'
+ - $ref: '#/components/schemas/FilesServerTool'
- $ref: '#/components/schemas/ImageGenerationServerTool_OpenRouter'
- $ref: '#/components/schemas/ChatSearchModelsServerTool'
- $ref: '#/components/schemas/SubagentServerTool_OpenRouter'
@@ -7584,6 +7585,28 @@ components:
- type
- vector_store_ids
type: object
+ FilesServerTool:
+ description: >-
+ OpenRouter built-in server tool: read, write, edit, and list workspace files via the Files API. Requires the
+ `x-openrouter-file-ids: openrouter` request header.
+ example:
+ parameters: {}
+ type: openrouter:files
+ properties:
+ parameters:
+ $ref: '#/components/schemas/FilesServerToolConfig'
+ type:
+ enum:
+ - openrouter:files
+ type: string
+ required:
+ - type
+ type: object
+ FilesServerToolConfig:
+ description: Configuration for the openrouter:files server tool
+ example: {}
+ properties: {}
+ type: object
ForbiddenResponse:
description: Forbidden - Authentication successful but insufficient permissions
example:
@@ -10327,6 +10350,7 @@ components:
- $ref: '#/components/schemas/OutputFusionServerToolItem'
- $ref: '#/components/schemas/OutputAdvisorServerToolItem'
- $ref: '#/components/schemas/OutputSubagentServerToolItem'
+ - $ref: '#/components/schemas/OutputFilesServerToolItem'
- $ref: '#/components/schemas/LocalShellCallItem'
- $ref: '#/components/schemas/LocalShellCallOutputItem'
- $ref: '#/components/schemas/ShellCallItem'
@@ -10901,6 +10925,29 @@ components:
required:
- data
type: object
+ ListWorkspaceMembersResponse:
+ example:
+ data:
+ - created_at: '2025-08-24T10:30:00Z'
+ id: 660e8400-e29b-41d4-a716-446655440000
+ role: member
+ user_id: user_abc123
+ workspace_id: 550e8400-e29b-41d4-a716-446655440000
+ total_count: 1
+ properties:
+ data:
+ description: List of workspace members
+ items:
+ $ref: '#/components/schemas/WorkspaceMember'
+ type: array
+ total_count:
+ description: Total number of members in the workspace
+ example: 5
+ type: integer
+ required:
+ - data
+ - total_count
+ type: object
ListWorkspacesResponse:
example:
data:
@@ -16250,6 +16297,43 @@ components:
- status
- type
type: object
+ OutputFilesServerToolItem:
+ description: An openrouter:files server tool output item
+ example:
+ filename: notes.txt
+ id: fl_tmp_abc123
+ operation: read
+ result: '{"id":"file_abc","filename":"notes.txt","content":"hello"}'
+ status: completed
+ type: openrouter:files
+ properties:
+ error:
+ description: Error message when the file operation failed.
+ type: string
+ file_id:
+ description: The target file id supplied in the tool-call arguments.
+ type: string
+ filename:
+ description: The target filename supplied in the tool-call arguments.
+ type: string
+ id:
+ type: string
+ operation:
+ description: The file operation performed (list, read, write, or edit).
+ type: string
+ result:
+ description: JSON-serialized result of the file operation.
+ type: string
+ status:
+ $ref: '#/components/schemas/ToolCallStatus'
+ type:
+ enum:
+ - openrouter:files
+ type: string
+ required:
+ - status
+ - type
+ type: object
OutputFunctionCallItem:
allOf:
- $ref: '#/components/schemas/OutputItemFunctionCall'
@@ -16702,6 +16786,7 @@ components:
openrouter:datetime: '#/components/schemas/OutputDatetimeItem'
openrouter:experimental__search_models: '#/components/schemas/OutputSearchModelsServerToolItem'
openrouter:file_search: '#/components/schemas/OutputFileSearchServerToolItem'
+ openrouter:files: '#/components/schemas/OutputFilesServerToolItem'
openrouter:fusion: '#/components/schemas/OutputFusionServerToolItem'
openrouter:image_generation: '#/components/schemas/OutputImageGenerationServerToolItem'
openrouter:mcp: '#/components/schemas/OutputMcpServerToolItem'
@@ -16753,6 +16838,7 @@ components:
- $ref: '#/components/schemas/OutputFusionServerToolItem'
- $ref: '#/components/schemas/OutputAdvisorServerToolItem'
- $ref: '#/components/schemas/OutputSubagentServerToolItem'
+ - $ref: '#/components/schemas/OutputFilesServerToolItem'
- $ref: '#/components/schemas/OutputCustomToolCallItem'
OutputItemWebSearchCall:
example:
@@ -19873,6 +19959,7 @@ components:
- $ref: '#/components/schemas/AdvisorServerTool_OpenRouter'
- $ref: '#/components/schemas/SubagentServerTool_OpenRouter'
- $ref: '#/components/schemas/DatetimeServerTool'
+ - $ref: '#/components/schemas/FilesServerTool'
- $ref: '#/components/schemas/FusionServerTool_OpenRouter'
- $ref: '#/components/schemas/ImageGenerationServerTool_OpenRouter'
- $ref: '#/components/schemas/ChatSearchModelsServerTool'
@@ -33959,6 +34046,112 @@ paths:
tags:
- Workspaces
x-speakeasy-name-override: setBudget
+ /workspaces/{id}/members:
+ get:
+ description: >-
+ List all members of a workspace. Returns paginated results. For the default workspace, returns all organization
+ members (implicit membership). [Management key](/docs/guides/overview/auth/management-api-keys) required.
+ operationId: listWorkspaceMembers
+ parameters:
+ - description: The workspace ID (UUID) or slug
+ in: path
+ name: id
+ required: true
+ schema:
+ description: The workspace ID (UUID) or slug
+ example: production
+ minLength: 1
+ type: string
+ - description: Number of records to skip for pagination
+ in: query
+ name: offset
+ required: false
+ schema:
+ description: Number of records to skip for pagination
+ example: 0
+ minimum: 0
+ nullable: true
+ type: integer
+ - description: Maximum number of records to return (max 100)
+ in: query
+ name: limit
+ required: false
+ schema:
+ description: Maximum number of records to return (max 100)
+ example: 50
+ maximum: 100
+ minimum: 1
+ type: integer
+ responses:
+ '200':
+ content:
+ application/json:
+ example:
+ data:
+ - created_at: '2025-08-24T10:30:00Z'
+ id: 660e8400-e29b-41d4-a716-446655440000
+ role: member
+ user_id: user_abc123
+ workspace_id: 550e8400-e29b-41d4-a716-446655440000
+ total_count: 1
+ schema:
+ $ref: '#/components/schemas/ListWorkspaceMembersResponse'
+ description: List of workspace members
+ '401':
+ content:
+ application/json:
+ example:
+ error:
+ code: 401
+ message: Missing Authentication header
+ schema:
+ $ref: '#/components/schemas/UnauthorizedResponse'
+ description: Unauthorized - Authentication required or invalid credentials
+ '403':
+ content:
+ application/json:
+ example:
+ error:
+ code: 403
+ message: Only management keys can perform this operation
+ schema:
+ $ref: '#/components/schemas/ForbiddenResponse'
+ description: Forbidden - Authentication successful but insufficient permissions
+ '404':
+ content:
+ application/json:
+ example:
+ error:
+ code: 404
+ message: Resource not found
+ schema:
+ $ref: '#/components/schemas/NotFoundResponse'
+ description: Not Found - Resource does not exist
+ '500':
+ content:
+ application/json:
+ example:
+ error:
+ code: 500
+ message: Internal Server Error
+ schema:
+ $ref: '#/components/schemas/InternalServerResponse'
+ description: Internal Server Error - Unexpected server error
+ summary: List workspace members
+ tags:
+ - Workspaces
+ x-speakeasy-name-override: listMembers
+ x-speakeasy-pagination:
+ inputs:
+ - in: parameters
+ name: offset
+ type: offset
+ - in: parameters
+ name: limit
+ type: limit
+ outputs:
+ results: $.data
+ type: offsetLimit
/workspaces/{id}/members/add:
post:
description: >-
diff --git a/.speakeasy/out.openapi.yaml b/.speakeasy/out.openapi.yaml
index e9a1b12..dfb21f3 100644
--- a/.speakeasy/out.openapi.yaml
+++ b/.speakeasy/out.openapi.yaml
@@ -4532,6 +4532,7 @@ components:
- $ref: '#/components/schemas/AdvisorServerTool_OpenRouter'
- $ref: '#/components/schemas/BashServerTool'
- $ref: '#/components/schemas/DatetimeServerTool'
+ - $ref: '#/components/schemas/FilesServerTool'
- $ref: '#/components/schemas/ImageGenerationServerTool_OpenRouter'
- $ref: '#/components/schemas/ChatSearchModelsServerTool'
- $ref: '#/components/schemas/SubagentServerTool_OpenRouter'
@@ -7555,6 +7556,27 @@ components:
- type
- vector_store_ids
type: object
+ FilesServerTool:
+ description: >-
+ OpenRouter built-in server tool: read, write, edit, and list workspace files via the Files API. Requires the `x-openrouter-file-ids: openrouter` request header.
+ example:
+ parameters: {}
+ type: openrouter:files
+ properties:
+ parameters:
+ $ref: '#/components/schemas/FilesServerToolConfig'
+ type:
+ enum:
+ - openrouter:files
+ type: string
+ required:
+ - type
+ type: object
+ FilesServerToolConfig:
+ description: Configuration for the openrouter:files server tool
+ example: {}
+ properties: {}
+ type: object
ForbiddenResponse:
description: Forbidden - Authentication successful but insufficient permissions
example:
@@ -10277,6 +10299,7 @@ components:
- $ref: '#/components/schemas/OutputFusionServerToolItem'
- $ref: '#/components/schemas/OutputAdvisorServerToolItem'
- $ref: '#/components/schemas/OutputSubagentServerToolItem'
+ - $ref: '#/components/schemas/OutputFilesServerToolItem'
- $ref: '#/components/schemas/LocalShellCallItem'
- $ref: '#/components/schemas/LocalShellCallOutputItem'
- $ref: '#/components/schemas/ShellCallItem'
@@ -10850,6 +10873,29 @@ components:
required:
- data
type: object
+ ListWorkspaceMembersResponse:
+ example:
+ data:
+ - created_at: '2025-08-24T10:30:00Z'
+ id: 660e8400-e29b-41d4-a716-446655440000
+ role: member
+ user_id: user_abc123
+ workspace_id: 550e8400-e29b-41d4-a716-446655440000
+ total_count: 1
+ properties:
+ data:
+ description: List of workspace members
+ items:
+ $ref: '#/components/schemas/WorkspaceMember'
+ type: array
+ total_count:
+ description: Total number of members in the workspace
+ example: 5
+ type: integer
+ required:
+ - data
+ - total_count
+ type: object
ListWorkspacesResponse:
example:
data:
@@ -16169,6 +16215,43 @@ components:
- status
- type
type: object
+ OutputFilesServerToolItem:
+ description: An openrouter:files server tool output item
+ example:
+ filename: notes.txt
+ id: fl_tmp_abc123
+ operation: read
+ result: '{"id":"file_abc","filename":"notes.txt","content":"hello"}'
+ status: completed
+ type: openrouter:files
+ properties:
+ error:
+ description: Error message when the file operation failed.
+ type: string
+ file_id:
+ description: The target file id supplied in the tool-call arguments.
+ type: string
+ filename:
+ description: The target filename supplied in the tool-call arguments.
+ type: string
+ id:
+ type: string
+ operation:
+ description: The file operation performed (list, read, write, or edit).
+ type: string
+ result:
+ description: JSON-serialized result of the file operation.
+ type: string
+ status:
+ $ref: '#/components/schemas/ToolCallStatus'
+ type:
+ enum:
+ - openrouter:files
+ type: string
+ required:
+ - status
+ - type
+ type: object
OutputFunctionCallItem:
allOf:
- $ref: '#/components/schemas/OutputItemFunctionCall'
@@ -16617,6 +16700,7 @@ components:
openrouter:datetime: '#/components/schemas/OutputDatetimeItem'
openrouter:experimental__search_models: '#/components/schemas/OutputSearchModelsServerToolItem'
openrouter:file_search: '#/components/schemas/OutputFileSearchServerToolItem'
+ openrouter:files: '#/components/schemas/OutputFilesServerToolItem'
openrouter:fusion: '#/components/schemas/OutputFusionServerToolItem'
openrouter:image_generation: '#/components/schemas/OutputImageGenerationServerToolItem'
openrouter:mcp: '#/components/schemas/OutputMcpServerToolItem'
@@ -16668,6 +16752,7 @@ components:
- $ref: '#/components/schemas/OutputFusionServerToolItem'
- $ref: '#/components/schemas/OutputAdvisorServerToolItem'
- $ref: '#/components/schemas/OutputSubagentServerToolItem'
+ - $ref: '#/components/schemas/OutputFilesServerToolItem'
- $ref: '#/components/schemas/OutputCustomToolCallItem'
OutputItemWebSearchCall:
example:
@@ -19755,6 +19840,7 @@ components:
- $ref: '#/components/schemas/AdvisorServerTool_OpenRouter'
- $ref: '#/components/schemas/SubagentServerTool_OpenRouter'
- $ref: '#/components/schemas/DatetimeServerTool'
+ - $ref: '#/components/schemas/FilesServerTool'
- $ref: '#/components/schemas/FusionServerTool_OpenRouter'
- $ref: '#/components/schemas/ImageGenerationServerTool_OpenRouter'
- $ref: '#/components/schemas/ChatSearchModelsServerTool'
@@ -33884,6 +33970,115 @@ paths:
- $ref: "#/components/parameters/AppIdentifier"
- $ref: "#/components/parameters/AppDisplayName"
- $ref: "#/components/parameters/AppCategories"
+ /workspaces/{id}/members:
+ get:
+ description: >-
+ List all members of a workspace. Returns paginated results. For the default workspace, returns all organization members (implicit membership). [Management key](/docs/guides/overview/auth/management-api-keys) required.
+ operationId: listWorkspaceMembers
+ parameters:
+ - description: The workspace ID (UUID) or slug
+ in: path
+ name: id
+ required: true
+ schema:
+ description: The workspace ID (UUID) or slug
+ example: production
+ minLength: 1
+ type: string
+ - description: Number of records to skip for pagination
+ in: query
+ name: offset
+ required: false
+ schema:
+ description: Number of records to skip for pagination
+ example: 0
+ minimum: 0
+ nullable: false
+ type: integer
+ - description: Maximum number of records to return (max 100)
+ in: query
+ name: limit
+ required: false
+ schema:
+ description: Maximum number of records to return (max 100)
+ example: 50
+ maximum: 100
+ minimum: 1
+ type: integer
+ responses:
+ '200':
+ content:
+ application/json:
+ example:
+ data:
+ - created_at: '2025-08-24T10:30:00Z'
+ id: 660e8400-e29b-41d4-a716-446655440000
+ role: member
+ user_id: user_abc123
+ workspace_id: 550e8400-e29b-41d4-a716-446655440000
+ total_count: 1
+ schema:
+ $ref: '#/components/schemas/ListWorkspaceMembersResponse'
+ description: List of workspace members
+ '401':
+ content:
+ application/json:
+ example:
+ error:
+ code: 401
+ message: Missing Authentication header
+ schema:
+ $ref: '#/components/schemas/UnauthorizedResponse'
+ description: Unauthorized - Authentication required or invalid credentials
+ '403':
+ content:
+ application/json:
+ example:
+ error:
+ code: 403
+ message: Only management keys can perform this operation
+ schema:
+ $ref: '#/components/schemas/ForbiddenResponse'
+ description: Forbidden - Authentication successful but insufficient permissions
+ '404':
+ content:
+ application/json:
+ example:
+ error:
+ code: 404
+ message: Resource not found
+ schema:
+ $ref: '#/components/schemas/NotFoundResponse'
+ description: Not Found - Resource does not exist
+ '500':
+ content:
+ application/json:
+ example:
+ error:
+ code: 500
+ message: Internal Server Error
+ schema:
+ $ref: '#/components/schemas/InternalServerResponse'
+ description: Internal Server Error - Unexpected server error
+ summary: List workspace members
+ tags:
+ - Workspaces
+ x-speakeasy-name-override: listMembers
+ x-speakeasy-pagination:
+ inputs:
+ - in: parameters
+ name: offset
+ type: offset
+ - in: parameters
+ name: limit
+ type: limit
+ outputs:
+ results: $.data
+ type: offsetLimit
+ parameters:
+ - $ref: "#/components/parameters/AppIdentifier"
+ - $ref: "#/components/parameters/AppDisplayName"
+ - $ref: "#/components/parameters/AppCategories"
/workspaces/{id}/members/add:
post:
description: >-
diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock
index 2183daa..2b0692f 100644
--- a/.speakeasy/workflow.lock
+++ b/.speakeasy/workflow.lock
@@ -1,24 +1,23 @@
-speakeasyVersion: 1.680.0
+speakeasyVersion: 1.787.0
sources:
OpenRouter API:
sourceNamespace: open-router-chat-completions-api
- sourceRevisionDigest: sha256:ed6981b24a0f8df827afac0f83d7dae4d8f7df331ae6e72664e03800cb7a0244
- sourceBlobDigest: sha256:5961e537bd3160eb3f541232a5e7cb43704fed5e9ce76b342c08f6c52d4fefe9
+ sourceRevisionDigest: sha256:5381277309ba2f3a4a3e0719b00425be3f93c3103717316e6625bd5caf15b277
+ sourceBlobDigest: sha256:def8d29511aca594e11c3367b7013a64c8733cc8050e23deae98d9cc5df55c93
tags:
- latest
- - speakeasy-sdk-regen-1782660460
- 1.0.0
targets:
open-router:
source: OpenRouter API
sourceNamespace: open-router-chat-completions-api
- sourceRevisionDigest: sha256:ed6981b24a0f8df827afac0f83d7dae4d8f7df331ae6e72664e03800cb7a0244
- sourceBlobDigest: sha256:5961e537bd3160eb3f541232a5e7cb43704fed5e9ce76b342c08f6c52d4fefe9
+ sourceRevisionDigest: sha256:5381277309ba2f3a4a3e0719b00425be3f93c3103717316e6625bd5caf15b277
+ sourceBlobDigest: sha256:def8d29511aca594e11c3367b7013a64c8733cc8050e23deae98d9cc5df55c93
codeSamplesNamespace: open-router-python-code-samples
- codeSamplesRevisionDigest: sha256:d3f20480ea1c0bcb8d872ae696b7a8b2c16d1469ee95b6df12b03b7004ce1c9c
+ codeSamplesRevisionDigest: sha256:18d6fc594c9338480cbc65842c3f276ad0a58f2ceda311aff3d70ea33dbd6e6d
workflow:
workflowVersion: 1.0.0
- speakeasyVersion: 1.680.0
+ speakeasyVersion: 1.787.0
sources:
OpenRouter API:
inputs:
diff --git a/.speakeasy/workflow.yaml b/.speakeasy/workflow.yaml
index 3e9961b..36493c1 100644
--- a/.speakeasy/workflow.yaml
+++ b/.speakeasy/workflow.yaml
@@ -1,5 +1,5 @@
workflowVersion: 1.0.0
-speakeasyVersion: 1.680.0
+speakeasyVersion: 1.787.0
sources:
OpenRouter API:
inputs:
diff --git a/README-PYPI.md b/README-PYPI.md
index 7af3343..9fdbe27 100644
--- a/README-PYPI.md
+++ b/README-PYPI.md
@@ -55,7 +55,7 @@ It's also possible to write a standalone Python script without needing to set up
```python
#!/usr/bin/env -S uv run --script
# /// script
-# requires-python = ">=3.9"
+# requires-python = ">=3.10"
# dependencies = [
# "openrouter",
# ]
diff --git a/README.md b/README.md
index 7af3343..9fdbe27 100644
--- a/README.md
+++ b/README.md
@@ -55,7 +55,7 @@ It's also possible to write a standalone Python script without needing to set up
```python
#!/usr/bin/env -S uv run --script
# /// script
-# requires-python = ">=3.9"
+# requires-python = ">=3.10"
# dependencies = [
# "openrouter",
# ]
diff --git a/RELEASES.md b/RELEASES.md
index c35ed2f..cb58658 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -108,4 +108,34 @@ Based on:
### Generated
- [python v0.10.8] .
### Releases
-- [PyPI v0.10.8] https://pypi.org/project/openrouter/0.10.8 - .
\ No newline at end of file
+- [PyPI v0.10.8] https://pypi.org/project/openrouter/0.10.8 - .
+
+## 2026-07-01 16:13:11
+### Changes
+Based on:
+- OpenAPI Doc
+- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v0.11.1] .
+### Releases
+- [PyPI v0.11.1] https://pypi.org/project/openrouter/0.11.1 - .
+
+## 2026-07-03 15:05:16
+### Changes
+Based on:
+- OpenAPI Doc
+- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v0.11.2] .
+### Releases
+- [PyPI v0.11.2] https://pypi.org/project/openrouter/0.11.2 - .
+
+## 2026-07-03 19:54:08
+### Changes
+Based on:
+- OpenAPI Doc
+- Speakeasy CLI 1.787.0 (2.914.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [python v0.11.3] .
+### Releases
+- [PyPI v0.11.3] https://pypi.org/project/openrouter/0.11.3 - .
\ No newline at end of file
diff --git a/docs/components/aabenchmarkentry.mdx b/docs/components/aabenchmarkentry.mdx
new file mode 100644
index 0000000..172d964
--- /dev/null
+++ b/docs/components/aabenchmarkentry.mdx
@@ -0,0 +1,14 @@
+---
+title: "AABenchmarkEntry"
+---
+
+Artificial Analysis benchmark index scores.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- |
+| `agentic_index` | *Nullable[float]* | :heavy_check_mark: | Artificial Analysis Agentic Index score | 55.8 |
+| `coding_index` | *Nullable[float]* | :heavy_check_mark: | Artificial Analysis Coding Index score | 63.2 |
+| `intelligence_index` | *Nullable[float]* | :heavy_check_mark: | Artificial Analysis Intelligence Index score | 71.4 |
\ No newline at end of file
diff --git a/docs/components/action.mdx b/docs/components/action.mdx
new file mode 100644
index 0000000..50cdd41
--- /dev/null
+++ b/docs/components/action.mdx
@@ -0,0 +1,24 @@
+---
+title: "Action"
+---
+
+## Supported Types
+
+### `components.OutputWebSearchCallItemActionSearch`
+
+```python
+value: components.OutputWebSearchCallItemActionSearch = /* values here */
+```
+
+### `components.ActionOpenPage`
+
+```python
+value: components.ActionOpenPage = /* values here */
+```
+
+### `components.ActionFindInPage`
+
+```python
+value: components.ActionFindInPage = /* values here */
+```
+
diff --git a/docs/components/actionenum.mdx b/docs/components/actionenum.mdx
new file mode 100644
index 0000000..9bed0a5
--- /dev/null
+++ b/docs/components/actionenum.mdx
@@ -0,0 +1,21 @@
+---
+title: "ActionEnum"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ActionEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ActionEnum = "read"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"read"`
+- `"write"`
+- `"delete"`
diff --git a/docs/components/actionfindinpage.mdx b/docs/components/actionfindinpage.mdx
new file mode 100644
index 0000000..59aaf44
--- /dev/null
+++ b/docs/components/actionfindinpage.mdx
@@ -0,0 +1,11 @@
+---
+title: "ActionFindInPage"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `pattern` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.TypeFindInPage](../components/typefindinpage.mdx) | :heavy_check_mark: | N/A |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/actionopenpage.mdx b/docs/components/actionopenpage.mdx
new file mode 100644
index 0000000..6bf4cb4
--- /dev/null
+++ b/docs/components/actionopenpage.mdx
@@ -0,0 +1,10 @@
+---
+title: "ActionOpenPage"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `type` | [components.TypeOpenPage](../components/typeopenpage.mdx) | :heavy_check_mark: | N/A |
+| `url` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/actiontypesearch.mdx b/docs/components/actiontypesearch.mdx
new file mode 100644
index 0000000..dc49d75
--- /dev/null
+++ b/docs/components/actiontypesearch.mdx
@@ -0,0 +1,15 @@
+---
+title: "ActionTypeSearch"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ActionTypeSearch
+value: ActionTypeSearch = "search"
+```
+
+
+## Values
+
+- `"search"`
diff --git a/docs/components/activityitem.md b/docs/components/activityitem.mdx
similarity index 99%
rename from docs/components/activityitem.md
rename to docs/components/activityitem.mdx
index 9cbfb1a..0910645 100644
--- a/docs/components/activityitem.md
+++ b/docs/components/activityitem.mdx
@@ -1,5 +1,6 @@
-# ActivityItem
-
+---
+title: "ActivityItem"
+---
## Fields
diff --git a/docs/components/activityresponse.mdx b/docs/components/activityresponse.mdx
new file mode 100644
index 0000000..6edb98e
--- /dev/null
+++ b/docs/components/activityresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ActivityResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
+| `data` | List[[components.ActivityItem](../components/activityitem.mdx)] | :heavy_check_mark: | List of activity items |
\ No newline at end of file
diff --git a/docs/components/advisornestedtool.mdx b/docs/components/advisornestedtool.mdx
new file mode 100644
index 0000000..ef54767
--- /dev/null
+++ b/docs/components/advisornestedtool.mdx
@@ -0,0 +1,14 @@
+---
+title: "AdvisorNestedTool"
+---
+
+A tool made available to the advisor sub-agent. Only OpenRouter server tools (e.g. openrouter:web_search) are supported; function tools are rejected because the advisor has no way to execute them. The advisor tool may not list itself.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| `parameters` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
+| `type` | *str* | :heavy_check_mark: | N/A | |
+| `__pydantic_extra__` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | \{
"type": "openrouter:web_search"
} |
\ No newline at end of file
diff --git a/docs/components/advisorreasoning.mdx b/docs/components/advisorreasoning.mdx
new file mode 100644
index 0000000..b33ef53
--- /dev/null
+++ b/docs/components/advisorreasoning.mdx
@@ -0,0 +1,13 @@
+---
+title: "AdvisorReasoning"
+---
+
+Reasoning configuration forwarded to the advisor call. Use this to control reasoning effort and token budget for models that support extended thinking.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `effort` | [Optional[components.AdvisorReasoningEffort]](../components/advisorreasoningeffort.mdx) | :heavy_minus_sign: | Reasoning effort level for the advisor call. |
+| `max_tokens` | *Optional[int]* | :heavy_minus_sign: | Maximum number of reasoning tokens the advisor may use. |
\ No newline at end of file
diff --git a/docs/components/advisorreasoningeffort.mdx b/docs/components/advisorreasoningeffort.mdx
new file mode 100644
index 0000000..aa427b3
--- /dev/null
+++ b/docs/components/advisorreasoningeffort.mdx
@@ -0,0 +1,27 @@
+---
+title: "AdvisorReasoningEffort"
+---
+
+Reasoning effort level for the advisor call.
+
+## Example Usage
+
+```python
+from openrouter.components import AdvisorReasoningEffort
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: AdvisorReasoningEffort = "max"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"max"`
+- `"xhigh"`
+- `"high"`
+- `"medium"`
+- `"low"`
+- `"minimal"`
+- `"none"`
diff --git a/docs/components/advisorservertoolconfig.mdx b/docs/components/advisorservertoolconfig.mdx
new file mode 100644
index 0000000..123fe87
--- /dev/null
+++ b/docs/components/advisorservertoolconfig.mdx
@@ -0,0 +1,21 @@
+---
+title: "AdvisorServerToolConfig"
+---
+
+Configuration for one openrouter:advisor server tool entry.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `forward_transcript` | *Optional[bool]* | :heavy_minus_sign: | When true, the full parent conversation is forwarded to the advisor so it sees the same context the executor does (and the tool-call `prompt`, if given, is appended as a final user turn). When false or omitted, the advisor receives only the `prompt` the executor passes in the tool call. | false |
+| `instructions` | *Optional[str]* | :heavy_minus_sign: | System instructions for the advisor sub-agent. When omitted, the advisor responds with no system prompt of its own. | You are a senior staff engineer. Give a focused, decisive plan. |
+| `max_completion_tokens` | *Optional[int]* | :heavy_minus_sign: | Maximum number of output tokens (including reasoning) the advisor may produce. When omitted, the provider's default applies. | 2048 |
+| `max_tool_calls` | *Optional[int]* | :heavy_minus_sign: | Maximum number of tool-calling steps the advisor sub-agent may take during its agentic loop. Capped at 25. Only relevant when the advisor is given tools. | 5 |
+| `model` | *Optional[str]* | :heavy_minus_sign: | Slug of the advisor model to consult (any OpenRouter model). When omitted, the executor can choose it via the tool call's `model` argument; if neither is set, the model from the outer API request is used. The advisor tool itself cannot be the advisor model. | ~anthropic/claude-opus-latest |
+| `name` | *Optional[str]* | :heavy_minus_sign: | Optional name for this advisor. The model sees one tool per named advisor (and one default for an unnamed entry). Names must be unique across advisor entries. Letters, digits, spaces, underscores, and dashes; trimmed; 1–64 chars. | reviewer |
+| `reasoning` | [Optional[components.AdvisorReasoning]](../components/advisorreasoning.mdx) | :heavy_minus_sign: | Reasoning configuration forwarded to the advisor call. Use this to control reasoning effort and token budget for models that support extended thinking. | \{
"effort": "high"
} |
+| `stream` | *Optional[bool]* | :heavy_minus_sign: | When true, the advisor's advice streams incrementally as it is produced. In the Responses API this emits `response.output_text.delta` events targeting the advisor output item; the final `advice` field is still set on the completed item. Has no effect on the Chat Completions API (where the advice arrives only as the final tool result). When false or omitted, the advice arrives only as the final result. | false |
+| `temperature` | *Optional[float]* | :heavy_minus_sign: | Sampling temperature forwarded to the advisor call. When omitted, the provider's default applies. | 0.7 |
+| `tools` | List[[components.AdvisorNestedTool](../components/advisornestedtool.mdx)] | :heavy_minus_sign: | Tools the advisor sub-agent may use while forming its advice. The advisor runs as an agentic sub-agent over these tools, then returns its text. Only OpenRouter server tools are supported — function tools are rejected — and the list must not include the advisor tool itself. | |
\ No newline at end of file
diff --git a/docs/components/advisorservertoolopenrouter.mdx b/docs/components/advisorservertoolopenrouter.mdx
new file mode 100644
index 0000000..928a0b8
--- /dev/null
+++ b/docs/components/advisorservertoolopenrouter.mdx
@@ -0,0 +1,13 @@
+---
+title: "AdvisorServerToolOpenRouter"
+---
+
+OpenRouter built-in server tool: consults a higher-intelligence advisor model (any OpenRouter model) for guidance mid-generation and returns its response. The advisor may run as a sub-agent with its own tools. Include multiple entries to offer several named advisors; at most one entry may omit `name` to act as the default advisor.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `parameters` | [Optional[components.AdvisorServerToolConfig]](../components/advisorservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for one openrouter:advisor server tool entry. | \{
"model": "~anthropic/claude-opus-latest",
"name": "reviewer"
} |
+| `type` | [components.AdvisorServerToolOpenRouterType](../components/advisorservertoolopenroutertype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/advisorservertoolopenroutertype.mdx b/docs/components/advisorservertoolopenroutertype.mdx
new file mode 100644
index 0000000..95bf97c
--- /dev/null
+++ b/docs/components/advisorservertoolopenroutertype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AdvisorServerToolOpenRouterType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AdvisorServerToolOpenRouterType
+value: AdvisorServerToolOpenRouterType = "openrouter:advisor"
+```
+
+
+## Values
+
+- `"openrouter:advisor"`
diff --git a/docs/components/allowedtools.mdx b/docs/components/allowedtools.mdx
new file mode 100644
index 0000000..14377fe
--- /dev/null
+++ b/docs/components/allowedtools.mdx
@@ -0,0 +1,10 @@
+---
+title: "AllowedTools"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `read_only` | *Optional[bool]* | :heavy_minus_sign: | N/A |
+| `tool_names` | List[*str*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/allowedtoolsunion.mdx b/docs/components/allowedtoolsunion.mdx
new file mode 100644
index 0000000..239bb48
--- /dev/null
+++ b/docs/components/allowedtoolsunion.mdx
@@ -0,0 +1,24 @@
+---
+title: "AllowedToolsUnion"
+---
+
+## Supported Types
+
+### `List[str]`
+
+```python
+value: List[str] = /* values here */
+```
+
+### `components.AllowedTools`
+
+```python
+value: components.AllowedTools = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/always.mdx b/docs/components/always.mdx
new file mode 100644
index 0000000..539af0b
--- /dev/null
+++ b/docs/components/always.mdx
@@ -0,0 +1,9 @@
+---
+title: "Always"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `tool_names` | List[*str*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/annotationaddedevent.mdx b/docs/components/annotationaddedevent.mdx
new file mode 100644
index 0000000..d05a062
--- /dev/null
+++ b/docs/components/annotationaddedevent.mdx
@@ -0,0 +1,18 @@
+---
+title: "AnnotationAddedEvent"
+---
+
+Event emitted when a text annotation is added to output
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
+| `annotation` | [components.OpenAIResponsesAnnotation](../components/openairesponsesannotation.mdx) | :heavy_check_mark: | N/A | \{
"file_id": "file-abc123",
"filename": "research_paper.pdf",
"index": 0,
"type": "file_citation"
} |
+| `annotation_index` | *int* | :heavy_check_mark: | N/A | |
+| `content_index` | *int* | :heavy_check_mark: | N/A | |
+| `item_id` | *str* | :heavy_check_mark: | N/A | |
+| `output_index` | *int* | :heavy_check_mark: | N/A | |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A | |
+| `type` | [components.AnnotationAddedEventType](../components/annotationaddedeventtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/annotationaddedeventtype.mdx b/docs/components/annotationaddedeventtype.mdx
new file mode 100644
index 0000000..ad9a606
--- /dev/null
+++ b/docs/components/annotationaddedeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnnotationAddedEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnnotationAddedEventType
+value: AnnotationAddedEventType = "response.output_text.annotation.added"
+```
+
+
+## Values
+
+- `"response.output_text.annotation.added"`
diff --git a/docs/components/anthropicadvisormessageusageiteration.mdx b/docs/components/anthropicadvisormessageusageiteration.mdx
new file mode 100644
index 0000000..0d71d36
--- /dev/null
+++ b/docs/components/anthropicadvisormessageusageiteration.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicAdvisorMessageUsageIteration"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `cache_creation` | [OptionalNullable[components.AnthropicIterationCacheCreation]](../components/anthropiciterationcachecreation.mdx) | :heavy_minus_sign: | N/A | \{
"ephemeral_1h_input_tokens": 0,
"ephemeral_5m_input_tokens": 0
} |
+| `cache_creation_input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `cache_read_input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `output_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `model` | *str* | :heavy_check_mark: | N/A | |
+| `type` | [components.AnthropicAdvisorMessageUsageIterationType](../components/anthropicadvisormessageusageiterationtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/anthropicadvisormessageusageiterationtype.mdx b/docs/components/anthropicadvisormessageusageiterationtype.mdx
new file mode 100644
index 0000000..c13a23d
--- /dev/null
+++ b/docs/components/anthropicadvisormessageusageiterationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicAdvisorMessageUsageIterationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicAdvisorMessageUsageIterationType
+value: AnthropicAdvisorMessageUsageIterationType = "advisor_message"
+```
+
+
+## Values
+
+- `"advisor_message"`
diff --git a/docs/components/anthropicallowedcallers.mdx b/docs/components/anthropicallowedcallers.mdx
new file mode 100644
index 0000000..8cb662d
--- /dev/null
+++ b/docs/components/anthropicallowedcallers.mdx
@@ -0,0 +1,21 @@
+---
+title: "AnthropicAllowedCallers"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicAllowedCallers
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: AnthropicAllowedCallers = "direct"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"direct"`
+- `"code_execution_20250825"`
+- `"code_execution_20260120"`
diff --git a/docs/components/anthropicbase64imagesource.mdx b/docs/components/anthropicbase64imagesource.mdx
new file mode 100644
index 0000000..31e75cf
--- /dev/null
+++ b/docs/components/anthropicbase64imagesource.mdx
@@ -0,0 +1,11 @@
+---
+title: "AnthropicBase64ImageSource"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `data` | *str* | :heavy_check_mark: | N/A | |
+| `media_type` | [components.AnthropicImageMimeType](../components/anthropicimagemimetype.mdx) | :heavy_check_mark: | N/A | image/jpeg |
+| `type` | [components.AnthropicBase64ImageSourceType](../components/anthropicbase64imagesourcetype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/anthropicbase64imagesourcetype.mdx b/docs/components/anthropicbase64imagesourcetype.mdx
new file mode 100644
index 0000000..9aa0663
--- /dev/null
+++ b/docs/components/anthropicbase64imagesourcetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicBase64ImageSourceType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicBase64ImageSourceType
+value: AnthropicBase64ImageSourceType = "base64"
+```
+
+
+## Values
+
+- `"base64"`
diff --git a/docs/components/anthropicbase64pdfsource.mdx b/docs/components/anthropicbase64pdfsource.mdx
new file mode 100644
index 0000000..40f0426
--- /dev/null
+++ b/docs/components/anthropicbase64pdfsource.mdx
@@ -0,0 +1,11 @@
+---
+title: "AnthropicBase64PdfSource"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `data` | *str* | :heavy_check_mark: | N/A |
+| `media_type` | [components.AnthropicBase64PdfSourceMediaType](../components/anthropicbase64pdfsourcemediatype.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.AnthropicBase64PdfSourceType](../components/anthropicbase64pdfsourcetype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicbase64pdfsourcemediatype.mdx b/docs/components/anthropicbase64pdfsourcemediatype.mdx
new file mode 100644
index 0000000..d20725c
--- /dev/null
+++ b/docs/components/anthropicbase64pdfsourcemediatype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicBase64PdfSourceMediaType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicBase64PdfSourceMediaType
+value: AnthropicBase64PdfSourceMediaType = "application/pdf"
+```
+
+
+## Values
+
+- `"application/pdf"`
diff --git a/docs/components/anthropicbase64pdfsourcetype.mdx b/docs/components/anthropicbase64pdfsourcetype.mdx
new file mode 100644
index 0000000..44deb61
--- /dev/null
+++ b/docs/components/anthropicbase64pdfsourcetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicBase64PdfSourceType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicBase64PdfSourceType
+value: AnthropicBase64PdfSourceType = "base64"
+```
+
+
+## Values
+
+- `"base64"`
diff --git a/docs/components/anthropiccachecontroldirective.mdx b/docs/components/anthropiccachecontroldirective.mdx
new file mode 100644
index 0000000..5f75598
--- /dev/null
+++ b/docs/components/anthropiccachecontroldirective.mdx
@@ -0,0 +1,13 @@
+---
+title: "AnthropicCacheControlDirective"
+---
+
+Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `ttl` | [Optional[components.AnthropicCacheControlTTL]](../components/anthropiccachecontrolttl.mdx) | :heavy_minus_sign: | N/A | 5m |
+| `type` | [components.AnthropicCacheControlDirectiveType](../components/anthropiccachecontroldirectivetype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/anthropiccachecontroldirectivetype.mdx b/docs/components/anthropiccachecontroldirectivetype.mdx
new file mode 100644
index 0000000..5b35ca5
--- /dev/null
+++ b/docs/components/anthropiccachecontroldirectivetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicCacheControlDirectiveType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicCacheControlDirectiveType
+value: AnthropicCacheControlDirectiveType = "ephemeral"
+```
+
+
+## Values
+
+- `"ephemeral"`
diff --git a/docs/components/anthropiccachecontrolttl.mdx b/docs/components/anthropiccachecontrolttl.mdx
new file mode 100644
index 0000000..bd3e799
--- /dev/null
+++ b/docs/components/anthropiccachecontrolttl.mdx
@@ -0,0 +1,20 @@
+---
+title: "AnthropicCacheControlTTL"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicCacheControlTTL
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: AnthropicCacheControlTTL = "5m"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"5m"`
+- `"1h"`
diff --git a/docs/components/anthropiccitationcharlocationparam.mdx b/docs/components/anthropiccitationcharlocationparam.mdx
new file mode 100644
index 0000000..5a68da5
--- /dev/null
+++ b/docs/components/anthropiccitationcharlocationparam.mdx
@@ -0,0 +1,14 @@
+---
+title: "AnthropicCitationCharLocationParam"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `cited_text` | *str* | :heavy_check_mark: | N/A |
+| `document_index` | *int* | :heavy_check_mark: | N/A |
+| `document_title` | *Nullable[str]* | :heavy_check_mark: | N/A |
+| `end_char_index` | *int* | :heavy_check_mark: | N/A |
+| `start_char_index` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.AnthropicCitationCharLocationParamType](../components/anthropiccitationcharlocationparamtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropiccitationcharlocationparamtype.mdx b/docs/components/anthropiccitationcharlocationparamtype.mdx
new file mode 100644
index 0000000..b4a606b
--- /dev/null
+++ b/docs/components/anthropiccitationcharlocationparamtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicCitationCharLocationParamType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicCitationCharLocationParamType
+value: AnthropicCitationCharLocationParamType = "char_location"
+```
+
+
+## Values
+
+- `"char_location"`
diff --git a/docs/components/anthropiccitationcontentblocklocationparam.mdx b/docs/components/anthropiccitationcontentblocklocationparam.mdx
new file mode 100644
index 0000000..b0353d9
--- /dev/null
+++ b/docs/components/anthropiccitationcontentblocklocationparam.mdx
@@ -0,0 +1,14 @@
+---
+title: "AnthropicCitationContentBlockLocationParam"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `cited_text` | *str* | :heavy_check_mark: | N/A |
+| `document_index` | *int* | :heavy_check_mark: | N/A |
+| `document_title` | *Nullable[str]* | :heavy_check_mark: | N/A |
+| `end_block_index` | *int* | :heavy_check_mark: | N/A |
+| `start_block_index` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.AnthropicCitationContentBlockLocationParamType](../components/anthropiccitationcontentblocklocationparamtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropiccitationcontentblocklocationparamtype.mdx b/docs/components/anthropiccitationcontentblocklocationparamtype.mdx
new file mode 100644
index 0000000..7c3d03d
--- /dev/null
+++ b/docs/components/anthropiccitationcontentblocklocationparamtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicCitationContentBlockLocationParamType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicCitationContentBlockLocationParamType
+value: AnthropicCitationContentBlockLocationParamType = "content_block_location"
+```
+
+
+## Values
+
+- `"content_block_location"`
diff --git a/docs/components/anthropiccitationpagelocationparam.mdx b/docs/components/anthropiccitationpagelocationparam.mdx
new file mode 100644
index 0000000..137db69
--- /dev/null
+++ b/docs/components/anthropiccitationpagelocationparam.mdx
@@ -0,0 +1,14 @@
+---
+title: "AnthropicCitationPageLocationParam"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `cited_text` | *str* | :heavy_check_mark: | N/A |
+| `document_index` | *int* | :heavy_check_mark: | N/A |
+| `document_title` | *Nullable[str]* | :heavy_check_mark: | N/A |
+| `end_page_number` | *int* | :heavy_check_mark: | N/A |
+| `start_page_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.AnthropicCitationPageLocationParamType](../components/anthropiccitationpagelocationparamtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropiccitationpagelocationparamtype.mdx b/docs/components/anthropiccitationpagelocationparamtype.mdx
new file mode 100644
index 0000000..ebe0335
--- /dev/null
+++ b/docs/components/anthropiccitationpagelocationparamtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicCitationPageLocationParamType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicCitationPageLocationParamType
+value: AnthropicCitationPageLocationParamType = "page_location"
+```
+
+
+## Values
+
+- `"page_location"`
diff --git a/docs/components/anthropiccitationsearchresultlocation.mdx b/docs/components/anthropiccitationsearchresultlocation.mdx
new file mode 100644
index 0000000..4766fca
--- /dev/null
+++ b/docs/components/anthropiccitationsearchresultlocation.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicCitationSearchResultLocation"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `cited_text` | *str* | :heavy_check_mark: | N/A |
+| `end_block_index` | *int* | :heavy_check_mark: | N/A |
+| `search_result_index` | *int* | :heavy_check_mark: | N/A |
+| `source` | *str* | :heavy_check_mark: | N/A |
+| `start_block_index` | *int* | :heavy_check_mark: | N/A |
+| `title` | *Nullable[str]* | :heavy_check_mark: | N/A |
+| `type` | [components.AnthropicCitationSearchResultLocationType](../components/anthropiccitationsearchresultlocationtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropiccitationsearchresultlocationtype.mdx b/docs/components/anthropiccitationsearchresultlocationtype.mdx
new file mode 100644
index 0000000..096cc0d
--- /dev/null
+++ b/docs/components/anthropiccitationsearchresultlocationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicCitationSearchResultLocationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicCitationSearchResultLocationType
+value: AnthropicCitationSearchResultLocationType = "search_result_location"
+```
+
+
+## Values
+
+- `"search_result_location"`
diff --git a/docs/components/anthropiccitationwebsearchresultlocation.mdx b/docs/components/anthropiccitationwebsearchresultlocation.mdx
new file mode 100644
index 0000000..b03268f
--- /dev/null
+++ b/docs/components/anthropiccitationwebsearchresultlocation.mdx
@@ -0,0 +1,13 @@
+---
+title: "AnthropicCitationWebSearchResultLocation"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `cited_text` | *str* | :heavy_check_mark: | N/A |
+| `encrypted_index` | *str* | :heavy_check_mark: | N/A |
+| `title` | *Nullable[str]* | :heavy_check_mark: | N/A |
+| `type` | [components.AnthropicCitationWebSearchResultLocationType](../components/anthropiccitationwebsearchresultlocationtype.mdx) | :heavy_check_mark: | N/A |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropiccitationwebsearchresultlocationtype.mdx b/docs/components/anthropiccitationwebsearchresultlocationtype.mdx
new file mode 100644
index 0000000..9cb6d29
--- /dev/null
+++ b/docs/components/anthropiccitationwebsearchresultlocationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicCitationWebSearchResultLocationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicCitationWebSearchResultLocationType
+value: AnthropicCitationWebSearchResultLocationType = "web_search_result_location"
+```
+
+
+## Values
+
+- `"web_search_result_location"`
diff --git a/docs/components/anthropiccompactionusageiteration.mdx b/docs/components/anthropiccompactionusageiteration.mdx
new file mode 100644
index 0000000..2f0a28b
--- /dev/null
+++ b/docs/components/anthropiccompactionusageiteration.mdx
@@ -0,0 +1,14 @@
+---
+title: "AnthropicCompactionUsageIteration"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `cache_creation` | [OptionalNullable[components.AnthropicIterationCacheCreation]](../components/anthropiciterationcachecreation.mdx) | :heavy_minus_sign: | N/A | \{
"ephemeral_1h_input_tokens": 0,
"ephemeral_5m_input_tokens": 0
} |
+| `cache_creation_input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `cache_read_input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `output_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `type` | [components.AnthropicCompactionUsageIterationType](../components/anthropiccompactionusageiterationtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/anthropiccompactionusageiterationtype.mdx b/docs/components/anthropiccompactionusageiterationtype.mdx
new file mode 100644
index 0000000..2b04c24
--- /dev/null
+++ b/docs/components/anthropiccompactionusageiterationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicCompactionUsageIterationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicCompactionUsageIterationType
+value: AnthropicCompactionUsageIterationType = "compaction"
+```
+
+
+## Values
+
+- `"compaction"`
diff --git a/docs/components/anthropicdocumentblockparam.mdx b/docs/components/anthropicdocumentblockparam.mdx
new file mode 100644
index 0000000..5a24251
--- /dev/null
+++ b/docs/components/anthropicdocumentblockparam.mdx
@@ -0,0 +1,14 @@
+---
+title: "AnthropicDocumentBlockParam"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `citations` | [OptionalNullable[components.AnthropicDocumentBlockParamCitations]](../components/anthropicdocumentblockparamcitations.mdx) | :heavy_minus_sign: | N/A | |
+| `context` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `source` | [components.AnthropicDocumentBlockParamSourceUnion](../components/anthropicdocumentblockparamsourceunion.mdx) | :heavy_check_mark: | N/A | |
+| `title` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `type` | [components.TypeDocument](../components/typedocument.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/anthropicdocumentblockparamcitations.mdx b/docs/components/anthropicdocumentblockparamcitations.mdx
new file mode 100644
index 0000000..c8b4d39
--- /dev/null
+++ b/docs/components/anthropicdocumentblockparamcitations.mdx
@@ -0,0 +1,9 @@
+---
+title: "AnthropicDocumentBlockParamCitations"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicdocumentblockparamcontent1.mdx b/docs/components/anthropicdocumentblockparamcontent1.mdx
new file mode 100644
index 0000000..151f550
--- /dev/null
+++ b/docs/components/anthropicdocumentblockparamcontent1.mdx
@@ -0,0 +1,18 @@
+---
+title: "AnthropicDocumentBlockParamContent1"
+---
+
+## Supported Types
+
+### `components.AnthropicImageBlockParam`
+
+```python
+value: components.AnthropicImageBlockParam = /* values here */
+```
+
+### `components.AnthropicTextBlockParam`
+
+```python
+value: components.AnthropicTextBlockParam = /* values here */
+```
+
diff --git a/docs/components/anthropicdocumentblockparamcontent2.mdx b/docs/components/anthropicdocumentblockparamcontent2.mdx
new file mode 100644
index 0000000..c2330d4
--- /dev/null
+++ b/docs/components/anthropicdocumentblockparamcontent2.mdx
@@ -0,0 +1,18 @@
+---
+title: "AnthropicDocumentBlockParamContent2"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.AnthropicDocumentBlockParamContent1]`
+
+```python
+value: List[components.AnthropicDocumentBlockParamContent1] = /* values here */
+```
+
diff --git a/docs/components/anthropicdocumentblockparamsourceunion.mdx b/docs/components/anthropicdocumentblockparamsourceunion.mdx
new file mode 100644
index 0000000..644c8db
--- /dev/null
+++ b/docs/components/anthropicdocumentblockparamsourceunion.mdx
@@ -0,0 +1,36 @@
+---
+title: "AnthropicDocumentBlockParamSourceUnion"
+---
+
+## Supported Types
+
+### `components.AnthropicBase64PdfSource`
+
+```python
+value: components.AnthropicBase64PdfSource = /* values here */
+```
+
+### `components.AnthropicPlainTextSource`
+
+```python
+value: components.AnthropicPlainTextSource = /* values here */
+```
+
+### `components.SourceContent`
+
+```python
+value: components.SourceContent = /* values here */
+```
+
+### `components.AnthropicURLPdfSource`
+
+```python
+value: components.AnthropicURLPdfSource = /* values here */
+```
+
+### `components.AnthropicFileDocumentSource`
+
+```python
+value: components.AnthropicFileDocumentSource = /* values here */
+```
+
diff --git a/docs/components/anthropicfiledocumentsource.mdx b/docs/components/anthropicfiledocumentsource.mdx
new file mode 100644
index 0000000..9b1f756
--- /dev/null
+++ b/docs/components/anthropicfiledocumentsource.mdx
@@ -0,0 +1,10 @@
+---
+title: "AnthropicFileDocumentSource"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `file_id` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.AnthropicFileDocumentSourceType](../components/anthropicfiledocumentsourcetype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicfiledocumentsourcetype.mdx b/docs/components/anthropicfiledocumentsourcetype.mdx
new file mode 100644
index 0000000..c86bc52
--- /dev/null
+++ b/docs/components/anthropicfiledocumentsourcetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicFileDocumentSourceType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicFileDocumentSourceType
+value: AnthropicFileDocumentSourceType = "file"
+```
+
+
+## Values
+
+- `"file"`
diff --git a/docs/components/anthropicimageblockparam.mdx b/docs/components/anthropicimageblockparam.mdx
new file mode 100644
index 0000000..2d95dd4
--- /dev/null
+++ b/docs/components/anthropicimageblockparam.mdx
@@ -0,0 +1,11 @@
+---
+title: "AnthropicImageBlockParam"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `source` | [components.AnthropicImageBlockParamSource](../components/anthropicimageblockparamsource.mdx) | :heavy_check_mark: | N/A | |
+| `type` | [components.AnthropicImageBlockParamType](../components/anthropicimageblockparamtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/anthropicimageblockparamsource.mdx b/docs/components/anthropicimageblockparamsource.mdx
new file mode 100644
index 0000000..7a6eede
--- /dev/null
+++ b/docs/components/anthropicimageblockparamsource.mdx
@@ -0,0 +1,18 @@
+---
+title: "AnthropicImageBlockParamSource"
+---
+
+## Supported Types
+
+### `components.AnthropicBase64ImageSource`
+
+```python
+value: components.AnthropicBase64ImageSource = /* values here */
+```
+
+### `components.AnthropicURLImageSource`
+
+```python
+value: components.AnthropicURLImageSource = /* values here */
+```
+
diff --git a/docs/components/anthropicimageblockparamtype.mdx b/docs/components/anthropicimageblockparamtype.mdx
new file mode 100644
index 0000000..eeff0ef
--- /dev/null
+++ b/docs/components/anthropicimageblockparamtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicImageBlockParamType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicImageBlockParamType
+value: AnthropicImageBlockParamType = "image"
+```
+
+
+## Values
+
+- `"image"`
diff --git a/docs/components/anthropicimagemimetype.mdx b/docs/components/anthropicimagemimetype.mdx
new file mode 100644
index 0000000..c89e385
--- /dev/null
+++ b/docs/components/anthropicimagemimetype.mdx
@@ -0,0 +1,22 @@
+---
+title: "AnthropicImageMimeType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicImageMimeType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: AnthropicImageMimeType = "image/jpeg"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"image/jpeg"`
+- `"image/png"`
+- `"image/gif"`
+- `"image/webp"`
diff --git a/docs/components/anthropicinputtokensclearatleast.mdx b/docs/components/anthropicinputtokensclearatleast.mdx
new file mode 100644
index 0000000..0c85fad
--- /dev/null
+++ b/docs/components/anthropicinputtokensclearatleast.mdx
@@ -0,0 +1,10 @@
+---
+title: "AnthropicInputTokensClearAtLeast"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `type` | [components.AnthropicInputTokensClearAtLeastType](../components/anthropicinputtokensclearatleasttype.mdx) | :heavy_check_mark: | N/A |
+| `value` | *int* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicinputtokensclearatleasttype.mdx b/docs/components/anthropicinputtokensclearatleasttype.mdx
new file mode 100644
index 0000000..315dcc8
--- /dev/null
+++ b/docs/components/anthropicinputtokensclearatleasttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicInputTokensClearAtLeastType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicInputTokensClearAtLeastType
+value: AnthropicInputTokensClearAtLeastType = "input_tokens"
+```
+
+
+## Values
+
+- `"input_tokens"`
diff --git a/docs/components/anthropicinputtokenstrigger.mdx b/docs/components/anthropicinputtokenstrigger.mdx
new file mode 100644
index 0000000..72fe90a
--- /dev/null
+++ b/docs/components/anthropicinputtokenstrigger.mdx
@@ -0,0 +1,10 @@
+---
+title: "AnthropicInputTokensTrigger"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `type` | [components.AnthropicInputTokensTriggerType](../components/anthropicinputtokenstriggertype.mdx) | :heavy_check_mark: | N/A |
+| `value` | *int* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicinputtokenstriggertype.mdx b/docs/components/anthropicinputtokenstriggertype.mdx
new file mode 100644
index 0000000..2b0b01f
--- /dev/null
+++ b/docs/components/anthropicinputtokenstriggertype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicInputTokensTriggerType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicInputTokensTriggerType
+value: AnthropicInputTokensTriggerType = "input_tokens"
+```
+
+
+## Values
+
+- `"input_tokens"`
diff --git a/docs/components/anthropiciterationcachecreation.mdx b/docs/components/anthropiciterationcachecreation.mdx
new file mode 100644
index 0000000..29b33e6
--- /dev/null
+++ b/docs/components/anthropiciterationcachecreation.mdx
@@ -0,0 +1,10 @@
+---
+title: "AnthropicIterationCacheCreation"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------- | --------------------------- | --------------------------- | --------------------------- |
+| `ephemeral_1h_input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A |
+| `ephemeral_5m_input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicmessageusageiteration.mdx b/docs/components/anthropicmessageusageiteration.mdx
new file mode 100644
index 0000000..01ec99b
--- /dev/null
+++ b/docs/components/anthropicmessageusageiteration.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicMessageUsageIteration"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `cache_creation` | [OptionalNullable[components.AnthropicIterationCacheCreation]](../components/anthropiciterationcachecreation.mdx) | :heavy_minus_sign: | N/A | \{
"ephemeral_1h_input_tokens": 0,
"ephemeral_5m_input_tokens": 0
} |
+| `cache_creation_input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `cache_read_input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `output_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `model` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `type` | [components.AnthropicMessageUsageIterationType](../components/anthropicmessageusageiterationtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/anthropicmessageusageiterationtype.mdx b/docs/components/anthropicmessageusageiterationtype.mdx
new file mode 100644
index 0000000..e8cb034
--- /dev/null
+++ b/docs/components/anthropicmessageusageiterationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicMessageUsageIterationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicMessageUsageIterationType
+value: AnthropicMessageUsageIterationType = "message"
+```
+
+
+## Values
+
+- `"message"`
diff --git a/docs/components/anthropicplaintextsource.mdx b/docs/components/anthropicplaintextsource.mdx
new file mode 100644
index 0000000..3a07d04
--- /dev/null
+++ b/docs/components/anthropicplaintextsource.mdx
@@ -0,0 +1,11 @@
+---
+title: "AnthropicPlainTextSource"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `data` | *str* | :heavy_check_mark: | N/A |
+| `media_type` | [components.AnthropicPlainTextSourceMediaType](../components/anthropicplaintextsourcemediatype.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.AnthropicPlainTextSourceType](../components/anthropicplaintextsourcetype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicplaintextsourcemediatype.mdx b/docs/components/anthropicplaintextsourcemediatype.mdx
new file mode 100644
index 0000000..2c017cc
--- /dev/null
+++ b/docs/components/anthropicplaintextsourcemediatype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicPlainTextSourceMediaType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicPlainTextSourceMediaType
+value: AnthropicPlainTextSourceMediaType = "text/plain"
+```
+
+
+## Values
+
+- `"text/plain"`
diff --git a/docs/components/anthropicplaintextsourcetype.mdx b/docs/components/anthropicplaintextsourcetype.mdx
new file mode 100644
index 0000000..a538343
--- /dev/null
+++ b/docs/components/anthropicplaintextsourcetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicPlainTextSourceType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicPlainTextSourceType
+value: AnthropicPlainTextSourceType = "text"
+```
+
+
+## Values
+
+- `"text"`
diff --git a/docs/components/anthropicsearchresultblockparam.mdx b/docs/components/anthropicsearchresultblockparam.mdx
new file mode 100644
index 0000000..517785e
--- /dev/null
+++ b/docs/components/anthropicsearchresultblockparam.mdx
@@ -0,0 +1,14 @@
+---
+title: "AnthropicSearchResultBlockParam"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `citations` | [Optional[components.AnthropicSearchResultBlockParamCitations]](../components/anthropicsearchresultblockparamcitations.mdx) | :heavy_minus_sign: | N/A | |
+| `content` | List[[components.AnthropicTextBlockParam](../components/anthropictextblockparam.mdx)] | :heavy_check_mark: | N/A | |
+| `source` | *str* | :heavy_check_mark: | N/A | |
+| `title` | *str* | :heavy_check_mark: | N/A | |
+| `type` | [components.AnthropicSearchResultBlockParamType](../components/anthropicsearchresultblockparamtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/anthropicsearchresultblockparamcitations.mdx b/docs/components/anthropicsearchresultblockparamcitations.mdx
new file mode 100644
index 0000000..107bda3
--- /dev/null
+++ b/docs/components/anthropicsearchresultblockparamcitations.mdx
@@ -0,0 +1,9 @@
+---
+title: "AnthropicSearchResultBlockParamCitations"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicsearchresultblockparamtype.mdx b/docs/components/anthropicsearchresultblockparamtype.mdx
new file mode 100644
index 0000000..302faea
--- /dev/null
+++ b/docs/components/anthropicsearchresultblockparamtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicSearchResultBlockParamType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicSearchResultBlockParamType
+value: AnthropicSearchResultBlockParamType = "search_result"
+```
+
+
+## Values
+
+- `"search_result"`
diff --git a/docs/components/anthropicspeed.mdx b/docs/components/anthropicspeed.mdx
new file mode 100644
index 0000000..6f1e9ce
--- /dev/null
+++ b/docs/components/anthropicspeed.mdx
@@ -0,0 +1,20 @@
+---
+title: "AnthropicSpeed"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicSpeed
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: AnthropicSpeed = "fast"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"fast"`
+- `"standard"`
diff --git a/docs/components/anthropictextblockparam.mdx b/docs/components/anthropictextblockparam.mdx
new file mode 100644
index 0000000..6d00495
--- /dev/null
+++ b/docs/components/anthropictextblockparam.mdx
@@ -0,0 +1,12 @@
+---
+title: "AnthropicTextBlockParam"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `citations` | List[[components.Citation](../components/citation.mdx)] | :heavy_minus_sign: | N/A | |
+| `text` | *str* | :heavy_check_mark: | N/A | |
+| `type` | [components.AnthropicTextBlockParamType](../components/anthropictextblockparamtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/anthropictextblockparamtype.mdx b/docs/components/anthropictextblockparamtype.mdx
new file mode 100644
index 0000000..b6b0d6f
--- /dev/null
+++ b/docs/components/anthropictextblockparamtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicTextBlockParamType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicTextBlockParamType
+value: AnthropicTextBlockParamType = "text"
+```
+
+
+## Values
+
+- `"text"`
diff --git a/docs/components/anthropicthinkingdisplay.mdx b/docs/components/anthropicthinkingdisplay.mdx
new file mode 100644
index 0000000..e30b6f7
--- /dev/null
+++ b/docs/components/anthropicthinkingdisplay.mdx
@@ -0,0 +1,20 @@
+---
+title: "AnthropicThinkingDisplay"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicThinkingDisplay
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: AnthropicThinkingDisplay = "summarized"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"summarized"`
+- `"omitted"`
diff --git a/docs/components/anthropicthinkingturns.mdx b/docs/components/anthropicthinkingturns.mdx
new file mode 100644
index 0000000..9c92021
--- /dev/null
+++ b/docs/components/anthropicthinkingturns.mdx
@@ -0,0 +1,10 @@
+---
+title: "AnthropicThinkingTurns"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `type` | [components.AnthropicThinkingTurnsType](../components/anthropicthinkingturnstype.mdx) | :heavy_check_mark: | N/A |
+| `value` | *int* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicthinkingturnstype.mdx b/docs/components/anthropicthinkingturnstype.mdx
new file mode 100644
index 0000000..c1034a4
--- /dev/null
+++ b/docs/components/anthropicthinkingturnstype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicThinkingTurnsType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicThinkingTurnsType
+value: AnthropicThinkingTurnsType = "thinking_turns"
+```
+
+
+## Values
+
+- `"thinking_turns"`
diff --git a/docs/components/anthropictooluseskeep.mdx b/docs/components/anthropictooluseskeep.mdx
new file mode 100644
index 0000000..56a3b08
--- /dev/null
+++ b/docs/components/anthropictooluseskeep.mdx
@@ -0,0 +1,10 @@
+---
+title: "AnthropicToolUsesKeep"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `type` | [components.AnthropicToolUsesKeepType](../components/anthropictooluseskeeptype.mdx) | :heavy_check_mark: | N/A |
+| `value` | *int* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropictooluseskeeptype.mdx b/docs/components/anthropictooluseskeeptype.mdx
new file mode 100644
index 0000000..5563175
--- /dev/null
+++ b/docs/components/anthropictooluseskeeptype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicToolUsesKeepType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicToolUsesKeepType
+value: AnthropicToolUsesKeepType = "tool_uses"
+```
+
+
+## Values
+
+- `"tool_uses"`
diff --git a/docs/components/anthropictoolusestrigger.mdx b/docs/components/anthropictoolusestrigger.mdx
new file mode 100644
index 0000000..ddf1463
--- /dev/null
+++ b/docs/components/anthropictoolusestrigger.mdx
@@ -0,0 +1,10 @@
+---
+title: "AnthropicToolUsesTrigger"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `type` | [components.AnthropicToolUsesTriggerType](../components/anthropictoolusestriggertype.mdx) | :heavy_check_mark: | N/A |
+| `value` | *int* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropictoolusestriggertype.mdx b/docs/components/anthropictoolusestriggertype.mdx
new file mode 100644
index 0000000..0f46762
--- /dev/null
+++ b/docs/components/anthropictoolusestriggertype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicToolUsesTriggerType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicToolUsesTriggerType
+value: AnthropicToolUsesTriggerType = "tool_uses"
+```
+
+
+## Values
+
+- `"tool_uses"`
diff --git a/docs/components/anthropicunknownusageiteration.mdx b/docs/components/anthropicunknownusageiteration.mdx
new file mode 100644
index 0000000..9a298f5
--- /dev/null
+++ b/docs/components/anthropicunknownusageiteration.mdx
@@ -0,0 +1,14 @@
+---
+title: "AnthropicUnknownUsageIteration"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `cache_creation` | [OptionalNullable[components.AnthropicIterationCacheCreation]](../components/anthropiciterationcachecreation.mdx) | :heavy_minus_sign: | N/A | \{
"ephemeral_1h_input_tokens": 0,
"ephemeral_5m_input_tokens": 0
} |
+| `cache_creation_input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `cache_read_input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `input_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `output_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `type` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/anthropicurlimagesource.mdx b/docs/components/anthropicurlimagesource.mdx
new file mode 100644
index 0000000..ac91360
--- /dev/null
+++ b/docs/components/anthropicurlimagesource.mdx
@@ -0,0 +1,10 @@
+---
+title: "AnthropicURLImageSource"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `type` | [components.AnthropicURLImageSourceType](../components/anthropicurlimagesourcetype.mdx) | :heavy_check_mark: | N/A |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicurlimagesourcetype.mdx b/docs/components/anthropicurlimagesourcetype.mdx
new file mode 100644
index 0000000..86b72b8
--- /dev/null
+++ b/docs/components/anthropicurlimagesourcetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicURLImageSourceType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicURLImageSourceType
+value: AnthropicURLImageSourceType = "url"
+```
+
+
+## Values
+
+- `"url"`
diff --git a/docs/components/anthropicurlpdfsource.mdx b/docs/components/anthropicurlpdfsource.mdx
new file mode 100644
index 0000000..50d60b9
--- /dev/null
+++ b/docs/components/anthropicurlpdfsource.mdx
@@ -0,0 +1,10 @@
+---
+title: "AnthropicURLPdfSource"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `type` | [components.AnthropicURLPdfSourceType](../components/anthropicurlpdfsourcetype.mdx) | :heavy_check_mark: | N/A |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicurlpdfsourcetype.mdx b/docs/components/anthropicurlpdfsourcetype.mdx
new file mode 100644
index 0000000..717ed3b
--- /dev/null
+++ b/docs/components/anthropicurlpdfsourcetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicURLPdfSourceType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicURLPdfSourceType
+value: AnthropicURLPdfSourceType = "url"
+```
+
+
+## Values
+
+- `"url"`
diff --git a/docs/components/anthropicusageiteration.mdx b/docs/components/anthropicusageiteration.mdx
new file mode 100644
index 0000000..0ae331c
--- /dev/null
+++ b/docs/components/anthropicusageiteration.mdx
@@ -0,0 +1,30 @@
+---
+title: "AnthropicUsageIteration"
+---
+
+## Supported Types
+
+### `components.AnthropicCompactionUsageIteration`
+
+```python
+value: components.AnthropicCompactionUsageIteration = /* values here */
+```
+
+### `components.AnthropicMessageUsageIteration`
+
+```python
+value: components.AnthropicMessageUsageIteration = /* values here */
+```
+
+### `components.AnthropicAdvisorMessageUsageIteration`
+
+```python
+value: components.AnthropicAdvisorMessageUsageIteration = /* values here */
+```
+
+### `components.AnthropicUnknownUsageIteration`
+
+```python
+value: components.AnthropicUnknownUsageIteration = /* values here */
+```
+
diff --git a/docs/components/anthropicwebsearchresultblockparam.mdx b/docs/components/anthropicwebsearchresultblockparam.mdx
new file mode 100644
index 0000000..ddcfad3
--- /dev/null
+++ b/docs/components/anthropicwebsearchresultblockparam.mdx
@@ -0,0 +1,13 @@
+---
+title: "AnthropicWebSearchResultBlockParam"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `encrypted_content` | *str* | :heavy_check_mark: | N/A |
+| `page_age` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `title` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.AnthropicWebSearchResultBlockParamType](../components/anthropicwebsearchresultblockparamtype.mdx) | :heavy_check_mark: | N/A |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicwebsearchresultblockparamtype.mdx b/docs/components/anthropicwebsearchresultblockparamtype.mdx
new file mode 100644
index 0000000..ed07bc5
--- /dev/null
+++ b/docs/components/anthropicwebsearchresultblockparamtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicWebSearchResultBlockParamType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicWebSearchResultBlockParamType
+value: AnthropicWebSearchResultBlockParamType = "web_search_result"
+```
+
+
+## Values
+
+- `"web_search_result"`
diff --git a/docs/components/anthropicwebsearchtooluserlocation.mdx b/docs/components/anthropicwebsearchtooluserlocation.mdx
new file mode 100644
index 0000000..0096c9d
--- /dev/null
+++ b/docs/components/anthropicwebsearchtooluserlocation.mdx
@@ -0,0 +1,13 @@
+---
+title: "AnthropicWebSearchToolUserLocation"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `city` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `country` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `region` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `timezone` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `type` | [components.AnthropicWebSearchToolUserLocationType](../components/anthropicwebsearchtooluserlocationtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/anthropicwebsearchtooluserlocationtype.mdx b/docs/components/anthropicwebsearchtooluserlocationtype.mdx
new file mode 100644
index 0000000..c0387e0
--- /dev/null
+++ b/docs/components/anthropicwebsearchtooluserlocationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "AnthropicWebSearchToolUserLocationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AnthropicWebSearchToolUserLocationType
+value: AnthropicWebSearchToolUserLocationType = "approximate"
+```
+
+
+## Values
+
+- `"approximate"`
diff --git a/docs/components/apierrortype.mdx b/docs/components/apierrortype.mdx
new file mode 100644
index 0000000..53c4546
--- /dev/null
+++ b/docs/components/apierrortype.mdx
@@ -0,0 +1,47 @@
+---
+title: "APIErrorType"
+---
+
+Canonical OpenRouter error type, stable across all API formats
+
+## Example Usage
+
+```python
+from openrouter.components import APIErrorType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: APIErrorType = "context_length_exceeded"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"context_length_exceeded"`
+- `"max_tokens_exceeded"`
+- `"token_limit_exceeded"`
+- `"string_too_long"`
+- `"authentication"`
+- `"permission_denied"`
+- `"payment_required"`
+- `"rate_limit_exceeded"`
+- `"provider_overloaded"`
+- `"provider_unavailable"`
+- `"invalid_request"`
+- `"invalid_prompt"`
+- `"not_found"`
+- `"precondition_failed"`
+- `"payload_too_large"`
+- `"unprocessable"`
+- `"content_policy_violation"`
+- `"refusal"`
+- `"invalid_image"`
+- `"image_too_large"`
+- `"image_too_small"`
+- `"unsupported_image_format"`
+- `"image_not_found"`
+- `"image_download_failed"`
+- `"server"`
+- `"timeout"`
+- `"unmapped"`
diff --git a/docs/components/apitype.mdx b/docs/components/apitype.mdx
new file mode 100644
index 0000000..185a0fa
--- /dev/null
+++ b/docs/components/apitype.mdx
@@ -0,0 +1,27 @@
+---
+title: "APIType"
+---
+
+Type of API used for the generation
+
+## Example Usage
+
+```python
+from openrouter.components import APIType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: APIType = "completions"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"completions"`
+- `"embeddings"`
+- `"rerank"`
+- `"tts"`
+- `"stt"`
+- `"video"`
+- `"image"`
diff --git a/docs/components/applypatchcallitem.mdx b/docs/components/applypatchcallitem.mdx
new file mode 100644
index 0000000..69bc2b8
--- /dev/null
+++ b/docs/components/applypatchcallitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "ApplyPatchCallItem"
+---
+
+A tool call emitted by the model requesting a V4A patch operation. The client applies the patch and echoes an `apply_patch_call_output` on the next turn.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
+| `call_id` | *str* | :heavy_check_mark: | N/A | |
+| `id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `operation` | [components.ApplyPatchCallOperation](../components/applypatchcalloperation.mdx) | :heavy_check_mark: | The patch operation requested by an `apply_patch_call`. `create_file` and `update_file` carry a V4A diff; `delete_file` omits it. | \{
"diff": "@@ function main() \{\n+ console.log(\"hi\");\n }",
"path": "/src/main.ts",
"type": "update_file"
} |
+| `status` | [components.ApplyPatchCallStatus](../components/applypatchcallstatus.mdx) | :heavy_check_mark: | Lifecycle state of an `apply_patch_call` output item. | completed |
+| `type` | [components.ApplyPatchCallItemType](../components/applypatchcallitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/applypatchcallitemtype.mdx b/docs/components/applypatchcallitemtype.mdx
new file mode 100644
index 0000000..23ee1f2
--- /dev/null
+++ b/docs/components/applypatchcallitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ApplyPatchCallItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ApplyPatchCallItemType
+value: ApplyPatchCallItemType = "apply_patch_call"
+```
+
+
+## Values
+
+- `"apply_patch_call"`
diff --git a/docs/components/applypatchcalloperation.mdx b/docs/components/applypatchcalloperation.mdx
new file mode 100644
index 0000000..2159c81
--- /dev/null
+++ b/docs/components/applypatchcalloperation.mdx
@@ -0,0 +1,27 @@
+---
+title: "ApplyPatchCallOperation"
+---
+
+The patch operation requested by an `apply_patch_call`. `create_file` and `update_file` carry a V4A diff; `delete_file` omits it.
+
+
+## Supported Types
+
+### `components.ApplyPatchCreateFileOperation`
+
+```python
+value: components.ApplyPatchCreateFileOperation = /* values here */
+```
+
+### `components.ApplyPatchDeleteFileOperation`
+
+```python
+value: components.ApplyPatchDeleteFileOperation = /* values here */
+```
+
+### `components.ApplyPatchUpdateFileOperation`
+
+```python
+value: components.ApplyPatchUpdateFileOperation = /* values here */
+```
+
diff --git a/docs/components/applypatchcalloperationdiffdeltaevent.mdx b/docs/components/applypatchcalloperationdiffdeltaevent.mdx
new file mode 100644
index 0000000..d8c4af6
--- /dev/null
+++ b/docs/components/applypatchcalloperationdiffdeltaevent.mdx
@@ -0,0 +1,16 @@
+---
+title: "ApplyPatchCallOperationDiffDeltaEvent"
+---
+
+Incremental chunk of `operation.diff` for an `apply_patch_call`. Matches OpenAI's streaming shape.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `delta` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.ApplyPatchCallOperationDiffDeltaEventType](../components/applypatchcalloperationdiffdeltaeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/applypatchcalloperationdiffdeltaeventtype.mdx b/docs/components/applypatchcalloperationdiffdeltaeventtype.mdx
new file mode 100644
index 0000000..9647bce
--- /dev/null
+++ b/docs/components/applypatchcalloperationdiffdeltaeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ApplyPatchCallOperationDiffDeltaEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ApplyPatchCallOperationDiffDeltaEventType
+value: ApplyPatchCallOperationDiffDeltaEventType = "response.apply_patch_call_operation_diff.delta"
+```
+
+
+## Values
+
+- `"response.apply_patch_call_operation_diff.delta"`
diff --git a/docs/components/applypatchcalloperationdiffdoneevent.mdx b/docs/components/applypatchcalloperationdiffdoneevent.mdx
new file mode 100644
index 0000000..c722bd4
--- /dev/null
+++ b/docs/components/applypatchcalloperationdiffdoneevent.mdx
@@ -0,0 +1,16 @@
+---
+title: "ApplyPatchCallOperationDiffDoneEvent"
+---
+
+Emitted when `operation.diff` streaming completes for an `apply_patch_call`.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `diff` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.ApplyPatchCallOperationDiffDoneEventType](../components/applypatchcalloperationdiffdoneeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/applypatchcalloperationdiffdoneeventtype.mdx b/docs/components/applypatchcalloperationdiffdoneeventtype.mdx
new file mode 100644
index 0000000..9bddff0
--- /dev/null
+++ b/docs/components/applypatchcalloperationdiffdoneeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ApplyPatchCallOperationDiffDoneEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ApplyPatchCallOperationDiffDoneEventType
+value: ApplyPatchCallOperationDiffDoneEventType = "response.apply_patch_call_operation_diff.done"
+```
+
+
+## Values
+
+- `"response.apply_patch_call_operation_diff.done"`
diff --git a/docs/components/applypatchcalloutputitem.mdx b/docs/components/applypatchcalloutputitem.mdx
new file mode 100644
index 0000000..6ef61a8
--- /dev/null
+++ b/docs/components/applypatchcalloutputitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "ApplyPatchCallOutputItem"
+---
+
+The client's echo of an `apply_patch_call` after applying the patch. `output` is an optional human-readable log; `status` is `completed` when the patch was applied successfully, `failed` otherwise.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `call_id` | *str* | :heavy_check_mark: | N/A |
+| `id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `output` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `status` | [components.ApplyPatchCallOutputItemStatus](../components/applypatchcalloutputitemstatus.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.ApplyPatchCallOutputItemType](../components/applypatchcalloutputitemtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/applypatchcalloutputitemstatus.mdx b/docs/components/applypatchcalloutputitemstatus.mdx
new file mode 100644
index 0000000..435847d
--- /dev/null
+++ b/docs/components/applypatchcalloutputitemstatus.mdx
@@ -0,0 +1,20 @@
+---
+title: "ApplyPatchCallOutputItemStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ApplyPatchCallOutputItemStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ApplyPatchCallOutputItemStatus = "completed"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"completed"`
+- `"failed"`
diff --git a/docs/components/applypatchcalloutputitemtype.mdx b/docs/components/applypatchcalloutputitemtype.mdx
new file mode 100644
index 0000000..b0adb3c
--- /dev/null
+++ b/docs/components/applypatchcalloutputitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ApplyPatchCallOutputItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ApplyPatchCallOutputItemType
+value: ApplyPatchCallOutputItemType = "apply_patch_call_output"
+```
+
+
+## Values
+
+- `"apply_patch_call_output"`
diff --git a/docs/components/applypatchcallstatus.mdx b/docs/components/applypatchcallstatus.mdx
new file mode 100644
index 0000000..13f21ea
--- /dev/null
+++ b/docs/components/applypatchcallstatus.mdx
@@ -0,0 +1,22 @@
+---
+title: "ApplyPatchCallStatus"
+---
+
+Lifecycle state of an `apply_patch_call` output item.
+
+## Example Usage
+
+```python
+from openrouter.components import ApplyPatchCallStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ApplyPatchCallStatus = "in_progress"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"in_progress"`
+- `"completed"`
diff --git a/docs/components/applypatchcreatefileoperation.mdx b/docs/components/applypatchcreatefileoperation.mdx
new file mode 100644
index 0000000..37aa192
--- /dev/null
+++ b/docs/components/applypatchcreatefileoperation.mdx
@@ -0,0 +1,14 @@
+---
+title: "ApplyPatchCreateFileOperation"
+---
+
+The `create_file` variant of an `apply_patch_call.operation`. Carries a V4A diff describing the new file contents.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `diff` | *str* | :heavy_check_mark: | N/A |
+| `path` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.ApplyPatchCreateFileOperationType](../components/applypatchcreatefileoperationtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/applypatchcreatefileoperationtype.mdx b/docs/components/applypatchcreatefileoperationtype.mdx
new file mode 100644
index 0000000..7a95b9f
--- /dev/null
+++ b/docs/components/applypatchcreatefileoperationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ApplyPatchCreateFileOperationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ApplyPatchCreateFileOperationType
+value: ApplyPatchCreateFileOperationType = "create_file"
+```
+
+
+## Values
+
+- `"create_file"`
diff --git a/docs/components/applypatchdeletefileoperation.mdx b/docs/components/applypatchdeletefileoperation.mdx
new file mode 100644
index 0000000..49463ff
--- /dev/null
+++ b/docs/components/applypatchdeletefileoperation.mdx
@@ -0,0 +1,13 @@
+---
+title: "ApplyPatchDeleteFileOperation"
+---
+
+The `delete_file` variant of an `apply_patch_call.operation`. Identifies the file to remove; no diff is required.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `path` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.ApplyPatchDeleteFileOperationType](../components/applypatchdeletefileoperationtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/applypatchdeletefileoperationtype.mdx b/docs/components/applypatchdeletefileoperationtype.mdx
new file mode 100644
index 0000000..8866b2a
--- /dev/null
+++ b/docs/components/applypatchdeletefileoperationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ApplyPatchDeleteFileOperationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ApplyPatchDeleteFileOperationType
+value: ApplyPatchDeleteFileOperationType = "delete_file"
+```
+
+
+## Values
+
+- `"delete_file"`
diff --git a/docs/components/applypatchengineenum.mdx b/docs/components/applypatchengineenum.mdx
new file mode 100644
index 0000000..ec6e507
--- /dev/null
+++ b/docs/components/applypatchengineenum.mdx
@@ -0,0 +1,23 @@
+---
+title: "ApplyPatchEngineEnum"
+---
+
+Which apply_patch engine to use. "auto" (default) uses native passthrough when the endpoint advertises native apply_patch support, otherwise falls back to OpenRouter's HITL validator. "native" forces native passthrough — when the endpoint does not support native, the request falls back to HITL. "openrouter" always runs the HITL validator. Native passthrough streams the diff incrementally via `apply_patch_call_operation_diff.delta` events; HITL buffers the diff for atomic delivery as a single delta.
+
+## Example Usage
+
+```python
+from openrouter.components import ApplyPatchEngineEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ApplyPatchEngineEnum = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"native"`
+- `"openrouter"`
diff --git a/docs/components/applypatchservertool.mdx b/docs/components/applypatchservertool.mdx
new file mode 100644
index 0000000..b8c8052
--- /dev/null
+++ b/docs/components/applypatchservertool.mdx
@@ -0,0 +1,12 @@
+---
+title: "ApplyPatchServerTool"
+---
+
+Apply patch tool configuration
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `type` | [components.ApplyPatchServerToolType](../components/applypatchservertooltype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/applypatchservertoolconfig.mdx b/docs/components/applypatchservertoolconfig.mdx
new file mode 100644
index 0000000..1ec1793
--- /dev/null
+++ b/docs/components/applypatchservertoolconfig.mdx
@@ -0,0 +1,12 @@
+---
+title: "ApplyPatchServerToolConfig"
+---
+
+Configuration for the openrouter:apply_patch server tool
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `engine` | [Optional[components.ApplyPatchEngineEnum]](../components/applypatchengineenum.mdx) | :heavy_minus_sign: | Which apply_patch engine to use. "auto" (default) uses native passthrough when the endpoint advertises native apply_patch support, otherwise falls back to OpenRouter's HITL validator. "native" forces native passthrough — when the endpoint does not support native, the request falls back to HITL. "openrouter" always runs the HITL validator. Native passthrough streams the diff incrementally via `apply_patch_call_operation_diff.delta` events; HITL buffers the diff for atomic delivery as a single delta. | auto |
\ No newline at end of file
diff --git a/docs/components/applypatchservertoolopenrouter.mdx b/docs/components/applypatchservertoolopenrouter.mdx
new file mode 100644
index 0000000..98531bf
--- /dev/null
+++ b/docs/components/applypatchservertoolopenrouter.mdx
@@ -0,0 +1,13 @@
+---
+title: "ApplyPatchServerToolOpenRouter"
+---
+
+OpenRouter built-in server tool: validates V4A diff patches for file operations (create, update, delete). Restricted to the Responses API.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `parameters` | [Optional[components.ApplyPatchServerToolConfig]](../components/applypatchservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for the openrouter:apply_patch server tool | \{
"engine": "auto"
} |
+| `type` | [components.ApplyPatchServerToolOpenRouterType](../components/applypatchservertoolopenroutertype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/applypatchservertoolopenroutertype.mdx b/docs/components/applypatchservertoolopenroutertype.mdx
new file mode 100644
index 0000000..cfe1c78
--- /dev/null
+++ b/docs/components/applypatchservertoolopenroutertype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ApplyPatchServerToolOpenRouterType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ApplyPatchServerToolOpenRouterType
+value: ApplyPatchServerToolOpenRouterType = "openrouter:apply_patch"
+```
+
+
+## Values
+
+- `"openrouter:apply_patch"`
diff --git a/docs/components/applypatchservertooltype.mdx b/docs/components/applypatchservertooltype.mdx
new file mode 100644
index 0000000..e97bf57
--- /dev/null
+++ b/docs/components/applypatchservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ApplyPatchServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ApplyPatchServerToolType
+value: ApplyPatchServerToolType = "apply_patch"
+```
+
+
+## Values
+
+- `"apply_patch"`
diff --git a/docs/components/applypatchupdatefileoperation.mdx b/docs/components/applypatchupdatefileoperation.mdx
new file mode 100644
index 0000000..458f786
--- /dev/null
+++ b/docs/components/applypatchupdatefileoperation.mdx
@@ -0,0 +1,14 @@
+---
+title: "ApplyPatchUpdateFileOperation"
+---
+
+The `update_file` variant of an `apply_patch_call.operation`. Carries a V4A diff describing edits to an existing file.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `diff` | *str* | :heavy_check_mark: | N/A |
+| `path` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.ApplyPatchUpdateFileOperationType](../components/applypatchupdatefileoperationtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/applypatchupdatefileoperationtype.mdx b/docs/components/applypatchupdatefileoperationtype.mdx
new file mode 100644
index 0000000..d76a0f8
--- /dev/null
+++ b/docs/components/applypatchupdatefileoperationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ApplyPatchUpdateFileOperationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ApplyPatchUpdateFileOperationType
+value: ApplyPatchUpdateFileOperationType = "update_file"
+```
+
+
+## Values
+
+- `"update_file"`
diff --git a/docs/components/apprankingsitem.mdx b/docs/components/apprankingsitem.mdx
new file mode 100644
index 0000000..08cc35c
--- /dev/null
+++ b/docs/components/apprankingsitem.mdx
@@ -0,0 +1,13 @@
+---
+title: "AppRankingsItem"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `app_id` | *int* | :heavy_check_mark: | Stable numeric identifier of the app on OpenRouter. | 12345 |
+| `app_name` | *str* | :heavy_check_mark: | Public display name of the app. | Cline |
+| `rank` | *int* | :heavy_check_mark: | 1-based position of the app within this response, per the requested `sort`. | 1 |
+| `total_requests` | *int* | :heavy_check_mark: | Number of requests attributed to the app inside the date window. | 4321 |
+| `total_tokens` | *str* | :heavy_check_mark: | Sum of `prompt_tokens + completion_tokens` attributed to the app inside the date window, returned as a decimal string so 64-bit values are not truncated. | 12345678 |
\ No newline at end of file
diff --git a/docs/components/apprankingsresponse.mdx b/docs/components/apprankingsresponse.mdx
new file mode 100644
index 0000000..06ea87d
--- /dev/null
+++ b/docs/components/apprankingsresponse.mdx
@@ -0,0 +1,10 @@
+---
+title: "AppRankingsResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `data` | List[[components.AppRankingsItem](../components/apprankingsitem.mdx)] | :heavy_check_mark: | Apps ranked per the requested `sort`, re-numbered 1..N after category filtering. `popular` sorts by `total_tokens` descending; `trending` sorts by absolute excess token growth descending and may return fewer than `limit` rows when few apps are growing. | |
+| `meta` | [components.RankingsDailyMeta](../components/rankingsdailymeta.mdx) | :heavy_check_mark: | N/A | \{
"as_of": "2026-05-12T02:00:00Z",
"end_date": "2026-05-11",
"start_date": "2026-04-12",
"version": "v1"
} |
\ No newline at end of file
diff --git a/docs/components/architecture.md b/docs/components/architecture.mdx
similarity index 63%
rename from docs/components/architecture.md
rename to docs/components/architecture.mdx
index 335e010..277a0da 100644
--- a/docs/components/architecture.md
+++ b/docs/components/architecture.mdx
@@ -1,4 +1,6 @@
-# Architecture
+---
+title: "Architecture"
+---
Model architecture information
@@ -7,8 +9,8 @@ Model architecture information
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
-| `input_modalities` | List[[components.InputModality](../components/inputmodality.md)] | :heavy_check_mark: | Supported input modalities | |
-| `instruct_type` | [Nullable[components.InstructType]](../components/instructtype.md) | :heavy_check_mark: | Instruction format type | chatml |
+| `input_modalities` | List[[components.InputModality](../components/inputmodality.mdx)] | :heavy_check_mark: | Supported input modalities | |
+| `instruct_type` | [Nullable[components.InstructType]](../components/instructtype.mdx) | :heavy_check_mark: | Instruction format type | chatml |
| `modality` | *Nullable[str]* | :heavy_check_mark: | Primary modality of the model | text |
-| `output_modalities` | List[[components.OutputModality](../components/outputmodality.md)] | :heavy_check_mark: | Supported output modalities | |
-| `tokenizer` | [Nullable[components.Tokenizer]](../components/tokenizer.md) | :heavy_check_mark: | N/A | GPT |
\ No newline at end of file
+| `output_modalities` | List[[components.OutputModality](../components/outputmodality.mdx)] | :heavy_check_mark: | Supported output modalities | |
+| `tokenizer` | [Nullable[components.Tokenizer]](../components/tokenizer.mdx) | :heavy_check_mark: | N/A | GPT |
\ No newline at end of file
diff --git a/docs/operations/imageurl.md b/docs/components/audiourl.mdx
similarity index 91%
rename from docs/operations/imageurl.md
rename to docs/components/audiourl.mdx
index cd90c03..ef98b1d 100644
--- a/docs/operations/imageurl.md
+++ b/docs/components/audiourl.mdx
@@ -1,5 +1,6 @@
-# ImageURL
-
+---
+title: "AudioURL"
+---
## Fields
diff --git a/docs/components/autorouterplugin.mdx b/docs/components/autorouterplugin.mdx
new file mode 100644
index 0000000..6fe8aca
--- /dev/null
+++ b/docs/components/autorouterplugin.mdx
@@ -0,0 +1,12 @@
+---
+title: "AutoRouterPlugin"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_models` | List[*str*] | :heavy_minus_sign: | List of model patterns to filter which models the auto-router can route between. Supports wildcards (e.g., "anthropic/*" matches all Anthropic models). When not specified, uses the default supported models list. | [
"anthropic/*",
"openai/gpt-4o",
"google/*"
] |
+| `cost_quality_tradeoff` | *Optional[int]* | :heavy_minus_sign: | Controls cost vs. quality routing tradeoff (0–10). 0 = pure quality (best model regardless of cost), 10 = maximize for cost (cheapest model wins). Intermediate values blend quality and cost signals continuously. Defaults to 7. | 7 |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Set to false to disable the auto-router plugin for this request. Defaults to true. | |
+| `id` | [components.AutoRouterPluginID](../components/autorouterpluginid.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/autorouterpluginid.mdx b/docs/components/autorouterpluginid.mdx
new file mode 100644
index 0000000..b339573
--- /dev/null
+++ b/docs/components/autorouterpluginid.mdx
@@ -0,0 +1,15 @@
+---
+title: "AutoRouterPluginID"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import AutoRouterPluginID
+value: AutoRouterPluginID = "auto-router"
+```
+
+
+## Values
+
+- `"auto-router"`
diff --git a/docs/components/badgatewayresponseerrordata.md b/docs/components/badgatewayresponseerrordata.mdx
similarity index 93%
rename from docs/components/badgatewayresponseerrordata.md
rename to docs/components/badgatewayresponseerrordata.mdx
index 9de5a89..df2de9f 100644
--- a/docs/components/badgatewayresponseerrordata.md
+++ b/docs/components/badgatewayresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# BadGatewayResponseErrorData
+---
+title: "BadGatewayResponseErrorData"
+---
Error data for BadGatewayResponse
diff --git a/docs/components/badrequestresponseerrordata.md b/docs/components/badrequestresponseerrordata.mdx
similarity index 93%
rename from docs/components/badrequestresponseerrordata.md
rename to docs/components/badrequestresponseerrordata.mdx
index c36a56e..3afce5c 100644
--- a/docs/components/badrequestresponseerrordata.md
+++ b/docs/components/badrequestresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# BadRequestResponseErrorData
+---
+title: "BadRequestResponseErrorData"
+---
Error data for BadRequestResponse
diff --git a/docs/components/baseinputscontent1.mdx b/docs/components/baseinputscontent1.mdx
new file mode 100644
index 0000000..e0824c0
--- /dev/null
+++ b/docs/components/baseinputscontent1.mdx
@@ -0,0 +1,30 @@
+---
+title: "BaseInputsContent1"
+---
+
+## Supported Types
+
+### `components.InputAudio`
+
+```python
+value: components.InputAudio = /* values here */
+```
+
+### `components.InputFile`
+
+```python
+value: components.InputFile = /* values here */
+```
+
+### `components.InputImage`
+
+```python
+value: components.InputImage = /* values here */
+```
+
+### `components.InputText`
+
+```python
+value: components.InputText = /* values here */
+```
+
diff --git a/docs/components/baseinputscontent2.mdx b/docs/components/baseinputscontent2.mdx
new file mode 100644
index 0000000..079aa0b
--- /dev/null
+++ b/docs/components/baseinputscontent2.mdx
@@ -0,0 +1,18 @@
+---
+title: "BaseInputsContent2"
+---
+
+## Supported Types
+
+### `List[components.BaseInputsContent1]`
+
+```python
+value: List[components.BaseInputsContent1] = /* values here */
+```
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
diff --git a/docs/components/baseinputsmessage.mdx b/docs/components/baseinputsmessage.mdx
new file mode 100644
index 0000000..0c00444
--- /dev/null
+++ b/docs/components/baseinputsmessage.mdx
@@ -0,0 +1,12 @@
+---
+title: "BaseInputsMessage"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `content` | [components.BaseInputsContent2](../components/baseinputscontent2.mdx) | :heavy_check_mark: | N/A |
+| `phase` | [OptionalNullable[components.BaseInputsPhaseUnion]](../components/baseinputsphaseunion.mdx) | :heavy_minus_sign: | N/A |
+| `role` | [components.BaseInputsRoleUnion](../components/baseinputsroleunion.mdx) | :heavy_check_mark: | N/A |
+| `type` | [Optional[components.BaseInputsType]](../components/baseinputstype.mdx) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/baseinputsphasecommentary.mdx b/docs/components/baseinputsphasecommentary.mdx
new file mode 100644
index 0000000..78b77b3
--- /dev/null
+++ b/docs/components/baseinputsphasecommentary.mdx
@@ -0,0 +1,15 @@
+---
+title: "BaseInputsPhaseCommentary"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import BaseInputsPhaseCommentary
+value: BaseInputsPhaseCommentary = "commentary"
+```
+
+
+## Values
+
+- `"commentary"`
diff --git a/docs/components/baseinputsphasefinalanswer.mdx b/docs/components/baseinputsphasefinalanswer.mdx
new file mode 100644
index 0000000..0ff0427
--- /dev/null
+++ b/docs/components/baseinputsphasefinalanswer.mdx
@@ -0,0 +1,15 @@
+---
+title: "BaseInputsPhaseFinalAnswer"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import BaseInputsPhaseFinalAnswer
+value: BaseInputsPhaseFinalAnswer = "final_answer"
+```
+
+
+## Values
+
+- `"final_answer"`
diff --git a/docs/components/baseinputsphaseunion.mdx b/docs/components/baseinputsphaseunion.mdx
new file mode 100644
index 0000000..5a05784
--- /dev/null
+++ b/docs/components/baseinputsphaseunion.mdx
@@ -0,0 +1,24 @@
+---
+title: "BaseInputsPhaseUnion"
+---
+
+## Supported Types
+
+### `components.BaseInputsPhaseCommentary`
+
+```python
+value: components.BaseInputsPhaseCommentary = /* values here */
+```
+
+### `components.BaseInputsPhaseFinalAnswer`
+
+```python
+value: components.BaseInputsPhaseFinalAnswer = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/baseinputsroleassistant.mdx b/docs/components/baseinputsroleassistant.mdx
new file mode 100644
index 0000000..ebf4315
--- /dev/null
+++ b/docs/components/baseinputsroleassistant.mdx
@@ -0,0 +1,15 @@
+---
+title: "BaseInputsRoleAssistant"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import BaseInputsRoleAssistant
+value: BaseInputsRoleAssistant = "assistant"
+```
+
+
+## Values
+
+- `"assistant"`
diff --git a/docs/components/baseinputsroledeveloper.mdx b/docs/components/baseinputsroledeveloper.mdx
new file mode 100644
index 0000000..edbe6df
--- /dev/null
+++ b/docs/components/baseinputsroledeveloper.mdx
@@ -0,0 +1,15 @@
+---
+title: "BaseInputsRoleDeveloper"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import BaseInputsRoleDeveloper
+value: BaseInputsRoleDeveloper = "developer"
+```
+
+
+## Values
+
+- `"developer"`
diff --git a/docs/components/baseinputsrolesystem.mdx b/docs/components/baseinputsrolesystem.mdx
new file mode 100644
index 0000000..5d94f02
--- /dev/null
+++ b/docs/components/baseinputsrolesystem.mdx
@@ -0,0 +1,15 @@
+---
+title: "BaseInputsRoleSystem"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import BaseInputsRoleSystem
+value: BaseInputsRoleSystem = "system"
+```
+
+
+## Values
+
+- `"system"`
diff --git a/docs/components/baseinputsroleunion.mdx b/docs/components/baseinputsroleunion.mdx
new file mode 100644
index 0000000..31607b2
--- /dev/null
+++ b/docs/components/baseinputsroleunion.mdx
@@ -0,0 +1,30 @@
+---
+title: "BaseInputsRoleUnion"
+---
+
+## Supported Types
+
+### `components.BaseInputsRoleUser`
+
+```python
+value: components.BaseInputsRoleUser = /* values here */
+```
+
+### `components.BaseInputsRoleSystem`
+
+```python
+value: components.BaseInputsRoleSystem = /* values here */
+```
+
+### `components.BaseInputsRoleAssistant`
+
+```python
+value: components.BaseInputsRoleAssistant = /* values here */
+```
+
+### `components.BaseInputsRoleDeveloper`
+
+```python
+value: components.BaseInputsRoleDeveloper = /* values here */
+```
+
diff --git a/docs/components/baseinputsroleuser.mdx b/docs/components/baseinputsroleuser.mdx
new file mode 100644
index 0000000..2ca95da
--- /dev/null
+++ b/docs/components/baseinputsroleuser.mdx
@@ -0,0 +1,15 @@
+---
+title: "BaseInputsRoleUser"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import BaseInputsRoleUser
+value: BaseInputsRoleUser = "user"
+```
+
+
+## Values
+
+- `"user"`
diff --git a/docs/components/baseinputstype.mdx b/docs/components/baseinputstype.mdx
new file mode 100644
index 0000000..6bb25bd
--- /dev/null
+++ b/docs/components/baseinputstype.mdx
@@ -0,0 +1,15 @@
+---
+title: "BaseInputsType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import BaseInputsType
+value: BaseInputsType = "message"
+```
+
+
+## Values
+
+- `"message"`
diff --git a/docs/components/baseinputsunion.mdx b/docs/components/baseinputsunion.mdx
new file mode 100644
index 0000000..e006bcc
--- /dev/null
+++ b/docs/components/baseinputsunion.mdx
@@ -0,0 +1,24 @@
+---
+title: "BaseInputsUnion"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.BaseInputsUnion1]`
+
+```python
+value: List[components.BaseInputsUnion1] = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/baseinputsunion1.mdx b/docs/components/baseinputsunion1.mdx
new file mode 100644
index 0000000..633bd16
--- /dev/null
+++ b/docs/components/baseinputsunion1.mdx
@@ -0,0 +1,66 @@
+---
+title: "BaseInputsUnion1"
+---
+
+## Supported Types
+
+### `components.BaseInputsMessage`
+
+```python
+value: components.BaseInputsMessage = /* values here */
+```
+
+### `components.OpenAIResponseInputMessageItem`
+
+```python
+value: components.OpenAIResponseInputMessageItem = /* values here */
+```
+
+### `components.OpenAIResponseFunctionToolCallOutput`
+
+```python
+value: components.OpenAIResponseFunctionToolCallOutput = /* values here */
+```
+
+### `components.OpenAIResponseFunctionToolCall`
+
+```python
+value: components.OpenAIResponseFunctionToolCall = /* values here */
+```
+
+### `components.OutputItemImageGenerationCall`
+
+```python
+value: components.OutputItemImageGenerationCall = /* values here */
+```
+
+### `components.OutputMessage`
+
+```python
+value: components.OutputMessage = /* values here */
+```
+
+### `components.OpenAIResponseCustomToolCall`
+
+```python
+value: components.OpenAIResponseCustomToolCall = /* values here */
+```
+
+### `components.OpenAIResponseCustomToolCallOutput`
+
+```python
+value: components.OpenAIResponseCustomToolCallOutput = /* values here */
+```
+
+### `components.ApplyPatchCallItem`
+
+```python
+value: components.ApplyPatchCallItem = /* values here */
+```
+
+### `components.ApplyPatchCallOutputItem`
+
+```python
+value: components.ApplyPatchCallOutputItem = /* values here */
+```
+
diff --git a/docs/components/basereasoningconfig.mdx b/docs/components/basereasoningconfig.mdx
new file mode 100644
index 0000000..6282519
--- /dev/null
+++ b/docs/components/basereasoningconfig.mdx
@@ -0,0 +1,10 @@
+---
+title: "BaseReasoningConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `effort` | [OptionalNullable[components.ReasoningEffort]](../components/reasoningeffort.mdx) | :heavy_minus_sign: | N/A | medium |
+| `summary` | [OptionalNullable[components.ReasoningSummaryVerbosity]](../components/reasoningsummaryverbosity.mdx) | :heavy_minus_sign: | N/A | auto |
\ No newline at end of file
diff --git a/docs/components/bashservertool.mdx b/docs/components/bashservertool.mdx
new file mode 100644
index 0000000..09464da
--- /dev/null
+++ b/docs/components/bashservertool.mdx
@@ -0,0 +1,13 @@
+---
+title: "BashServerTool"
+---
+
+OpenRouter built-in server tool: runs shell commands server-side in a sandboxed container
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `parameters` | [Optional[components.BashServerToolConfig]](../components/bashservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for the openrouter:bash server tool | \{
"environment": \{
"type": "container_auto"
}
} |
+| `type` | [components.BashServerToolType](../components/bashservertooltype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/bashservertoolconfig.mdx b/docs/components/bashservertoolconfig.mdx
new file mode 100644
index 0000000..967974c
--- /dev/null
+++ b/docs/components/bashservertoolconfig.mdx
@@ -0,0 +1,14 @@
+---
+title: "BashServerToolConfig"
+---
+
+Configuration for the openrouter:bash server tool
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `engine` | [Optional[components.BashServerToolEngine]](../components/bashservertoolengine.mdx) | :heavy_minus_sign: | Which bash engine to use. "openrouter" runs commands server-side in the OpenRouter sandbox. "auto" (default) and "native" use native passthrough, returning the tool call to your application to run client-side; OpenRouter does not execute the commands. | auto |
+| `environment` | [Optional[components.BashServerToolEnvironment]](../components/bashservertoolenvironment.mdx) | :heavy_minus_sign: | Execution environment for the bash server tool. | \{
"type": "container_auto"
} |
+| `sleep_after_seconds` | *Optional[int]* | :heavy_minus_sign: | How long (in seconds) the container stays warm after its last command before sleeping, freeing its capacity slot. Idle-based: each command renews the timer. Defaults to 900 (15 minutes); capped at 2592000 (30 days). | 900 |
\ No newline at end of file
diff --git a/docs/components/bashservertoolengine.mdx b/docs/components/bashservertoolengine.mdx
new file mode 100644
index 0000000..af3c05c
--- /dev/null
+++ b/docs/components/bashservertoolengine.mdx
@@ -0,0 +1,23 @@
+---
+title: "BashServerToolEngine"
+---
+
+Which bash engine to use. "openrouter" runs commands server-side in the OpenRouter sandbox. "auto" (default) and "native" use native passthrough, returning the tool call to your application to run client-side; OpenRouter does not execute the commands.
+
+## Example Usage
+
+```python
+from openrouter.components import BashServerToolEngine
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: BashServerToolEngine = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"native"`
+- `"openrouter"`
diff --git a/docs/components/bashservertoolenvironment.mdx b/docs/components/bashservertoolenvironment.mdx
new file mode 100644
index 0000000..d1c6a2d
--- /dev/null
+++ b/docs/components/bashservertoolenvironment.mdx
@@ -0,0 +1,21 @@
+---
+title: "BashServerToolEnvironment"
+---
+
+Execution environment for the bash server tool.
+
+
+## Supported Types
+
+### `components.ContainerAutoEnvironment`
+
+```python
+value: components.ContainerAutoEnvironment = /* values here */
+```
+
+### `components.ContainerReferenceEnvironment`
+
+```python
+value: components.ContainerReferenceEnvironment = /* values here */
+```
+
diff --git a/docs/components/bashservertooltype.mdx b/docs/components/bashservertooltype.mdx
new file mode 100644
index 0000000..539a7c3
--- /dev/null
+++ b/docs/components/bashservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "BashServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import BashServerToolType
+value: BashServerToolType = "openrouter:bash"
+```
+
+
+## Values
+
+- `"openrouter:bash"`
diff --git a/docs/components/billable.mdx b/docs/components/billable.mdx
new file mode 100644
index 0000000..a907902
--- /dev/null
+++ b/docs/components/billable.mdx
@@ -0,0 +1,23 @@
+---
+title: "Billable"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Billable
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Billable = "output_image"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"output_image"`
+- `"input_image"`
+- `"input_font"`
+- `"input_reference"`
+- `"input_text"`
diff --git a/docs/components/booleancapability.mdx b/docs/components/booleancapability.mdx
new file mode 100644
index 0000000..74ba072
--- /dev/null
+++ b/docs/components/booleancapability.mdx
@@ -0,0 +1,12 @@
+---
+title: "BooleanCapability"
+---
+
+A supported-or-not flag. Present means the parameter is accepted.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `type` | [components.BooleanCapabilityType](../components/booleancapabilitytype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/booleancapabilitytype.mdx b/docs/components/booleancapabilitytype.mdx
new file mode 100644
index 0000000..9c583fd
--- /dev/null
+++ b/docs/components/booleancapabilitytype.mdx
@@ -0,0 +1,15 @@
+---
+title: "BooleanCapabilityType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import BooleanCapabilityType
+value: BooleanCapabilityType = "boolean"
+```
+
+
+## Values
+
+- `"boolean"`
diff --git a/docs/components/bulkaddworkspacemembersrequest.mdx b/docs/components/bulkaddworkspacemembersrequest.mdx
new file mode 100644
index 0000000..6773678
--- /dev/null
+++ b/docs/components/bulkaddworkspacemembersrequest.mdx
@@ -0,0 +1,9 @@
+---
+title: "BulkAddWorkspaceMembersRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
+| `user_ids` | List[*str*] | :heavy_check_mark: | List of user IDs to add to the workspace. Members are assigned the same role they hold in the organization. | [
"user_abc123",
"user_def456"
] |
\ No newline at end of file
diff --git a/docs/components/bulkaddworkspacemembersresponse.mdx b/docs/components/bulkaddworkspacemembersresponse.mdx
new file mode 100644
index 0000000..4550429
--- /dev/null
+++ b/docs/components/bulkaddworkspacemembersresponse.mdx
@@ -0,0 +1,10 @@
+---
+title: "BulkAddWorkspaceMembersResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `added_count` | *int* | :heavy_check_mark: | Number of workspace memberships created or updated | 2 |
+| `data` | List[[components.WorkspaceMember](../components/workspacemember.mdx)] | :heavy_check_mark: | List of added workspace memberships | |
\ No newline at end of file
diff --git a/docs/components/bulkassignkeysrequest.mdx b/docs/components/bulkassignkeysrequest.mdx
new file mode 100644
index 0000000..ce5a37d
--- /dev/null
+++ b/docs/components/bulkassignkeysrequest.mdx
@@ -0,0 +1,9 @@
+---
+title: "BulkAssignKeysRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `key_hashes` | List[*str*] | :heavy_check_mark: | Array of API key hashes to assign to the guardrail | [
"c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93"
] |
\ No newline at end of file
diff --git a/docs/components/bulkassignkeysresponse.mdx b/docs/components/bulkassignkeysresponse.mdx
new file mode 100644
index 0000000..a9f54e5
--- /dev/null
+++ b/docs/components/bulkassignkeysresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "BulkAssignKeysResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `assigned_count` | *int* | :heavy_check_mark: | Number of keys successfully assigned | 3 |
\ No newline at end of file
diff --git a/docs/components/bulkassignmembersrequest.mdx b/docs/components/bulkassignmembersrequest.mdx
new file mode 100644
index 0000000..272a74b
--- /dev/null
+++ b/docs/components/bulkassignmembersrequest.mdx
@@ -0,0 +1,9 @@
+---
+title: "BulkAssignMembersRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- |
+| `member_user_ids` | List[*str*] | :heavy_check_mark: | Array of member user IDs to assign to the guardrail | [
"user_abc123",
"user_def456"
] |
\ No newline at end of file
diff --git a/docs/components/bulkassignmembersresponse.mdx b/docs/components/bulkassignmembersresponse.mdx
new file mode 100644
index 0000000..fb4f9e2
--- /dev/null
+++ b/docs/components/bulkassignmembersresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "BulkAssignMembersResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- |
+| `assigned_count` | *int* | :heavy_check_mark: | Number of members successfully assigned | 2 |
\ No newline at end of file
diff --git a/docs/components/bulkremoveworkspacemembersrequest.mdx b/docs/components/bulkremoveworkspacemembersrequest.mdx
new file mode 100644
index 0000000..e05a956
--- /dev/null
+++ b/docs/components/bulkremoveworkspacemembersrequest.mdx
@@ -0,0 +1,9 @@
+---
+title: "BulkRemoveWorkspaceMembersRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- |
+| `user_ids` | List[*str*] | :heavy_check_mark: | List of user IDs to remove from the workspace | [
"user_abc123",
"user_def456"
] |
\ No newline at end of file
diff --git a/docs/components/bulkremoveworkspacemembersresponse.mdx b/docs/components/bulkremoveworkspacemembersresponse.mdx
new file mode 100644
index 0000000..a453710
--- /dev/null
+++ b/docs/components/bulkremoveworkspacemembersresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "BulkRemoveWorkspaceMembersResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------- | ------------------------- | ------------------------- | ------------------------- | ------------------------- |
+| `removed_count` | *int* | :heavy_check_mark: | Number of members removed | 2 |
\ No newline at end of file
diff --git a/docs/components/bulkunassignkeysrequest.mdx b/docs/components/bulkunassignkeysrequest.mdx
new file mode 100644
index 0000000..53506dd
--- /dev/null
+++ b/docs/components/bulkunassignkeysrequest.mdx
@@ -0,0 +1,9 @@
+---
+title: "BulkUnassignKeysRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `key_hashes` | List[*str*] | :heavy_check_mark: | Array of API key hashes to unassign from the guardrail | [
"c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93"
] |
\ No newline at end of file
diff --git a/docs/components/bulkunassignkeysresponse.mdx b/docs/components/bulkunassignkeysresponse.mdx
new file mode 100644
index 0000000..efa2bc1
--- /dev/null
+++ b/docs/components/bulkunassignkeysresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "BulkUnassignKeysResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------- | -------------------------------------- | -------------------------------------- | -------------------------------------- | -------------------------------------- |
+| `unassigned_count` | *int* | :heavy_check_mark: | Number of keys successfully unassigned | 3 |
\ No newline at end of file
diff --git a/docs/components/bulkunassignmembersrequest.mdx b/docs/components/bulkunassignmembersrequest.mdx
new file mode 100644
index 0000000..a39b1c2
--- /dev/null
+++ b/docs/components/bulkunassignmembersrequest.mdx
@@ -0,0 +1,9 @@
+---
+title: "BulkUnassignMembersRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- |
+| `member_user_ids` | List[*str*] | :heavy_check_mark: | Array of member user IDs to unassign from the guardrail | [
"user_abc123",
"user_def456"
] |
\ No newline at end of file
diff --git a/docs/components/bulkunassignmembersresponse.mdx b/docs/components/bulkunassignmembersresponse.mdx
new file mode 100644
index 0000000..1907c82
--- /dev/null
+++ b/docs/components/bulkunassignmembersresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "BulkUnassignMembersResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- |
+| `unassigned_count` | *int* | :heavy_check_mark: | Number of members successfully unassigned | 2 |
\ No newline at end of file
diff --git a/docs/components/by.md b/docs/components/by.md
deleted file mode 100644
index 557c891..0000000
--- a/docs/components/by.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# By
-
-The provider sorting strategy (price, throughput, latency)
-
-
-## Values
-
-| Name | Value |
-| ------------ | ------------ |
-| `PRICE` | price |
-| `THROUGHPUT` | throughput |
-| `LATENCY` | latency |
-| `EXACTO` | exacto |
\ No newline at end of file
diff --git a/docs/components/by.mdx b/docs/components/by.mdx
new file mode 100644
index 0000000..8dd2b45
--- /dev/null
+++ b/docs/components/by.mdx
@@ -0,0 +1,24 @@
+---
+title: "By"
+---
+
+The provider sorting strategy (price, throughput, latency)
+
+## Example Usage
+
+```python
+from openrouter.components import By
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: By = "price"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"price"`
+- `"throughput"`
+- `"latency"`
+- `"exacto"`
diff --git a/docs/components/byokkey.mdx b/docs/components/byokkey.mdx
new file mode 100644
index 0000000..151dd83
--- /dev/null
+++ b/docs/components/byokkey.mdx
@@ -0,0 +1,20 @@
+---
+title: "BYOKKey"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) that may use this credential. `null` means no restriction. | [
"f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943"
] |
+| `allowed_models` | List[*str*] | :heavy_check_mark: | Optional allowlist of model slugs this credential may be used for. `null` means no restriction. | null |
+| `allowed_user_ids` | List[*str*] | :heavy_check_mark: | Optional allowlist of user IDs that may use this credential. `null` means no restriction. | null |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the credential was created. | 2025-08-24T10:30:00Z |
+| `disabled` | *bool* | :heavy_check_mark: | Whether this credential is currently disabled. | false |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this BYOK credential. | 11111111-2222-3333-4444-555555555555 |
+| `is_fallback` | *bool* | :heavy_check_mark: | Whether this credential is treated as a fallback — used only after non-fallback keys for the same provider have been tried. | false |
+| `label` | *str* | :heavy_check_mark: | Short masked snippet of the key (e.g. the first/last few characters) used to identify it in the UI. | sk-...AbCd |
+| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | Optional human-readable name for the credential. | Production OpenAI Key |
+| `provider` | [components.BYOKProviderSlug](../components/byokproviderslug.mdx) | :heavy_check_mark: | The upstream provider this credential authenticates against, as a lowercase slug (e.g. `openai`, `anthropic`, `amazon-bedrock`). | openai |
+| `sort_order` | *int* | :heavy_check_mark: | Position within the provider — credentials are tried in ascending sort order. | 0 |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this credential belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/byokproviderslug.mdx b/docs/components/byokproviderslug.mdx
new file mode 100644
index 0000000..439563d
--- /dev/null
+++ b/docs/components/byokproviderslug.mdx
@@ -0,0 +1,108 @@
+---
+title: "BYOKProviderSlug"
+---
+
+The upstream provider this credential authenticates against, as a lowercase slug (e.g. `openai`, `anthropic`, `amazon-bedrock`).
+
+## Example Usage
+
+```python
+from openrouter.components import BYOKProviderSlug
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: BYOKProviderSlug = "ai21"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"ai21"`
+- `"aion-labs"`
+- `"akashml"`
+- `"alibaba"`
+- `"amazon-bedrock"`
+- `"amazon-nova"`
+- `"ambient"`
+- `"anthropic"`
+- `"arcee-ai"`
+- `"atlas-cloud"`
+- `"avian"`
+- `"azure"`
+- `"baidu"`
+- `"baseten"`
+- `"black-forest-labs"`
+- `"byteplus"`
+- `"cerebras"`
+- `"chutes"`
+- `"cirrascale"`
+- `"clarifai"`
+- `"cloudflare"`
+- `"cohere"`
+- `"crusoe"`
+- `"darkbloom"`
+- `"decart"`
+- `"deepinfra"`
+- `"deepseek"`
+- `"dekallm"`
+- `"digitalocean"`
+- `"featherless"`
+- `"fireworks"`
+- `"friendli"`
+- `"gmicloud"`
+- `"google-ai-studio"`
+- `"google-vertex"`
+- `"groq"`
+- `"heygen"`
+- `"inception"`
+- `"inceptron"`
+- `"inferact-vllm"`
+- `"inference-net"`
+- `"infermatic"`
+- `"inflection"`
+- `"io-net"`
+- `"ionstream"`
+- `"liquid"`
+- `"mancer"`
+- `"mara"`
+- `"minimax"`
+- `"mistral"`
+- `"modelrun"`
+- `"modular"`
+- `"moonshotai"`
+- `"morph"`
+- `"ncompass"`
+- `"nebius"`
+- `"nex-agi"`
+- `"nextbit"`
+- `"novita"`
+- `"nvidia"`
+- `"open-inference"`
+- `"openai"`
+- `"parasail"`
+- `"perceptron"`
+- `"perplexity"`
+- `"phala"`
+- `"poolside"`
+- `"quiver"`
+- `"recraft"`
+- `"reka"`
+- `"relace"`
+- `"sakana-ai"`
+- `"sambanova"`
+- `"seed"`
+- `"siliconflow"`
+- `"sourceful"`
+- `"stepfun"`
+- `"streamlake"`
+- `"switchpoint"`
+- `"tenstorrent"`
+- `"together"`
+- `"upstage"`
+- `"venice"`
+- `"wafer"`
+- `"wandb"`
+- `"xai"`
+- `"xiaomi"`
+- `"z-ai"`
diff --git a/docs/components/caching.mdx b/docs/components/caching.mdx
new file mode 100644
index 0000000..d9c7199
--- /dev/null
+++ b/docs/components/caching.mdx
@@ -0,0 +1,13 @@
+---
+title: "Caching"
+---
+
+Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `ttl` | [Optional[components.AnthropicCacheControlTTL]](../components/anthropiccachecontrolttl.mdx) | :heavy_minus_sign: | N/A | 5m |
+| `type` | [components.ToolTypeEphemeral](../components/tooltypeephemeral.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/capabilitydescriptor.mdx b/docs/components/capabilitydescriptor.mdx
new file mode 100644
index 0000000..ace8f22
--- /dev/null
+++ b/docs/components/capabilitydescriptor.mdx
@@ -0,0 +1,27 @@
+---
+title: "CapabilityDescriptor"
+---
+
+A typed descriptor for one supported request parameter.
+
+
+## Supported Types
+
+### `components.EnumCapability`
+
+```python
+value: components.EnumCapability = /* values here */
+```
+
+### `components.RangeCapability`
+
+```python
+value: components.RangeCapability = /* values here */
+```
+
+### `components.BooleanCapability`
+
+```python
+value: components.BooleanCapability = /* values here */
+```
+
diff --git a/docs/components/chatassistantimages.mdx b/docs/components/chatassistantimages.mdx
new file mode 100644
index 0000000..fbd1a4d
--- /dev/null
+++ b/docs/components/chatassistantimages.mdx
@@ -0,0 +1,9 @@
+---
+title: "ChatAssistantImages"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `image_url` | [components.ChatAssistantImagesImageURL](../components/chatassistantimagesimageurl.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/chatassistantimagesimageurl.mdx b/docs/components/chatassistantimagesimageurl.mdx
new file mode 100644
index 0000000..8a36279
--- /dev/null
+++ b/docs/components/chatassistantimagesimageurl.mdx
@@ -0,0 +1,9 @@
+---
+title: "ChatAssistantImagesImageURL"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- |
+| `url` | *str* | :heavy_check_mark: | URL or base64-encoded data of the generated image |
\ No newline at end of file
diff --git a/docs/components/chatassistantmessage.mdx b/docs/components/chatassistantmessage.mdx
new file mode 100644
index 0000000..e2b637c
--- /dev/null
+++ b/docs/components/chatassistantmessage.mdx
@@ -0,0 +1,20 @@
+---
+title: "ChatAssistantMessage"
+---
+
+Assistant message for requests and responses
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `audio` | [Optional[components.ChatAudioOutput]](../components/chataudiooutput.mdx) | :heavy_minus_sign: | Audio output data or reference | \{
"data": "UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQoGAACBhYqFbF1f",
"expires_at": 1677652400,
"id": "audio_abc123",
"transcript": "Hello! How can I help you today?"
} |
+| `content` | [OptionalNullable[components.ChatAssistantMessageContent]](../components/chatassistantmessagecontent.mdx) | :heavy_minus_sign: | Assistant message content | |
+| `images` | List[[components.ChatAssistantImages](../components/chatassistantimages.mdx)] | :heavy_minus_sign: | Generated images from image generation models | [
\{
"image_url": \{
"url": "data:image/png;base64,iVBORw0KGgo..."
}
}
] |
+| `name` | *Optional[str]* | :heavy_minus_sign: | Optional name for the assistant | |
+| `reasoning` | *OptionalNullable[str]* | :heavy_minus_sign: | Reasoning output | |
+| `reasoning_details` | List[[components.ReasoningDetailUnion](../components/reasoningdetailunion.mdx)] | :heavy_minus_sign: | Reasoning details for extended thinking models | [
\{
"thinking": "Let me work through this step by step...",
"type": "thinking"
}
] |
+| `refusal` | *OptionalNullable[str]* | :heavy_minus_sign: | Refusal message if content was refused | |
+| `role` | [components.ChatAssistantMessageRole](../components/chatassistantmessagerole.mdx) | :heavy_check_mark: | N/A | |
+| `tool_calls` | List[[components.ChatToolCall](../components/chattoolcall.mdx)] | :heavy_minus_sign: | Tool calls made by the assistant | |
\ No newline at end of file
diff --git a/docs/components/chatassistantmessagecontent.mdx b/docs/components/chatassistantmessagecontent.mdx
new file mode 100644
index 0000000..c335554
--- /dev/null
+++ b/docs/components/chatassistantmessagecontent.mdx
@@ -0,0 +1,27 @@
+---
+title: "ChatAssistantMessageContent"
+---
+
+Assistant message content
+
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.ChatContentItems]`
+
+```python
+value: List[components.ChatContentItems] = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/chatassistantmessagerole.mdx b/docs/components/chatassistantmessagerole.mdx
new file mode 100644
index 0000000..d0cbbf9
--- /dev/null
+++ b/docs/components/chatassistantmessagerole.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatAssistantMessageRole"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatAssistantMessageRole
+value: ChatAssistantMessageRole = "assistant"
+```
+
+
+## Values
+
+- `"assistant"`
diff --git a/docs/components/chataudiooutput.mdx b/docs/components/chataudiooutput.mdx
new file mode 100644
index 0000000..54812b5
--- /dev/null
+++ b/docs/components/chataudiooutput.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatAudioOutput"
+---
+
+Audio output data or reference
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------- | -------------------------- | -------------------------- | -------------------------- |
+| `data` | *Optional[str]* | :heavy_minus_sign: | Base64 encoded audio data |
+| `expires_at` | *Optional[int]* | :heavy_minus_sign: | Audio expiration timestamp |
+| `id` | *Optional[str]* | :heavy_minus_sign: | Audio output identifier |
+| `transcript` | *Optional[str]* | :heavy_minus_sign: | Audio transcript |
\ No newline at end of file
diff --git a/docs/components/chatchoice.mdx b/docs/components/chatchoice.mdx
new file mode 100644
index 0000000..6143931
--- /dev/null
+++ b/docs/components/chatchoice.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatChoice"
+---
+
+Chat completion choice
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `finish_reason` | [Nullable[components.ChatFinishReasonEnum]](../components/chatfinishreasonenum.mdx) | :heavy_check_mark: | N/A | stop |
+| `index` | *int* | :heavy_check_mark: | Choice index | 0 |
+| `logprobs` | [OptionalNullable[components.ChatTokenLogprobs]](../components/chattokenlogprobs.mdx) | :heavy_minus_sign: | Log probabilities for the completion | \{
"content": [
\{
"bytes": null,
"logprob": -0.612345,
"token": " Hello",
"top_logprobs": []
}
],
"refusal": null
} |
+| `message` | [components.ChatAssistantMessage](../components/chatassistantmessage.mdx) | :heavy_check_mark: | Assistant message for requests and responses | \{
"content": "What is the capital of France?",
"role": "user"
} |
\ No newline at end of file
diff --git a/docs/components/chatcontentaudio.mdx b/docs/components/chatcontentaudio.mdx
new file mode 100644
index 0000000..4fded93
--- /dev/null
+++ b/docs/components/chatcontentaudio.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatContentAudio"
+---
+
+Audio input content part. Supported audio formats vary by provider.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `input_audio` | [components.ChatContentAudioInputAudio](../components/chatcontentaudioinputaudio.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.ChatContentAudioType](../components/chatcontentaudiotype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/chatcontentaudioinputaudio.mdx b/docs/components/chatcontentaudioinputaudio.mdx
new file mode 100644
index 0000000..06fd6a6
--- /dev/null
+++ b/docs/components/chatcontentaudioinputaudio.mdx
@@ -0,0 +1,10 @@
+---
+title: "ChatContentAudioInputAudio"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
+| `data` | *str* | :heavy_check_mark: | Base64 encoded audio data |
+| `format_` | *str* | :heavy_check_mark: | Audio format (e.g., wav, mp3, flac, m4a, ogg, aiff, aac, pcm16, pcm24). Supported formats vary by provider. |
\ No newline at end of file
diff --git a/docs/components/chatcontentaudiotype.mdx b/docs/components/chatcontentaudiotype.mdx
new file mode 100644
index 0000000..fdb1007
--- /dev/null
+++ b/docs/components/chatcontentaudiotype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatContentAudioType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatContentAudioType
+value: ChatContentAudioType = "input_audio"
+```
+
+
+## Values
+
+- `"input_audio"`
diff --git a/docs/components/chatcontentcachecontrol.mdx b/docs/components/chatcontentcachecontrol.mdx
new file mode 100644
index 0000000..250fd47
--- /dev/null
+++ b/docs/components/chatcontentcachecontrol.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatContentCacheControl"
+---
+
+Cache control for the content part
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `ttl` | [Optional[components.AnthropicCacheControlTTL]](../components/anthropiccachecontrolttl.mdx) | :heavy_minus_sign: | N/A | 5m |
+| `type` | [components.ChatContentCacheControlType](../components/chatcontentcachecontroltype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/chatcontentcachecontroltype.mdx b/docs/components/chatcontentcachecontroltype.mdx
new file mode 100644
index 0000000..71ebbaf
--- /dev/null
+++ b/docs/components/chatcontentcachecontroltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatContentCacheControlType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatContentCacheControlType
+value: ChatContentCacheControlType = "ephemeral"
+```
+
+
+## Values
+
+- `"ephemeral"`
diff --git a/docs/components/chatcontentfile.mdx b/docs/components/chatcontentfile.mdx
new file mode 100644
index 0000000..ae0bb19
--- /dev/null
+++ b/docs/components/chatcontentfile.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatContentFile"
+---
+
+File content part for document processing
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `file` | [components.File](../components/file.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.ChatContentFileType](../components/chatcontentfiletype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/chatcontentfiletype.mdx b/docs/components/chatcontentfiletype.mdx
new file mode 100644
index 0000000..b9b0634
--- /dev/null
+++ b/docs/components/chatcontentfiletype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatContentFileType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatContentFileType
+value: ChatContentFileType = "file"
+```
+
+
+## Values
+
+- `"file"`
diff --git a/docs/components/chatcontentimage.mdx b/docs/components/chatcontentimage.mdx
new file mode 100644
index 0000000..1dc2159
--- /dev/null
+++ b/docs/components/chatcontentimage.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatContentImage"
+---
+
+Image content part for vision models
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `image_url` | [components.ChatContentImageImageURL](../components/chatcontentimageimageurl.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.ChatContentImageType](../components/chatcontentimagetype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/chatcontentimagedetail.mdx b/docs/components/chatcontentimagedetail.mdx
new file mode 100644
index 0000000..7935e4a
--- /dev/null
+++ b/docs/components/chatcontentimagedetail.mdx
@@ -0,0 +1,24 @@
+---
+title: "ChatContentImageDetail"
+---
+
+Image detail level for vision models. `original` is an OpenRouter extension (not in the OpenAI Chat Completions spec) requesting true original-resolution media; it is downgraded to `high` for providers that lack an original-resolution tier.
+
+## Example Usage
+
+```python
+from openrouter.components import ChatContentImageDetail
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ChatContentImageDetail = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"low"`
+- `"high"`
+- `"original"`
diff --git a/docs/components/chatcontentimageimageurl.mdx b/docs/components/chatcontentimageimageurl.mdx
new file mode 100644
index 0000000..8141366
--- /dev/null
+++ b/docs/components/chatcontentimageimageurl.mdx
@@ -0,0 +1,10 @@
+---
+title: "ChatContentImageImageURL"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `detail` | [Optional[components.ChatContentImageDetail]](../components/chatcontentimagedetail.mdx) | :heavy_minus_sign: | Image detail level for vision models. `original` is an OpenRouter extension (not in the OpenAI Chat Completions spec) requesting true original-resolution media; it is downgraded to `high` for providers that lack an original-resolution tier. |
+| `url` | *str* | :heavy_check_mark: | URL of the image (data: URLs supported) |
\ No newline at end of file
diff --git a/docs/components/chatcontentimagetype.mdx b/docs/components/chatcontentimagetype.mdx
new file mode 100644
index 0000000..6282410
--- /dev/null
+++ b/docs/components/chatcontentimagetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatContentImageType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatContentImageType
+value: ChatContentImageType = "image_url"
+```
+
+
+## Values
+
+- `"image_url"`
diff --git a/docs/components/chatcontentitems.mdx b/docs/components/chatcontentitems.mdx
new file mode 100644
index 0000000..92c9c5c
--- /dev/null
+++ b/docs/components/chatcontentitems.mdx
@@ -0,0 +1,45 @@
+---
+title: "ChatContentItems"
+---
+
+Content part for chat completion messages
+
+
+## Supported Types
+
+### `components.ChatContentFile`
+
+```python
+value: components.ChatContentFile = /* values here */
+```
+
+### `components.ChatContentImage`
+
+```python
+value: components.ChatContentImage = /* values here */
+```
+
+### `components.ChatContentAudio`
+
+```python
+value: components.ChatContentAudio = /* values here */
+```
+
+### `components.LegacyChatContentVideo`
+
+```python
+value: components.LegacyChatContentVideo = /* values here */
+```
+
+### `components.ChatContentText`
+
+```python
+value: components.ChatContentText = /* values here */
+```
+
+### `components.ChatContentVideo`
+
+```python
+value: components.ChatContentVideo = /* values here */
+```
+
diff --git a/docs/components/chatcontenttext.mdx b/docs/components/chatcontenttext.mdx
new file mode 100644
index 0000000..a59dafe
--- /dev/null
+++ b/docs/components/chatcontenttext.mdx
@@ -0,0 +1,14 @@
+---
+title: "ChatContentText"
+---
+
+Text content part
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.ChatContentCacheControl]](../components/chatcontentcachecontrol.mdx) | :heavy_minus_sign: | Cache control for the content part | \{
"ttl": "5m",
"type": "ephemeral"
} |
+| `text` | *str* | :heavy_check_mark: | N/A | |
+| `type` | [components.ChatContentTextType](../components/chatcontenttexttype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/chatcontenttexttype.mdx b/docs/components/chatcontenttexttype.mdx
new file mode 100644
index 0000000..3f8ebf1
--- /dev/null
+++ b/docs/components/chatcontenttexttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatContentTextType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatContentTextType
+value: ChatContentTextType = "text"
+```
+
+
+## Values
+
+- `"text"`
diff --git a/docs/components/chatcontentvideo.mdx b/docs/components/chatcontentvideo.mdx
new file mode 100644
index 0000000..b8a1d5e
--- /dev/null
+++ b/docs/components/chatcontentvideo.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatContentVideo"
+---
+
+Video input content part
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `type` | [components.ChatContentVideoType](../components/chatcontentvideotype.mdx) | :heavy_check_mark: | N/A | |
+| `video_url` | [components.ChatContentVideoInput](../components/chatcontentvideoinput.mdx) | :heavy_check_mark: | Video input object | \{
"url": "https://example.com/video.mp4"
} |
\ No newline at end of file
diff --git a/docs/components/chatcontentvideoinput.mdx b/docs/components/chatcontentvideoinput.mdx
new file mode 100644
index 0000000..7b80ce5
--- /dev/null
+++ b/docs/components/chatcontentvideoinput.mdx
@@ -0,0 +1,12 @@
+---
+title: "ChatContentVideoInput"
+---
+
+Video input object
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- |
+| `url` | *str* | :heavy_check_mark: | URL of the video (data: URLs supported) |
\ No newline at end of file
diff --git a/docs/components/chatcontentvideotype.mdx b/docs/components/chatcontentvideotype.mdx
new file mode 100644
index 0000000..a784c58
--- /dev/null
+++ b/docs/components/chatcontentvideotype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatContentVideoType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatContentVideoType
+value: ChatContentVideoType = "video_url"
+```
+
+
+## Values
+
+- `"video_url"`
diff --git a/docs/components/chatdebugoptions.mdx b/docs/components/chatdebugoptions.mdx
new file mode 100644
index 0000000..eee9489
--- /dev/null
+++ b/docs/components/chatdebugoptions.mdx
@@ -0,0 +1,12 @@
+---
+title: "ChatDebugOptions"
+---
+
+Debug options for inspecting request transformations (streaming only)
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
+| `echo_upstream_body` | *Optional[bool]* | :heavy_minus_sign: | If true, includes the transformed upstream request body in a debug chunk at the start of the stream. Only works with streaming mode. | true |
\ No newline at end of file
diff --git a/docs/components/chatdevelopermessage.mdx b/docs/components/chatdevelopermessage.mdx
new file mode 100644
index 0000000..05d4223
--- /dev/null
+++ b/docs/components/chatdevelopermessage.mdx
@@ -0,0 +1,14 @@
+---
+title: "ChatDeveloperMessage"
+---
+
+Developer message
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `content` | [components.ChatDeveloperMessageContent](../components/chatdevelopermessagecontent.mdx) | :heavy_check_mark: | Developer message content | This is a message from the developer. |
+| `name` | *Optional[str]* | :heavy_minus_sign: | Optional name for the developer message | Developer |
+| `role` | [components.ChatDeveloperMessageRole](../components/chatdevelopermessagerole.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/chatdevelopermessagecontent.mdx b/docs/components/chatdevelopermessagecontent.mdx
new file mode 100644
index 0000000..9828d6d
--- /dev/null
+++ b/docs/components/chatdevelopermessagecontent.mdx
@@ -0,0 +1,21 @@
+---
+title: "ChatDeveloperMessageContent"
+---
+
+Developer message content
+
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.ChatContentText]`
+
+```python
+value: List[components.ChatContentText] = /* values here */
+```
+
diff --git a/docs/components/chatdevelopermessagerole.mdx b/docs/components/chatdevelopermessagerole.mdx
new file mode 100644
index 0000000..db5c7d4
--- /dev/null
+++ b/docs/components/chatdevelopermessagerole.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatDeveloperMessageRole"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatDeveloperMessageRole
+value: ChatDeveloperMessageRole = "developer"
+```
+
+
+## Values
+
+- `"developer"`
diff --git a/docs/components/chatfinishreasonenum.mdx b/docs/components/chatfinishreasonenum.mdx
new file mode 100644
index 0000000..1449d17
--- /dev/null
+++ b/docs/components/chatfinishreasonenum.mdx
@@ -0,0 +1,23 @@
+---
+title: "ChatFinishReasonEnum"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatFinishReasonEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ChatFinishReasonEnum = "tool_calls"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"tool_calls"`
+- `"stop"`
+- `"length"`
+- `"content_filter"`
+- `"error"`
diff --git a/docs/components/chatformatgrammarconfig.mdx b/docs/components/chatformatgrammarconfig.mdx
new file mode 100644
index 0000000..8595b86
--- /dev/null
+++ b/docs/components/chatformatgrammarconfig.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatFormatGrammarConfig"
+---
+
+Custom grammar response format
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `grammar` | *str* | :heavy_check_mark: | Custom grammar for text generation | root ::= "yes" \| "no" |
+| `type` | [components.ChatFormatGrammarConfigType](../components/chatformatgrammarconfigtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/chatformatgrammarconfigtype.mdx b/docs/components/chatformatgrammarconfigtype.mdx
new file mode 100644
index 0000000..9b479f4
--- /dev/null
+++ b/docs/components/chatformatgrammarconfigtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatFormatGrammarConfigType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatFormatGrammarConfigType
+value: ChatFormatGrammarConfigType = "grammar"
+```
+
+
+## Values
+
+- `"grammar"`
diff --git a/docs/components/chatformatjsonschemaconfig.mdx b/docs/components/chatformatjsonschemaconfig.mdx
new file mode 100644
index 0000000..565e334
--- /dev/null
+++ b/docs/components/chatformatjsonschemaconfig.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatFormatJSONSchemaConfig"
+---
+
+JSON Schema response format for structured outputs
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `json_schema` | [components.ChatJSONSchemaConfig](../components/chatjsonschemaconfig.mdx) | :heavy_check_mark: | JSON Schema configuration object | \{
"description": "A mathematical response",
"name": "math_response",
"schema": \{
"properties": \{
"answer": \{
"type": "number"
}
},
"required": [
"answer"
],
"type": "object"
},
"strict": true
} |
+| `type` | [components.ChatFormatJSONSchemaConfigType](../components/chatformatjsonschemaconfigtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/chatformatjsonschemaconfigtype.mdx b/docs/components/chatformatjsonschemaconfigtype.mdx
new file mode 100644
index 0000000..076ff6d
--- /dev/null
+++ b/docs/components/chatformatjsonschemaconfigtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatFormatJSONSchemaConfigType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatFormatJSONSchemaConfigType
+value: ChatFormatJSONSchemaConfigType = "json_schema"
+```
+
+
+## Values
+
+- `"json_schema"`
diff --git a/docs/components/chatformatpythonconfig.mdx b/docs/components/chatformatpythonconfig.mdx
new file mode 100644
index 0000000..cd0ab7b
--- /dev/null
+++ b/docs/components/chatformatpythonconfig.mdx
@@ -0,0 +1,12 @@
+---
+title: "ChatFormatPythonConfig"
+---
+
+Python code response format
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `type` | [components.ChatFormatPythonConfigType](../components/chatformatpythonconfigtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/chatformatpythonconfigtype.mdx b/docs/components/chatformatpythonconfigtype.mdx
new file mode 100644
index 0000000..5949043
--- /dev/null
+++ b/docs/components/chatformatpythonconfigtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatFormatPythonConfigType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatFormatPythonConfigType
+value: ChatFormatPythonConfigType = "python"
+```
+
+
+## Values
+
+- `"python"`
diff --git a/docs/components/chatformattextconfig.mdx b/docs/components/chatformattextconfig.mdx
new file mode 100644
index 0000000..a539cad
--- /dev/null
+++ b/docs/components/chatformattextconfig.mdx
@@ -0,0 +1,12 @@
+---
+title: "ChatFormatTextConfig"
+---
+
+Default text response format
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `type` | [components.ChatFormatTextConfigType](../components/chatformattextconfigtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/chatformattextconfigtype.mdx b/docs/components/chatformattextconfigtype.mdx
new file mode 100644
index 0000000..f5cbc93
--- /dev/null
+++ b/docs/components/chatformattextconfigtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatFormatTextConfigType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatFormatTextConfigType
+value: ChatFormatTextConfigType = "text"
+```
+
+
+## Values
+
+- `"text"`
diff --git a/docs/components/chatfunctiontool.mdx b/docs/components/chatfunctiontool.mdx
new file mode 100644
index 0000000..41b4523
--- /dev/null
+++ b/docs/components/chatfunctiontool.mdx
@@ -0,0 +1,75 @@
+---
+title: "ChatFunctionTool"
+---
+
+Tool definition for function calling (regular function or OpenRouter built-in server tool)
+
+
+## Supported Types
+
+### `components.ChatFunctionToolFunction`
+
+```python
+value: components.ChatFunctionToolFunction = /* values here */
+```
+
+### `components.AdvisorServerToolOpenRouter`
+
+```python
+value: components.AdvisorServerToolOpenRouter = /* values here */
+```
+
+### `components.BashServerTool`
+
+```python
+value: components.BashServerTool = /* values here */
+```
+
+### `components.DatetimeServerTool`
+
+```python
+value: components.DatetimeServerTool = /* values here */
+```
+
+### `components.FilesServerTool`
+
+```python
+value: components.FilesServerTool = /* values here */
+```
+
+### `components.ImageGenerationServerToolOpenRouter`
+
+```python
+value: components.ImageGenerationServerToolOpenRouter = /* values here */
+```
+
+### `components.ChatSearchModelsServerTool`
+
+```python
+value: components.ChatSearchModelsServerTool = /* values here */
+```
+
+### `components.SubagentServerToolOpenRouter`
+
+```python
+value: components.SubagentServerToolOpenRouter = /* values here */
+```
+
+### `components.WebFetchServerTool`
+
+```python
+value: components.WebFetchServerTool = /* values here */
+```
+
+### `components.OpenRouterWebSearchServerTool`
+
+```python
+value: components.OpenRouterWebSearchServerTool = /* values here */
+```
+
+### `components.ChatWebSearchShorthand`
+
+```python
+value: components.ChatWebSearchShorthand = /* values here */
+```
+
diff --git a/docs/components/chatfunctiontoolfunction.mdx b/docs/components/chatfunctiontoolfunction.mdx
new file mode 100644
index 0000000..7619eec
--- /dev/null
+++ b/docs/components/chatfunctiontoolfunction.mdx
@@ -0,0 +1,11 @@
+---
+title: "ChatFunctionToolFunction"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.ChatContentCacheControl]](../components/chatcontentcachecontrol.mdx) | :heavy_minus_sign: | Cache control for the content part | \{
"ttl": "5m",
"type": "ephemeral"
} |
+| `function` | [components.ChatFunctionToolFunctionFunction](../components/chatfunctiontoolfunctionfunction.mdx) | :heavy_check_mark: | Function definition for tool calling | \{
"description": "Get the current weather for a location",
"name": "get_weather",
"parameters": \{
"properties": \{
"location": \{
"description": "City name",
"type": "string"
}
},
"required": [
"location"
],
"type": "object"
}
} |
+| `type` | [components.ChatFunctionToolType](../components/chatfunctiontooltype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/chatfunctiontoolfunctionfunction.mdx b/docs/components/chatfunctiontoolfunctionfunction.mdx
new file mode 100644
index 0000000..e4a50d5
--- /dev/null
+++ b/docs/components/chatfunctiontoolfunctionfunction.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatFunctionToolFunctionFunction"
+---
+
+Function definition for tool calling
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `description` | *Optional[str]* | :heavy_minus_sign: | Function description for the model | Get the current weather for a location |
+| `name` | *str* | :heavy_check_mark: | Function name (a-z, A-Z, 0-9, underscores, dashes, max 64 chars) | get_weather |
+| `parameters` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | Function parameters as JSON Schema object | \{
"properties": \{
"location": \{
"description": "City name",
"type": "string"
}
},
"required": [
"location"
],
"type": "object"
} |
+| `strict` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable strict schema adherence | false |
\ No newline at end of file
diff --git a/docs/components/chatfunctiontooltype.mdx b/docs/components/chatfunctiontooltype.mdx
new file mode 100644
index 0000000..97fa5f4
--- /dev/null
+++ b/docs/components/chatfunctiontooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatFunctionToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatFunctionToolType
+value: ChatFunctionToolType = "function"
+```
+
+
+## Values
+
+- `"function"`
diff --git a/docs/components/chatjsonschemaconfig.mdx b/docs/components/chatjsonschemaconfig.mdx
new file mode 100644
index 0000000..9d355f0
--- /dev/null
+++ b/docs/components/chatjsonschemaconfig.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatJSONSchemaConfig"
+---
+
+JSON Schema configuration object
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `description` | *Optional[str]* | :heavy_minus_sign: | Schema description for the model | A mathematical response |
+| `name` | *str* | :heavy_check_mark: | Schema name (a-z, A-Z, 0-9, underscores, dashes, max 64 chars) | math_response |
+| `schema_` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | JSON Schema object | \{
"properties": \{
"answer": \{
"type": "number"
}
},
"required": [
"answer"
],
"type": "object"
} |
+| `strict` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable strict schema adherence | false |
\ No newline at end of file
diff --git a/docs/components/chatmessages.mdx b/docs/components/chatmessages.mdx
new file mode 100644
index 0000000..54e55e0
--- /dev/null
+++ b/docs/components/chatmessages.mdx
@@ -0,0 +1,39 @@
+---
+title: "ChatMessages"
+---
+
+Chat completion message with role-based discrimination
+
+
+## Supported Types
+
+### `components.ChatAssistantMessage`
+
+```python
+value: components.ChatAssistantMessage = /* values here */
+```
+
+### `components.ChatDeveloperMessage`
+
+```python
+value: components.ChatDeveloperMessage = /* values here */
+```
+
+### `components.ChatSystemMessage`
+
+```python
+value: components.ChatSystemMessage = /* values here */
+```
+
+### `components.ChatToolMessage`
+
+```python
+value: components.ChatToolMessage = /* values here */
+```
+
+### `components.ChatUserMessage`
+
+```python
+value: components.ChatUserMessage = /* values here */
+```
+
diff --git a/docs/components/chatnamedtoolchoice.mdx b/docs/components/chatnamedtoolchoice.mdx
new file mode 100644
index 0000000..1c98093
--- /dev/null
+++ b/docs/components/chatnamedtoolchoice.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatNamedToolChoice"
+---
+
+Named tool choice for specific function
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `function` | [components.ChatNamedToolChoiceFunction](../components/chatnamedtoolchoicefunction.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.ChatNamedToolChoiceType](../components/chatnamedtoolchoicetype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/chatnamedtoolchoicefunction.mdx b/docs/components/chatnamedtoolchoicefunction.mdx
new file mode 100644
index 0000000..1824174
--- /dev/null
+++ b/docs/components/chatnamedtoolchoicefunction.mdx
@@ -0,0 +1,9 @@
+---
+title: "ChatNamedToolChoiceFunction"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------- | --------------------- | --------------------- | --------------------- | --------------------- |
+| `name` | *str* | :heavy_check_mark: | Function name to call | get_weather |
\ No newline at end of file
diff --git a/docs/components/chatnamedtoolchoicetype.mdx b/docs/components/chatnamedtoolchoicetype.mdx
new file mode 100644
index 0000000..0368099
--- /dev/null
+++ b/docs/components/chatnamedtoolchoicetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatNamedToolChoiceType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatNamedToolChoiceType
+value: ChatNamedToolChoiceType = "function"
+```
+
+
+## Values
+
+- `"function"`
diff --git a/docs/components/chatreasoningsummaryverbosityenum.mdx b/docs/components/chatreasoningsummaryverbosityenum.mdx
new file mode 100644
index 0000000..220be03
--- /dev/null
+++ b/docs/components/chatreasoningsummaryverbosityenum.mdx
@@ -0,0 +1,21 @@
+---
+title: "ChatReasoningSummaryVerbosityEnum"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatReasoningSummaryVerbosityEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ChatReasoningSummaryVerbosityEnum = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"concise"`
+- `"detailed"`
diff --git a/docs/components/chatrequest.mdx b/docs/components/chatrequest.mdx
new file mode 100644
index 0000000..1cc4f0f
--- /dev/null
+++ b/docs/components/chatrequest.mdx
@@ -0,0 +1,49 @@
+---
+title: "ChatRequest"
+---
+
+Chat completion request parameters
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `debug` | [Optional[components.ChatDebugOptions]](../components/chatdebugoptions.mdx) | :heavy_minus_sign: | Debug options for inspecting request transformations (streaming only) | \{
"echo_upstream_body": true
} |
+| `frequency_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | Frequency penalty (-2.0 to 2.0) | 0 |
+| `image_config` | Dict[str, [components.ImageConfig](../components/imageconfig.mdx)] | :heavy_minus_sign: | Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details. | \{
"aspect_ratio": "16:9",
"quality": "high"
} |
+| `logit_bias` | Dict[str, *float*] | :heavy_minus_sign: | Token logit bias adjustments | \{
"50256": -100
} |
+| `logprobs` | *OptionalNullable[bool]* | :heavy_minus_sign: | Return log probabilities | false |
+| `max_completion_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Maximum tokens in completion | 100 |
+| `max_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Maximum tokens (deprecated, use max_completion_tokens). Note: some providers enforce a minimum of 16. | 100 |
+| `messages` | List[[components.ChatMessages](../components/chatmessages.mdx)] | :heavy_check_mark: | List of messages for the conversation | [
\{
"content": "Hello!",
"role": "user"
}
] |
+| `metadata` | Dict[str, *str*] | :heavy_minus_sign: | Key-value pairs for additional object information (max 16 pairs, 64 char keys, 512 char values) | \{
"session_id": "session-456",
"user_id": "user-123"
} |
+| `min_p` | *OptionalNullable[float]* | :heavy_minus_sign: | Minimum probability threshold relative to the most likely token. Tokens with probability below min_p * (probability of top token) are filtered out. Not all providers support this parameter. | 0.1 |
+| `modalities` | List[[components.Modality](../components/modality.mdx)] | :heavy_minus_sign: | Output modalities for the response. Supported values are "text", "image", and "audio". | [
"text",
"image"
] |
+| `model` | *Optional[str]* | :heavy_minus_sign: | Model to use for completion | openai/gpt-4 |
+| `models` | List[*str*] | :heavy_minus_sign: | Models to use for completion | [
"openai/gpt-4",
"openai/gpt-4o"
] |
+| `parallel_tool_calls` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enable parallel function calling during tool use. When true, the model may generate multiple tool calls in a single response. | true |
+| `plugins` | List[[components.ChatRequestPlugin](../components/chatrequestplugin.mdx)] | :heavy_minus_sign: | Plugins you want to enable for this request, including their settings. | |
+| `presence_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | Presence penalty (-2.0 to 2.0) | 0 |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../components/providerpreferences.mdx) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | \{
"allow_fallbacks": true
} |
+| `reasoning` | [Optional[components.ChatRequestReasoning]](../components/chatrequestreasoning.mdx) | :heavy_minus_sign: | Configuration options for reasoning models | \{
"effort": "medium",
"summary": "concise"
} |
+| `reasoning_effort` | [OptionalNullable[components.ChatRequestReasoningEffort]](../components/chatrequestreasoningeffort.mdx) | :heavy_minus_sign: | Shorthand for setting reasoning effort. Equivalent to setting reasoning.effort. Cannot be used simultaneously with reasoning.effort if they differ. | medium |
+| `repetition_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | Penalizes tokens based on how much they have already appeared in the text. A value of 1.0 means no penalty. Values above 1.0 penalize repeated tokens more strongly. Not all providers support this parameter. | 1 |
+| `response_format` | [Optional[components.ResponseFormat]](../components/responseformat.mdx) | :heavy_minus_sign: | Response format configuration | \{
"type": "json_object"
} |
+| `seed` | *OptionalNullable[int]* | :heavy_minus_sign: | Random seed for deterministic outputs | 42 |
+| `service_tier` | [OptionalNullable[components.ChatRequestServiceTier]](../components/chatrequestservicetier.mdx) | :heavy_minus_sign: | The service tier to use for processing this request. | auto |
+| `session_id` | *Optional[str]* | :heavy_minus_sign: | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | |
+| `stop` | [OptionalNullable[components.Stop]](../components/stop.mdx) | :heavy_minus_sign: | Stop sequences (up to 4) | [
""
] |
+| `stop_server_tools_when` | List[[components.StopServerToolsWhenCondition](../components/stopservertoolswhencondition.mdx)] | :heavy_minus_sign: | Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`. | [
\{
"step_count": 5,
"type": "step_count_is"
},
\{
"max_cost_in_dollars": 0.5,
"type": "max_cost"
}
] |
+| `stream` | *Optional[bool]* | :heavy_minus_sign: | Enable streaming response | false |
+| `stream_options` | [OptionalNullable[components.ChatStreamOptions]](../components/chatstreamoptions.mdx) | :heavy_minus_sign: | Streaming configuration options | \{
"include_usage": true
} |
+| `temperature` | *OptionalNullable[float]* | :heavy_minus_sign: | Sampling temperature (0-2) | 0.7 |
+| `tool_choice` | [Optional[components.ChatToolChoice]](../components/chattoolchoice.mdx) | :heavy_minus_sign: | Tool choice configuration | auto |
+| `tools` | List[[components.ChatFunctionTool](../components/chatfunctiontool.mdx)] | :heavy_minus_sign: | Available tools for function calling | [
\{
"function": \{
"description": "Get weather",
"name": "get_weather"
},
"type": "function"
}
] |
+| `top_a` | *OptionalNullable[float]* | :heavy_minus_sign: | Consider only tokens with "sufficiently high" probabilities based on the probability of the most likely token. Not all providers support this parameter. | 0 |
+| `top_k` | *OptionalNullable[int]* | :heavy_minus_sign: | Limits the model to choose from the top K most likely tokens at each step. A value of 1 means the model will always pick the most likely next token. Not all providers support this parameter. | 40 |
+| `top_logprobs` | *OptionalNullable[int]* | :heavy_minus_sign: | Number of top log probabilities to return (0-20) | 5 |
+| `top_p` | *OptionalNullable[float]* | :heavy_minus_sign: | Nucleus sampling parameter (0-1) | 1 |
+| `trace` | [Optional[components.TraceConfig]](../components/traceconfig.mdx) | :heavy_minus_sign: | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
+| `user` | *Optional[str]* | :heavy_minus_sign: | Unique user identifier | user-123 |
\ No newline at end of file
diff --git a/docs/components/chatrequesteffort.mdx b/docs/components/chatrequesteffort.mdx
new file mode 100644
index 0000000..643c118
--- /dev/null
+++ b/docs/components/chatrequesteffort.mdx
@@ -0,0 +1,27 @@
+---
+title: "ChatRequestEffort"
+---
+
+Constrains effort on reasoning for reasoning models
+
+## Example Usage
+
+```python
+from openrouter.components import ChatRequestEffort
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ChatRequestEffort = "max"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"max"`
+- `"xhigh"`
+- `"high"`
+- `"medium"`
+- `"low"`
+- `"minimal"`
+- `"none"`
diff --git a/docs/components/chatrequestplugin.mdx b/docs/components/chatrequestplugin.mdx
new file mode 100644
index 0000000..2ef1d9e
--- /dev/null
+++ b/docs/components/chatrequestplugin.mdx
@@ -0,0 +1,60 @@
+---
+title: "ChatRequestPlugin"
+---
+
+## Supported Types
+
+### `components.AutoRouterPlugin`
+
+```python
+value: components.AutoRouterPlugin = /* values here */
+```
+
+### `components.ContextCompressionPlugin`
+
+```python
+value: components.ContextCompressionPlugin = /* values here */
+```
+
+### `components.FileParserPlugin`
+
+```python
+value: components.FileParserPlugin = /* values here */
+```
+
+### `components.FusionPlugin`
+
+```python
+value: components.FusionPlugin = /* values here */
+```
+
+### `components.ModerationPlugin`
+
+```python
+value: components.ModerationPlugin = /* values here */
+```
+
+### `components.ParetoRouterPlugin`
+
+```python
+value: components.ParetoRouterPlugin = /* values here */
+```
+
+### `components.ResponseHealingPlugin`
+
+```python
+value: components.ResponseHealingPlugin = /* values here */
+```
+
+### `components.WebSearchPlugin`
+
+```python
+value: components.WebSearchPlugin = /* values here */
+```
+
+### `components.WebFetchPlugin`
+
+```python
+value: components.WebFetchPlugin = /* values here */
+```
+
diff --git a/docs/components/chatrequestreasoning.mdx b/docs/components/chatrequestreasoning.mdx
new file mode 100644
index 0000000..d9a271d
--- /dev/null
+++ b/docs/components/chatrequestreasoning.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatRequestReasoning"
+---
+
+Configuration options for reasoning models
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `effort` | [OptionalNullable[components.ChatRequestEffort]](../components/chatrequesteffort.mdx) | :heavy_minus_sign: | Constrains effort on reasoning for reasoning models | medium |
+| `summary` | [OptionalNullable[components.ChatReasoningSummaryVerbosityEnum]](../components/chatreasoningsummaryverbosityenum.mdx) | :heavy_minus_sign: | N/A | concise |
\ No newline at end of file
diff --git a/docs/components/chatrequestreasoningeffort.mdx b/docs/components/chatrequestreasoningeffort.mdx
new file mode 100644
index 0000000..648e271
--- /dev/null
+++ b/docs/components/chatrequestreasoningeffort.mdx
@@ -0,0 +1,27 @@
+---
+title: "ChatRequestReasoningEffort"
+---
+
+Shorthand for setting reasoning effort. Equivalent to setting reasoning.effort. Cannot be used simultaneously with reasoning.effort if they differ.
+
+## Example Usage
+
+```python
+from openrouter.components import ChatRequestReasoningEffort
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ChatRequestReasoningEffort = "max"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"max"`
+- `"xhigh"`
+- `"high"`
+- `"medium"`
+- `"low"`
+- `"minimal"`
+- `"none"`
diff --git a/docs/components/chatrequestservicetier.mdx b/docs/components/chatrequestservicetier.mdx
new file mode 100644
index 0000000..66c2cd5
--- /dev/null
+++ b/docs/components/chatrequestservicetier.mdx
@@ -0,0 +1,25 @@
+---
+title: "ChatRequestServiceTier"
+---
+
+The service tier to use for processing this request.
+
+## Example Usage
+
+```python
+from openrouter.components import ChatRequestServiceTier
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ChatRequestServiceTier = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"default"`
+- `"flex"`
+- `"priority"`
+- `"scale"`
diff --git a/docs/components/chatresult.mdx b/docs/components/chatresult.mdx
new file mode 100644
index 0000000..94e3c0c
--- /dev/null
+++ b/docs/components/chatresult.mdx
@@ -0,0 +1,20 @@
+---
+title: "ChatResult"
+---
+
+Chat completion response
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `choices` | List[[components.ChatChoice](../components/chatchoice.mdx)] | :heavy_check_mark: | List of completion choices | |
+| `created` | *int* | :heavy_check_mark: | Unix timestamp of creation | 1677652288 |
+| `id` | *str* | :heavy_check_mark: | Unique completion identifier | chatcmpl-123 |
+| `model` | *str* | :heavy_check_mark: | Model used for completion | openai/gpt-4 |
+| `object` | [components.ChatResultObject](../components/chatresultobject.mdx) | :heavy_check_mark: | N/A | |
+| `openrouter_metadata` | [Optional[components.OpenRouterMetadata]](../components/openroutermetadata.mdx) | :heavy_minus_sign: | N/A | \{
"attempt": 1,
"endpoints": \{
"available": [
\{
"model": "openai/gpt-4o",
"provider": "OpenAI",
"selected": true
}
],
"total": 1
},
"is_byok": false,
"region": "iad",
"requested": "openai/gpt-4o",
"strategy": "direct",
"summary": "available=1, selected=OpenAI"
} |
+| `service_tier` | *OptionalNullable[str]* | :heavy_minus_sign: | The service tier used by the upstream provider for this request | default |
+| `system_fingerprint` | *Nullable[str]* | :heavy_check_mark: | System fingerprint | fp_44709d6fcb |
+| `usage` | [Optional[components.ChatUsage]](../components/chatusage.mdx) | :heavy_minus_sign: | Token usage statistics | \{
"completion_tokens": 15,
"completion_tokens_details": \{
"reasoning_tokens": 5
},
"cost": 0.0012,
"cost_details": \{
"upstream_inference_completions_cost": 0.0004,
"upstream_inference_cost": null,
"upstream_inference_prompt_cost": 0.0008
},
"is_byok": false,
"prompt_tokens": 10,
"prompt_tokens_details": \{
"cached_tokens": 2
},
"server_tool_use_details": \{
"tool_calls_executed": 2,
"tool_calls_requested": 2
},
"total_tokens": 25
} |
\ No newline at end of file
diff --git a/docs/components/chatresultobject.mdx b/docs/components/chatresultobject.mdx
new file mode 100644
index 0000000..c4c06a3
--- /dev/null
+++ b/docs/components/chatresultobject.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatResultObject"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatResultObject
+value: ChatResultObject = "chat.completion"
+```
+
+
+## Values
+
+- `"chat.completion"`
diff --git a/docs/components/chatsearchmodelsservertool.mdx b/docs/components/chatsearchmodelsservertool.mdx
new file mode 100644
index 0000000..18b2f4e
--- /dev/null
+++ b/docs/components/chatsearchmodelsservertool.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatSearchModelsServerTool"
+---
+
+OpenRouter built-in server tool: searches and filters AI models available on OpenRouter
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `parameters` | [Optional[components.SearchModelsServerToolConfig]](../components/searchmodelsservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for the openrouter:experimental__search_models server tool | \{
"max_results": 5
} |
+| `type` | [components.ChatSearchModelsServerToolType](../components/chatsearchmodelsservertooltype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/chatsearchmodelsservertooltype.mdx b/docs/components/chatsearchmodelsservertooltype.mdx
new file mode 100644
index 0000000..8a51a60
--- /dev/null
+++ b/docs/components/chatsearchmodelsservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatSearchModelsServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatSearchModelsServerToolType
+value: ChatSearchModelsServerToolType = "openrouter:experimental__search_models"
+```
+
+
+## Values
+
+- `"openrouter:experimental__search_models"`
diff --git a/docs/components/chatservertoolchoice.mdx b/docs/components/chatservertoolchoice.mdx
new file mode 100644
index 0000000..9eac815
--- /dev/null
+++ b/docs/components/chatservertoolchoice.mdx
@@ -0,0 +1,12 @@
+---
+title: "ChatServerToolChoice"
+---
+
+OpenRouter extension: force a specific server tool by naming it directly in `tool_choice.type` instead of wrapping it in `{ type: "function", function: { name } }`.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `type` | *str* | :heavy_check_mark: | OpenRouter server-tool type to force (e.g. `openrouter:web_search`, `web_search`, `web_search_preview`). | openrouter:web_search |
\ No newline at end of file
diff --git a/docs/components/chatstreamchoice.mdx b/docs/components/chatstreamchoice.mdx
new file mode 100644
index 0000000..d6bd70f
--- /dev/null
+++ b/docs/components/chatstreamchoice.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatStreamChoice"
+---
+
+Streaming completion choice chunk
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `delta` | [components.ChatStreamDelta](../components/chatstreamdelta.mdx) | :heavy_check_mark: | Delta changes in streaming response | \{
"content": "Hello",
"role": "assistant"
} |
+| `finish_reason` | [Nullable[components.ChatFinishReasonEnum]](../components/chatfinishreasonenum.mdx) | :heavy_check_mark: | N/A | stop |
+| `index` | *int* | :heavy_check_mark: | Choice index | 0 |
+| `logprobs` | [OptionalNullable[components.ChatTokenLogprobs]](../components/chattokenlogprobs.mdx) | :heavy_minus_sign: | Log probabilities for the completion | \{
"content": [
\{
"bytes": null,
"logprob": -0.612345,
"token": " Hello",
"top_logprobs": []
}
],
"refusal": null
} |
\ No newline at end of file
diff --git a/docs/components/chatstreamchunk.mdx b/docs/components/chatstreamchunk.mdx
new file mode 100644
index 0000000..3adbd98
--- /dev/null
+++ b/docs/components/chatstreamchunk.mdx
@@ -0,0 +1,21 @@
+---
+title: "ChatStreamChunk"
+---
+
+Streaming chat completion chunk
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `choices` | List[[components.ChatStreamChoice](../components/chatstreamchoice.mdx)] | :heavy_check_mark: | List of streaming chunk choices | |
+| `created` | *int* | :heavy_check_mark: | Unix timestamp of creation | 1677652288 |
+| `error` | [Optional[components.ChatStreamChunkError]](../components/chatstreamchunkerror.mdx) | :heavy_minus_sign: | Error information | \{
"code": 429,
"message": "Rate limit exceeded",
"metadata": \{
"error_type": "rate_limit_exceeded"
}
} |
+| `id` | *str* | :heavy_check_mark: | Unique chunk identifier | chatcmpl-123 |
+| `model` | *str* | :heavy_check_mark: | Model used for completion | openai/gpt-4 |
+| `object` | [components.ChatStreamChunkObject](../components/chatstreamchunkobject.mdx) | :heavy_check_mark: | N/A | |
+| `openrouter_metadata` | [Optional[components.OpenRouterMetadata]](../components/openroutermetadata.mdx) | :heavy_minus_sign: | N/A | \{
"attempt": 1,
"endpoints": \{
"available": [
\{
"model": "openai/gpt-4o",
"provider": "OpenAI",
"selected": true
}
],
"total": 1
},
"is_byok": false,
"region": "iad",
"requested": "openai/gpt-4o",
"strategy": "direct",
"summary": "available=1, selected=OpenAI"
} |
+| `service_tier` | *OptionalNullable[str]* | :heavy_minus_sign: | The service tier used by the upstream provider for this request | default |
+| `system_fingerprint` | *Optional[str]* | :heavy_minus_sign: | System fingerprint | fp_44709d6fcb |
+| `usage` | [Optional[components.ChatUsage]](../components/chatusage.mdx) | :heavy_minus_sign: | Token usage statistics | \{
"completion_tokens": 15,
"completion_tokens_details": \{
"reasoning_tokens": 5
},
"cost": 0.0012,
"cost_details": \{
"upstream_inference_completions_cost": 0.0004,
"upstream_inference_cost": null,
"upstream_inference_prompt_cost": 0.0008
},
"is_byok": false,
"prompt_tokens": 10,
"prompt_tokens_details": \{
"cached_tokens": 2
},
"server_tool_use_details": \{
"tool_calls_executed": 2,
"tool_calls_requested": 2
},
"total_tokens": 25
} |
\ No newline at end of file
diff --git a/docs/components/chatstreamchunkerror.mdx b/docs/components/chatstreamchunkerror.mdx
new file mode 100644
index 0000000..e04b55b
--- /dev/null
+++ b/docs/components/chatstreamchunkerror.mdx
@@ -0,0 +1,14 @@
+---
+title: "ChatStreamChunkError"
+---
+
+Error information
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `code` | *int* | :heavy_check_mark: | Error code | 429 |
+| `message` | *str* | :heavy_check_mark: | Error message | Rate limit exceeded |
+| `metadata` | [Optional[components.ChatStreamChunkMetadata]](../components/chatstreamchunkmetadata.mdx) | :heavy_minus_sign: | Structured error metadata | |
\ No newline at end of file
diff --git a/docs/components/chatstreamchunkmetadata.mdx b/docs/components/chatstreamchunkmetadata.mdx
new file mode 100644
index 0000000..ce80e38
--- /dev/null
+++ b/docs/components/chatstreamchunkmetadata.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatStreamChunkMetadata"
+---
+
+Structured error metadata
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
+| `error_type` | [components.APIErrorType](../components/apierrortype.mdx) | :heavy_check_mark: | Canonical OpenRouter error type, stable across all API formats | rate_limit_exceeded |
+| `provider_code` | *Optional[str]* | :heavy_minus_sign: | Upstream provider-specific error code, when available | |
\ No newline at end of file
diff --git a/docs/components/chatstreamchunkobject.mdx b/docs/components/chatstreamchunkobject.mdx
new file mode 100644
index 0000000..e07fc24
--- /dev/null
+++ b/docs/components/chatstreamchunkobject.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatStreamChunkObject"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatStreamChunkObject
+value: ChatStreamChunkObject = "chat.completion.chunk"
+```
+
+
+## Values
+
+- `"chat.completion.chunk"`
diff --git a/docs/components/chatstreamdelta.mdx b/docs/components/chatstreamdelta.mdx
new file mode 100644
index 0000000..ca45ea3
--- /dev/null
+++ b/docs/components/chatstreamdelta.mdx
@@ -0,0 +1,18 @@
+---
+title: "ChatStreamDelta"
+---
+
+Delta changes in streaming response
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `audio` | [Optional[components.ChatAudioOutput]](../components/chataudiooutput.mdx) | :heavy_minus_sign: | N/A | \{
"data": "UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQoGAACBhYqFbF1f",
"expires_at": 1677652400,
"id": "audio_abc123",
"transcript": "Hello! How can I help you today?"
} |
+| `content` | *OptionalNullable[str]* | :heavy_minus_sign: | Message content delta | Hello |
+| `reasoning` | *OptionalNullable[str]* | :heavy_minus_sign: | Reasoning content delta | I need to |
+| `reasoning_details` | List[[components.ReasoningDetailUnion](../components/reasoningdetailunion.mdx)] | :heavy_minus_sign: | Reasoning details for extended thinking models | [
\{
"text": "Let me think about this...",
"type": "text"
}
] |
+| `refusal` | *OptionalNullable[str]* | :heavy_minus_sign: | Refusal message delta | null |
+| `role` | [Optional[components.ChatStreamDeltaRole]](../components/chatstreamdeltarole.mdx) | :heavy_minus_sign: | The role of the message author | assistant |
+| `tool_calls` | List[[components.ChatStreamToolCall](../components/chatstreamtoolcall.mdx)] | :heavy_minus_sign: | Tool calls delta | |
\ No newline at end of file
diff --git a/docs/components/chatstreamdeltarole.mdx b/docs/components/chatstreamdeltarole.mdx
new file mode 100644
index 0000000..775d363
--- /dev/null
+++ b/docs/components/chatstreamdeltarole.mdx
@@ -0,0 +1,17 @@
+---
+title: "ChatStreamDeltaRole"
+---
+
+The role of the message author
+
+## Example Usage
+
+```python
+from openrouter.components import ChatStreamDeltaRole
+value: ChatStreamDeltaRole = "assistant"
+```
+
+
+## Values
+
+- `"assistant"`
diff --git a/docs/components/chatstreamingresponse.mdx b/docs/components/chatstreamingresponse.mdx
new file mode 100644
index 0000000..bd7543c
--- /dev/null
+++ b/docs/components/chatstreamingresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ChatStreamingResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.ChatStreamChunk](../components/chatstreamchunk.mdx) | :heavy_check_mark: | Streaming chat completion chunk | \{
"choices": [
\{
"delta": \{
"content": "Hello",
"role": "assistant"
},
"finish_reason": null,
"index": 0
}
],
"created": 1677652288,
"id": "chatcmpl-123",
"model": "openai/gpt-4",
"object": "chat.completion.chunk"
} |
\ No newline at end of file
diff --git a/docs/components/chatstreamoptions.md b/docs/components/chatstreamoptions.mdx
similarity index 98%
rename from docs/components/chatstreamoptions.md
rename to docs/components/chatstreamoptions.mdx
index ade029e..430faf2 100644
--- a/docs/components/chatstreamoptions.md
+++ b/docs/components/chatstreamoptions.mdx
@@ -1,4 +1,6 @@
-# ChatStreamOptions
+---
+title: "ChatStreamOptions"
+---
Streaming configuration options
diff --git a/docs/components/chatstreamtoolcall.mdx b/docs/components/chatstreamtoolcall.mdx
new file mode 100644
index 0000000..beba823
--- /dev/null
+++ b/docs/components/chatstreamtoolcall.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatStreamToolCall"
+---
+
+Tool call delta for streaming responses
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `function` | [Optional[components.ChatStreamToolCallFunction]](../components/chatstreamtoolcallfunction.mdx) | :heavy_minus_sign: | Function call details | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | Tool call identifier | call_abc123 |
+| `index` | *int* | :heavy_check_mark: | Tool call index in the array | 0 |
+| `type` | [Optional[components.ChatStreamToolCallType]](../components/chatstreamtoolcalltype.mdx) | :heavy_minus_sign: | Tool call type | function |
\ No newline at end of file
diff --git a/docs/components/chatstreamtoolcallfunction.mdx b/docs/components/chatstreamtoolcallfunction.mdx
new file mode 100644
index 0000000..12a71db
--- /dev/null
+++ b/docs/components/chatstreamtoolcallfunction.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatStreamToolCallFunction"
+---
+
+Function call details
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `arguments` | *Optional[str]* | :heavy_minus_sign: | Function arguments as JSON string | \{"location": "..."} |
+| `name` | *Optional[str]* | :heavy_minus_sign: | Function name | get_weather |
\ No newline at end of file
diff --git a/docs/components/chatstreamtoolcalltype.mdx b/docs/components/chatstreamtoolcalltype.mdx
new file mode 100644
index 0000000..602231c
--- /dev/null
+++ b/docs/components/chatstreamtoolcalltype.mdx
@@ -0,0 +1,17 @@
+---
+title: "ChatStreamToolCallType"
+---
+
+Tool call type
+
+## Example Usage
+
+```python
+from openrouter.components import ChatStreamToolCallType
+value: ChatStreamToolCallType = "function"
+```
+
+
+## Values
+
+- `"function"`
diff --git a/docs/components/chatsystemmessage.mdx b/docs/components/chatsystemmessage.mdx
new file mode 100644
index 0000000..7f6ccc9
--- /dev/null
+++ b/docs/components/chatsystemmessage.mdx
@@ -0,0 +1,14 @@
+---
+title: "ChatSystemMessage"
+---
+
+System message for setting behavior
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `content` | [components.ChatSystemMessageContent](../components/chatsystemmessagecontent.mdx) | :heavy_check_mark: | System message content | You are a helpful assistant. |
+| `name` | *Optional[str]* | :heavy_minus_sign: | Optional name for the system message | Assistant Config |
+| `role` | [components.ChatSystemMessageRole](../components/chatsystemmessagerole.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/chatsystemmessagecontent.mdx b/docs/components/chatsystemmessagecontent.mdx
new file mode 100644
index 0000000..a8bda9f
--- /dev/null
+++ b/docs/components/chatsystemmessagecontent.mdx
@@ -0,0 +1,21 @@
+---
+title: "ChatSystemMessageContent"
+---
+
+System message content
+
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.ChatContentText]`
+
+```python
+value: List[components.ChatContentText] = /* values here */
+```
+
diff --git a/docs/components/chatsystemmessagerole.mdx b/docs/components/chatsystemmessagerole.mdx
new file mode 100644
index 0000000..968ecf2
--- /dev/null
+++ b/docs/components/chatsystemmessagerole.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatSystemMessageRole"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatSystemMessageRole
+value: ChatSystemMessageRole = "system"
+```
+
+
+## Values
+
+- `"system"`
diff --git a/docs/components/chattokenlogprob.mdx b/docs/components/chattokenlogprob.mdx
new file mode 100644
index 0000000..f6b39af
--- /dev/null
+++ b/docs/components/chattokenlogprob.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatTokenLogprob"
+---
+
+Token log probability information
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `bytes_` | List[*int*] | :heavy_check_mark: | UTF-8 bytes of the token |
+| `logprob` | *float* | :heavy_check_mark: | Log probability of the token |
+| `token` | *str* | :heavy_check_mark: | The token |
+| `top_logprobs` | List[[components.ChatTokenLogprobTopLogprob](../components/chattokenlogprobtoplogprob.mdx)] | :heavy_check_mark: | Top alternative tokens with probabilities |
\ No newline at end of file
diff --git a/docs/components/chattokenlogprobs.mdx b/docs/components/chattokenlogprobs.mdx
new file mode 100644
index 0000000..068610e
--- /dev/null
+++ b/docs/components/chattokenlogprobs.mdx
@@ -0,0 +1,13 @@
+---
+title: "ChatTokenLogprobs"
+---
+
+Log probabilities for the completion
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `content` | List[[components.ChatTokenLogprob](../components/chattokenlogprob.mdx)] | :heavy_check_mark: | Log probabilities for content tokens |
+| `refusal` | List[[components.ChatTokenLogprob](../components/chattokenlogprob.mdx)] | :heavy_minus_sign: | Log probabilities for refusal tokens |
\ No newline at end of file
diff --git a/docs/components/responseoutputtexttoplogprob.md b/docs/components/chattokenlogprobtoplogprob.mdx
similarity index 90%
rename from docs/components/responseoutputtexttoplogprob.md
rename to docs/components/chattokenlogprobtoplogprob.mdx
index 73e27f2..8981367 100644
--- a/docs/components/responseoutputtexttoplogprob.md
+++ b/docs/components/chattokenlogprobtoplogprob.mdx
@@ -1,5 +1,6 @@
-# ResponseOutputTextTopLogprob
-
+---
+title: "ChatTokenLogprobTopLogprob"
+---
## Fields
diff --git a/docs/components/chattoolcall.mdx b/docs/components/chattoolcall.mdx
new file mode 100644
index 0000000..09bffc9
--- /dev/null
+++ b/docs/components/chattoolcall.mdx
@@ -0,0 +1,14 @@
+---
+title: "ChatToolCall"
+---
+
+Tool call made by the assistant
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `function` | [components.ChatToolCallFunction](../components/chattoolcallfunction.mdx) | :heavy_check_mark: | N/A |
+| `id` | *str* | :heavy_check_mark: | Tool call identifier |
+| `type` | [components.ChatToolCallType](../components/chattoolcalltype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/chattoolcallfunction.mdx b/docs/components/chattoolcallfunction.mdx
new file mode 100644
index 0000000..bf3ffca
--- /dev/null
+++ b/docs/components/chattoolcallfunction.mdx
@@ -0,0 +1,10 @@
+---
+title: "ChatToolCallFunction"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- |
+| `arguments` | *str* | :heavy_check_mark: | Function arguments as JSON string |
+| `name` | *str* | :heavy_check_mark: | Function name to call |
\ No newline at end of file
diff --git a/docs/components/chattoolcalltype.mdx b/docs/components/chattoolcalltype.mdx
new file mode 100644
index 0000000..db90aff
--- /dev/null
+++ b/docs/components/chattoolcalltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatToolCallType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatToolCallType
+value: ChatToolCallType = "function"
+```
+
+
+## Values
+
+- `"function"`
diff --git a/docs/components/chattoolchoice.mdx b/docs/components/chattoolchoice.mdx
new file mode 100644
index 0000000..c80ecda
--- /dev/null
+++ b/docs/components/chattoolchoice.mdx
@@ -0,0 +1,39 @@
+---
+title: "ChatToolChoice"
+---
+
+Tool choice configuration
+
+
+## Supported Types
+
+### `components.ChatToolChoiceNone`
+
+```python
+value: components.ChatToolChoiceNone = /* values here */
+```
+
+### `components.ChatToolChoiceAuto`
+
+```python
+value: components.ChatToolChoiceAuto = /* values here */
+```
+
+### `components.ChatToolChoiceRequired`
+
+```python
+value: components.ChatToolChoiceRequired = /* values here */
+```
+
+### `components.ChatNamedToolChoice`
+
+```python
+value: components.ChatNamedToolChoice = /* values here */
+```
+
+### `components.ChatServerToolChoice`
+
+```python
+value: components.ChatServerToolChoice = /* values here */
+```
+
diff --git a/docs/components/chattoolchoiceauto.mdx b/docs/components/chattoolchoiceauto.mdx
new file mode 100644
index 0000000..addf783
--- /dev/null
+++ b/docs/components/chattoolchoiceauto.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatToolChoiceAuto"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatToolChoiceAuto
+value: ChatToolChoiceAuto = "auto"
+```
+
+
+## Values
+
+- `"auto"`
diff --git a/docs/components/chattoolchoicenone.mdx b/docs/components/chattoolchoicenone.mdx
new file mode 100644
index 0000000..edaefb9
--- /dev/null
+++ b/docs/components/chattoolchoicenone.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatToolChoiceNone"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatToolChoiceNone
+value: ChatToolChoiceNone = "none"
+```
+
+
+## Values
+
+- `"none"`
diff --git a/docs/components/chattoolchoicerequired.mdx b/docs/components/chattoolchoicerequired.mdx
new file mode 100644
index 0000000..dfea698
--- /dev/null
+++ b/docs/components/chattoolchoicerequired.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatToolChoiceRequired"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatToolChoiceRequired
+value: ChatToolChoiceRequired = "required"
+```
+
+
+## Values
+
+- `"required"`
diff --git a/docs/components/chattoolmessage.mdx b/docs/components/chattoolmessage.mdx
new file mode 100644
index 0000000..bd39bbf
--- /dev/null
+++ b/docs/components/chattoolmessage.mdx
@@ -0,0 +1,14 @@
+---
+title: "ChatToolMessage"
+---
+
+Tool response message
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `content` | [components.ChatToolMessageContent](../components/chattoolmessagecontent.mdx) | :heavy_check_mark: | Tool response content | The weather in San Francisco is 72°F and sunny. |
+| `role` | [components.ChatToolMessageRole](../components/chattoolmessagerole.mdx) | :heavy_check_mark: | N/A | |
+| `tool_call_id` | *str* | :heavy_check_mark: | ID of the assistant message tool call this message responds to | call_abc123 |
\ No newline at end of file
diff --git a/docs/components/chattoolmessagecontent.mdx b/docs/components/chattoolmessagecontent.mdx
new file mode 100644
index 0000000..1282e85
--- /dev/null
+++ b/docs/components/chattoolmessagecontent.mdx
@@ -0,0 +1,21 @@
+---
+title: "ChatToolMessageContent"
+---
+
+Tool response content
+
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.ChatContentItems]`
+
+```python
+value: List[components.ChatContentItems] = /* values here */
+```
+
diff --git a/docs/components/chattoolmessagerole.mdx b/docs/components/chattoolmessagerole.mdx
new file mode 100644
index 0000000..4838628
--- /dev/null
+++ b/docs/components/chattoolmessagerole.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatToolMessageRole"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatToolMessageRole
+value: ChatToolMessageRole = "tool"
+```
+
+
+## Values
+
+- `"tool"`
diff --git a/docs/components/chatusage.mdx b/docs/components/chatusage.mdx
new file mode 100644
index 0000000..a45747f
--- /dev/null
+++ b/docs/components/chatusage.mdx
@@ -0,0 +1,20 @@
+---
+title: "ChatUsage"
+---
+
+Token usage statistics
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `completion_tokens` | *int* | :heavy_check_mark: | Number of tokens in the completion | |
+| `completion_tokens_details` | [OptionalNullable[components.ChatUsageCompletionTokensDetails]](../components/chatusagecompletiontokensdetails.mdx) | :heavy_minus_sign: | Detailed completion token usage | |
+| `cost` | *OptionalNullable[float]* | :heavy_minus_sign: | Cost of the completion | |
+| `cost_details` | [OptionalNullable[components.CostDetails]](../components/costdetails.mdx) | :heavy_minus_sign: | Breakdown of upstream inference costs | \{
"upstream_inference_completions_cost": 0.0004,
"upstream_inference_cost": null,
"upstream_inference_prompt_cost": 0.0008
} |
+| `is_byok` | *Optional[bool]* | :heavy_minus_sign: | Whether a request was made using a Bring Your Own Key configuration | |
+| `prompt_tokens` | *int* | :heavy_check_mark: | Number of tokens in the prompt | |
+| `prompt_tokens_details` | [OptionalNullable[components.ChatUsagePromptTokensDetails]](../components/chatusageprompttokensdetails.mdx) | :heavy_minus_sign: | Detailed prompt token usage | |
+| `server_tool_use_details` | [OptionalNullable[components.ServerToolUseDetails]](../components/servertoolusedetails.mdx) | :heavy_minus_sign: | Usage for server-side tool execution (e.g., web search) | |
+| `total_tokens` | *int* | :heavy_check_mark: | Total number of tokens | |
\ No newline at end of file
diff --git a/docs/components/chatusagecompletiontokensdetails.mdx b/docs/components/chatusagecompletiontokensdetails.mdx
new file mode 100644
index 0000000..6ac1392
--- /dev/null
+++ b/docs/components/chatusagecompletiontokensdetails.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatUsageCompletionTokensDetails"
+---
+
+Detailed completion token usage
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------- | ---------------------------- | ---------------------------- | ---------------------------- |
+| `accepted_prediction_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Accepted prediction tokens |
+| `audio_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Tokens used for audio output |
+| `reasoning_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Tokens used for reasoning |
+| `rejected_prediction_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Rejected prediction tokens |
\ No newline at end of file
diff --git a/docs/components/chatusageprompttokensdetails.mdx b/docs/components/chatusageprompttokensdetails.mdx
new file mode 100644
index 0000000..0f5dac4
--- /dev/null
+++ b/docs/components/chatusageprompttokensdetails.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatUsagePromptTokensDetails"
+---
+
+Detailed prompt token usage
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `audio_tokens` | *Optional[int]* | :heavy_minus_sign: | Audio input tokens |
+| `cache_write_tokens` | *Optional[int]* | :heavy_minus_sign: | Tokens written to cache. Only returned for models with explicit caching and cache write pricing. |
+| `cached_tokens` | *Optional[int]* | :heavy_minus_sign: | Cached prompt tokens |
+| `video_tokens` | *Optional[int]* | :heavy_minus_sign: | Video input tokens |
\ No newline at end of file
diff --git a/docs/components/chatusermessage.mdx b/docs/components/chatusermessage.mdx
new file mode 100644
index 0000000..3b6546a
--- /dev/null
+++ b/docs/components/chatusermessage.mdx
@@ -0,0 +1,14 @@
+---
+title: "ChatUserMessage"
+---
+
+User message
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `content` | [components.ChatUserMessageContent](../components/chatusermessagecontent.mdx) | :heavy_check_mark: | User message content | What is the capital of France? |
+| `name` | *Optional[str]* | :heavy_minus_sign: | Optional name for the user | User |
+| `role` | [components.ChatUserMessageRole](../components/chatusermessagerole.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/chatusermessagecontent.mdx b/docs/components/chatusermessagecontent.mdx
new file mode 100644
index 0000000..ddf804c
--- /dev/null
+++ b/docs/components/chatusermessagecontent.mdx
@@ -0,0 +1,21 @@
+---
+title: "ChatUserMessageContent"
+---
+
+User message content
+
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.ChatContentItems]`
+
+```python
+value: List[components.ChatContentItems] = /* values here */
+```
+
diff --git a/docs/components/chatusermessagerole.mdx b/docs/components/chatusermessagerole.mdx
new file mode 100644
index 0000000..11d6c22
--- /dev/null
+++ b/docs/components/chatusermessagerole.mdx
@@ -0,0 +1,15 @@
+---
+title: "ChatUserMessageRole"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatUserMessageRole
+value: ChatUserMessageRole = "user"
+```
+
+
+## Values
+
+- `"user"`
diff --git a/docs/components/chatwebsearchshorthand.mdx b/docs/components/chatwebsearchshorthand.mdx
new file mode 100644
index 0000000..942103a
--- /dev/null
+++ b/docs/components/chatwebsearchshorthand.mdx
@@ -0,0 +1,21 @@
+---
+title: "ChatWebSearchShorthand"
+---
+
+Web search tool using OpenAI Responses API syntax. Automatically converted to openrouter:web_search.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_domains` | List[*str*] | :heavy_minus_sign: | Limit search results to these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, and most native providers (Anthropic, OpenAI, xAI). Cannot be used with excluded_domains. | |
+| `engine` | [Optional[components.WebSearchEngineEnum]](../components/websearchengineenum.mdx) | :heavy_minus_sign: | Which search engine to use. "auto" (default) uses native if the provider supports it, otherwise Exa. "native" forces the provider's built-in search. "exa" forces the Exa search API. "firecrawl" uses Firecrawl (requires BYOK). "parallel" uses the Parallel search API. "perplexity" uses the Perplexity Search API (raw ranked results). | auto |
+| `excluded_domains` | List[*str*] | :heavy_minus_sign: | Exclude search results from these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, Anthropic, and xAI. Not supported with OpenAI (silently ignored). Cannot be used with allowed_domains. | |
+| `max_characters` | *Optional[int]* | :heavy_minus_sign: | Exact maximum number of characters of content per search result. Applies to the Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, caps highlight content per result. For Parallel, caps excerpt content per result (default 1,500 when omitted). For Perplexity, maps to the native `max_tokens_per_page` parameter (converted from characters to tokens) and trims the response to the exact character cap. When both `max_characters` and `search_context_size` are set, `max_characters` takes precedence. When omitted, falls back to `search_context_size` mapping (Exa) or engine defaults (Parallel, Perplexity). | 2000 |
+| `max_results` | *Optional[int]* | :heavy_minus_sign: | Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped. | 5 |
+| `max_total_results` | *Optional[int]* | :heavy_minus_sign: | Maximum total number of search results across all search calls in a single request. Once this limit is reached, the tool will stop returning new results. Useful for controlling cost and context size in agentic loops. Defaults to 50 when not specified. | 50 |
+| `parameters` | [Optional[components.WebSearchConfig]](../components/websearchconfig.mdx) | :heavy_minus_sign: | N/A | \{
"max_results": 5,
"search_context_size": "medium"
} |
+| `search_context_size` | [Optional[components.SearchQualityLevel]](../components/searchqualitylevel.mdx) | :heavy_minus_sign: | How much context to retrieve per result. Applies to Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, pins a fixed per-result character cap (low=5,000, medium=15,000, high=30,000); when omitted, Exa picks an adaptive size per query and document (typically ~2,000–4,000 characters per result). For Parallel, controls the total characters across all results; when omitted, Parallel uses its own default size. For Perplexity, maps directly to the Search API's native search_context_size parameter. Overridden by `max_characters` when both are set. | medium |
+| `type` | [components.ChatWebSearchShorthandType](../components/chatwebsearchshorthandtype.mdx) | :heavy_check_mark: | N/A | |
+| `user_location` | [Optional[components.WebSearchUserLocationServerTool]](../components/websearchuserlocationservertool.mdx) | :heavy_minus_sign: | Approximate user location for location-biased results. | \{
"city": "San Francisco",
"country": "US",
"region": "California",
"timezone": "America/Los_Angeles",
"type": "approximate"
} |
\ No newline at end of file
diff --git a/docs/components/chatwebsearchshorthandtype.mdx b/docs/components/chatwebsearchshorthandtype.mdx
new file mode 100644
index 0000000..6056c49
--- /dev/null
+++ b/docs/components/chatwebsearchshorthandtype.mdx
@@ -0,0 +1,22 @@
+---
+title: "ChatWebSearchShorthandType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ChatWebSearchShorthandType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ChatWebSearchShorthandType = "web_search"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"web_search"`
+- `"web_search_preview"`
+- `"web_search_preview_2025_03_11"`
+- `"web_search_2025_08_26"`
diff --git a/docs/components/citation.mdx b/docs/components/citation.mdx
new file mode 100644
index 0000000..9e50368
--- /dev/null
+++ b/docs/components/citation.mdx
@@ -0,0 +1,36 @@
+---
+title: "Citation"
+---
+
+## Supported Types
+
+### `components.AnthropicCitationCharLocationParam`
+
+```python
+value: components.AnthropicCitationCharLocationParam = /* values here */
+```
+
+### `components.AnthropicCitationContentBlockLocationParam`
+
+```python
+value: components.AnthropicCitationContentBlockLocationParam = /* values here */
+```
+
+### `components.AnthropicCitationPageLocationParam`
+
+```python
+value: components.AnthropicCitationPageLocationParam = /* values here */
+```
+
+### `components.AnthropicCitationSearchResultLocation`
+
+```python
+value: components.AnthropicCitationSearchResultLocation = /* values here */
+```
+
+### `components.AnthropicCitationWebSearchResultLocation`
+
+```python
+value: components.AnthropicCitationWebSearchResultLocation = /* values here */
+```
+
diff --git a/docs/components/cleartoolinputs.mdx b/docs/components/cleartoolinputs.mdx
new file mode 100644
index 0000000..d5682fc
--- /dev/null
+++ b/docs/components/cleartoolinputs.mdx
@@ -0,0 +1,24 @@
+---
+title: "ClearToolInputs"
+---
+
+## Supported Types
+
+### `bool`
+
+```python
+value: bool = /* values here */
+```
+
+### `List[str]`
+
+```python
+value: List[str] = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/code.md b/docs/components/code.md
deleted file mode 100644
index 86a8554..0000000
--- a/docs/components/code.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Code
-
-
-## Values
-
-| Name | Value |
-| -------------------------------- | -------------------------------- |
-| `SERVER_ERROR` | server_error |
-| `RATE_LIMIT_EXCEEDED` | rate_limit_exceeded |
-| `INVALID_PROMPT` | invalid_prompt |
-| `VECTOR_STORE_TIMEOUT` | vector_store_timeout |
-| `INVALID_IMAGE` | invalid_image |
-| `INVALID_IMAGE_FORMAT` | invalid_image_format |
-| `INVALID_BASE64_IMAGE` | invalid_base64_image |
-| `INVALID_IMAGE_URL` | invalid_image_url |
-| `IMAGE_TOO_LARGE` | image_too_large |
-| `IMAGE_TOO_SMALL` | image_too_small |
-| `IMAGE_PARSE_ERROR` | image_parse_error |
-| `IMAGE_CONTENT_POLICY_VIOLATION` | image_content_policy_violation |
-| `INVALID_IMAGE_MODE` | invalid_image_mode |
-| `IMAGE_FILE_TOO_LARGE` | image_file_too_large |
-| `UNSUPPORTED_IMAGE_MEDIA_TYPE` | unsupported_image_media_type |
-| `EMPTY_IMAGE_FILE` | empty_image_file |
-| `FAILED_TO_DOWNLOAD_IMAGE` | failed_to_download_image |
-| `IMAGE_FILE_NOT_FOUND` | image_file_not_found |
\ No newline at end of file
diff --git a/docs/components/code.mdx b/docs/components/code.mdx
new file mode 100644
index 0000000..dc6776c
--- /dev/null
+++ b/docs/components/code.mdx
@@ -0,0 +1,36 @@
+---
+title: "Code"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Code
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Code = "server_error"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"server_error"`
+- `"rate_limit_exceeded"`
+- `"invalid_prompt"`
+- `"vector_store_timeout"`
+- `"invalid_image"`
+- `"invalid_image_format"`
+- `"invalid_base64_image"`
+- `"invalid_image_url"`
+- `"image_too_large"`
+- `"image_too_small"`
+- `"image_parse_error"`
+- `"image_content_policy_violation"`
+- `"invalid_image_mode"`
+- `"image_file_too_large"`
+- `"unsupported_image_media_type"`
+- `"empty_image_file"`
+- `"failed_to_download_image"`
+- `"image_file_not_found"`
diff --git a/docs/components/codeinterpreterservertool.mdx b/docs/components/codeinterpreterservertool.mdx
new file mode 100644
index 0000000..9526621
--- /dev/null
+++ b/docs/components/codeinterpreterservertool.mdx
@@ -0,0 +1,13 @@
+---
+title: "CodeInterpreterServerTool"
+---
+
+Code interpreter tool configuration
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `container` | [components.Container](../components/container.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.TypeCodeInterpreter](../components/typecodeinterpreter.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/codexlocalshelltool.mdx b/docs/components/codexlocalshelltool.mdx
new file mode 100644
index 0000000..f5b8e9d
--- /dev/null
+++ b/docs/components/codexlocalshelltool.mdx
@@ -0,0 +1,12 @@
+---
+title: "CodexLocalShellTool"
+---
+
+Local shell tool configuration
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `type` | [components.CodexLocalShellToolType](../components/codexlocalshelltooltype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/codexlocalshelltooltype.mdx b/docs/components/codexlocalshelltooltype.mdx
new file mode 100644
index 0000000..aeeea69
--- /dev/null
+++ b/docs/components/codexlocalshelltooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "CodexLocalShellToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import CodexLocalShellToolType
+value: CodexLocalShellToolType = "local_shell"
+```
+
+
+## Values
+
+- `"local_shell"`
diff --git a/docs/components/command.mdx b/docs/components/command.mdx
new file mode 100644
index 0000000..8a2adc3
--- /dev/null
+++ b/docs/components/command.mdx
@@ -0,0 +1,22 @@
+---
+title: "Command"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Command
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Command = "view"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"view"`
+- `"create"`
+- `"str_replace"`
+- `"insert"`
diff --git a/docs/components/compactionitem.mdx b/docs/components/compactionitem.mdx
new file mode 100644
index 0000000..7fb1a63
--- /dev/null
+++ b/docs/components/compactionitem.mdx
@@ -0,0 +1,14 @@
+---
+title: "CompactionItem"
+---
+
+A context compaction marker with encrypted summary
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `encrypted_content` | *str* | :heavy_check_mark: | N/A |
+| `id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `type` | [components.CompactionItemType](../components/compactionitemtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/compactionitemtype.mdx b/docs/components/compactionitemtype.mdx
new file mode 100644
index 0000000..335f2a6
--- /dev/null
+++ b/docs/components/compactionitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "CompactionItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import CompactionItemType
+value: CompactionItemType = "compaction"
+```
+
+
+## Values
+
+- `"compaction"`
diff --git a/docs/components/compoundfilter.mdx b/docs/components/compoundfilter.mdx
new file mode 100644
index 0000000..6c3f524
--- /dev/null
+++ b/docs/components/compoundfilter.mdx
@@ -0,0 +1,13 @@
+---
+title: "CompoundFilter"
+---
+
+A compound filter that combines multiple comparison or compound filters
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `filters` | List[Dict[str, *Nullable[Any]*]] | :heavy_check_mark: | N/A |
+| `type` | [components.CompoundFilterType](../components/compoundfiltertype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/compoundfiltertype.mdx b/docs/components/compoundfiltertype.mdx
new file mode 100644
index 0000000..ab11371
--- /dev/null
+++ b/docs/components/compoundfiltertype.mdx
@@ -0,0 +1,20 @@
+---
+title: "CompoundFilterType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import CompoundFilterType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: CompoundFilterType = "and"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"and"`
+- `"or"`
diff --git a/docs/components/computeruseservertool.mdx b/docs/components/computeruseservertool.mdx
new file mode 100644
index 0000000..3021deb
--- /dev/null
+++ b/docs/components/computeruseservertool.mdx
@@ -0,0 +1,15 @@
+---
+title: "ComputerUseServerTool"
+---
+
+Computer use preview tool configuration
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `display_height` | *int* | :heavy_check_mark: | N/A |
+| `display_width` | *int* | :heavy_check_mark: | N/A |
+| `environment` | [components.Environment](../components/environment.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.ComputerUseServerToolType](../components/computeruseservertooltype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/computeruseservertooltype.mdx b/docs/components/computeruseservertooltype.mdx
new file mode 100644
index 0000000..37199a7
--- /dev/null
+++ b/docs/components/computeruseservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ComputerUseServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ComputerUseServerToolType
+value: ComputerUseServerToolType = "computer_use_preview"
+```
+
+
+## Values
+
+- `"computer_use_preview"`
diff --git a/docs/components/conflictresponseerrordata.mdx b/docs/components/conflictresponseerrordata.mdx
new file mode 100644
index 0000000..a48176a
--- /dev/null
+++ b/docs/components/conflictresponseerrordata.mdx
@@ -0,0 +1,14 @@
+---
+title: "ConflictResponseErrorData"
+---
+
+Error data for ConflictResponse
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------- | -------------------------- | -------------------------- | -------------------------- |
+| `code` | *int* | :heavy_check_mark: | N/A |
+| `message` | *str* | :heavy_check_mark: | N/A |
+| `metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/connectorid.mdx b/docs/components/connectorid.mdx
new file mode 100644
index 0000000..783b14b
--- /dev/null
+++ b/docs/components/connectorid.mdx
@@ -0,0 +1,26 @@
+---
+title: "ConnectorID"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ConnectorID
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ConnectorID = "connector_dropbox"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"connector_dropbox"`
+- `"connector_gmail"`
+- `"connector_googlecalendar"`
+- `"connector_googledrive"`
+- `"connector_microsoftteams"`
+- `"connector_outlookcalendar"`
+- `"connector_outlookemail"`
+- `"connector_sharepoint"`
diff --git a/docs/components/container.mdx b/docs/components/container.mdx
new file mode 100644
index 0000000..d82379c
--- /dev/null
+++ b/docs/components/container.mdx
@@ -0,0 +1,18 @@
+---
+title: "Container"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `components.ContainerAuto`
+
+```python
+value: components.ContainerAuto = /* values here */
+```
+
diff --git a/docs/components/containerauto.mdx b/docs/components/containerauto.mdx
new file mode 100644
index 0000000..00e55b6
--- /dev/null
+++ b/docs/components/containerauto.mdx
@@ -0,0 +1,11 @@
+---
+title: "ContainerAuto"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `file_ids` | List[*str*] | :heavy_minus_sign: | N/A |
+| `memory_limit` | [OptionalNullable[components.MemoryLimit]](../components/memorylimit.mdx) | :heavy_minus_sign: | N/A |
+| `type` | [components.ContainerType](../components/containertype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/containerautoenvironment.mdx b/docs/components/containerautoenvironment.mdx
new file mode 100644
index 0000000..f902de7
--- /dev/null
+++ b/docs/components/containerautoenvironment.mdx
@@ -0,0 +1,12 @@
+---
+title: "ContainerAutoEnvironment"
+---
+
+An OpenRouter-managed, auto-provisioned ephemeral container.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `type` | [components.ContainerAutoEnvironmentType](../components/containerautoenvironmenttype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/containerautoenvironmenttype.mdx b/docs/components/containerautoenvironmenttype.mdx
new file mode 100644
index 0000000..1c99ecd
--- /dev/null
+++ b/docs/components/containerautoenvironmenttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContainerAutoEnvironmentType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ContainerAutoEnvironmentType
+value: ContainerAutoEnvironmentType = "container_auto"
+```
+
+
+## Values
+
+- `"container_auto"`
diff --git a/docs/components/containerreferenceenvironment.mdx b/docs/components/containerreferenceenvironment.mdx
new file mode 100644
index 0000000..28843b0
--- /dev/null
+++ b/docs/components/containerreferenceenvironment.mdx
@@ -0,0 +1,13 @@
+---
+title: "ContainerReferenceEnvironment"
+---
+
+Reference to a previously created container to reuse.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `container_id` | *str* | :heavy_check_mark: | Identifier of an existing container to reuse (max 20 characters). | cntr_abc123 |
+| `type` | [components.ContainerReferenceEnvironmentType](../components/containerreferenceenvironmenttype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/containerreferenceenvironmenttype.mdx b/docs/components/containerreferenceenvironmenttype.mdx
new file mode 100644
index 0000000..feb2c44
--- /dev/null
+++ b/docs/components/containerreferenceenvironmenttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContainerReferenceEnvironmentType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ContainerReferenceEnvironmentType
+value: ContainerReferenceEnvironmentType = "container_reference"
+```
+
+
+## Values
+
+- `"container_reference"`
diff --git a/docs/components/containertype.mdx b/docs/components/containertype.mdx
new file mode 100644
index 0000000..9a8e9ea
--- /dev/null
+++ b/docs/components/containertype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContainerType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ContainerType
+value: ContainerType = "auto"
+```
+
+
+## Values
+
+- `"auto"`
diff --git a/docs/components/contentcompaction.mdx b/docs/components/contentcompaction.mdx
new file mode 100644
index 0000000..39acf3a
--- /dev/null
+++ b/docs/components/contentcompaction.mdx
@@ -0,0 +1,11 @@
+---
+title: "ContentCompaction"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `content` | *Nullable[str]* | :heavy_check_mark: | N/A | |
+| `type` | [components.MessagesMessageParamTypeCompaction](../components/messagesmessageparamtypecompaction.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/contentfilteraction.mdx b/docs/components/contentfilteraction.mdx
new file mode 100644
index 0000000..8419def
--- /dev/null
+++ b/docs/components/contentfilteraction.mdx
@@ -0,0 +1,22 @@
+---
+title: "ContentFilterAction"
+---
+
+Action taken when the pattern matches
+
+## Example Usage
+
+```python
+from openrouter.components import ContentFilterAction
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ContentFilterAction = "redact"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"redact"`
+- `"block"`
diff --git a/docs/components/contentfilterbuiltinaction.mdx b/docs/components/contentfilterbuiltinaction.mdx
new file mode 100644
index 0000000..99919bd
--- /dev/null
+++ b/docs/components/contentfilterbuiltinaction.mdx
@@ -0,0 +1,23 @@
+---
+title: "ContentFilterBuiltinAction"
+---
+
+Action taken when the builtin filter triggers
+
+## Example Usage
+
+```python
+from openrouter.components import ContentFilterBuiltinAction
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ContentFilterBuiltinAction = "redact"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"redact"`
+- `"block"`
+- `"flag"`
diff --git a/docs/components/contentfilterbuiltinentry.mdx b/docs/components/contentfilterbuiltinentry.mdx
new file mode 100644
index 0000000..5bdb1f6
--- /dev/null
+++ b/docs/components/contentfilterbuiltinentry.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContentFilterBuiltinEntry"
+---
+
+A builtin content filter entry. Builtin filters include PII detectors and the regex-based prompt injection detector.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
+| `action` | [components.ContentFilterBuiltinAction](../components/contentfilterbuiltinaction.mdx) | :heavy_check_mark: | Action taken when the builtin filter triggers | block |
+| `label` | *Optional[str]* | :heavy_minus_sign: | Read-only, system-assigned redaction placeholder derived from the slug (e.g. "[EMAIL]", "[PHONE]"). Not settable by the caller. | [EMAIL] |
+| `scan_scope` | [Optional[components.PromptInjectionScanScope]](../components/promptinjectionscanscope.mdx) | :heavy_minus_sign: | Which message roles to scan for prompt injection. Only applies to the regex-prompt-injection builtin. Defaults to all_messages. | user_only |
+| `slug` | [components.ContentFilterBuiltinSlug](../components/contentfilterbuiltinslug.mdx) | :heavy_check_mark: | The builtin filter identifier | regex-prompt-injection |
\ No newline at end of file
diff --git a/docs/components/contentfilterbuiltinentryinput.mdx b/docs/components/contentfilterbuiltinentryinput.mdx
new file mode 100644
index 0000000..28e2502
--- /dev/null
+++ b/docs/components/contentfilterbuiltinentryinput.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContentFilterBuiltinEntryInput"
+---
+
+A builtin content filter entry for create/update requests. Labels are system-assigned and cannot be set by the caller.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `action` | [components.ContentFilterBuiltinAction](../components/contentfilterbuiltinaction.mdx) | :heavy_check_mark: | Action taken when the builtin filter triggers | block |
+| ~~`label`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Deprecated: labels are system-assigned and cannot be set by the caller. Accepted for backward compatibility but silently ignored. | |
+| `scan_scope` | [Optional[components.PromptInjectionScanScope]](../components/promptinjectionscanscope.mdx) | :heavy_minus_sign: | Which message roles to scan for prompt injection. Only applies to the regex-prompt-injection builtin. Defaults to all_messages. | user_only |
+| `slug` | [components.ContentFilterBuiltinSlug](../components/contentfilterbuiltinslug.mdx) | :heavy_check_mark: | The builtin filter identifier | regex-prompt-injection |
\ No newline at end of file
diff --git a/docs/components/contentfilterbuiltinslug.mdx b/docs/components/contentfilterbuiltinslug.mdx
new file mode 100644
index 0000000..273ad6c
--- /dev/null
+++ b/docs/components/contentfilterbuiltinslug.mdx
@@ -0,0 +1,28 @@
+---
+title: "ContentFilterBuiltinSlug"
+---
+
+The builtin filter identifier
+
+## Example Usage
+
+```python
+from openrouter.components import ContentFilterBuiltinSlug
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ContentFilterBuiltinSlug = "email"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"email"`
+- `"phone"`
+- `"ssn"`
+- `"credit-card"`
+- `"ip-address"`
+- `"person-name"`
+- `"address"`
+- `"regex-prompt-injection"`
diff --git a/docs/components/contentfilterentry.mdx b/docs/components/contentfilterentry.mdx
new file mode 100644
index 0000000..c8165e8
--- /dev/null
+++ b/docs/components/contentfilterentry.mdx
@@ -0,0 +1,14 @@
+---
+title: "ContentFilterEntry"
+---
+
+A custom regex content filter that scans request messages for matching patterns.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `action` | [components.ContentFilterAction](../components/contentfilteraction.mdx) | :heavy_check_mark: | Action taken when the pattern matches | block |
+| `label` | *OptionalNullable[str]* | :heavy_minus_sign: | Optional label used in redaction placeholders or error messages | [API_KEY] |
+| `pattern` | *str* | :heavy_check_mark: | A regex pattern to match against request content | \b(sk-[a-zA-Z0-9]\{48})\b |
\ No newline at end of file
diff --git a/docs/components/contentpartaddedevent.mdx b/docs/components/contentpartaddedevent.mdx
new file mode 100644
index 0000000..a62904e
--- /dev/null
+++ b/docs/components/contentpartaddedevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "ContentPartAddedEvent"
+---
+
+Event emitted when a new content part is added to an output item
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `content_index` | *int* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `part` | [components.ContentPartAddedEventPart](../components/contentpartaddedeventpart.mdx) | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.ContentPartAddedEventType](../components/contentpartaddedeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/contentpartaddedeventpart.mdx b/docs/components/contentpartaddedeventpart.mdx
new file mode 100644
index 0000000..3590cb4
--- /dev/null
+++ b/docs/components/contentpartaddedeventpart.mdx
@@ -0,0 +1,24 @@
+---
+title: "ContentPartAddedEventPart"
+---
+
+## Supported Types
+
+### `components.ResponseOutputText`
+
+```python
+value: components.ResponseOutputText = /* values here */
+```
+
+### `components.ReasoningTextContent`
+
+```python
+value: components.ReasoningTextContent = /* values here */
+```
+
+### `components.OpenAIResponsesRefusalContent`
+
+```python
+value: components.OpenAIResponsesRefusalContent = /* values here */
+```
+
diff --git a/docs/components/contentpartaddedeventtype.mdx b/docs/components/contentpartaddedeventtype.mdx
new file mode 100644
index 0000000..91a231d
--- /dev/null
+++ b/docs/components/contentpartaddedeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContentPartAddedEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ContentPartAddedEventType
+value: ContentPartAddedEventType = "response.content_part.added"
+```
+
+
+## Values
+
+- `"response.content_part.added"`
diff --git a/docs/components/contentpartaudio.mdx b/docs/components/contentpartaudio.mdx
new file mode 100644
index 0000000..1a97cd7
--- /dev/null
+++ b/docs/components/contentpartaudio.mdx
@@ -0,0 +1,10 @@
+---
+title: "ContentPartAudio"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `audio_url` | [components.AudioURL](../components/audiourl.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.ContentPartAudioType](../components/contentpartaudiotype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/contentpartaudiotype.mdx b/docs/components/contentpartaudiotype.mdx
new file mode 100644
index 0000000..d6ad2b7
--- /dev/null
+++ b/docs/components/contentpartaudiotype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContentPartAudioType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ContentPartAudioType
+value: ContentPartAudioType = "audio_url"
+```
+
+
+## Values
+
+- `"audio_url"`
diff --git a/docs/components/contentpartdoneevent.mdx b/docs/components/contentpartdoneevent.mdx
new file mode 100644
index 0000000..39c9384
--- /dev/null
+++ b/docs/components/contentpartdoneevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "ContentPartDoneEvent"
+---
+
+Event emitted when a content part is complete
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `content_index` | *int* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `part` | [components.ContentPartDoneEventPart](../components/contentpartdoneeventpart.mdx) | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.ContentPartDoneEventType](../components/contentpartdoneeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/contentpartdoneeventpart.mdx b/docs/components/contentpartdoneeventpart.mdx
new file mode 100644
index 0000000..7e45ad2
--- /dev/null
+++ b/docs/components/contentpartdoneeventpart.mdx
@@ -0,0 +1,24 @@
+---
+title: "ContentPartDoneEventPart"
+---
+
+## Supported Types
+
+### `components.ResponseOutputText`
+
+```python
+value: components.ResponseOutputText = /* values here */
+```
+
+### `components.ReasoningTextContent`
+
+```python
+value: components.ReasoningTextContent = /* values here */
+```
+
+### `components.OpenAIResponsesRefusalContent`
+
+```python
+value: components.OpenAIResponsesRefusalContent = /* values here */
+```
+
diff --git a/docs/components/contentpartdoneeventtype.mdx b/docs/components/contentpartdoneeventtype.mdx
new file mode 100644
index 0000000..7a93ea3
--- /dev/null
+++ b/docs/components/contentpartdoneeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContentPartDoneEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ContentPartDoneEventType
+value: ContentPartDoneEventType = "response.content_part.done"
+```
+
+
+## Values
+
+- `"response.content_part.done"`
diff --git a/docs/components/contentpartimage.mdx b/docs/components/contentpartimage.mdx
new file mode 100644
index 0000000..d4adef7
--- /dev/null
+++ b/docs/components/contentpartimage.mdx
@@ -0,0 +1,10 @@
+---
+title: "ContentPartImage"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `image_url` | [components.ContentPartImageImageURL](../components/contentpartimageimageurl.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.ContentPartImageType](../components/contentpartimagetype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/contentpartimageimageurl.mdx b/docs/components/contentpartimageimageurl.mdx
new file mode 100644
index 0000000..248d1b8
--- /dev/null
+++ b/docs/components/contentpartimageimageurl.mdx
@@ -0,0 +1,9 @@
+---
+title: "ContentPartImageImageURL"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/contentpartimagetype.mdx b/docs/components/contentpartimagetype.mdx
new file mode 100644
index 0000000..d298450
--- /dev/null
+++ b/docs/components/contentpartimagetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContentPartImageType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ContentPartImageType
+value: ContentPartImageType = "image_url"
+```
+
+
+## Values
+
+- `"image_url"`
diff --git a/docs/components/contentpartinputaudio.mdx b/docs/components/contentpartinputaudio.mdx
new file mode 100644
index 0000000..08619de
--- /dev/null
+++ b/docs/components/contentpartinputaudio.mdx
@@ -0,0 +1,10 @@
+---
+title: "ContentPartInputAudio"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| `input_audio` | [components.MultimodalMedia](../components/multimodalmedia.mdx) | :heavy_check_mark: | N/A | \{
"data": "data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAA...",
"format": "wav"
} |
+| `type` | [components.ContentPartInputAudioType](../components/contentpartinputaudiotype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/contentpartinputaudiotype.mdx b/docs/components/contentpartinputaudiotype.mdx
new file mode 100644
index 0000000..4d3a748
--- /dev/null
+++ b/docs/components/contentpartinputaudiotype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContentPartInputAudioType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ContentPartInputAudioType
+value: ContentPartInputAudioType = "input_audio"
+```
+
+
+## Values
+
+- `"input_audio"`
diff --git a/docs/components/contentpartinputfile.mdx b/docs/components/contentpartinputfile.mdx
new file mode 100644
index 0000000..de67450
--- /dev/null
+++ b/docs/components/contentpartinputfile.mdx
@@ -0,0 +1,10 @@
+---
+title: "ContentPartInputFile"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| `input_file` | [components.MultimodalMedia](../components/multimodalmedia.mdx) | :heavy_check_mark: | N/A | \{
"data": "data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAA...",
"format": "wav"
} |
+| `type` | [components.ContentPartInputFileType](../components/contentpartinputfiletype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/contentpartinputfiletype.mdx b/docs/components/contentpartinputfiletype.mdx
new file mode 100644
index 0000000..3b0cca0
--- /dev/null
+++ b/docs/components/contentpartinputfiletype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContentPartInputFileType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ContentPartInputFileType
+value: ContentPartInputFileType = "input_file"
+```
+
+
+## Values
+
+- `"input_file"`
diff --git a/docs/components/contentpartinputvideo.mdx b/docs/components/contentpartinputvideo.mdx
new file mode 100644
index 0000000..0d846f3
--- /dev/null
+++ b/docs/components/contentpartinputvideo.mdx
@@ -0,0 +1,10 @@
+---
+title: "ContentPartInputVideo"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| `input_video` | [components.MultimodalMedia](../components/multimodalmedia.mdx) | :heavy_check_mark: | N/A | \{
"data": "data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAA...",
"format": "wav"
} |
+| `type` | [components.ContentPartInputVideoType](../components/contentpartinputvideotype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/contentpartinputvideotype.mdx b/docs/components/contentpartinputvideotype.mdx
new file mode 100644
index 0000000..ff1648b
--- /dev/null
+++ b/docs/components/contentpartinputvideotype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContentPartInputVideoType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ContentPartInputVideoType
+value: ContentPartInputVideoType = "input_video"
+```
+
+
+## Values
+
+- `"input_video"`
diff --git a/docs/components/contentpartvideo.mdx b/docs/components/contentpartvideo.mdx
new file mode 100644
index 0000000..058640d
--- /dev/null
+++ b/docs/components/contentpartvideo.mdx
@@ -0,0 +1,10 @@
+---
+title: "ContentPartVideo"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `type` | [components.ContentPartVideoType](../components/contentpartvideotype.mdx) | :heavy_check_mark: | N/A |
+| `video_url` | [components.VideoURL](../components/videourl.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/contentpartvideotype.mdx b/docs/components/contentpartvideotype.mdx
new file mode 100644
index 0000000..24b7dfa
--- /dev/null
+++ b/docs/components/contentpartvideotype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContentPartVideoType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ContentPartVideoType
+value: ContentPartVideoType = "video_url"
+```
+
+
+## Values
+
+- `"video_url"`
diff --git a/docs/components/contentredactedthinking.mdx b/docs/components/contentredactedthinking.mdx
new file mode 100644
index 0000000..f9c4eee
--- /dev/null
+++ b/docs/components/contentredactedthinking.mdx
@@ -0,0 +1,10 @@
+---
+title: "ContentRedactedThinking"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `data` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.TypeRedactedThinking](../components/typeredactedthinking.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/contentservertooluse.mdx b/docs/components/contentservertooluse.mdx
new file mode 100644
index 0000000..527a1c1
--- /dev/null
+++ b/docs/components/contentservertooluse.mdx
@@ -0,0 +1,13 @@
+---
+title: "ContentServerToolUse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `input` | *OptionalNullable[Any]* | :heavy_minus_sign: | N/A | |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `type` | [components.TypeServerToolUse](../components/typeservertooluse.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/contentthinking.mdx b/docs/components/contentthinking.mdx
new file mode 100644
index 0000000..8c9a924
--- /dev/null
+++ b/docs/components/contentthinking.mdx
@@ -0,0 +1,11 @@
+---
+title: "ContentThinking"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `signature` | *str* | :heavy_check_mark: | N/A |
+| `thinking` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.TypeThinking](../components/typethinking.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/contenttoolreference.mdx b/docs/components/contenttoolreference.mdx
new file mode 100644
index 0000000..f07b01d
--- /dev/null
+++ b/docs/components/contenttoolreference.mdx
@@ -0,0 +1,10 @@
+---
+title: "ContentToolReference"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `tool_name` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.TypeToolReference](../components/typetoolreference.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/contenttoolresult.mdx b/docs/components/contenttoolresult.mdx
new file mode 100644
index 0000000..4abde66
--- /dev/null
+++ b/docs/components/contenttoolresult.mdx
@@ -0,0 +1,13 @@
+---
+title: "ContentToolResult"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `content` | [Optional[components.MessagesMessageParamContentUnion2]](../components/messagesmessageparamcontentunion2.mdx) | :heavy_minus_sign: | N/A | |
+| `is_error` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `tool_use_id` | *str* | :heavy_check_mark: | N/A | |
+| `type` | [components.TypeToolResult](../components/typetoolresult.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/contenttooluse.mdx b/docs/components/contenttooluse.mdx
new file mode 100644
index 0000000..e29dae1
--- /dev/null
+++ b/docs/components/contenttooluse.mdx
@@ -0,0 +1,13 @@
+---
+title: "ContentToolUse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `input` | *OptionalNullable[Any]* | :heavy_minus_sign: | N/A | |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `type` | [components.TypeToolUse](../components/typetooluse.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/contentwebsearchtoolresult.mdx b/docs/components/contentwebsearchtoolresult.mdx
new file mode 100644
index 0000000..a2664d1
--- /dev/null
+++ b/docs/components/contentwebsearchtoolresult.mdx
@@ -0,0 +1,12 @@
+---
+title: "ContentWebSearchToolResult"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `content` | [components.MessagesMessageParamContentUnion3](../components/messagesmessageparamcontentunion3.mdx) | :heavy_check_mark: | N/A | |
+| `tool_use_id` | *str* | :heavy_check_mark: | N/A | |
+| `type` | [components.TypeWebSearchToolResult](../components/typewebsearchtoolresult.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/contentwebsearchtoolresulterror.mdx b/docs/components/contentwebsearchtoolresulterror.mdx
new file mode 100644
index 0000000..c944724
--- /dev/null
+++ b/docs/components/contentwebsearchtoolresulterror.mdx
@@ -0,0 +1,10 @@
+---
+title: "ContentWebSearchToolResultError"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `error_code` | [components.ErrorCode](../components/errorcode.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.TypeWebSearchToolResultError](../components/typewebsearchtoolresulterror.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/contextcompressionengine.mdx b/docs/components/contextcompressionengine.mdx
new file mode 100644
index 0000000..42f20bd
--- /dev/null
+++ b/docs/components/contextcompressionengine.mdx
@@ -0,0 +1,17 @@
+---
+title: "ContextCompressionEngine"
+---
+
+The compression engine to use. Defaults to "middle-out".
+
+## Example Usage
+
+```python
+from openrouter.components import ContextCompressionEngine
+value: ContextCompressionEngine = "middle-out"
+```
+
+
+## Values
+
+- `"middle-out"`
diff --git a/docs/components/contextcompressionplugin.mdx b/docs/components/contextcompressionplugin.mdx
new file mode 100644
index 0000000..a502a99
--- /dev/null
+++ b/docs/components/contextcompressionplugin.mdx
@@ -0,0 +1,11 @@
+---
+title: "ContextCompressionPlugin"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Set to false to disable the context-compression plugin for this request. Defaults to true. | |
+| `engine` | [Optional[components.ContextCompressionEngine]](../components/contextcompressionengine.mdx) | :heavy_minus_sign: | The compression engine to use. Defaults to "middle-out". | middle-out |
+| `id` | [components.ContextCompressionPluginID](../components/contextcompressionpluginid.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/contextcompressionpluginid.mdx b/docs/components/contextcompressionpluginid.mdx
new file mode 100644
index 0000000..fea81b2
--- /dev/null
+++ b/docs/components/contextcompressionpluginid.mdx
@@ -0,0 +1,15 @@
+---
+title: "ContextCompressionPluginID"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ContextCompressionPluginID
+value: ContextCompressionPluginID = "context-compression"
+```
+
+
+## Values
+
+- `"context-compression"`
diff --git a/docs/components/contextmanagement.mdx b/docs/components/contextmanagement.mdx
new file mode 100644
index 0000000..521afd6
--- /dev/null
+++ b/docs/components/contextmanagement.mdx
@@ -0,0 +1,9 @@
+---
+title: "ContextManagement"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `edits` | List[[components.Edit](../components/edit.mdx)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/contradiction.mdx b/docs/components/contradiction.mdx
new file mode 100644
index 0000000..df0f53d
--- /dev/null
+++ b/docs/components/contradiction.mdx
@@ -0,0 +1,10 @@
+---
+title: "Contradiction"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- |
+| `stances` | List[[components.Stance](../components/stance.mdx)] | :heavy_check_mark: | N/A |
+| `topic` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/costdetails.md b/docs/components/costdetails.mdx
similarity index 96%
rename from docs/components/costdetails.md
rename to docs/components/costdetails.mdx
index 58a1aa8..753493b 100644
--- a/docs/components/costdetails.md
+++ b/docs/components/costdetails.mdx
@@ -1,4 +1,6 @@
-# CostDetails
+---
+title: "CostDetails"
+---
Breakdown of upstream inference costs
diff --git a/docs/components/createbyokkeyrequest.mdx b/docs/components/createbyokkeyrequest.mdx
new file mode 100644
index 0000000..3eaa154
--- /dev/null
+++ b/docs/components/createbyokkeyrequest.mdx
@@ -0,0 +1,16 @@
+---
+title: "CreateBYOKKeyRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_models` | List[*str*] | :heavy_minus_sign: | Optional allowlist of model slugs this credential may be used for. `null` means no restriction. | null |
+| `allowed_user_ids` | List[*str*] | :heavy_minus_sign: | Optional allowlist of user IDs that may use this credential. `null` means no restriction. | null |
+| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Whether this credential should be created in a disabled state. | false |
+| `is_fallback` | *Optional[bool]* | :heavy_minus_sign: | Whether this credential is treated as a fallback — used only after non-fallback keys for the same provider have been tried. | false |
+| `key` | *str* | :heavy_check_mark: | The raw provider API key or credential. This value is encrypted at rest and never returned in API responses. | sk-proj-abc123... |
+| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | Optional human-readable name for the credential. | Production OpenAI Key |
+| `provider` | [components.BYOKProviderSlug](../components/byokproviderslug.mdx) | :heavy_check_mark: | The upstream provider this credential authenticates against, as a lowercase slug (e.g. `openai`, `anthropic`, `amazon-bedrock`). | openai |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Optional workspace ID. Defaults to the authenticated entity's default workspace. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/createbyokkeyresponse.mdx b/docs/components/createbyokkeyresponse.mdx
new file mode 100644
index 0000000..67494d0
--- /dev/null
+++ b/docs/components/createbyokkeyresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "CreateBYOKKeyResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `data` | [components.BYOKKey](../components/byokkey.mdx) | :heavy_check_mark: | N/A | \{
"allowed_api_key_hashes": null,
"allowed_models": null,
"allowed_user_ids": null,
"created_at": "2025-08-24T10:30:00Z",
"disabled": false,
"id": "11111111-2222-3333-4444-555555555555",
"is_fallback": false,
"label": "sk-...AbCd",
"name": "Production OpenAI Key",
"provider": "openai",
"sort_order": 0,
"workspace_id": "550e8400-e29b-41d4-a716-446655440000"
} |
\ No newline at end of file
diff --git a/docs/components/createguardrailrequest.mdx b/docs/components/createguardrailrequest.mdx
new file mode 100644
index 0000000..f26042f
--- /dev/null
+++ b/docs/components/createguardrailrequest.mdx
@@ -0,0 +1,24 @@
+---
+title: "CreateGuardrailRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_models` | List[*str*] | :heavy_minus_sign: | Array of model identifiers (slug or canonical_slug accepted) | [
"openai/gpt-5.2",
"anthropic/claude-4.5-opus-20251124",
"deepseek/deepseek-r1-0528:free"
] |
+| `allowed_providers` | List[*str*] | :heavy_minus_sign: | List of allowed provider IDs | [
"openai",
"anthropic",
"deepseek"
] |
+| `content_filter_builtins` | List[[components.ContentFilterBuiltinEntryInput](../components/contentfilterbuiltinentryinput.mdx)] | :heavy_minus_sign: | Builtin content filters to apply. The "flag" action is only supported for "regex-prompt-injection"; PII slugs (email, phone, ssn, credit-card, ip-address, person-name, address) accept "block" or "redact" only. | [
\{
"action": "block",
"slug": "regex-prompt-injection"
}
] |
+| `content_filters` | List[[components.ContentFilterEntry](../components/contentfilterentry.mdx)] | :heavy_minus_sign: | Custom regex content filters to apply to request messages | [
\{
"action": "redact",
"label": "[API_KEY]",
"pattern": "\\b(sk-[a-zA-Z0-9]\{48})\\b"
}
] |
+| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | Description of the guardrail | A guardrail for limiting API usage |
+| ~~`enforce_zdr`~~ | *OptionalNullable[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Deprecated. Use enforce_zdr_anthropic, enforce_zdr_openai, enforce_zdr_google, and enforce_zdr_other instead. When provided, its value is copied into any of those per-provider fields that are not explicitly specified on the request. | false |
+| `enforce_zdr_anthropic` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for Anthropic models. Falls back to enforce_zdr when not provided. | false |
+| `enforce_zdr_google` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for Google models. Falls back to enforce_zdr when not provided. | false |
+| `enforce_zdr_openai` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for OpenAI models. Falls back to enforce_zdr when not provided. | false |
+| `enforce_zdr_other` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for models that are not from Anthropic, OpenAI, or Google. Falls back to enforce_zdr when not provided. | false |
+| `ignored_models` | List[*str*] | :heavy_minus_sign: | Array of model identifiers to exclude from routing (slug or canonical_slug accepted) | [
"openai/gpt-4o-mini"
] |
+| `ignored_providers` | List[*str*] | :heavy_minus_sign: | List of provider IDs to exclude from routing | [
"azure"
] |
+| `limit_usd` | *OptionalNullable[float]* | :heavy_minus_sign: | Spending limit in USD | 50 |
+| `name` | *str* | :heavy_check_mark: | Name for the new guardrail | My New Guardrail |
+| `reset_interval` | [OptionalNullable[components.GuardrailInterval]](../components/guardrailinterval.mdx) | :heavy_minus_sign: | Interval at which the limit resets (daily, weekly, monthly) | monthly |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | The workspace to create the guardrail in. Defaults to the default workspace if not provided. | 0df9e665-d932-5740-b2c7-b52af166bc11 |
\ No newline at end of file
diff --git a/docs/components/createguardrailresponse.mdx b/docs/components/createguardrailresponse.mdx
new file mode 100644
index 0000000..e876cac
--- /dev/null
+++ b/docs/components/createguardrailresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "CreateGuardrailResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.Guardrail](../components/guardrail.mdx) | :heavy_check_mark: | N/A | \{
"allowed_models": null,
"allowed_providers": [
"openai",
"anthropic",
"google"
],
"content_filter_builtins": [
\{
"action": "redact",
"label": "[EMAIL]",
"slug": "email"
}
],
"content_filters": null,
"created_at": "2025-08-24T10:30:00Z",
"description": "Guardrail for production environment",
"enforce_zdr": null,
"enforce_zdr_anthropic": true,
"enforce_zdr_google": false,
"enforce_zdr_openai": true,
"enforce_zdr_other": false,
"id": "550e8400-e29b-41d4-a716-446655440000",
"ignored_models": null,
"ignored_providers": null,
"limit_usd": 100,
"name": "Production Guardrail",
"reset_interval": "monthly",
"updated_at": "2025-08-24T15:45:00Z",
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
\ No newline at end of file
diff --git a/docs/components/createobservabilitydestinationrequest.mdx b/docs/components/createobservabilitydestinationrequest.mdx
new file mode 100644
index 0000000..a3435fe
--- /dev/null
+++ b/docs/components/createobservabilitydestinationrequest.mdx
@@ -0,0 +1,17 @@
+---
+title: "CreateObservabilityDestinationRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_minus_sign: | Optional allowlist of OpenRouter API key hashes whose traffic is forwarded. `null` or omitted means all keys. Must contain at least one hash if provided. | null |
+| `config` | Dict[str, *Nullable[Any]*] | :heavy_check_mark: | Provider-specific configuration. The shape depends on `type` and is validated server-side. | \{
"baseUrl": "https://us.cloud.langfuse.com",
"publicKey": "pk-l...EfGh",
"secretKey": "sk-l...AbCd"
} |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether this destination should be enabled immediately. | true |
+| `filter_rules` | [OptionalNullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_minus_sign: | Optional structured filter rules controlling which events are forwarded. | null |
+| `name` | *str* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *Optional[bool]* | :heavy_minus_sign: | When true, request/response bodies are not forwarded — only metadata. | false |
+| `sampling_rate` | *Optional[float]* | :heavy_minus_sign: | Sampling rate between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.CreateObservabilityDestinationRequestType](../components/createobservabilitydestinationrequesttype.mdx) | :heavy_check_mark: | The destination type. Only stable destination types are accepted. | langfuse |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Optional workspace ID. Defaults to the authenticated entity's default workspace. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/createobservabilitydestinationrequesttype.mdx b/docs/components/createobservabilitydestinationrequesttype.mdx
new file mode 100644
index 0000000..a3f9ac2
--- /dev/null
+++ b/docs/components/createobservabilitydestinationrequesttype.mdx
@@ -0,0 +1,37 @@
+---
+title: "CreateObservabilityDestinationRequestType"
+---
+
+The destination type. Only stable destination types are accepted.
+
+## Example Usage
+
+```python
+from openrouter.components import CreateObservabilityDestinationRequestType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: CreateObservabilityDestinationRequestType = "arize"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"arize"`
+- `"braintrust"`
+- `"clickhouse"`
+- `"datadog"`
+- `"grafana"`
+- `"langfuse"`
+- `"langsmith"`
+- `"newrelic"`
+- `"opik"`
+- `"otel-collector"`
+- `"posthog"`
+- `"ramp"`
+- `"s3"`
+- `"sentry"`
+- `"snowflake"`
+- `"weave"`
+- `"webhook"`
diff --git a/docs/components/createobservabilitydestinationresponse.mdx b/docs/components/createobservabilitydestinationresponse.mdx
new file mode 100644
index 0000000..a6654f0
--- /dev/null
+++ b/docs/components/createobservabilitydestinationresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "CreateObservabilityDestinationResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.ObservabilityDestination](../components/observabilitydestination.mdx) | :heavy_check_mark: | N/A | \{
"api_key_hashes": null,
"config": \{
"baseUrl": "https://us.cloud.langfuse.com",
"publicKey": "pk-l...EfGh",
"secretKey": "sk-l...AbCd"
},
"created_at": "2025-08-24T10:30:00Z",
"enabled": true,
"filter_rules": null,
"id": "99999999-aaaa-bbbb-cccc-dddddddddddd",
"name": "Production Langfuse",
"privacy_mode": false,
"sampling_rate": 1,
"type": "langfuse",
"updated_at": "2025-08-24T15:45:00Z",
"workspace_id": "550e8400-e29b-41d4-a716-446655440000"
} |
\ No newline at end of file
diff --git a/docs/components/createpresetfrominferenceresponse.mdx b/docs/components/createpresetfrominferenceresponse.mdx
new file mode 100644
index 0000000..c31f263
--- /dev/null
+++ b/docs/components/createpresetfrominferenceresponse.mdx
@@ -0,0 +1,12 @@
+---
+title: "CreatePresetFromInferenceResponse"
+---
+
+Response containing the created preset with its designated version.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.PresetWithDesignatedVersion](../components/presetwithdesignatedversion.mdx) | :heavy_check_mark: | A preset with its currently designated version. | \{
"created_at": "2026-04-20T10:00:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"description": null,
"designated_version": \{
"config": \{
"model": "openai/gpt-4o",
"temperature": 0.7
},
"created_at": "2026-04-20T10:00:00Z",
"creator_id": "user_2dHFtVWx2n56w6HkM0000000000",
"id": "550e8400-e29b-41d4-a716-446655440000",
"preset_id": "650e8400-e29b-41d4-a716-446655440001",
"system_prompt": "You are a helpful assistant.",
"updated_at": "2026-04-20T10:00:00Z",
"version": 1
},
"designated_version_id": "550e8400-e29b-41d4-a716-446655440000",
"id": "650e8400-e29b-41d4-a716-446655440001",
"name": "my-preset",
"slug": "my-preset",
"status": "active",
"status_updated_at": null,
"updated_at": "2026-04-20T10:00:00Z",
"workspace_id": "750e8400-e29b-41d4-a716-446655440002"
} |
\ No newline at end of file
diff --git a/docs/components/createworkspacerequest.mdx b/docs/components/createworkspacerequest.mdx
new file mode 100644
index 0000000..3de1021
--- /dev/null
+++ b/docs/components/createworkspacerequest.mdx
@@ -0,0 +1,19 @@
+---
+title: "CreateWorkspaceRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `default_image_model` | *OptionalNullable[str]* | :heavy_minus_sign: | Default image model for this workspace | openai/dall-e-3 |
+| `default_provider_sort` | *OptionalNullable[str]* | :heavy_minus_sign: | Default provider sort preference (price, throughput, latency, exacto) | price |
+| `default_text_model` | *OptionalNullable[str]* | :heavy_minus_sign: | Default text model for this workspace | openai/gpt-4o |
+| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | Description of the workspace | Production environment workspace |
+| `io_logging_api_key_ids` | List[*int*] | :heavy_minus_sign: | Optional array of API key IDs to filter I/O logging | null |
+| `io_logging_sampling_rate` | *Optional[float]* | :heavy_minus_sign: | Sampling rate for I/O logging (0.0001-1) | 1 |
+| `is_data_discount_logging_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether data discount logging is enabled | true |
+| `is_observability_broadcast_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether broadcast is enabled | false |
+| `is_observability_io_logging_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether private logging is enabled | false |
+| `name` | *str* | :heavy_check_mark: | Name for the new workspace | Production |
+| `slug` | *str* | :heavy_check_mark: | URL-friendly slug (lowercase alphanumeric segments separated by single hyphens, no leading/trailing hyphens) | production |
\ No newline at end of file
diff --git a/docs/components/createworkspaceresponse.mdx b/docs/components/createworkspaceresponse.mdx
new file mode 100644
index 0000000..85596ef
--- /dev/null
+++ b/docs/components/createworkspaceresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "CreateWorkspaceResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.Workspace](../components/workspace.mdx) | :heavy_check_mark: | N/A | \{
"created_at": "2025-08-24T10:30:00Z",
"created_by": "user_abc123",
"default_image_model": "openai/dall-e-3",
"default_provider_sort": "price",
"default_text_model": "openai/gpt-4o",
"description": "Production environment workspace",
"id": "550e8400-e29b-41d4-a716-446655440000",
"io_logging_api_key_ids": null,
"io_logging_sampling_rate": 1,
"is_data_discount_logging_enabled": true,
"is_observability_broadcast_enabled": false,
"is_observability_io_logging_enabled": false,
"name": "Production",
"slug": "production",
"updated_at": "2025-08-24T15:45:00Z"
} |
\ No newline at end of file
diff --git a/docs/components/customtool.mdx b/docs/components/customtool.mdx
new file mode 100644
index 0000000..4da5358
--- /dev/null
+++ b/docs/components/customtool.mdx
@@ -0,0 +1,15 @@
+---
+title: "CustomTool"
+---
+
+Custom tool configuration
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `description` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `format_` | [Optional[components.Format]](../components/format_.mdx) | :heavy_minus_sign: | N/A |
+| `name` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.CustomToolTypeCustom](../components/customtooltypecustom.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/customtoolcallinputdeltaevent.mdx b/docs/components/customtoolcallinputdeltaevent.mdx
new file mode 100644
index 0000000..4ff3cab
--- /dev/null
+++ b/docs/components/customtoolcallinputdeltaevent.mdx
@@ -0,0 +1,16 @@
+---
+title: "CustomToolCallInputDeltaEvent"
+---
+
+Event emitted when a custom tool call's freeform input is being streamed. Mirrors `response.function_call_arguments.delta` but for `custom` tools whose input is opaque text rather than JSON arguments.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `delta` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.CustomToolCallInputDeltaEventType](../components/customtoolcallinputdeltaeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/customtoolcallinputdeltaeventtype.mdx b/docs/components/customtoolcallinputdeltaeventtype.mdx
new file mode 100644
index 0000000..55bd172
--- /dev/null
+++ b/docs/components/customtoolcallinputdeltaeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "CustomToolCallInputDeltaEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import CustomToolCallInputDeltaEventType
+value: CustomToolCallInputDeltaEventType = "response.custom_tool_call_input.delta"
+```
+
+
+## Values
+
+- `"response.custom_tool_call_input.delta"`
diff --git a/docs/components/customtoolcallinputdoneevent.mdx b/docs/components/customtoolcallinputdoneevent.mdx
new file mode 100644
index 0000000..9fa94a1
--- /dev/null
+++ b/docs/components/customtoolcallinputdoneevent.mdx
@@ -0,0 +1,16 @@
+---
+title: "CustomToolCallInputDoneEvent"
+---
+
+Event emitted when a custom tool call's freeform input streaming is complete. Mirrors `response.function_call_arguments.done` but for `custom` tools.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `input` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.CustomToolCallInputDoneEventType](../components/customtoolcallinputdoneeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/customtoolcallinputdoneeventtype.mdx b/docs/components/customtoolcallinputdoneeventtype.mdx
new file mode 100644
index 0000000..8f1998f
--- /dev/null
+++ b/docs/components/customtoolcallinputdoneeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "CustomToolCallInputDoneEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import CustomToolCallInputDoneEventType
+value: CustomToolCallInputDoneEventType = "response.custom_tool_call_input.done"
+```
+
+
+## Values
+
+- `"response.custom_tool_call_input.done"`
diff --git a/docs/components/customtoolcallitem.mdx b/docs/components/customtoolcallitem.mdx
new file mode 100644
index 0000000..fc18f98
--- /dev/null
+++ b/docs/components/customtoolcallitem.mdx
@@ -0,0 +1,17 @@
+---
+title: "CustomToolCallItem"
+---
+
+A call to a custom (freeform-grammar) tool created by the model — distinct from `function_call`. Used for tools like Codex CLI's `apply_patch` whose payload is opaque text rather than JSON arguments.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
+| `call_id` | *str* | :heavy_check_mark: | N/A |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `input` | *str* | :heavy_check_mark: | N/A |
+| `name` | *str* | :heavy_check_mark: | N/A |
+| `namespace` | *Optional[str]* | :heavy_minus_sign: | Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server) |
+| `type` | [components.CustomToolCallItemType](../components/customtoolcallitemtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/customtoolcallitemtype.mdx b/docs/components/customtoolcallitemtype.mdx
new file mode 100644
index 0000000..3d905db
--- /dev/null
+++ b/docs/components/customtoolcallitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "CustomToolCallItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import CustomToolCallItemType
+value: CustomToolCallItemType = "custom_tool_call"
+```
+
+
+## Values
+
+- `"custom_tool_call"`
diff --git a/docs/components/customtoolcalloutputitem.mdx b/docs/components/customtoolcalloutputitem.mdx
new file mode 100644
index 0000000..2e8dd65
--- /dev/null
+++ b/docs/components/customtoolcalloutputitem.mdx
@@ -0,0 +1,15 @@
+---
+title: "CustomToolCallOutputItem"
+---
+
+The output from a custom (freeform-grammar) tool call execution. Mirrors `function_call_output` but is matched to a `custom_tool_call` rather than a `function_call`.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `call_id` | *str* | :heavy_check_mark: | N/A |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `output` | [components.CustomToolCallOutputItemOutputUnion2](../components/customtoolcalloutputitemoutputunion2.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.CustomToolCallOutputItemTypeCustomToolCallOutput](../components/customtoolcalloutputitemtypecustomtoolcalloutput.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/customtoolcalloutputitemdetail.mdx b/docs/components/customtoolcalloutputitemdetail.mdx
new file mode 100644
index 0000000..ba63c6e
--- /dev/null
+++ b/docs/components/customtoolcalloutputitemdetail.mdx
@@ -0,0 +1,22 @@
+---
+title: "CustomToolCallOutputItemDetail"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import CustomToolCallOutputItemDetail
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: CustomToolCallOutputItemDetail = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"high"`
+- `"low"`
+- `"original"`
diff --git a/docs/components/customtoolcalloutputitemoutputinputimage.mdx b/docs/components/customtoolcalloutputitemoutputinputimage.mdx
new file mode 100644
index 0000000..830ac24
--- /dev/null
+++ b/docs/components/customtoolcalloutputitemoutputinputimage.mdx
@@ -0,0 +1,14 @@
+---
+title: "CustomToolCallOutputItemOutputInputImage"
+---
+
+Image input content item
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `detail` | [components.CustomToolCallOutputItemDetail](../components/customtoolcalloutputitemdetail.mdx) | :heavy_check_mark: | N/A |
+| `image_url` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `type` | [components.CustomToolCallOutputItemTypeInputImage](../components/customtoolcalloutputitemtypeinputimage.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/customtoolcalloutputitemoutputunion1.mdx b/docs/components/customtoolcalloutputitemoutputunion1.mdx
new file mode 100644
index 0000000..e3d8498
--- /dev/null
+++ b/docs/components/customtoolcalloutputitemoutputunion1.mdx
@@ -0,0 +1,24 @@
+---
+title: "CustomToolCallOutputItemOutputUnion1"
+---
+
+## Supported Types
+
+### `components.InputText`
+
+```python
+value: components.InputText = /* values here */
+```
+
+### `components.CustomToolCallOutputItemOutputInputImage`
+
+```python
+value: components.CustomToolCallOutputItemOutputInputImage = /* values here */
+```
+
+### `components.InputFile`
+
+```python
+value: components.InputFile = /* values here */
+```
+
diff --git a/docs/components/customtoolcalloutputitemoutputunion2.mdx b/docs/components/customtoolcalloutputitemoutputunion2.mdx
new file mode 100644
index 0000000..10e3c5e
--- /dev/null
+++ b/docs/components/customtoolcalloutputitemoutputunion2.mdx
@@ -0,0 +1,18 @@
+---
+title: "CustomToolCallOutputItemOutputUnion2"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.CustomToolCallOutputItemOutputUnion1]`
+
+```python
+value: List[components.CustomToolCallOutputItemOutputUnion1] = /* values here */
+```
+
diff --git a/docs/components/customtoolcalloutputitemtypecustomtoolcalloutput.mdx b/docs/components/customtoolcalloutputitemtypecustomtoolcalloutput.mdx
new file mode 100644
index 0000000..abfec63
--- /dev/null
+++ b/docs/components/customtoolcalloutputitemtypecustomtoolcalloutput.mdx
@@ -0,0 +1,15 @@
+---
+title: "CustomToolCallOutputItemTypeCustomToolCallOutput"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import CustomToolCallOutputItemTypeCustomToolCallOutput
+value: CustomToolCallOutputItemTypeCustomToolCallOutput = "custom_tool_call_output"
+```
+
+
+## Values
+
+- `"custom_tool_call_output"`
diff --git a/docs/components/customtoolcalloutputitemtypeinputimage.mdx b/docs/components/customtoolcalloutputitemtypeinputimage.mdx
new file mode 100644
index 0000000..821cf8b
--- /dev/null
+++ b/docs/components/customtoolcalloutputitemtypeinputimage.mdx
@@ -0,0 +1,15 @@
+---
+title: "CustomToolCallOutputItemTypeInputImage"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import CustomToolCallOutputItemTypeInputImage
+value: CustomToolCallOutputItemTypeInputImage = "input_image"
+```
+
+
+## Values
+
+- `"input_image"`
diff --git a/docs/components/customtooltypecustom.mdx b/docs/components/customtooltypecustom.mdx
new file mode 100644
index 0000000..10faea8
--- /dev/null
+++ b/docs/components/customtooltypecustom.mdx
@@ -0,0 +1,15 @@
+---
+title: "CustomToolTypeCustom"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import CustomToolTypeCustom
+value: CustomToolTypeCustom = "custom"
+```
+
+
+## Values
+
+- `"custom"`
diff --git a/docs/components/dabenchmarkentry.mdx b/docs/components/dabenchmarkentry.mdx
new file mode 100644
index 0000000..63238a9
--- /dev/null
+++ b/docs/components/dabenchmarkentry.mdx
@@ -0,0 +1,16 @@
+---
+title: "DABenchmarkEntry"
+---
+
+A single Design Arena benchmark entry for a specific arena+category
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
+| `arena` | *str* | :heavy_check_mark: | Arena type (e.g. models, builders, agents) | models |
+| `category` | *str* | :heavy_check_mark: | Category within the arena (e.g. website, gamedev, uicomponent) | website |
+| `elo` | *float* | :heavy_check_mark: | ELO rating from head-to-head arena battles | 1385.2 |
+| `rank` | *int* | :heavy_check_mark: | Rank position within this arena+category among models available on OpenRouter (1 = highest ELO) | 5 |
+| `win_rate` | *float* | :heavy_check_mark: | Win rate percentage in arena battles | 62.5 |
\ No newline at end of file
diff --git a/docs/components/datacollection.md b/docs/components/datacollection.md
deleted file mode 100644
index a07c6e2..0000000
--- a/docs/components/datacollection.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# DataCollection
-
-Data collection setting. If no available model provider meets the requirement, your request will return an error.
-- allow: (default) allow providers which store user data non-transiently and may train on it
-
-- deny: use only providers which do not collect user data.
-
-
-## Values
-
-| Name | Value |
-| ------- | ------- |
-| `DENY` | deny |
-| `ALLOW` | allow |
\ No newline at end of file
diff --git a/docs/components/datacollection.mdx b/docs/components/datacollection.mdx
new file mode 100644
index 0000000..307b625
--- /dev/null
+++ b/docs/components/datacollection.mdx
@@ -0,0 +1,25 @@
+---
+title: "DataCollection"
+---
+
+Data collection setting. If no available model provider meets the requirement, your request will return an error.
+- allow: (default) allow providers which store user data non-transiently and may train on it
+
+- deny: use only providers which do not collect user data.
+
+## Example Usage
+
+```python
+from openrouter.components import DataCollection
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: DataCollection = "deny"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"deny"`
+- `"allow"`
diff --git a/docs/components/dataregion.mdx b/docs/components/dataregion.mdx
new file mode 100644
index 0000000..07ebe2f
--- /dev/null
+++ b/docs/components/dataregion.mdx
@@ -0,0 +1,22 @@
+---
+title: "DataRegion"
+---
+
+The data region this generation was routed through. 'europe' for EU-routed requests, 'global' otherwise.
+
+## Example Usage
+
+```python
+from openrouter.components import DataRegion
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: DataRegion = "global"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"global"`
+- `"europe"`
diff --git a/docs/components/datetimeservertool.mdx b/docs/components/datetimeservertool.mdx
new file mode 100644
index 0000000..af483be
--- /dev/null
+++ b/docs/components/datetimeservertool.mdx
@@ -0,0 +1,13 @@
+---
+title: "DatetimeServerTool"
+---
+
+OpenRouter built-in server tool: returns the current date and time
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `parameters` | [Optional[components.DatetimeServerToolConfig]](../components/datetimeservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for the openrouter:datetime server tool | \{
"timezone": "America/New_York"
} |
+| `type` | [components.DatetimeServerToolType](../components/datetimeservertooltype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/datetimeservertoolconfig.mdx b/docs/components/datetimeservertoolconfig.mdx
new file mode 100644
index 0000000..f2c289a
--- /dev/null
+++ b/docs/components/datetimeservertoolconfig.mdx
@@ -0,0 +1,12 @@
+---
+title: "DatetimeServerToolConfig"
+---
+
+Configuration for the openrouter:datetime server tool
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
+| `timezone` | *Optional[str]* | :heavy_minus_sign: | IANA timezone name (e.g. "America/New_York"). Defaults to UTC. | America/New_York |
\ No newline at end of file
diff --git a/docs/components/datetimeservertooltype.mdx b/docs/components/datetimeservertooltype.mdx
new file mode 100644
index 0000000..23b3fdf
--- /dev/null
+++ b/docs/components/datetimeservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "DatetimeServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import DatetimeServerToolType
+value: DatetimeServerToolType = "openrouter:datetime"
+```
+
+
+## Values
+
+- `"openrouter:datetime"`
diff --git a/docs/components/debug.mdx b/docs/components/debug.mdx
new file mode 100644
index 0000000..5aff6df
--- /dev/null
+++ b/docs/components/debug.mdx
@@ -0,0 +1,10 @@
+---
+title: "Debug"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `echo_upstream_body` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `timings` | [Optional[components.Timings]](../components/timings.mdx) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/debugevent.mdx b/docs/components/debugevent.mdx
new file mode 100644
index 0000000..1a76e56
--- /dev/null
+++ b/docs/components/debugevent.mdx
@@ -0,0 +1,14 @@
+---
+title: "DebugEvent"
+---
+
+Debug event emitted when debug.echo_upstream_body is true. Contains the transformed upstream request body or timing milestones.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `debug` | [components.Debug](../components/debug.mdx) | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.DebugEventType](../components/debugeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/debugeventtype.mdx b/docs/components/debugeventtype.mdx
new file mode 100644
index 0000000..5d2d4dc
--- /dev/null
+++ b/docs/components/debugeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "DebugEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import DebugEventType
+value: DebugEventType = "response.debug"
+```
+
+
+## Values
+
+- `"response.debug"`
diff --git a/docs/components/defaulteffort.mdx b/docs/components/defaulteffort.mdx
new file mode 100644
index 0000000..1e86768
--- /dev/null
+++ b/docs/components/defaulteffort.mdx
@@ -0,0 +1,27 @@
+---
+title: "DefaultEffort"
+---
+
+Default reasoning effort when the client enables reasoning without specifying effort. Maps to `reasoning.effort` in chat requests. When `"none"`, prefer omitting effort unless the user explicitly disables reasoning.
+
+## Example Usage
+
+```python
+from openrouter.components import DefaultEffort
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: DefaultEffort = "max"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"max"`
+- `"xhigh"`
+- `"high"`
+- `"medium"`
+- `"low"`
+- `"minimal"`
+- `"none"`
diff --git a/docs/components/defaultparameters.md b/docs/components/defaultparameters.mdx
similarity index 96%
rename from docs/components/defaultparameters.md
rename to docs/components/defaultparameters.mdx
index 6941215..6c502ac 100644
--- a/docs/components/defaultparameters.md
+++ b/docs/components/defaultparameters.mdx
@@ -1,4 +1,6 @@
-# DefaultParameters
+---
+title: "DefaultParameters"
+---
Default parameters for this model
diff --git a/docs/components/deletebyokkeyresponse.mdx b/docs/components/deletebyokkeyresponse.mdx
new file mode 100644
index 0000000..f1c80d2
--- /dev/null
+++ b/docs/components/deletebyokkeyresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "DeleteBYOKKeyResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- |
+| `deleted` | *Literal[True]* | :heavy_check_mark: | Confirmation that the BYOK credential was deleted. | true |
\ No newline at end of file
diff --git a/docs/components/deleteguardrailresponse.mdx b/docs/components/deleteguardrailresponse.mdx
new file mode 100644
index 0000000..36069a9
--- /dev/null
+++ b/docs/components/deleteguardrailresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "DeleteGuardrailResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- |
+| `deleted` | *Literal[True]* | :heavy_check_mark: | Confirmation that the guardrail was deleted | true |
\ No newline at end of file
diff --git a/docs/components/deleteobservabilitydestinationresponse.mdx b/docs/components/deleteobservabilitydestinationresponse.mdx
new file mode 100644
index 0000000..4d572b6
--- /dev/null
+++ b/docs/components/deleteobservabilitydestinationresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "DeleteObservabilityDestinationResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------- | ------------------------- | ------------------------- | ------------------------- |
+| `deleted` | *Literal[True]* | :heavy_check_mark: | Always `true` on success. |
\ No newline at end of file
diff --git a/docs/components/deleteworkspacebudgetresponse.mdx b/docs/components/deleteworkspacebudgetresponse.mdx
new file mode 100644
index 0000000..fb5ff10
--- /dev/null
+++ b/docs/components/deleteworkspacebudgetresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "DeleteWorkspaceBudgetResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- |
+| `deleted` | *Literal[True]* | :heavy_check_mark: | Confirmation that the budget was deleted (or did not exist) | true |
\ No newline at end of file
diff --git a/docs/components/deleteworkspaceresponse.mdx b/docs/components/deleteworkspaceresponse.mdx
new file mode 100644
index 0000000..93b4da4
--- /dev/null
+++ b/docs/components/deleteworkspaceresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "DeleteWorkspaceResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- |
+| `deleted` | *Literal[True]* | :heavy_check_mark: | Confirmation that the workspace was deleted | true |
\ No newline at end of file
diff --git a/docs/components/easyinputmessage.mdx b/docs/components/easyinputmessage.mdx
new file mode 100644
index 0000000..60e935b
--- /dev/null
+++ b/docs/components/easyinputmessage.mdx
@@ -0,0 +1,12 @@
+---
+title: "EasyInputMessage"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `content` | [OptionalNullable[components.EasyInputMessageContentUnion2]](../components/easyinputmessagecontentunion2.mdx) | :heavy_minus_sign: | N/A | |
+| `phase` | [OptionalNullable[components.EasyInputMessagePhaseUnion]](../components/easyinputmessagephaseunion.mdx) | :heavy_minus_sign: | The phase of an assistant message. Use `commentary` for an intermediate assistant message and `final_answer` for the final assistant message. For follow-up requests with models like `gpt-5.3-codex` and later, preserve and resend phase on all assistant messages. Omitting it can degrade performance. Not used for user messages. | final_answer |
+| `role` | [components.EasyInputMessageRoleUnion](../components/easyinputmessageroleunion.mdx) | :heavy_check_mark: | N/A | |
+| `type` | [Optional[components.EasyInputMessageTypeMessage]](../components/easyinputmessagetypemessage.mdx) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/components/easyinputmessagecontentinputimage.mdx b/docs/components/easyinputmessagecontentinputimage.mdx
new file mode 100644
index 0000000..502f118
--- /dev/null
+++ b/docs/components/easyinputmessagecontentinputimage.mdx
@@ -0,0 +1,14 @@
+---
+title: "EasyInputMessageContentInputImage"
+---
+
+Image input content item
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `detail` | [components.EasyInputMessageDetail](../components/easyinputmessagedetail.mdx) | :heavy_check_mark: | N/A |
+| `image_url` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `type` | [components.EasyInputMessageTypeInputImage](../components/easyinputmessagetypeinputimage.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/easyinputmessagecontentunion1.mdx b/docs/components/easyinputmessagecontentunion1.mdx
new file mode 100644
index 0000000..b650861
--- /dev/null
+++ b/docs/components/easyinputmessagecontentunion1.mdx
@@ -0,0 +1,36 @@
+---
+title: "EasyInputMessageContentUnion1"
+---
+
+## Supported Types
+
+### `components.InputText`
+
+```python
+value: components.InputText = /* values here */
+```
+
+### `components.EasyInputMessageContentInputImage`
+
+```python
+value: components.EasyInputMessageContentInputImage = /* values here */
+```
+
+### `components.InputFile`
+
+```python
+value: components.InputFile = /* values here */
+```
+
+### `components.InputAudio`
+
+```python
+value: components.InputAudio = /* values here */
+```
+
+### `components.InputVideo`
+
+```python
+value: components.InputVideo = /* values here */
+```
+
diff --git a/docs/components/easyinputmessagecontentunion2.mdx b/docs/components/easyinputmessagecontentunion2.mdx
new file mode 100644
index 0000000..02c13eb
--- /dev/null
+++ b/docs/components/easyinputmessagecontentunion2.mdx
@@ -0,0 +1,24 @@
+---
+title: "EasyInputMessageContentUnion2"
+---
+
+## Supported Types
+
+### `List[components.EasyInputMessageContentUnion1]`
+
+```python
+value: List[components.EasyInputMessageContentUnion1] = /* values here */
+```
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/easyinputmessagedetail.mdx b/docs/components/easyinputmessagedetail.mdx
new file mode 100644
index 0000000..4f05297
--- /dev/null
+++ b/docs/components/easyinputmessagedetail.mdx
@@ -0,0 +1,22 @@
+---
+title: "EasyInputMessageDetail"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import EasyInputMessageDetail
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: EasyInputMessageDetail = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"high"`
+- `"low"`
+- `"original"`
diff --git a/docs/components/easyinputmessagephasecommentary.mdx b/docs/components/easyinputmessagephasecommentary.mdx
new file mode 100644
index 0000000..6c91d16
--- /dev/null
+++ b/docs/components/easyinputmessagephasecommentary.mdx
@@ -0,0 +1,15 @@
+---
+title: "EasyInputMessagePhaseCommentary"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import EasyInputMessagePhaseCommentary
+value: EasyInputMessagePhaseCommentary = "commentary"
+```
+
+
+## Values
+
+- `"commentary"`
diff --git a/docs/components/easyinputmessagephasefinalanswer.mdx b/docs/components/easyinputmessagephasefinalanswer.mdx
new file mode 100644
index 0000000..4c9f607
--- /dev/null
+++ b/docs/components/easyinputmessagephasefinalanswer.mdx
@@ -0,0 +1,15 @@
+---
+title: "EasyInputMessagePhaseFinalAnswer"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import EasyInputMessagePhaseFinalAnswer
+value: EasyInputMessagePhaseFinalAnswer = "final_answer"
+```
+
+
+## Values
+
+- `"final_answer"`
diff --git a/docs/components/easyinputmessagephaseunion.mdx b/docs/components/easyinputmessagephaseunion.mdx
new file mode 100644
index 0000000..6f56b1a
--- /dev/null
+++ b/docs/components/easyinputmessagephaseunion.mdx
@@ -0,0 +1,27 @@
+---
+title: "EasyInputMessagePhaseUnion"
+---
+
+The phase of an assistant message. Use `commentary` for an intermediate assistant message and `final_answer` for the final assistant message. For follow-up requests with models like `gpt-5.3-codex` and later, preserve and resend phase on all assistant messages. Omitting it can degrade performance. Not used for user messages.
+
+
+## Supported Types
+
+### `components.EasyInputMessagePhaseCommentary`
+
+```python
+value: components.EasyInputMessagePhaseCommentary = /* values here */
+```
+
+### `components.EasyInputMessagePhaseFinalAnswer`
+
+```python
+value: components.EasyInputMessagePhaseFinalAnswer = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/easyinputmessageroleassistant.mdx b/docs/components/easyinputmessageroleassistant.mdx
new file mode 100644
index 0000000..ad75b14
--- /dev/null
+++ b/docs/components/easyinputmessageroleassistant.mdx
@@ -0,0 +1,15 @@
+---
+title: "EasyInputMessageRoleAssistant"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import EasyInputMessageRoleAssistant
+value: EasyInputMessageRoleAssistant = "assistant"
+```
+
+
+## Values
+
+- `"assistant"`
diff --git a/docs/components/easyinputmessageroledeveloper.mdx b/docs/components/easyinputmessageroledeveloper.mdx
new file mode 100644
index 0000000..1c5e3b1
--- /dev/null
+++ b/docs/components/easyinputmessageroledeveloper.mdx
@@ -0,0 +1,15 @@
+---
+title: "EasyInputMessageRoleDeveloper"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import EasyInputMessageRoleDeveloper
+value: EasyInputMessageRoleDeveloper = "developer"
+```
+
+
+## Values
+
+- `"developer"`
diff --git a/docs/components/easyinputmessagerolesystem.mdx b/docs/components/easyinputmessagerolesystem.mdx
new file mode 100644
index 0000000..2baab71
--- /dev/null
+++ b/docs/components/easyinputmessagerolesystem.mdx
@@ -0,0 +1,15 @@
+---
+title: "EasyInputMessageRoleSystem"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import EasyInputMessageRoleSystem
+value: EasyInputMessageRoleSystem = "system"
+```
+
+
+## Values
+
+- `"system"`
diff --git a/docs/components/easyinputmessageroleunion.mdx b/docs/components/easyinputmessageroleunion.mdx
new file mode 100644
index 0000000..27659d8
--- /dev/null
+++ b/docs/components/easyinputmessageroleunion.mdx
@@ -0,0 +1,30 @@
+---
+title: "EasyInputMessageRoleUnion"
+---
+
+## Supported Types
+
+### `components.EasyInputMessageRoleUser`
+
+```python
+value: components.EasyInputMessageRoleUser = /* values here */
+```
+
+### `components.EasyInputMessageRoleSystem`
+
+```python
+value: components.EasyInputMessageRoleSystem = /* values here */
+```
+
+### `components.EasyInputMessageRoleAssistant`
+
+```python
+value: components.EasyInputMessageRoleAssistant = /* values here */
+```
+
+### `components.EasyInputMessageRoleDeveloper`
+
+```python
+value: components.EasyInputMessageRoleDeveloper = /* values here */
+```
+
diff --git a/docs/components/easyinputmessageroleuser.mdx b/docs/components/easyinputmessageroleuser.mdx
new file mode 100644
index 0000000..2d5933c
--- /dev/null
+++ b/docs/components/easyinputmessageroleuser.mdx
@@ -0,0 +1,15 @@
+---
+title: "EasyInputMessageRoleUser"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import EasyInputMessageRoleUser
+value: EasyInputMessageRoleUser = "user"
+```
+
+
+## Values
+
+- `"user"`
diff --git a/docs/components/easyinputmessagetypeinputimage.mdx b/docs/components/easyinputmessagetypeinputimage.mdx
new file mode 100644
index 0000000..f7d504e
--- /dev/null
+++ b/docs/components/easyinputmessagetypeinputimage.mdx
@@ -0,0 +1,15 @@
+---
+title: "EasyInputMessageTypeInputImage"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import EasyInputMessageTypeInputImage
+value: EasyInputMessageTypeInputImage = "input_image"
+```
+
+
+## Values
+
+- `"input_image"`
diff --git a/docs/components/easyinputmessagetypemessage.mdx b/docs/components/easyinputmessagetypemessage.mdx
new file mode 100644
index 0000000..aca1891
--- /dev/null
+++ b/docs/components/easyinputmessagetypemessage.mdx
@@ -0,0 +1,15 @@
+---
+title: "EasyInputMessageTypeMessage"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import EasyInputMessageTypeMessage
+value: EasyInputMessageTypeMessage = "message"
+```
+
+
+## Values
+
+- `"message"`
diff --git a/docs/components/edgenetworktimeoutresponseerrordata.md b/docs/components/edgenetworktimeoutresponseerrordata.mdx
similarity index 92%
rename from docs/components/edgenetworktimeoutresponseerrordata.md
rename to docs/components/edgenetworktimeoutresponseerrordata.mdx
index f460fe4..66b365f 100644
--- a/docs/components/edgenetworktimeoutresponseerrordata.md
+++ b/docs/components/edgenetworktimeoutresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# EdgeNetworkTimeoutResponseErrorData
+---
+title: "EdgeNetworkTimeoutResponseErrorData"
+---
Error data for EdgeNetworkTimeoutResponse
diff --git a/docs/components/edit.mdx b/docs/components/edit.mdx
new file mode 100644
index 0000000..da55b43
--- /dev/null
+++ b/docs/components/edit.mdx
@@ -0,0 +1,24 @@
+---
+title: "Edit"
+---
+
+## Supported Types
+
+### `components.EditClearToolUses20250919`
+
+```python
+value: components.EditClearToolUses20250919 = /* values here */
+```
+
+### `components.EditClearThinking20251015`
+
+```python
+value: components.EditClearThinking20251015 = /* values here */
+```
+
+### `components.EditCompact20260112`
+
+```python
+value: components.EditCompact20260112 = /* values here */
+```
+
diff --git a/docs/components/editclearthinking20251015.mdx b/docs/components/editclearthinking20251015.mdx
new file mode 100644
index 0000000..0796f7c
--- /dev/null
+++ b/docs/components/editclearthinking20251015.mdx
@@ -0,0 +1,10 @@
+---
+title: "EditClearThinking20251015"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `keep` | [Optional[components.Keep]](../components/keep.mdx) | :heavy_minus_sign: | N/A |
+| `type` | [components.TypeClearThinking20251015](../components/typeclearthinking20251015.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/editcleartooluses20250919.mdx b/docs/components/editcleartooluses20250919.mdx
new file mode 100644
index 0000000..a8a3183
--- /dev/null
+++ b/docs/components/editcleartooluses20250919.mdx
@@ -0,0 +1,14 @@
+---
+title: "EditClearToolUses20250919"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `clear_at_least` | [OptionalNullable[components.AnthropicInputTokensClearAtLeast]](../components/anthropicinputtokensclearatleast.mdx) | :heavy_minus_sign: | N/A | \{
"type": "input_tokens",
"value": 50000
} |
+| `clear_tool_inputs` | [OptionalNullable[components.ClearToolInputs]](../components/cleartoolinputs.mdx) | :heavy_minus_sign: | N/A | |
+| `exclude_tools` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `keep` | [Optional[components.AnthropicToolUsesKeep]](../components/anthropictooluseskeep.mdx) | :heavy_minus_sign: | N/A | \{
"type": "tool_uses",
"value": 5
} |
+| `trigger` | [Optional[components.Trigger]](../components/trigger.mdx) | :heavy_minus_sign: | N/A | |
+| `type` | [components.TypeClearToolUses20250919](../components/typecleartooluses20250919.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/editcompact20260112.mdx b/docs/components/editcompact20260112.mdx
new file mode 100644
index 0000000..09c8fd6
--- /dev/null
+++ b/docs/components/editcompact20260112.mdx
@@ -0,0 +1,12 @@
+---
+title: "EditCompact20260112"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `instructions` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `pause_after_compaction` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `trigger` | [OptionalNullable[components.TriggerInputTokens]](../components/triggerinputtokens.mdx) | :heavy_minus_sign: | N/A | \{
"type": "input_tokens",
"value": 100000
} |
+| `type` | [components.TypeCompact20260112](../components/typecompact20260112.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/edittypeinputtokens.mdx b/docs/components/edittypeinputtokens.mdx
new file mode 100644
index 0000000..b876816
--- /dev/null
+++ b/docs/components/edittypeinputtokens.mdx
@@ -0,0 +1,15 @@
+---
+title: "EditTypeInputTokens"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import EditTypeInputTokens
+value: EditTypeInputTokens = "input_tokens"
+```
+
+
+## Values
+
+- `"input_tokens"`
diff --git a/docs/components/endpointinfo.mdx b/docs/components/endpointinfo.mdx
new file mode 100644
index 0000000..e525afd
--- /dev/null
+++ b/docs/components/endpointinfo.mdx
@@ -0,0 +1,11 @@
+---
+title: "EndpointInfo"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `model` | *str* | :heavy_check_mark: | N/A |
+| `provider` | *str* | :heavy_check_mark: | N/A |
+| `selected` | *bool* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/endpointsmetadata.mdx b/docs/components/endpointsmetadata.mdx
new file mode 100644
index 0000000..4add6eb
--- /dev/null
+++ b/docs/components/endpointsmetadata.mdx
@@ -0,0 +1,10 @@
+---
+title: "EndpointsMetadata"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
+| `available` | List[[components.EndpointInfo](../components/endpointinfo.mdx)] | :heavy_check_mark: | N/A |
+| `total` | *int* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/endpointstatus.md b/docs/components/endpointstatus.md
deleted file mode 100644
index dd89005..0000000
--- a/docs/components/endpointstatus.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# EndpointStatus
-
-
-## Values
-
-| Name | Value |
-| ---------- | ---------- |
-| `ZERO` | 0 |
-| `MINUS_1` | -1 |
-| `MINUS_2` | -2 |
-| `MINUS_3` | -3 |
-| `MINUS_5` | -5 |
-| `MINUS_10` | -10 |
\ No newline at end of file
diff --git a/docs/components/endpointstatus.mdx b/docs/components/endpointstatus.mdx
new file mode 100644
index 0000000..72c5b4f
--- /dev/null
+++ b/docs/components/endpointstatus.mdx
@@ -0,0 +1,24 @@
+---
+title: "EndpointStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import EndpointStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedInt
+value: EndpointStatus = 0
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `0`
+- `-1`
+- `-2`
+- `-3`
+- `-5`
+- `-10`
diff --git a/docs/components/enumcapability.mdx b/docs/components/enumcapability.mdx
new file mode 100644
index 0000000..4c04e70
--- /dev/null
+++ b/docs/components/enumcapability.mdx
@@ -0,0 +1,13 @@
+---
+title: "EnumCapability"
+---
+
+A parameter that accepts one of a discrete set of string values.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `type` | [components.EnumCapabilityType](../components/enumcapabilitytype.mdx) | :heavy_check_mark: | N/A |
+| `values` | List[*str*] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/enumcapabilitytype.mdx b/docs/components/enumcapabilitytype.mdx
new file mode 100644
index 0000000..1b43e9b
--- /dev/null
+++ b/docs/components/enumcapabilitytype.mdx
@@ -0,0 +1,15 @@
+---
+title: "EnumCapabilityType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import EnumCapabilityType
+value: EnumCapabilityType = "enum"
+```
+
+
+## Values
+
+- `"enum"`
diff --git a/docs/components/environment.mdx b/docs/components/environment.mdx
new file mode 100644
index 0000000..c08a3d8
--- /dev/null
+++ b/docs/components/environment.mdx
@@ -0,0 +1,23 @@
+---
+title: "Environment"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Environment
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Environment = "windows"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"windows"`
+- `"mac"`
+- `"linux"`
+- `"ubuntu"`
+- `"browser"`
diff --git a/docs/components/errorcode.mdx b/docs/components/errorcode.mdx
new file mode 100644
index 0000000..c177e30
--- /dev/null
+++ b/docs/components/errorcode.mdx
@@ -0,0 +1,23 @@
+---
+title: "ErrorCode"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ErrorCode
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ErrorCode = "invalid_tool_input"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"invalid_tool_input"`
+- `"unavailable"`
+- `"max_uses_exceeded"`
+- `"too_many_requests"`
+- `"query_too_long"`
diff --git a/docs/components/errorevent.mdx b/docs/components/errorevent.mdx
new file mode 100644
index 0000000..b09b841
--- /dev/null
+++ b/docs/components/errorevent.mdx
@@ -0,0 +1,16 @@
+---
+title: "ErrorEvent"
+---
+
+Event emitted when an error occurs during streaming
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `code` | *Nullable[str]* | :heavy_check_mark: | N/A |
+| `message` | *str* | :heavy_check_mark: | N/A |
+| `param` | *Nullable[str]* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.ErrorEventType](../components/erroreventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/erroreventtype.mdx b/docs/components/erroreventtype.mdx
new file mode 100644
index 0000000..ffc147c
--- /dev/null
+++ b/docs/components/erroreventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ErrorEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ErrorEventType
+value: ErrorEventType = "error"
+```
+
+
+## Values
+
+- `"error"`
diff --git a/docs/components/event.mdx b/docs/components/event.mdx
new file mode 100644
index 0000000..3f077ae
--- /dev/null
+++ b/docs/components/event.mdx
@@ -0,0 +1,22 @@
+---
+title: "Event"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Event
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Event = "adapter_request"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"adapter_request"`
+- `"upstream_headers_received"`
+- `"first_token_received"`
+- `"upstream_body_ended"`
diff --git a/docs/components/failedmodel.mdx b/docs/components/failedmodel.mdx
new file mode 100644
index 0000000..70d6de5
--- /dev/null
+++ b/docs/components/failedmodel.mdx
@@ -0,0 +1,11 @@
+---
+title: "FailedModel"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `error` | *str* | :heavy_check_mark: | Error message describing why the model failed. |
+| `model` | *str* | :heavy_check_mark: | Slug of the analysis model that failed. |
+| `status_code` | *Optional[int]* | :heavy_minus_sign: | HTTP status code from the upstream response, when available (e.g. 402, 429). |
\ No newline at end of file
diff --git a/docs/components/fieldt.mdx b/docs/components/fieldt.mdx
new file mode 100644
index 0000000..a021f25
--- /dev/null
+++ b/docs/components/fieldt.mdx
@@ -0,0 +1,30 @@
+---
+title: "FieldT"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FieldT
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: FieldT = "model"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"model"`
+- `"provider"`
+- `"session_id"`
+- `"user_id"`
+- `"api_key_name"`
+- `"finish_reason"`
+- `"input"`
+- `"output"`
+- `"total_cost"`
+- `"total_tokens"`
+- `"prompt_tokens"`
+- `"completion_tokens"`
diff --git a/docs/components/file.mdx b/docs/components/file.mdx
new file mode 100644
index 0000000..d332b47
--- /dev/null
+++ b/docs/components/file.mdx
@@ -0,0 +1,11 @@
+---
+title: "File"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------- | -------------------------------------- | -------------------------------------- | -------------------------------------- |
+| `file_data` | *Optional[str]* | :heavy_minus_sign: | File content as base64 data URL or URL |
+| `file_id` | *Optional[str]* | :heavy_minus_sign: | File ID for previously uploaded files |
+| `filename` | *Optional[str]* | :heavy_minus_sign: | Original filename |
\ No newline at end of file
diff --git a/docs/components/filecitation.md b/docs/components/filecitation.mdx
similarity index 89%
rename from docs/components/filecitation.md
rename to docs/components/filecitation.mdx
index f03ca15..79ca743 100644
--- a/docs/components/filecitation.md
+++ b/docs/components/filecitation.mdx
@@ -1,5 +1,6 @@
-# FileCitation
-
+---
+title: "FileCitation"
+---
## Fields
@@ -8,4 +9,4 @@
| `file_id` | *str* | :heavy_check_mark: | N/A |
| `filename` | *str* | :heavy_check_mark: | N/A |
| `index` | *int* | :heavy_check_mark: | N/A |
-| `type` | [components.FileCitationType](../components/filecitationtype.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `type` | [components.FileCitationType](../components/filecitationtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/filecitationtype.md b/docs/components/filecitationtype.md
deleted file mode 100644
index 787e254..0000000
--- a/docs/components/filecitationtype.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# FileCitationType
-
-
-## Values
-
-| Name | Value |
-| --------------- | --------------- |
-| `FILE_CITATION` | file_citation |
\ No newline at end of file
diff --git a/docs/components/filecitationtype.mdx b/docs/components/filecitationtype.mdx
new file mode 100644
index 0000000..2450e43
--- /dev/null
+++ b/docs/components/filecitationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FileCitationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FileCitationType
+value: FileCitationType = "file_citation"
+```
+
+
+## Values
+
+- `"file_citation"`
diff --git a/docs/components/filedeleteresponse.mdx b/docs/components/filedeleteresponse.mdx
new file mode 100644
index 0000000..f9fa432
--- /dev/null
+++ b/docs/components/filedeleteresponse.mdx
@@ -0,0 +1,13 @@
+---
+title: "FileDeleteResponse"
+---
+
+Confirmation that a file was deleted.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.FileDeleteResponseType](../components/filedeleteresponsetype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/filedeleteresponsetype.mdx b/docs/components/filedeleteresponsetype.mdx
new file mode 100644
index 0000000..978f796
--- /dev/null
+++ b/docs/components/filedeleteresponsetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FileDeleteResponseType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FileDeleteResponseType
+value: FileDeleteResponseType = "file_deleted"
+```
+
+
+## Values
+
+- `"file_deleted"`
diff --git a/docs/components/filelistresponse.mdx b/docs/components/filelistresponse.mdx
new file mode 100644
index 0000000..ec38299
--- /dev/null
+++ b/docs/components/filelistresponse.mdx
@@ -0,0 +1,16 @@
+---
+title: "FileListResponse"
+---
+
+A page of files belonging to the requesting workspace.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- |
+| `cursor` | *Nullable[str]* | :heavy_check_mark: | Opaque cursor for the next page; null when there are no more results. |
+| `data` | List[[components.FileMetadata](../components/filemetadata.mdx)] | :heavy_check_mark: | N/A |
+| `first_id` | *Nullable[str]* | :heavy_check_mark: | N/A |
+| `has_more` | *bool* | :heavy_check_mark: | N/A |
+| `last_id` | *Nullable[str]* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/filemetadata.mdx b/docs/components/filemetadata.mdx
new file mode 100644
index 0000000..cfb23fb
--- /dev/null
+++ b/docs/components/filemetadata.mdx
@@ -0,0 +1,18 @@
+---
+title: "FileMetadata"
+---
+
+Metadata describing a stored file.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `created_at` | *str* | :heavy_check_mark: | N/A |
+| `downloadable` | *bool* | :heavy_check_mark: | N/A |
+| `filename` | *str* | :heavy_check_mark: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `mime_type` | *str* | :heavy_check_mark: | N/A |
+| `size_bytes` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.FileMetadataType](../components/filemetadatatype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/filemetadatatype.mdx b/docs/components/filemetadatatype.mdx
new file mode 100644
index 0000000..e670030
--- /dev/null
+++ b/docs/components/filemetadatatype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FileMetadataType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FileMetadataType
+value: FileMetadataType = "file"
+```
+
+
+## Values
+
+- `"file"`
diff --git a/docs/components/fileparserplugin.mdx b/docs/components/fileparserplugin.mdx
new file mode 100644
index 0000000..2a74948
--- /dev/null
+++ b/docs/components/fileparserplugin.mdx
@@ -0,0 +1,11 @@
+---
+title: "FileParserPlugin"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Set to false to disable the file-parser plugin for this request. Defaults to true. | |
+| `id` | [components.FileParserPluginID](../components/fileparserpluginid.mdx) | :heavy_check_mark: | N/A | |
+| `pdf` | [Optional[components.PDFParserOptions]](../components/pdfparseroptions.mdx) | :heavy_minus_sign: | Options for PDF parsing. | \{
"engine": "cloudflare-ai"
} |
\ No newline at end of file
diff --git a/docs/components/fileparserpluginid.mdx b/docs/components/fileparserpluginid.mdx
new file mode 100644
index 0000000..092654b
--- /dev/null
+++ b/docs/components/fileparserpluginid.mdx
@@ -0,0 +1,15 @@
+---
+title: "FileParserPluginID"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FileParserPluginID
+value: FileParserPluginID = "file-parser"
+```
+
+
+## Values
+
+- `"file-parser"`
diff --git a/docs/components/filepath.md b/docs/components/filepath.mdx
similarity index 83%
rename from docs/components/filepath.md
rename to docs/components/filepath.mdx
index cc41f2d..f6d81e7 100644
--- a/docs/components/filepath.md
+++ b/docs/components/filepath.mdx
@@ -1,5 +1,6 @@
-# FilePath
-
+---
+title: "FilePath"
+---
## Fields
@@ -7,4 +8,4 @@
| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
| `file_id` | *str* | :heavy_check_mark: | N/A |
| `index` | *int* | :heavy_check_mark: | N/A |
-| `type` | [components.FilePathType](../components/filepathtype.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `type` | [components.FilePathType](../components/filepathtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/filepathtype.md b/docs/components/filepathtype.md
deleted file mode 100644
index 8edc6ad..0000000
--- a/docs/components/filepathtype.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# FilePathType
-
-
-## Values
-
-| Name | Value |
-| ----------- | ----------- |
-| `FILE_PATH` | file_path |
\ No newline at end of file
diff --git a/docs/components/filepathtype.mdx b/docs/components/filepathtype.mdx
new file mode 100644
index 0000000..fa448d3
--- /dev/null
+++ b/docs/components/filepathtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FilePathType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FilePathType
+value: FilePathType = "file_path"
+```
+
+
+## Values
+
+- `"file_path"`
diff --git a/docs/components/filesearchservertool.mdx b/docs/components/filesearchservertool.mdx
new file mode 100644
index 0000000..573425f
--- /dev/null
+++ b/docs/components/filesearchservertool.mdx
@@ -0,0 +1,16 @@
+---
+title: "FileSearchServerTool"
+---
+
+File search tool configuration
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `filters` | [OptionalNullable[components.FiltersUnion]](../components/filtersunion.mdx) | :heavy_minus_sign: | N/A |
+| `max_num_results` | *Optional[int]* | :heavy_minus_sign: | N/A |
+| `ranking_options` | [Optional[components.RankingOptions]](../components/rankingoptions.mdx) | :heavy_minus_sign: | N/A |
+| `type` | [components.TypeFileSearch](../components/typefilesearch.mdx) | :heavy_check_mark: | N/A |
+| `vector_store_ids` | List[*str*] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/filesearchservertoolvalue1.mdx b/docs/components/filesearchservertoolvalue1.mdx
new file mode 100644
index 0000000..769ec98
--- /dev/null
+++ b/docs/components/filesearchservertoolvalue1.mdx
@@ -0,0 +1,18 @@
+---
+title: "FileSearchServerToolValue1"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `float`
+
+```python
+value: float = /* values here */
+```
+
diff --git a/docs/components/filesearchservertoolvalue2.mdx b/docs/components/filesearchservertoolvalue2.mdx
new file mode 100644
index 0000000..5702192
--- /dev/null
+++ b/docs/components/filesearchservertoolvalue2.mdx
@@ -0,0 +1,30 @@
+---
+title: "FileSearchServerToolValue2"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `float`
+
+```python
+value: float = /* values here */
+```
+
+### `bool`
+
+```python
+value: bool = /* values here */
+```
+
+### `List[components.FileSearchServerToolValue1]`
+
+```python
+value: List[components.FileSearchServerToolValue1] = /* values here */
+```
+
diff --git a/docs/components/filesservertool.mdx b/docs/components/filesservertool.mdx
new file mode 100644
index 0000000..7720ba4
--- /dev/null
+++ b/docs/components/filesservertool.mdx
@@ -0,0 +1,13 @@
+---
+title: "FilesServerTool"
+---
+
+OpenRouter built-in server tool: read, write, edit, and list workspace files via the Files API. Requires the `x-openrouter-file-ids: openrouter` request header.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `parameters` | [Optional[components.FilesServerToolConfig]](../components/filesservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for the openrouter:files server tool | \{} |
+| `type` | [components.FilesServerToolType](../components/filesservertooltype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/filesservertoolconfig.mdx b/docs/components/filesservertoolconfig.mdx
new file mode 100644
index 0000000..2a1990e
--- /dev/null
+++ b/docs/components/filesservertoolconfig.mdx
@@ -0,0 +1,11 @@
+---
+title: "FilesServerToolConfig"
+---
+
+Configuration for the openrouter:files server tool
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/docs/components/filesservertooltype.mdx b/docs/components/filesservertooltype.mdx
new file mode 100644
index 0000000..e9d2556
--- /dev/null
+++ b/docs/components/filesservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FilesServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FilesServerToolType
+value: FilesServerToolType = "openrouter:files"
+```
+
+
+## Values
+
+- `"openrouter:files"`
diff --git a/docs/components/filters.mdx b/docs/components/filters.mdx
new file mode 100644
index 0000000..deb0527
--- /dev/null
+++ b/docs/components/filters.mdx
@@ -0,0 +1,11 @@
+---
+title: "Filters"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `key` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.FiltersType](../components/filterstype.mdx) | :heavy_check_mark: | N/A |
+| `value` | [components.FileSearchServerToolValue2](../components/filesearchservertoolvalue2.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/filterstype.mdx b/docs/components/filterstype.mdx
new file mode 100644
index 0000000..172ba4b
--- /dev/null
+++ b/docs/components/filterstype.mdx
@@ -0,0 +1,24 @@
+---
+title: "FiltersType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FiltersType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: FiltersType = "eq"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"eq"`
+- `"ne"`
+- `"gt"`
+- `"gte"`
+- `"lt"`
+- `"lte"`
diff --git a/docs/components/filtersunion.mdx b/docs/components/filtersunion.mdx
new file mode 100644
index 0000000..263dda8
--- /dev/null
+++ b/docs/components/filtersunion.mdx
@@ -0,0 +1,24 @@
+---
+title: "FiltersUnion"
+---
+
+## Supported Types
+
+### `components.Filters`
+
+```python
+value: components.Filters = /* values here */
+```
+
+### `components.CompoundFilter`
+
+```python
+value: components.CompoundFilter = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/forbiddenresponseerrordata.md b/docs/components/forbiddenresponseerrordata.mdx
similarity index 93%
rename from docs/components/forbiddenresponseerrordata.md
rename to docs/components/forbiddenresponseerrordata.mdx
index 37e2199..6876df0 100644
--- a/docs/components/forbiddenresponseerrordata.md
+++ b/docs/components/forbiddenresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# ForbiddenResponseErrorData
+---
+title: "ForbiddenResponseErrorData"
+---
Error data for ForbiddenResponse
diff --git a/docs/components/format_.mdx b/docs/components/format_.mdx
new file mode 100644
index 0000000..76b8e33
--- /dev/null
+++ b/docs/components/format_.mdx
@@ -0,0 +1,18 @@
+---
+title: "Format"
+---
+
+## Supported Types
+
+### `components.FormatText`
+
+```python
+value: components.FormatText = /* values here */
+```
+
+### `components.FormatGrammar`
+
+```python
+value: components.FormatGrammar = /* values here */
+```
+
diff --git a/docs/components/formatenum.mdx b/docs/components/formatenum.mdx
new file mode 100644
index 0000000..b8cb084
--- /dev/null
+++ b/docs/components/formatenum.mdx
@@ -0,0 +1,20 @@
+---
+title: "FormatEnum"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FormatEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: FormatEnum = "mp3"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"mp3"`
+- `"wav"`
diff --git a/docs/components/formatgrammar.mdx b/docs/components/formatgrammar.mdx
new file mode 100644
index 0000000..27fb6f5
--- /dev/null
+++ b/docs/components/formatgrammar.mdx
@@ -0,0 +1,11 @@
+---
+title: "FormatGrammar"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `definition` | *str* | :heavy_check_mark: | N/A |
+| `syntax` | [components.Syntax](../components/syntax.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.FormatTypeGrammar](../components/formattypegrammar.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/formatjsonobjectconfig.mdx b/docs/components/formatjsonobjectconfig.mdx
new file mode 100644
index 0000000..376faaf
--- /dev/null
+++ b/docs/components/formatjsonobjectconfig.mdx
@@ -0,0 +1,12 @@
+---
+title: "FormatJSONObjectConfig"
+---
+
+JSON object response format
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `type` | [components.FormatJSONObjectConfigType](../components/formatjsonobjectconfigtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/formatjsonobjectconfigtype.mdx b/docs/components/formatjsonobjectconfigtype.mdx
new file mode 100644
index 0000000..54307d6
--- /dev/null
+++ b/docs/components/formatjsonobjectconfigtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FormatJSONObjectConfigType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FormatJSONObjectConfigType
+value: FormatJSONObjectConfigType = "json_object"
+```
+
+
+## Values
+
+- `"json_object"`
diff --git a/docs/components/formatjsonschemaconfig.mdx b/docs/components/formatjsonschemaconfig.mdx
new file mode 100644
index 0000000..12224f3
--- /dev/null
+++ b/docs/components/formatjsonschemaconfig.mdx
@@ -0,0 +1,16 @@
+---
+title: "FormatJSONSchemaConfig"
+---
+
+JSON schema constrained response format
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `description` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `name` | *str* | :heavy_check_mark: | N/A |
+| `schema_` | Dict[str, *Nullable[Any]*] | :heavy_check_mark: | N/A |
+| `strict` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A |
+| `type` | [components.FormatJSONSchemaConfigType](../components/formatjsonschemaconfigtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/formatjsonschemaconfigtype.mdx b/docs/components/formatjsonschemaconfigtype.mdx
new file mode 100644
index 0000000..b5a4ff2
--- /dev/null
+++ b/docs/components/formatjsonschemaconfigtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FormatJSONSchemaConfigType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FormatJSONSchemaConfigType
+value: FormatJSONSchemaConfigType = "json_schema"
+```
+
+
+## Values
+
+- `"json_schema"`
diff --git a/docs/components/formats.mdx b/docs/components/formats.mdx
new file mode 100644
index 0000000..fc3b368
--- /dev/null
+++ b/docs/components/formats.mdx
@@ -0,0 +1,27 @@
+---
+title: "Formats"
+---
+
+Text response format configuration
+
+
+## Supported Types
+
+### `components.FormatTextConfig`
+
+```python
+value: components.FormatTextConfig = /* values here */
+```
+
+### `components.FormatJSONObjectConfig`
+
+```python
+value: components.FormatJSONObjectConfig = /* values here */
+```
+
+### `components.FormatJSONSchemaConfig`
+
+```python
+value: components.FormatJSONSchemaConfig = /* values here */
+```
+
diff --git a/docs/components/formattext.mdx b/docs/components/formattext.mdx
new file mode 100644
index 0000000..61d6f3b
--- /dev/null
+++ b/docs/components/formattext.mdx
@@ -0,0 +1,9 @@
+---
+title: "FormatText"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `type` | [components.FormatTypeText](../components/formattypetext.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/formattextconfig.mdx b/docs/components/formattextconfig.mdx
new file mode 100644
index 0000000..7986713
--- /dev/null
+++ b/docs/components/formattextconfig.mdx
@@ -0,0 +1,12 @@
+---
+title: "FormatTextConfig"
+---
+
+Plain text response format
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `type` | [components.FormatTextConfigType](../components/formattextconfigtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/formattextconfigtype.mdx b/docs/components/formattextconfigtype.mdx
new file mode 100644
index 0000000..4d23621
--- /dev/null
+++ b/docs/components/formattextconfigtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FormatTextConfigType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FormatTextConfigType
+value: FormatTextConfigType = "text"
+```
+
+
+## Values
+
+- `"text"`
diff --git a/docs/components/formattypegrammar.mdx b/docs/components/formattypegrammar.mdx
new file mode 100644
index 0000000..d37196e
--- /dev/null
+++ b/docs/components/formattypegrammar.mdx
@@ -0,0 +1,15 @@
+---
+title: "FormatTypeGrammar"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FormatTypeGrammar
+value: FormatTypeGrammar = "grammar"
+```
+
+
+## Values
+
+- `"grammar"`
diff --git a/docs/components/formattypetext.mdx b/docs/components/formattypetext.mdx
new file mode 100644
index 0000000..ed61eec
--- /dev/null
+++ b/docs/components/formattypetext.mdx
@@ -0,0 +1,15 @@
+---
+title: "FormatTypeText"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FormatTypeText
+value: FormatTypeText = "text"
+```
+
+
+## Values
+
+- `"text"`
diff --git a/docs/components/frameimage.mdx b/docs/components/frameimage.mdx
new file mode 100644
index 0000000..46b4b98
--- /dev/null
+++ b/docs/components/frameimage.mdx
@@ -0,0 +1,11 @@
+---
+title: "FrameImage"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `image_url` | [components.FrameImageImageURL](../components/frameimageimageurl.mdx) | :heavy_check_mark: | N/A | |
+| `type` | [components.FrameImageType](../components/frameimagetype.mdx) | :heavy_check_mark: | N/A | |
+| `frame_type` | [components.FrameType](../components/frametype.mdx) | :heavy_check_mark: | Whether this image represents the first or last frame of the video | first_frame |
\ No newline at end of file
diff --git a/docs/components/frameimageimageurl.mdx b/docs/components/frameimageimageurl.mdx
new file mode 100644
index 0000000..713a81f
--- /dev/null
+++ b/docs/components/frameimageimageurl.mdx
@@ -0,0 +1,9 @@
+---
+title: "FrameImageImageURL"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/frameimagetype.mdx b/docs/components/frameimagetype.mdx
new file mode 100644
index 0000000..a27b6a6
--- /dev/null
+++ b/docs/components/frameimagetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FrameImageType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FrameImageType
+value: FrameImageType = "image_url"
+```
+
+
+## Values
+
+- `"image_url"`
diff --git a/docs/components/frametype.mdx b/docs/components/frametype.mdx
new file mode 100644
index 0000000..7144b86
--- /dev/null
+++ b/docs/components/frametype.mdx
@@ -0,0 +1,22 @@
+---
+title: "FrameType"
+---
+
+Whether this image represents the first or last frame of the video
+
+## Example Usage
+
+```python
+from openrouter.components import FrameType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: FrameType = "first_frame"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"first_frame"`
+- `"last_frame"`
diff --git a/docs/components/functioncallargsdeltaevent.mdx b/docs/components/functioncallargsdeltaevent.mdx
new file mode 100644
index 0000000..e28936e
--- /dev/null
+++ b/docs/components/functioncallargsdeltaevent.mdx
@@ -0,0 +1,16 @@
+---
+title: "FunctionCallArgsDeltaEvent"
+---
+
+Event emitted when function call arguments are being streamed
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `delta` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.FunctionCallArgsDeltaEventType](../components/functioncallargsdeltaeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/functioncallargsdeltaeventtype.mdx b/docs/components/functioncallargsdeltaeventtype.mdx
new file mode 100644
index 0000000..27b1796
--- /dev/null
+++ b/docs/components/functioncallargsdeltaeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FunctionCallArgsDeltaEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FunctionCallArgsDeltaEventType
+value: FunctionCallArgsDeltaEventType = "response.function_call_arguments.delta"
+```
+
+
+## Values
+
+- `"response.function_call_arguments.delta"`
diff --git a/docs/components/functioncallargsdoneevent.mdx b/docs/components/functioncallargsdoneevent.mdx
new file mode 100644
index 0000000..acc25e3
--- /dev/null
+++ b/docs/components/functioncallargsdoneevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "FunctionCallArgsDoneEvent"
+---
+
+Event emitted when function call arguments streaming is complete
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `arguments` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `name` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.FunctionCallArgsDoneEventType](../components/functioncallargsdoneeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/functioncallargsdoneeventtype.mdx b/docs/components/functioncallargsdoneeventtype.mdx
new file mode 100644
index 0000000..da8e18a
--- /dev/null
+++ b/docs/components/functioncallargsdoneeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FunctionCallArgsDoneEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FunctionCallArgsDoneEventType
+value: FunctionCallArgsDoneEventType = "response.function_call_arguments.done"
+```
+
+
+## Values
+
+- `"response.function_call_arguments.done"`
diff --git a/docs/components/functioncallitem.mdx b/docs/components/functioncallitem.mdx
new file mode 100644
index 0000000..f1082d7
--- /dev/null
+++ b/docs/components/functioncallitem.mdx
@@ -0,0 +1,18 @@
+---
+title: "FunctionCallItem"
+---
+
+A function call initiated by the model
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
+| `arguments` | *str* | :heavy_check_mark: | N/A | |
+| `call_id` | *str* | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `namespace` | *Optional[str]* | :heavy_minus_sign: | Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server) | |
+| `status` | [Optional[components.ToolCallStatus]](../components/toolcallstatus.mdx) | :heavy_minus_sign: | N/A | completed |
+| `type` | [components.FunctionCallItemType](../components/functioncallitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/functioncallitemtype.mdx b/docs/components/functioncallitemtype.mdx
new file mode 100644
index 0000000..ebe7c45
--- /dev/null
+++ b/docs/components/functioncallitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FunctionCallItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FunctionCallItemType
+value: FunctionCallItemType = "function_call"
+```
+
+
+## Values
+
+- `"function_call"`
diff --git a/docs/components/functioncalloutputitem.mdx b/docs/components/functioncalloutputitem.mdx
new file mode 100644
index 0000000..f48aaea
--- /dev/null
+++ b/docs/components/functioncalloutputitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "FunctionCallOutputItem"
+---
+
+The output from a function call execution
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `call_id` | *str* | :heavy_check_mark: | N/A | |
+| `id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `output` | [components.FunctionCallOutputItemOutputUnion2](../components/functioncalloutputitemoutputunion2.mdx) | :heavy_check_mark: | N/A | |
+| `status` | [OptionalNullable[components.FunctionCallOutputItemStatus]](../components/functioncalloutputitemstatus.mdx) | :heavy_minus_sign: | N/A | completed |
+| `type` | [components.FunctionCallOutputItemTypeFunctionCallOutput](../components/functioncalloutputitemtypefunctioncalloutput.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/functioncalloutputitemdetail.mdx b/docs/components/functioncalloutputitemdetail.mdx
new file mode 100644
index 0000000..086e8a6
--- /dev/null
+++ b/docs/components/functioncalloutputitemdetail.mdx
@@ -0,0 +1,22 @@
+---
+title: "FunctionCallOutputItemDetail"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FunctionCallOutputItemDetail
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: FunctionCallOutputItemDetail = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"high"`
+- `"low"`
+- `"original"`
diff --git a/docs/components/functioncalloutputitemoutputinputimage.mdx b/docs/components/functioncalloutputitemoutputinputimage.mdx
new file mode 100644
index 0000000..55bb222
--- /dev/null
+++ b/docs/components/functioncalloutputitemoutputinputimage.mdx
@@ -0,0 +1,14 @@
+---
+title: "FunctionCallOutputItemOutputInputImage"
+---
+
+Image input content item
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `detail` | [components.FunctionCallOutputItemDetail](../components/functioncalloutputitemdetail.mdx) | :heavy_check_mark: | N/A |
+| `image_url` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `type` | [components.FunctionCallOutputItemTypeInputImage](../components/functioncalloutputitemtypeinputimage.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/functioncalloutputitemoutputunion1.mdx b/docs/components/functioncalloutputitemoutputunion1.mdx
new file mode 100644
index 0000000..3cea7c4
--- /dev/null
+++ b/docs/components/functioncalloutputitemoutputunion1.mdx
@@ -0,0 +1,24 @@
+---
+title: "FunctionCallOutputItemOutputUnion1"
+---
+
+## Supported Types
+
+### `components.InputText`
+
+```python
+value: components.InputText = /* values here */
+```
+
+### `components.FunctionCallOutputItemOutputInputImage`
+
+```python
+value: components.FunctionCallOutputItemOutputInputImage = /* values here */
+```
+
+### `components.InputFile`
+
+```python
+value: components.InputFile = /* values here */
+```
+
diff --git a/docs/components/functioncalloutputitemoutputunion2.mdx b/docs/components/functioncalloutputitemoutputunion2.mdx
new file mode 100644
index 0000000..92b4c4c
--- /dev/null
+++ b/docs/components/functioncalloutputitemoutputunion2.mdx
@@ -0,0 +1,18 @@
+---
+title: "FunctionCallOutputItemOutputUnion2"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.FunctionCallOutputItemOutputUnion1]`
+
+```python
+value: List[components.FunctionCallOutputItemOutputUnion1] = /* values here */
+```
+
diff --git a/docs/components/functioncalloutputitemstatus.mdx b/docs/components/functioncalloutputitemstatus.mdx
new file mode 100644
index 0000000..870e40c
--- /dev/null
+++ b/docs/components/functioncalloutputitemstatus.mdx
@@ -0,0 +1,21 @@
+---
+title: "FunctionCallOutputItemStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FunctionCallOutputItemStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: FunctionCallOutputItemStatus = "in_progress"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"in_progress"`
+- `"completed"`
+- `"incomplete"`
diff --git a/docs/components/functioncalloutputitemtypefunctioncalloutput.mdx b/docs/components/functioncalloutputitemtypefunctioncalloutput.mdx
new file mode 100644
index 0000000..7085d8c
--- /dev/null
+++ b/docs/components/functioncalloutputitemtypefunctioncalloutput.mdx
@@ -0,0 +1,15 @@
+---
+title: "FunctionCallOutputItemTypeFunctionCallOutput"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FunctionCallOutputItemTypeFunctionCallOutput
+value: FunctionCallOutputItemTypeFunctionCallOutput = "function_call_output"
+```
+
+
+## Values
+
+- `"function_call_output"`
diff --git a/docs/components/functioncalloutputitemtypeinputimage.mdx b/docs/components/functioncalloutputitemtypeinputimage.mdx
new file mode 100644
index 0000000..eff3701
--- /dev/null
+++ b/docs/components/functioncalloutputitemtypeinputimage.mdx
@@ -0,0 +1,15 @@
+---
+title: "FunctionCallOutputItemTypeInputImage"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FunctionCallOutputItemTypeInputImage
+value: FunctionCallOutputItemTypeInputImage = "input_image"
+```
+
+
+## Values
+
+- `"input_image"`
diff --git a/docs/components/fusionanalysisresult.mdx b/docs/components/fusionanalysisresult.mdx
new file mode 100644
index 0000000..461abd3
--- /dev/null
+++ b/docs/components/fusionanalysisresult.mdx
@@ -0,0 +1,16 @@
+---
+title: "FusionAnalysisResult"
+---
+
+Structured analysis produced by the fusion judge model.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `blind_spots` | List[*str*] | :heavy_check_mark: | N/A |
+| `consensus` | List[*str*] | :heavy_check_mark: | N/A |
+| `contradictions` | List[[components.Contradiction](../components/contradiction.mdx)] | :heavy_check_mark: | N/A |
+| `partial_coverage` | List[[components.PartialCoverage](../components/partialcoverage.mdx)] | :heavy_check_mark: | N/A |
+| `unique_insights` | List[[components.UniqueInsight](../components/uniqueinsight.mdx)] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/fusioncallanalysiscompletedevent.mdx b/docs/components/fusioncallanalysiscompletedevent.mdx
new file mode 100644
index 0000000..dc3640f
--- /dev/null
+++ b/docs/components/fusioncallanalysiscompletedevent.mdx
@@ -0,0 +1,16 @@
+---
+title: "FusionCallAnalysisCompletedEvent"
+---
+
+Emitted when the fusion judge completes with the structured analysis.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `analysis` | [components.FusionAnalysisResult](../components/fusionanalysisresult.mdx) | :heavy_check_mark: | Structured analysis produced by the fusion judge model. | \{
"blind_spots": [
"No model considered the impact on existing API consumers."
],
"consensus": [
"All panel models agree the request is asking for a concise summary."
],
"contradictions": [
\{
"stances": [
\{
"model": "openai/gpt-5",
"stance": "Favors an incremental rollout."
},
\{
"model": "anthropic/claude-sonnet-4.5",
"stance": "Favors a single coordinated migration."
}
],
"topic": "Recommended approach"
}
],
"partial_coverage": [
\{
"models": [
"openai/gpt-5"
],
"point": "Only one model addressed the rollback strategy."
}
],
"unique_insights": [
\{
"insight": "Highlighted a backwards-compatibility risk the other models missed.",
"model": "anthropic/claude-sonnet-4.5"
}
]
} |
+| `item_id` | *str* | :heavy_check_mark: | N/A | |
+| `output_index` | *int* | :heavy_check_mark: | N/A | |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A | |
+| `type` | [components.FusionCallAnalysisCompletedEventType](../components/fusioncallanalysiscompletedeventtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/fusioncallanalysiscompletedeventtype.mdx b/docs/components/fusioncallanalysiscompletedeventtype.mdx
new file mode 100644
index 0000000..897efa6
--- /dev/null
+++ b/docs/components/fusioncallanalysiscompletedeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionCallAnalysisCompletedEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FusionCallAnalysisCompletedEventType
+value: FusionCallAnalysisCompletedEventType = "response.fusion_call.analysis.completed"
+```
+
+
+## Values
+
+- `"response.fusion_call.analysis.completed"`
diff --git a/docs/components/fusioncallanalysisinprogressevent.mdx b/docs/components/fusioncallanalysisinprogressevent.mdx
new file mode 100644
index 0000000..cd16c26
--- /dev/null
+++ b/docs/components/fusioncallanalysisinprogressevent.mdx
@@ -0,0 +1,16 @@
+---
+title: "FusionCallAnalysisInProgressEvent"
+---
+
+Emitted when the fusion judge starts producing the structured analysis.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `judge_model` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.FusionCallAnalysisInProgressEventType](../components/fusioncallanalysisinprogresseventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/fusioncallanalysisinprogresseventtype.mdx b/docs/components/fusioncallanalysisinprogresseventtype.mdx
new file mode 100644
index 0000000..fb1d641
--- /dev/null
+++ b/docs/components/fusioncallanalysisinprogresseventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionCallAnalysisInProgressEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FusionCallAnalysisInProgressEventType
+value: FusionCallAnalysisInProgressEventType = "response.fusion_call.analysis.in_progress"
+```
+
+
+## Values
+
+- `"response.fusion_call.analysis.in_progress"`
diff --git a/docs/components/fusioncallcompletedevent.mdx b/docs/components/fusioncallcompletedevent.mdx
new file mode 100644
index 0000000..4005244
--- /dev/null
+++ b/docs/components/fusioncallcompletedevent.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionCallCompletedEvent"
+---
+
+Emitted when the openrouter:fusion tool call finishes.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.FusionCallCompletedEventType](../components/fusioncallcompletedeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/fusioncallcompletedeventtype.mdx b/docs/components/fusioncallcompletedeventtype.mdx
new file mode 100644
index 0000000..7061775
--- /dev/null
+++ b/docs/components/fusioncallcompletedeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionCallCompletedEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FusionCallCompletedEventType
+value: FusionCallCompletedEventType = "response.fusion_call.completed"
+```
+
+
+## Values
+
+- `"response.fusion_call.completed"`
diff --git a/docs/components/fusioncallinprogressevent.mdx b/docs/components/fusioncallinprogressevent.mdx
new file mode 100644
index 0000000..8f27a2d
--- /dev/null
+++ b/docs/components/fusioncallinprogressevent.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionCallInProgressEvent"
+---
+
+Emitted when an openrouter:fusion tool call begins executing.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.FusionCallInProgressEventType](../components/fusioncallinprogresseventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/fusioncallinprogresseventtype.mdx b/docs/components/fusioncallinprogresseventtype.mdx
new file mode 100644
index 0000000..eec9b0a
--- /dev/null
+++ b/docs/components/fusioncallinprogresseventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionCallInProgressEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FusionCallInProgressEventType
+value: FusionCallInProgressEventType = "response.fusion_call.in_progress"
+```
+
+
+## Values
+
+- `"response.fusion_call.in_progress"`
diff --git a/docs/components/fusioncallpaneladdedevent.mdx b/docs/components/fusioncallpaneladdedevent.mdx
new file mode 100644
index 0000000..260884b
--- /dev/null
+++ b/docs/components/fusioncallpaneladdedevent.mdx
@@ -0,0 +1,16 @@
+---
+title: "FusionCallPanelAddedEvent"
+---
+
+Emitted when a fusion analysis-panel model starts.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `model` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.FusionCallPanelAddedEventType](../components/fusioncallpaneladdedeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/fusioncallpaneladdedeventtype.mdx b/docs/components/fusioncallpaneladdedeventtype.mdx
new file mode 100644
index 0000000..a2c2584
--- /dev/null
+++ b/docs/components/fusioncallpaneladdedeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionCallPanelAddedEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FusionCallPanelAddedEventType
+value: FusionCallPanelAddedEventType = "response.fusion_call.panel.added"
+```
+
+
+## Values
+
+- `"response.fusion_call.panel.added"`
diff --git a/docs/components/fusioncallpanelcompletedevent.mdx b/docs/components/fusioncallpanelcompletedevent.mdx
new file mode 100644
index 0000000..1d115a6
--- /dev/null
+++ b/docs/components/fusioncallpanelcompletedevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "FusionCallPanelCompletedEvent"
+---
+
+Emitted when a fusion panel model finishes with its full content.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `content` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `model` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.FusionCallPanelCompletedEventType](../components/fusioncallpanelcompletedeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/fusioncallpanelcompletedeventtype.mdx b/docs/components/fusioncallpanelcompletedeventtype.mdx
new file mode 100644
index 0000000..1cfc97d
--- /dev/null
+++ b/docs/components/fusioncallpanelcompletedeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionCallPanelCompletedEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FusionCallPanelCompletedEventType
+value: FusionCallPanelCompletedEventType = "response.fusion_call.panel.completed"
+```
+
+
+## Values
+
+- `"response.fusion_call.panel.completed"`
diff --git a/docs/components/fusioncallpaneldeltaevent.mdx b/docs/components/fusioncallpaneldeltaevent.mdx
new file mode 100644
index 0000000..3f8a569
--- /dev/null
+++ b/docs/components/fusioncallpaneldeltaevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "FusionCallPanelDeltaEvent"
+---
+
+Incremental content token from a fusion panel model.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `delta` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `model` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.FusionCallPanelDeltaEventType](../components/fusioncallpaneldeltaeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/fusioncallpaneldeltaeventtype.mdx b/docs/components/fusioncallpaneldeltaeventtype.mdx
new file mode 100644
index 0000000..1d067fe
--- /dev/null
+++ b/docs/components/fusioncallpaneldeltaeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionCallPanelDeltaEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FusionCallPanelDeltaEventType
+value: FusionCallPanelDeltaEventType = "response.fusion_call.panel.delta"
+```
+
+
+## Values
+
+- `"response.fusion_call.panel.delta"`
diff --git a/docs/components/fusioncallpanelfailedevent.mdx b/docs/components/fusioncallpanelfailedevent.mdx
new file mode 100644
index 0000000..a6c9fa5
--- /dev/null
+++ b/docs/components/fusioncallpanelfailedevent.mdx
@@ -0,0 +1,18 @@
+---
+title: "FusionCallPanelFailedEvent"
+---
+
+Emitted when a fusion panel model fails.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `error` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `model` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `status_code` | *Optional[int]* | :heavy_minus_sign: | N/A |
+| `type` | [components.FusionCallPanelFailedEventType](../components/fusioncallpanelfailedeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/fusioncallpanelfailedeventtype.mdx b/docs/components/fusioncallpanelfailedeventtype.mdx
new file mode 100644
index 0000000..4ccbf57
--- /dev/null
+++ b/docs/components/fusioncallpanelfailedeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionCallPanelFailedEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FusionCallPanelFailedEventType
+value: FusionCallPanelFailedEventType = "response.fusion_call.panel.failed"
+```
+
+
+## Values
+
+- `"response.fusion_call.panel.failed"`
diff --git a/docs/components/fusioncallpanelreasoningdeltaevent.mdx b/docs/components/fusioncallpanelreasoningdeltaevent.mdx
new file mode 100644
index 0000000..a25d4c0
--- /dev/null
+++ b/docs/components/fusioncallpanelreasoningdeltaevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "FusionCallPanelReasoningDeltaEvent"
+---
+
+Incremental reasoning token from a fusion panel model.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `delta` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `model` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.FusionCallPanelReasoningDeltaEventType](../components/fusioncallpanelreasoningdeltaeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/fusioncallpanelreasoningdeltaeventtype.mdx b/docs/components/fusioncallpanelreasoningdeltaeventtype.mdx
new file mode 100644
index 0000000..7b7d7a3
--- /dev/null
+++ b/docs/components/fusioncallpanelreasoningdeltaeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionCallPanelReasoningDeltaEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FusionCallPanelReasoningDeltaEventType
+value: FusionCallPanelReasoningDeltaEventType = "response.fusion_call.panel.reasoning.delta"
+```
+
+
+## Values
+
+- `"response.fusion_call.panel.reasoning.delta"`
diff --git a/docs/components/fusionplugin.mdx b/docs/components/fusionplugin.mdx
new file mode 100644
index 0000000..47df2cd
--- /dev/null
+++ b/docs/components/fusionplugin.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionPlugin"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `analysis_models` | List[*str*] | :heavy_minus_sign: | Slugs of models to run in parallel as the "expert panel" the judge analyzes. Each model receives the same user prompt with web_search + web_fetch enabled. Capped at 8 models to bound cost amplification. When omitted, defaults to the Quality preset from the /labs/fusion UI (~anthropic/claude-opus-latest, ~openai/gpt-latest, ~google/gemini-pro-latest). | [
"~anthropic/claude-opus-latest",
"~openai/gpt-latest",
"~google/gemini-pro-latest"
] |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Set to false to disable the fusion plugin for this request. Defaults to true. | |
+| `id` | [components.FusionPluginID](../components/fusionpluginid.mdx) | :heavy_check_mark: | N/A | |
+| `max_tool_calls` | *Optional[int]* | :heavy_minus_sign: | Maximum number of tool-calling steps each panelist (analysis model) and the judge model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16. | 12 |
+| `model` | *Optional[str]* | :heavy_minus_sign: | Slug of the model that performs both the judge step (with web_search + web_fetch) and the final synthesis. When omitted, defaults to the first model in the Quality preset. | ~anthropic/claude-opus-latest |
+| `preset` | [Optional[components.PresetEnum]](../components/presetenum.mdx) | :heavy_minus_sign: | A curated OpenRouter fusion preset (slugs follow `-`, e.g. `general-high`). Expands server-side into the preset's analysis_models panel and judge model, so callers never name individual models. Explicitly provided `analysis_models` / `model` take precedence. | general-high |
+| `tools` | List[[components.FusionPluginTool](../components/fusionplugintool.mdx)] | :heavy_minus_sign: | Server tools available to panelist and judge inner calls. Each entry uses the same `{ type, parameters? }` shorthand as the outer Chat Completions request. When omitted, defaults to `[{ type: "openrouter:web_search" }, { type: "openrouter:web_fetch" }]`. Pass an empty array to disable tools entirely (panelists answer from parametric knowledge only). | [
\{
"parameters": \{
"excluded_domains": [
"example.com"
]
},
"type": "openrouter:web_search"
},
\{
"type": "openrouter:web_fetch"
}
] |
\ No newline at end of file
diff --git a/docs/components/fusionpluginid.mdx b/docs/components/fusionpluginid.mdx
new file mode 100644
index 0000000..07ef9cf
--- /dev/null
+++ b/docs/components/fusionpluginid.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionPluginID"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FusionPluginID
+value: FusionPluginID = "fusion"
+```
+
+
+## Values
+
+- `"fusion"`
diff --git a/docs/components/fusionplugintool.mdx b/docs/components/fusionplugintool.mdx
new file mode 100644
index 0000000..3c29bc4
--- /dev/null
+++ b/docs/components/fusionplugintool.mdx
@@ -0,0 +1,10 @@
+---
+title: "FusionPluginTool"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| `parameters` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | Optional configuration forwarded as the tool's `parameters` object. |
+| `type` | *str* | :heavy_check_mark: | Server tool type identifier (e.g. "openrouter:web_search", "openrouter:web_fetch"). |
\ No newline at end of file
diff --git a/docs/components/fusionservertoolconfig.mdx b/docs/components/fusionservertoolconfig.mdx
new file mode 100644
index 0000000..6852708
--- /dev/null
+++ b/docs/components/fusionservertoolconfig.mdx
@@ -0,0 +1,19 @@
+---
+title: "FusionServerToolConfig"
+---
+
+Configuration for the openrouter:fusion server tool.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `analysis_models` | List[*str*] | :heavy_minus_sign: | Slugs of models to run in parallel as the analysis panel. Each model receives the user prompt with openrouter:web_search and openrouter:web_fetch enabled, then a judge model summarizes the collective output into structured analysis JSON. Capped at 8 models to bound cost amplification. Defaults to the Quality preset from /labs/fusion. | [
"~anthropic/claude-opus-latest",
"~openai/gpt-latest",
"~google/gemini-pro-latest"
] |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `max_completion_tokens` | *Optional[int]* | :heavy_minus_sign: | Maximum number of output tokens (including reasoning tokens) each panelist and the judge model may produce per inner call. Controls the total output budget so reasoning-heavy models like GPT-5.5 do not exhaust their token allowance before producing visible text. When omitted, the provider's default applies. | 16384 |
+| `max_tool_calls` | *Optional[int]* | :heavy_minus_sign: | Maximum number of tool-calling steps each panelist (analysis model) and the judge model may take during their agentic web-research loop. Models with web_search/web_fetch enabled iterate until they produce a text response or hit this ceiling. Defaults to 8. Capped at 16. | 12 |
+| `model` | *Optional[str]* | :heavy_minus_sign: | Slug of the judge model that produces the structured analysis JSON. Defaults to the model used in the outer API request. | ~anthropic/claude-opus-latest |
+| `reasoning` | [Optional[components.FusionServerToolConfigReasoning]](../components/fusionservertoolconfigreasoning.mdx) | :heavy_minus_sign: | Reasoning configuration forwarded to panelist and judge inner calls. Use this to control reasoning effort and token budget for models that support extended thinking. | |
+| `temperature` | *Optional[float]* | :heavy_minus_sign: | Temperature forwarded to panelist inner calls. The judge always runs at temperature 0 regardless of this value. When omitted, the provider's default applies. | 0.7 |
+| `tools` | List[[components.FusionServerToolConfigTool](../components/fusionservertoolconfigtool.mdx)] | :heavy_minus_sign: | Server tools available to panelist and judge inner calls. Each entry uses the same `{ type, parameters? }` shorthand as the outer Chat Completions request. When omitted, defaults to `[{ type: "openrouter:web_search" }, { type: "openrouter:web_fetch" }]`. Pass an empty array to disable tools entirely (panelists answer from parametric knowledge only). | [
\{
"parameters": \{
"excluded_domains": [
"example.com"
]
},
"type": "openrouter:web_search"
},
\{
"type": "openrouter:web_fetch"
}
] |
\ No newline at end of file
diff --git a/docs/components/fusionservertoolconfigeffort.mdx b/docs/components/fusionservertoolconfigeffort.mdx
new file mode 100644
index 0000000..8ba9e2e
--- /dev/null
+++ b/docs/components/fusionservertoolconfigeffort.mdx
@@ -0,0 +1,27 @@
+---
+title: "FusionServerToolConfigEffort"
+---
+
+Reasoning effort level for panelist and judge inner calls.
+
+## Example Usage
+
+```python
+from openrouter.components import FusionServerToolConfigEffort
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: FusionServerToolConfigEffort = "max"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"max"`
+- `"xhigh"`
+- `"high"`
+- `"medium"`
+- `"low"`
+- `"minimal"`
+- `"none"`
diff --git a/docs/components/fusionservertoolconfigreasoning.mdx b/docs/components/fusionservertoolconfigreasoning.mdx
new file mode 100644
index 0000000..af7105b
--- /dev/null
+++ b/docs/components/fusionservertoolconfigreasoning.mdx
@@ -0,0 +1,13 @@
+---
+title: "FusionServerToolConfigReasoning"
+---
+
+Reasoning configuration forwarded to panelist and judge inner calls. Use this to control reasoning effort and token budget for models that support extended thinking.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `effort` | [Optional[components.FusionServerToolConfigEffort]](../components/fusionservertoolconfigeffort.mdx) | :heavy_minus_sign: | Reasoning effort level for panelist and judge inner calls. |
+| `max_tokens` | *Optional[int]* | :heavy_minus_sign: | Maximum number of reasoning tokens each panelist and judge model may use. Helps bound cost when models allocate too much budget to chain-of-thought. |
\ No newline at end of file
diff --git a/docs/components/fusionservertoolconfigtool.mdx b/docs/components/fusionservertoolconfigtool.mdx
new file mode 100644
index 0000000..ec79aaa
--- /dev/null
+++ b/docs/components/fusionservertoolconfigtool.mdx
@@ -0,0 +1,10 @@
+---
+title: "FusionServerToolConfigTool"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
+| `parameters` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | Optional configuration forwarded as the tool's `parameters` object. |
+| `type` | *str* | :heavy_check_mark: | Server tool type identifier (e.g. "openrouter:web_search", "openrouter:web_fetch"). |
\ No newline at end of file
diff --git a/docs/components/fusionservertoolopenrouter.mdx b/docs/components/fusionservertoolopenrouter.mdx
new file mode 100644
index 0000000..6f4149f
--- /dev/null
+++ b/docs/components/fusionservertoolopenrouter.mdx
@@ -0,0 +1,13 @@
+---
+title: "FusionServerToolOpenRouter"
+---
+
+OpenRouter built-in server tool: fans out the user prompt to a panel of analysis models, then asks a judge model to summarize their collective output as structured JSON the outer model can synthesize from.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `parameters` | [Optional[components.FusionServerToolConfig]](../components/fusionservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for the openrouter:fusion server tool. | \{
"analysis_models": [
"~anthropic/claude-opus-latest",
"~openai/gpt-latest",
"~google/gemini-pro-latest"
]
} |
+| `type` | [components.FusionServerToolOpenRouterType](../components/fusionservertoolopenroutertype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/fusionservertoolopenroutertype.mdx b/docs/components/fusionservertoolopenroutertype.mdx
new file mode 100644
index 0000000..51199c3
--- /dev/null
+++ b/docs/components/fusionservertoolopenroutertype.mdx
@@ -0,0 +1,15 @@
+---
+title: "FusionServerToolOpenRouterType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import FusionServerToolOpenRouterType
+value: FusionServerToolOpenRouterType = "openrouter:fusion"
+```
+
+
+## Values
+
+- `"openrouter:fusion"`
diff --git a/docs/components/fusionsource.mdx b/docs/components/fusionsource.mdx
new file mode 100644
index 0000000..b305413
--- /dev/null
+++ b/docs/components/fusionsource.mdx
@@ -0,0 +1,13 @@
+---
+title: "FusionSource"
+---
+
+A web page retrieved via web search during a fusion run.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `title` | *str* | :heavy_check_mark: | Title of the retrieved web page. |
+| `url` | *str* | :heavy_check_mark: | URL of the web page a panel or the judge retrieved during the run. |
\ No newline at end of file
diff --git a/docs/components/generationcontentdata.mdx b/docs/components/generationcontentdata.mdx
new file mode 100644
index 0000000..1e4a22a
--- /dev/null
+++ b/docs/components/generationcontentdata.mdx
@@ -0,0 +1,13 @@
+---
+title: "GenerationContentData"
+---
+
+Stored prompt and completion content
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `input` | [components.InputUnion](../components/inputunion.mdx) | :heavy_check_mark: | The input to the generation — either a prompt string or an array of messages |
+| `output` | [components.GenerationContentDataOutput](../components/generationcontentdataoutput.mdx) | :heavy_check_mark: | The output from the generation |
\ No newline at end of file
diff --git a/docs/components/generationcontentdataoutput.mdx b/docs/components/generationcontentdataoutput.mdx
new file mode 100644
index 0000000..d497eb1
--- /dev/null
+++ b/docs/components/generationcontentdataoutput.mdx
@@ -0,0 +1,13 @@
+---
+title: "GenerationContentDataOutput"
+---
+
+The output from the generation
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- |
+| `completion` | *Nullable[str]* | :heavy_check_mark: | The completion output | The meaning of life is a philosophical question... |
+| `reasoning` | *Nullable[str]* | :heavy_check_mark: | Reasoning/thinking output, if any | null |
\ No newline at end of file
diff --git a/docs/components/generationcontentresponse.mdx b/docs/components/generationcontentresponse.mdx
new file mode 100644
index 0000000..e214221
--- /dev/null
+++ b/docs/components/generationcontentresponse.mdx
@@ -0,0 +1,12 @@
+---
+title: "GenerationContentResponse"
+---
+
+Stored prompt and completion content for a generation
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.GenerationContentData](../components/generationcontentdata.mdx) | :heavy_check_mark: | Stored prompt and completion content | \{
"input": \{
"messages": [
\{
"content": "What is the meaning of life?",
"role": "user"
}
]
},
"output": \{
"completion": "The meaning of life is a philosophical question...",
"reasoning": null
}
} |
\ No newline at end of file
diff --git a/docs/components/generationresponse.mdx b/docs/components/generationresponse.mdx
new file mode 100644
index 0000000..b876dce
--- /dev/null
+++ b/docs/components/generationresponse.mdx
@@ -0,0 +1,12 @@
+---
+title: "GenerationResponse"
+---
+
+Generation response
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `data` | [components.GenerationResponseData](../components/generationresponsedata.mdx) | :heavy_check_mark: | Generation data |
\ No newline at end of file
diff --git a/docs/components/generationresponsedata.mdx b/docs/components/generationresponsedata.mdx
new file mode 100644
index 0000000..6dfd619
--- /dev/null
+++ b/docs/components/generationresponsedata.mdx
@@ -0,0 +1,55 @@
+---
+title: "GenerationResponseData"
+---
+
+Generation data
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `api_type` | [Nullable[components.APIType]](../components/apitype.mdx) | :heavy_check_mark: | Type of API used for the generation | |
+| `app_id` | *Nullable[int]* | :heavy_check_mark: | ID of the app that made the request | 12345 |
+| `cache_discount` | *Nullable[float]* | :heavy_check_mark: | Discount applied due to caching | 0.0002 |
+| `cancelled` | *Nullable[bool]* | :heavy_check_mark: | Whether the generation was cancelled | false |
+| `created_at` | *str* | :heavy_check_mark: | ISO 8601 timestamp of when the generation was created | 2024-07-15T23:33:19.433273+00:00 |
+| `data_region` | [components.DataRegion](../components/dataregion.mdx) | :heavy_check_mark: | The data region this generation was routed through. 'europe' for EU-routed requests, 'global' otherwise. | global |
+| `external_user` | *Nullable[str]* | :heavy_check_mark: | External user identifier | user-123 |
+| `finish_reason` | *Nullable[str]* | :heavy_check_mark: | Reason the generation finished | stop |
+| `generation_time` | *Nullable[float]* | :heavy_check_mark: | Time taken for generation in milliseconds | 1200 |
+| `http_referer` | *Nullable[str]* | :heavy_check_mark: | Referer header from the request | |
+| `id` | *str* | :heavy_check_mark: | Unique identifier for the generation | gen-3bhGkxlo4XFrqiabUM7NDtwDzWwG |
+| `is_byok` | *bool* | :heavy_check_mark: | Whether this used bring-your-own-key | false |
+| `latency` | *Nullable[float]* | :heavy_check_mark: | Total latency in milliseconds | 1250 |
+| `model` | *str* | :heavy_check_mark: | Model used for the generation | sao10k/l3-stheno-8b |
+| `moderation_latency` | *Nullable[float]* | :heavy_check_mark: | Moderation latency in milliseconds | 50 |
+| `native_finish_reason` | *Nullable[str]* | :heavy_check_mark: | Native finish reason as reported by provider | stop |
+| `native_tokens_cached` | *Nullable[int]* | :heavy_check_mark: | Native cached tokens as reported by provider | 3 |
+| `native_tokens_completion` | *Nullable[int]* | :heavy_check_mark: | Native completion tokens as reported by provider | 25 |
+| `native_tokens_completion_images` | *Nullable[int]* | :heavy_check_mark: | Native completion image tokens as reported by provider | 0 |
+| `native_tokens_prompt` | *Nullable[int]* | :heavy_check_mark: | Native prompt tokens as reported by provider | 10 |
+| `native_tokens_reasoning` | *Nullable[int]* | :heavy_check_mark: | Native reasoning tokens as reported by provider | 5 |
+| `num_fetches` | *Nullable[int]* | :heavy_check_mark: | Number of web fetches performed | 0 |
+| `num_input_audio_prompt` | *Nullable[int]* | :heavy_check_mark: | Number of audio inputs in the prompt | 0 |
+| `num_media_completion` | *Nullable[int]* | :heavy_check_mark: | Number of media items in the completion | 0 |
+| `num_media_prompt` | *Nullable[int]* | :heavy_check_mark: | Number of media items in the prompt | 1 |
+| `num_search_results` | *Nullable[int]* | :heavy_check_mark: | Number of search results included | 5 |
+| `origin` | *str* | :heavy_check_mark: | Origin URL of the request | https://openrouter.ai/ |
+| `preset_id` | *Nullable[str]* | :heavy_check_mark: | ID of the preset used for this generation, null if no preset was used | a9e8d400-592a-494f-908c-375efa66cafd |
+| `provider_name` | *Nullable[str]* | :heavy_check_mark: | Name of the provider that served the request | Infermatic |
+| `provider_responses` | List[[components.ProviderResponse](../components/providerresponse.mdx)] | :heavy_check_mark: | List of provider responses for this generation, including fallback attempts | |
+| `request_id` | *OptionalNullable[str]* | :heavy_minus_sign: | Unique identifier grouping all generations from a single API request | req-1727282430-aBcDeFgHiJkLmNoPqRsT |
+| `response_cache_source_id` | *OptionalNullable[str]* | :heavy_minus_sign: | If this generation was served from response cache, contains the original generation ID. Null otherwise. | |
+| `router` | *Nullable[str]* | :heavy_check_mark: | Router used for the request (e.g., openrouter/auto) | openrouter/auto |
+| `service_tier` | *Nullable[str]* | :heavy_check_mark: | Service tier the upstream provider reported running this request on, or null if it did not report one. | priority |
+| `session_id` | *OptionalNullable[str]* | :heavy_minus_sign: | Session identifier grouping multiple generations in the same session | |
+| `streamed` | *Nullable[bool]* | :heavy_check_mark: | Whether the response was streamed | true |
+| `tokens_completion` | *Nullable[int]* | :heavy_check_mark: | Number of tokens in the completion | 25 |
+| `tokens_prompt` | *Nullable[int]* | :heavy_check_mark: | Number of tokens in the prompt | 10 |
+| `total_cost` | *float* | :heavy_check_mark: | Total cost of the generation in USD | 0.0015 |
+| `upstream_id` | *Nullable[str]* | :heavy_check_mark: | Upstream provider's identifier for this generation | chatcmpl-791bcf62-080e-4568-87d0-94c72e3b4946 |
+| `upstream_inference_cost` | *Nullable[float]* | :heavy_check_mark: | Cost charged by the upstream provider | 0.0012 |
+| `usage` | *float* | :heavy_check_mark: | Usage amount in USD | 0.0015 |
+| `user_agent` | *Nullable[str]* | :heavy_check_mark: | User-Agent header from the request | |
+| `web_search_engine` | *Nullable[str]* | :heavy_check_mark: | The resolved web search engine used for this generation (e.g. exa, firecrawl, parallel) | exa |
\ No newline at end of file
diff --git a/docs/components/getbyokkeyresponse.mdx b/docs/components/getbyokkeyresponse.mdx
new file mode 100644
index 0000000..5730056
--- /dev/null
+++ b/docs/components/getbyokkeyresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "GetBYOKKeyResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `data` | [components.BYOKKey](../components/byokkey.mdx) | :heavy_check_mark: | N/A | \{
"allowed_api_key_hashes": null,
"allowed_models": null,
"allowed_user_ids": null,
"created_at": "2025-08-24T10:30:00Z",
"disabled": false,
"id": "11111111-2222-3333-4444-555555555555",
"is_fallback": false,
"label": "sk-...AbCd",
"name": "Production OpenAI Key",
"provider": "openai",
"sort_order": 0,
"workspace_id": "550e8400-e29b-41d4-a716-446655440000"
} |
\ No newline at end of file
diff --git a/docs/components/getguardrailresponse.mdx b/docs/components/getguardrailresponse.mdx
new file mode 100644
index 0000000..7a49600
--- /dev/null
+++ b/docs/components/getguardrailresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "GetGuardrailResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.Guardrail](../components/guardrail.mdx) | :heavy_check_mark: | N/A | \{
"allowed_models": null,
"allowed_providers": [
"openai",
"anthropic",
"google"
],
"content_filter_builtins": [
\{
"action": "redact",
"label": "[EMAIL]",
"slug": "email"
}
],
"content_filters": null,
"created_at": "2025-08-24T10:30:00Z",
"description": "Guardrail for production environment",
"enforce_zdr": null,
"enforce_zdr_anthropic": true,
"enforce_zdr_google": false,
"enforce_zdr_openai": true,
"enforce_zdr_other": false,
"id": "550e8400-e29b-41d4-a716-446655440000",
"ignored_models": null,
"ignored_providers": null,
"limit_usd": 100,
"name": "Production Guardrail",
"reset_interval": "monthly",
"updated_at": "2025-08-24T15:45:00Z",
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
\ No newline at end of file
diff --git a/docs/components/getobservabilitydestinationresponse.mdx b/docs/components/getobservabilitydestinationresponse.mdx
new file mode 100644
index 0000000..efce02e
--- /dev/null
+++ b/docs/components/getobservabilitydestinationresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "GetObservabilityDestinationResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.ObservabilityDestination](../components/observabilitydestination.mdx) | :heavy_check_mark: | N/A | \{
"api_key_hashes": null,
"config": \{
"baseUrl": "https://us.cloud.langfuse.com",
"publicKey": "pk-l...EfGh",
"secretKey": "sk-l...AbCd"
},
"created_at": "2025-08-24T10:30:00Z",
"enabled": true,
"filter_rules": null,
"id": "99999999-aaaa-bbbb-cccc-dddddddddddd",
"name": "Production Langfuse",
"privacy_mode": false,
"sampling_rate": 1,
"type": "langfuse",
"updated_at": "2025-08-24T15:45:00Z",
"workspace_id": "550e8400-e29b-41d4-a716-446655440000"
} |
\ No newline at end of file
diff --git a/docs/components/getpresetresponse.mdx b/docs/components/getpresetresponse.mdx
new file mode 100644
index 0000000..2af502a
--- /dev/null
+++ b/docs/components/getpresetresponse.mdx
@@ -0,0 +1,12 @@
+---
+title: "GetPresetResponse"
+---
+
+A preset with its currently designated version.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.PresetWithDesignatedVersion](../components/presetwithdesignatedversion.mdx) | :heavy_check_mark: | A preset with its currently designated version. | \{
"created_at": "2026-04-20T10:00:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"description": null,
"designated_version": \{
"config": \{
"model": "openai/gpt-4o",
"temperature": 0.7
},
"created_at": "2026-04-20T10:00:00Z",
"creator_id": "user_2dHFtVWx2n56w6HkM0000000000",
"id": "550e8400-e29b-41d4-a716-446655440000",
"preset_id": "650e8400-e29b-41d4-a716-446655440001",
"system_prompt": "You are a helpful assistant.",
"updated_at": "2026-04-20T10:00:00Z",
"version": 1
},
"designated_version_id": "550e8400-e29b-41d4-a716-446655440000",
"id": "650e8400-e29b-41d4-a716-446655440001",
"name": "my-preset",
"slug": "my-preset",
"status": "active",
"status_updated_at": null,
"updated_at": "2026-04-20T10:00:00Z",
"workspace_id": "750e8400-e29b-41d4-a716-446655440002"
} |
\ No newline at end of file
diff --git a/docs/components/getpresetversionresponse.mdx b/docs/components/getpresetversionresponse.mdx
new file mode 100644
index 0000000..6c30402
--- /dev/null
+++ b/docs/components/getpresetversionresponse.mdx
@@ -0,0 +1,12 @@
+---
+title: "GetPresetVersionResponse"
+---
+
+A single version of a preset.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [Nullable[components.PresetDesignatedVersion]](../components/presetdesignatedversion.mdx) | :heavy_check_mark: | A specific version of a preset, containing config and optional system prompt. | \{
"config": \{
"model": "openai/gpt-4o",
"temperature": 0.7
},
"created_at": "2026-04-20T10:00:00Z",
"creator_id": "user_2dHFtVWx2n56w6HkM0000000000",
"id": "550e8400-e29b-41d4-a716-446655440000",
"preset_id": "650e8400-e29b-41d4-a716-446655440001",
"system_prompt": "You are a helpful assistant.",
"updated_at": "2026-04-20T10:00:00Z",
"version": 1
} |
\ No newline at end of file
diff --git a/docs/components/getworkspaceresponse.mdx b/docs/components/getworkspaceresponse.mdx
new file mode 100644
index 0000000..bb16c1f
--- /dev/null
+++ b/docs/components/getworkspaceresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "GetWorkspaceResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.Workspace](../components/workspace.mdx) | :heavy_check_mark: | N/A | \{
"created_at": "2025-08-24T10:30:00Z",
"created_by": "user_abc123",
"default_image_model": "openai/dall-e-3",
"default_provider_sort": "price",
"default_text_model": "openai/gpt-4o",
"description": "Production environment workspace",
"id": "550e8400-e29b-41d4-a716-446655440000",
"io_logging_api_key_ids": null,
"io_logging_sampling_rate": 1,
"is_data_discount_logging_enabled": true,
"is_observability_broadcast_enabled": false,
"is_observability_io_logging_enabled": false,
"name": "Production",
"slug": "production",
"updated_at": "2025-08-24T15:45:00Z"
} |
\ No newline at end of file
diff --git a/docs/components/group.mdx b/docs/components/group.mdx
new file mode 100644
index 0000000..34495da
--- /dev/null
+++ b/docs/components/group.mdx
@@ -0,0 +1,10 @@
+---
+title: "Group"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- |
+| `logic` | [Optional[components.Logic]](../components/logic.mdx) | :heavy_minus_sign: | N/A |
+| `rules` | List[[components.Rule](../components/rule.mdx)] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/guardrail.mdx b/docs/components/guardrail.mdx
new file mode 100644
index 0000000..dc72fbb
--- /dev/null
+++ b/docs/components/guardrail.mdx
@@ -0,0 +1,27 @@
+---
+title: "Guardrail"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_models` | List[*str*] | :heavy_minus_sign: | Array of model canonical_slugs (immutable identifiers) | [
"openai/gpt-5.2-20251211",
"anthropic/claude-4.5-opus-20251124",
"deepseek/deepseek-r1-0528:free"
] |
+| `allowed_providers` | List[*str*] | :heavy_minus_sign: | List of allowed provider IDs | [
"openai",
"anthropic",
"google"
] |
+| `content_filter_builtins` | List[[components.ContentFilterBuiltinEntry](../components/contentfilterbuiltinentry.mdx)] | :heavy_minus_sign: | Builtin content filters applied to requests. Includes PII detectors and the regex-based prompt injection detector. | [
\{
"action": "redact",
"label": "[EMAIL]",
"slug": "email"
}
] |
+| `content_filters` | List[[components.ContentFilterEntry](../components/contentfilterentry.mdx)] | :heavy_minus_sign: | Custom regex content filters applied to request messages | [
\{
"action": "redact",
"label": "[API_KEY]",
"pattern": "\\b(sk-[a-zA-Z0-9]\{48})\\b"
}
] |
+| `created_at` | *str* | :heavy_check_mark: | ISO 8601 timestamp of when the guardrail was created | 2025-08-24T10:30:00Z |
+| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | Description of the guardrail | Guardrail for production environment |
+| ~~`enforce_zdr`~~ | *OptionalNullable[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Deprecated. Use enforce_zdr_anthropic, enforce_zdr_openai, enforce_zdr_google, and enforce_zdr_other instead. When provided, its value is copied into any of those per-provider fields that are not explicitly specified on the request. | false |
+| `enforce_zdr_anthropic` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for Anthropic models. Falls back to enforce_zdr when not provided. | false |
+| `enforce_zdr_google` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for Google models. Falls back to enforce_zdr when not provided. | false |
+| `enforce_zdr_openai` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for OpenAI models. Falls back to enforce_zdr when not provided. | false |
+| `enforce_zdr_other` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for models that are not from Anthropic, OpenAI, or Google. Falls back to enforce_zdr when not provided. | false |
+| `id` | *str* | :heavy_check_mark: | Unique identifier for the guardrail | 550e8400-e29b-41d4-a716-446655440000 |
+| `ignored_models` | List[*str*] | :heavy_minus_sign: | Array of model canonical_slugs to exclude from routing | [
"openai/gpt-4o-mini-2024-07-18"
] |
+| `ignored_providers` | List[*str*] | :heavy_minus_sign: | List of provider IDs to exclude from routing | [
"azure"
] |
+| `limit_usd` | *OptionalNullable[float]* | :heavy_minus_sign: | Spending limit in USD | 100 |
+| `name` | *str* | :heavy_check_mark: | Name of the guardrail | Production Guardrail |
+| `reset_interval` | [OptionalNullable[components.GuardrailInterval]](../components/guardrailinterval.mdx) | :heavy_minus_sign: | Interval at which the limit resets (daily, weekly, monthly) | monthly |
+| `updated_at` | *OptionalNullable[str]* | :heavy_minus_sign: | ISO 8601 timestamp of when the guardrail was last updated | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | The workspace ID this guardrail belongs to. | 0df9e665-d932-5740-b2c7-b52af166bc11 |
\ No newline at end of file
diff --git a/docs/components/guardrailinterval.mdx b/docs/components/guardrailinterval.mdx
new file mode 100644
index 0000000..9e0a058
--- /dev/null
+++ b/docs/components/guardrailinterval.mdx
@@ -0,0 +1,23 @@
+---
+title: "GuardrailInterval"
+---
+
+Interval at which the limit resets (daily, weekly, monthly)
+
+## Example Usage
+
+```python
+from openrouter.components import GuardrailInterval
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: GuardrailInterval = "daily"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"daily"`
+- `"weekly"`
+- `"monthly"`
diff --git a/docs/components/ignore.mdx b/docs/components/ignore.mdx
new file mode 100644
index 0000000..8ba1315
--- /dev/null
+++ b/docs/components/ignore.mdx
@@ -0,0 +1,18 @@
+---
+title: "Ignore"
+---
+
+## Supported Types
+
+### `components.ProviderName`
+
+```python
+value: components.ProviderName = /* values here */
+```
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
diff --git a/docs/components/imageconfig.mdx b/docs/components/imageconfig.mdx
new file mode 100644
index 0000000..c838dbe
--- /dev/null
+++ b/docs/components/imageconfig.mdx
@@ -0,0 +1,24 @@
+---
+title: "ImageConfig"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `float`
+
+```python
+value: float = /* values here */
+```
+
+### `List[Nullable[Any]]`
+
+```python
+value: List[Nullable[Any]] = /* values here */
+```
+
diff --git a/docs/components/imageendpoint.mdx b/docs/components/imageendpoint.mdx
new file mode 100644
index 0000000..29fa84c
--- /dev/null
+++ b/docs/components/imageendpoint.mdx
@@ -0,0 +1,18 @@
+---
+title: "ImageEndpoint"
+---
+
+An endpoint that serves a given image model.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_passthrough_parameters` | List[*str*] | :heavy_check_mark: | Provider-specific options accepted under provider.options[provider_slug]. | [] |
+| `pricing` | List[[components.ImagePricingEntry](../components/imagepricingentry.mdx)] | :heavy_check_mark: | Billable pricing lines for this endpoint. | [
\{
"billable": "output_image",
"cost_usd": 0.05,
"unit": "image"
}
] |
+| `provider_name` | *str* | :heavy_check_mark: | Provider display name | Bytedance |
+| `provider_slug` | *str* | :heavy_check_mark: | Provider slug | bytedance |
+| `provider_tag` | *Nullable[str]* | :heavy_check_mark: | Provider tag for request-side selection | bytedance |
+| `supported_parameters` | Dict[str, [components.CapabilityDescriptor](../components/capabilitydescriptor.mdx)] | :heavy_check_mark: | N/A | \{
"output_compression": \{
"max": 100,
"min": 0,
"type": "range"
},
"resolution": \{
"type": "enum",
"values": [
"1K",
"2K",
"4K"
]
},
"seed": \{
"type": "boolean"
}
} |
+| `supports_streaming` | *bool* | :heavy_check_mark: | Whether this endpoint supports native SSE streaming (`stream: true` in the request). | false |
\ No newline at end of file
diff --git a/docs/components/imagegencallcompletedevent.mdx b/docs/components/imagegencallcompletedevent.mdx
new file mode 100644
index 0000000..2ca428b
--- /dev/null
+++ b/docs/components/imagegencallcompletedevent.mdx
@@ -0,0 +1,15 @@
+---
+title: "ImageGenCallCompletedEvent"
+---
+
+Image generation call completed
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.ImageGenCallCompletedEventType](../components/imagegencallcompletedeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/imagegencallcompletedeventtype.mdx b/docs/components/imagegencallcompletedeventtype.mdx
new file mode 100644
index 0000000..ca8fa21
--- /dev/null
+++ b/docs/components/imagegencallcompletedeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ImageGenCallCompletedEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenCallCompletedEventType
+value: ImageGenCallCompletedEventType = "response.image_generation_call.completed"
+```
+
+
+## Values
+
+- `"response.image_generation_call.completed"`
diff --git a/docs/components/imagegencallgeneratingevent.mdx b/docs/components/imagegencallgeneratingevent.mdx
new file mode 100644
index 0000000..eb3a1af
--- /dev/null
+++ b/docs/components/imagegencallgeneratingevent.mdx
@@ -0,0 +1,15 @@
+---
+title: "ImageGenCallGeneratingEvent"
+---
+
+Image generation call is generating
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.ImageGenCallGeneratingEventType](../components/imagegencallgeneratingeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/imagegencallgeneratingeventtype.mdx b/docs/components/imagegencallgeneratingeventtype.mdx
new file mode 100644
index 0000000..d89b772
--- /dev/null
+++ b/docs/components/imagegencallgeneratingeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ImageGenCallGeneratingEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenCallGeneratingEventType
+value: ImageGenCallGeneratingEventType = "response.image_generation_call.generating"
+```
+
+
+## Values
+
+- `"response.image_generation_call.generating"`
diff --git a/docs/components/imagegencallinprogressevent.mdx b/docs/components/imagegencallinprogressevent.mdx
new file mode 100644
index 0000000..72ce2bb
--- /dev/null
+++ b/docs/components/imagegencallinprogressevent.mdx
@@ -0,0 +1,15 @@
+---
+title: "ImageGenCallInProgressEvent"
+---
+
+Image generation call in progress
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.ImageGenCallInProgressEventType](../components/imagegencallinprogresseventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/imagegencallinprogresseventtype.mdx b/docs/components/imagegencallinprogresseventtype.mdx
new file mode 100644
index 0000000..865edca
--- /dev/null
+++ b/docs/components/imagegencallinprogresseventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ImageGenCallInProgressEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenCallInProgressEventType
+value: ImageGenCallInProgressEventType = "response.image_generation_call.in_progress"
+```
+
+
+## Values
+
+- `"response.image_generation_call.in_progress"`
diff --git a/docs/components/imagegencallpartialimageevent.mdx b/docs/components/imagegencallpartialimageevent.mdx
new file mode 100644
index 0000000..a3b82a9
--- /dev/null
+++ b/docs/components/imagegencallpartialimageevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "ImageGenCallPartialImageEvent"
+---
+
+Image generation call with partial image
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `partial_image_b64` | *str* | :heavy_check_mark: | N/A |
+| `partial_image_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.ImageGenCallPartialImageEventType](../components/imagegencallpartialimageeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/imagegencallpartialimageeventtype.mdx b/docs/components/imagegencallpartialimageeventtype.mdx
new file mode 100644
index 0000000..8eb6786
--- /dev/null
+++ b/docs/components/imagegencallpartialimageeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ImageGenCallPartialImageEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenCallPartialImageEventType
+value: ImageGenCallPartialImageEventType = "response.image_generation_call.partial_image"
+```
+
+
+## Values
+
+- `"response.image_generation_call.partial_image"`
diff --git a/docs/components/imagegencompletedevent.mdx b/docs/components/imagegencompletedevent.mdx
new file mode 100644
index 0000000..90ddd67
--- /dev/null
+++ b/docs/components/imagegencompletedevent.mdx
@@ -0,0 +1,16 @@
+---
+title: "ImageGenCompletedEvent"
+---
+
+Emitted when generation completes and the final image is available
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `b64_json` | *str* | :heavy_check_mark: | Base64-encoded final image data | |
+| `created` | *int* | :heavy_check_mark: | Unix timestamp (seconds) when the image was generated | |
+| `media_type` | *Optional[str]* | :heavy_minus_sign: | Media type (MIME type) of the image. Omitted when the output is a standard raster format (PNG). Present for non-raster outputs such as SVG (`image/svg+xml`). | image/svg+xml |
+| `type` | [components.ImageGenCompletedEventType](../components/imagegencompletedeventtype.mdx) | :heavy_check_mark: | The event type | |
+| `usage` | [Optional[components.ImageGenerationUsage]](../components/imagegenerationusage.mdx) | :heavy_minus_sign: | Token and cost usage for the image generation request, when available | \{
"completion_tokens": 4175,
"cost": 0.04,
"prompt_tokens": 0,
"total_tokens": 4175
} |
\ No newline at end of file
diff --git a/docs/components/imagegencompletedeventtype.mdx b/docs/components/imagegencompletedeventtype.mdx
new file mode 100644
index 0000000..df5a9a5
--- /dev/null
+++ b/docs/components/imagegencompletedeventtype.mdx
@@ -0,0 +1,17 @@
+---
+title: "ImageGenCompletedEventType"
+---
+
+The event type
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenCompletedEventType
+value: ImageGenCompletedEventType = "image_generation.completed"
+```
+
+
+## Values
+
+- `"image_generation.completed"`
diff --git a/docs/components/imagegenerationrequest.mdx b/docs/components/imagegenerationrequest.mdx
new file mode 100644
index 0000000..1d6369d
--- /dev/null
+++ b/docs/components/imagegenerationrequest.mdx
@@ -0,0 +1,25 @@
+---
+title: "ImageGenerationRequest"
+---
+
+Image generation request input
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `aspect_ratio` | [Optional[components.ImageGenerationRequestAspectRatio]](../components/imagegenerationrequestaspectratio.mdx) | :heavy_minus_sign: | Normalized aspect ratio of the generated image. Providers clamp to their supported subset. | 16:9 |
+| `background` | [Optional[components.ImageGenerationRequestBackground]](../components/imagegenerationrequestbackground.mdx) | :heavy_minus_sign: | Background treatment. `transparent` requires an output_format that supports alpha (png or webp). | auto |
+| `input_references` | List[[components.ContentPartImage](../components/contentpartimage.mdx)] | :heavy_minus_sign: | Reference images to guide image-to-image generation, as base64 data URLs or HTTP(S) URLs. | |
+| `model` | *str* | :heavy_check_mark: | The image generation model to use | bytedance-seed/seedream-4.5 |
+| `n` | *Optional[int]* | :heavy_minus_sign: | Number of images to generate (1-10). Providers that only support single-image generation reject n > 1. | 1 |
+| `output_compression` | *Optional[int]* | :heavy_minus_sign: | Compression level (0-100) for webp/jpeg output. Ignored for png and by providers without a compression knob. | 100 |
+| `output_format` | [Optional[components.ImageGenerationRequestOutputFormat]](../components/imagegenerationrequestoutputformat.mdx) | :heavy_minus_sign: | Encoding of the returned image bytes. Most models produce raster formats (png, jpeg, webp). SVG is supported by vectorization models (e.g. Quiver) — the SVG markup is UTF-8 base64-encoded in `b64_json`. | png |
+| `prompt` | *str* | :heavy_check_mark: | Text description of the desired image | a red panda astronaut floating in space, studio lighting |
+| `provider` | [Optional[components.ImageGenerationRequestProvider]](../components/imagegenerationrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | |
+| `quality` | [Optional[components.ImageGenerationRequestQuality]](../components/imagegenerationrequestquality.mdx) | :heavy_minus_sign: | Rendering quality. Providers without a quality knob ignore this. | high |
+| `resolution` | [Optional[components.ImageGenerationRequestResolution]](../components/imagegenerationrequestresolution.mdx) | :heavy_minus_sign: | Normalized resolution tier of the generated image. Concrete pixel dimensions are derived per-provider. | 2K |
+| `seed` | *Optional[int]* | :heavy_minus_sign: | If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers. | |
+| `size` | *Optional[str]* | :heavy_minus_sign: | Optional. A convenience shorthand for output dimensions — pass a tier ("2K", "4K") or explicit pixels ("2048x2048") and we normalize it to the right dimensions for the chosen provider. Interchangeable with resolution + aspect_ratio; use those directly for enumerated, per-model discoverable values. Conflicting size + resolution/aspect_ratio is rejected. | 2K |
+| `stream` | *Optional[bool]* | :heavy_minus_sign: | If true, partial images are streamed as SSE events as they become available. Only supported by providers with native streaming (currently OpenAI). Non-streaming providers ignore this flag and return a buffered response. | |
\ No newline at end of file
diff --git a/docs/components/imagegenerationrequestaspectratio.mdx b/docs/components/imagegenerationrequestaspectratio.mdx
new file mode 100644
index 0000000..2116ac4
--- /dev/null
+++ b/docs/components/imagegenerationrequestaspectratio.mdx
@@ -0,0 +1,42 @@
+---
+title: "ImageGenerationRequestAspectRatio"
+---
+
+Normalized aspect ratio of the generated image. Providers clamp to their supported subset.
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenerationRequestAspectRatio
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ImageGenerationRequestAspectRatio = "1:1"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"1:1"`
+- `"1:2"`
+- `"1:4"`
+- `"1:8"`
+- `"2:1"`
+- `"2:3"`
+- `"3:2"`
+- `"3:4"`
+- `"4:1"`
+- `"4:3"`
+- `"4:5"`
+- `"5:4"`
+- `"8:1"`
+- `"9:16"`
+- `"16:9"`
+- `"9:19.5"`
+- `"19.5:9"`
+- `"9:20"`
+- `"20:9"`
+- `"9:21"`
+- `"21:9"`
+- `"auto"`
diff --git a/docs/components/imagegenerationrequestbackground.mdx b/docs/components/imagegenerationrequestbackground.mdx
new file mode 100644
index 0000000..8501680
--- /dev/null
+++ b/docs/components/imagegenerationrequestbackground.mdx
@@ -0,0 +1,23 @@
+---
+title: "ImageGenerationRequestBackground"
+---
+
+Background treatment. `transparent` requires an output_format that supports alpha (png or webp).
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenerationRequestBackground
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ImageGenerationRequestBackground = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"transparent"`
+- `"opaque"`
diff --git a/docs/components/imagegenerationrequestoptions.mdx b/docs/components/imagegenerationrequestoptions.mdx
new file mode 100644
index 0000000..26f3f1e
--- /dev/null
+++ b/docs/components/imagegenerationrequestoptions.mdx
@@ -0,0 +1,131 @@
+---
+title: "ImageGenerationRequestOptions"
+---
+
+Provider-specific options keyed by provider slug. Only options for the matched provider are forwarded; the rest are ignored. Unrecognized keys are silently dropped.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------- | -------------------------- | -------------------------- | -------------------------- |
+| `oneai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ai21` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `aion_labs` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `akashml` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `alibaba` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `amazon_bedrock` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `amazon_nova` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ambient` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `anthropic` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `anyscale` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `arcee_ai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `atlas_cloud` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `atoma` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `avian` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `azure` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `baidu` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `baseten` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `black_forest_labs` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `byteplus` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `centml` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `cerebras` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `chutes` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `cirrascale` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `clarifai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `cloudflare` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `cohere` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `crofai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `crucible` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `crusoe` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `darkbloom` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `decart` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `deepinfra` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `deepseek` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `dekallm` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `digitalocean` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `enfer` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `fake_provider` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `featherless` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `fireworks` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `friendli` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `gmicloud` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `google_ai_studio` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `google_vertex` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `gopomelo` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `groq` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `heygen` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `huggingface` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `hyperbolic` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `hyperbolic_quantized` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inception` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inceptron` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inferact_vllm` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inference_net` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `infermatic` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inflection` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inocloud` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `io_net` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ionstream` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `klusterai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `lambda_` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `lepton` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `liquid` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `lynn` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `lynn_private` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `mancer` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `mancer_old` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `mara` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `meta` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `minimax` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `mistral` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `modal` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `modelrun` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `modular` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `moonshotai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `morph` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ncompass` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nebius` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nex_agi` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nextbit` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nineteen` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `novita` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nvidia` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `octoai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `open_inference` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `openai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `parasail` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `perceptron` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `perplexity` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `phala` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `poolside` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `quiver` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `recraft` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `recursal` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `reflection` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `reka` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `relace` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `replicate` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sakana_ai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sambanova` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sambanova_cloaked` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `seed` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sf_compute` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `siliconflow` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sourceful` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `stealth` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `stepfun` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `streamlake` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `switchpoint` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `targon` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `tenstorrent` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `together` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `together_lite` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ubicloud` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `upstage` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `venice` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `wafer` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `wandb` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `xai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `xiaomi` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `z_ai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/imagegenerationrequestoutputformat.mdx b/docs/components/imagegenerationrequestoutputformat.mdx
new file mode 100644
index 0000000..4901416
--- /dev/null
+++ b/docs/components/imagegenerationrequestoutputformat.mdx
@@ -0,0 +1,24 @@
+---
+title: "ImageGenerationRequestOutputFormat"
+---
+
+Encoding of the returned image bytes. Most models produce raster formats (png, jpeg, webp). SVG is supported by vectorization models (e.g. Quiver) — the SVG markup is UTF-8 base64-encoded in `b64_json`.
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenerationRequestOutputFormat
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ImageGenerationRequestOutputFormat = "png"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"png"`
+- `"jpeg"`
+- `"webp"`
+- `"svg"`
diff --git a/docs/components/imagegenerationrequestprovider.mdx b/docs/components/imagegenerationrequestprovider.mdx
new file mode 100644
index 0000000..51188d0
--- /dev/null
+++ b/docs/components/imagegenerationrequestprovider.mdx
@@ -0,0 +1,12 @@
+---
+title: "ImageGenerationRequestProvider"
+---
+
+Provider-specific passthrough configuration
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `options` | [Optional[components.ImageGenerationRequestOptions]](../components/imagegenerationrequestoptions.mdx) | :heavy_minus_sign: | N/A | \{
"black-forest-labs": \{
"guidance": 3,
"steps": 40
}
} |
\ No newline at end of file
diff --git a/docs/components/imagegenerationrequestquality.mdx b/docs/components/imagegenerationrequestquality.mdx
new file mode 100644
index 0000000..d6f8b5b
--- /dev/null
+++ b/docs/components/imagegenerationrequestquality.mdx
@@ -0,0 +1,24 @@
+---
+title: "ImageGenerationRequestQuality"
+---
+
+Rendering quality. Providers without a quality knob ignore this.
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenerationRequestQuality
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ImageGenerationRequestQuality = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"low"`
+- `"medium"`
+- `"high"`
diff --git a/docs/components/imagegenerationrequestresolution.mdx b/docs/components/imagegenerationrequestresolution.mdx
new file mode 100644
index 0000000..4d9385e
--- /dev/null
+++ b/docs/components/imagegenerationrequestresolution.mdx
@@ -0,0 +1,24 @@
+---
+title: "ImageGenerationRequestResolution"
+---
+
+Normalized resolution tier of the generated image. Concrete pixel dimensions are derived per-provider.
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenerationRequestResolution
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ImageGenerationRequestResolution = "512"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"512"`
+- `"1K"`
+- `"2K"`
+- `"4K"`
diff --git a/docs/components/imagegenerationresponse.mdx b/docs/components/imagegenerationresponse.mdx
new file mode 100644
index 0000000..b6e0e2c
--- /dev/null
+++ b/docs/components/imagegenerationresponse.mdx
@@ -0,0 +1,14 @@
+---
+title: "ImageGenerationResponse"
+---
+
+Image generation response
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `created` | *int* | :heavy_check_mark: | Unix timestamp (seconds) when the image was generated | 1748372400 |
+| `data` | List[[components.ImageGenerationResponseData](../components/imagegenerationresponsedata.mdx)] | :heavy_check_mark: | Generated images | |
+| `usage` | [Optional[components.ImageGenerationUsage]](../components/imagegenerationusage.mdx) | :heavy_minus_sign: | Token and cost usage for the image generation request, when available | \{
"completion_tokens": 4175,
"cost": 0.04,
"prompt_tokens": 0,
"total_tokens": 4175
} |
\ No newline at end of file
diff --git a/docs/components/imagegenerationresponsedata.mdx b/docs/components/imagegenerationresponsedata.mdx
new file mode 100644
index 0000000..78ec1e1
--- /dev/null
+++ b/docs/components/imagegenerationresponsedata.mdx
@@ -0,0 +1,10 @@
+---
+title: "ImageGenerationResponseData"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `b64_json` | *str* | :heavy_check_mark: | Base64-encoded image bytes | |
+| `media_type` | *Optional[str]* | :heavy_minus_sign: | Media type (MIME type) of the image. Omitted when the output is a standard raster format (PNG). Present for non-raster outputs such as SVG (`image/svg+xml`). | image/svg+xml |
\ No newline at end of file
diff --git a/docs/components/imagegenerationservertool.mdx b/docs/components/imagegenerationservertool.mdx
new file mode 100644
index 0000000..c290753
--- /dev/null
+++ b/docs/components/imagegenerationservertool.mdx
@@ -0,0 +1,22 @@
+---
+title: "ImageGenerationServerTool"
+---
+
+Image generation tool configuration
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
+| `background` | [Optional[components.ImageGenerationServerToolBackground]](../components/imagegenerationservertoolbackground.mdx) | :heavy_minus_sign: | N/A |
+| `input_fidelity` | [OptionalNullable[components.InputFidelity]](../components/inputfidelity.mdx) | :heavy_minus_sign: | N/A |
+| `input_image_mask` | [Optional[components.InputImageMask]](../components/inputimagemask.mdx) | :heavy_minus_sign: | N/A |
+| `model` | [Optional[components.ModelEnum]](../components/modelenum.mdx) | :heavy_minus_sign: | N/A |
+| `moderation` | [Optional[components.Moderation]](../components/moderation.mdx) | :heavy_minus_sign: | N/A |
+| `output_compression` | *Optional[int]* | :heavy_minus_sign: | N/A |
+| `output_format` | [Optional[components.ImageGenerationServerToolOutputFormat]](../components/imagegenerationservertooloutputformat.mdx) | :heavy_minus_sign: | N/A |
+| `partial_images` | *Optional[int]* | :heavy_minus_sign: | N/A |
+| `quality` | [Optional[components.ImageGenerationServerToolQuality]](../components/imagegenerationservertoolquality.mdx) | :heavy_minus_sign: | N/A |
+| `size` | [Optional[components.Size]](../components/size.mdx) | :heavy_minus_sign: | N/A |
+| `type` | [components.ImageGenerationServerToolType](../components/imagegenerationservertooltype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/imagegenerationservertoolbackground.mdx b/docs/components/imagegenerationservertoolbackground.mdx
new file mode 100644
index 0000000..208f2a3
--- /dev/null
+++ b/docs/components/imagegenerationservertoolbackground.mdx
@@ -0,0 +1,21 @@
+---
+title: "ImageGenerationServerToolBackground"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenerationServerToolBackground
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ImageGenerationServerToolBackground = "transparent"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"transparent"`
+- `"opaque"`
+- `"auto"`
diff --git a/docs/components/imagegenerationservertoolconfig.mdx b/docs/components/imagegenerationservertoolconfig.mdx
new file mode 100644
index 0000000..3fc78f9
--- /dev/null
+++ b/docs/components/imagegenerationservertoolconfig.mdx
@@ -0,0 +1,13 @@
+---
+title: "ImageGenerationServerToolConfig"
+---
+
+Configuration for the openrouter:image_generation server tool. Accepts all image_config params (aspect_ratio, quality, size, background, output_format, output_compression, moderation, etc.) plus a model field.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
+| `model` | *Optional[str]* | :heavy_minus_sign: | Which image generation model to use (e.g. "openai/gpt-5-image"). Defaults to "openai/gpt-5-image". | openai/gpt-5-image |
+| `__pydantic_extra__` | Dict[str, [components.ImageGenerationServerToolConfigUnion](../components/imagegenerationservertoolconfigunion.mdx)] | :heavy_minus_sign: | N/A | \{
"aspect_ratio": "16:9",
"model": "openai/gpt-5-image",
"quality": "high"
} |
\ No newline at end of file
diff --git a/docs/components/imagegenerationservertoolconfigunion.mdx b/docs/components/imagegenerationservertoolconfigunion.mdx
new file mode 100644
index 0000000..a3b6a15
--- /dev/null
+++ b/docs/components/imagegenerationservertoolconfigunion.mdx
@@ -0,0 +1,24 @@
+---
+title: "ImageGenerationServerToolConfigUnion"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `float`
+
+```python
+value: float = /* values here */
+```
+
+### `List[Nullable[Any]]`
+
+```python
+value: List[Nullable[Any]] = /* values here */
+```
+
diff --git a/docs/components/imagegenerationservertoolopenrouter.mdx b/docs/components/imagegenerationservertoolopenrouter.mdx
new file mode 100644
index 0000000..0caf29c
--- /dev/null
+++ b/docs/components/imagegenerationservertoolopenrouter.mdx
@@ -0,0 +1,13 @@
+---
+title: "ImageGenerationServerToolOpenRouter"
+---
+
+OpenRouter built-in server tool: generates images from text prompts using an image generation model
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `parameters` | [Optional[components.ImageGenerationServerToolConfig]](../components/imagegenerationservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for the openrouter:image_generation server tool. Accepts all image_config params (aspect_ratio, quality, size, background, output_format, output_compression, moderation, etc.) plus a model field. | \{
"aspect_ratio": "16:9",
"model": "openai/gpt-5-image",
"quality": "high"
} |
+| `type` | [components.ImageGenerationServerToolOpenRouterType](../components/imagegenerationservertoolopenroutertype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/imagegenerationservertoolopenroutertype.mdx b/docs/components/imagegenerationservertoolopenroutertype.mdx
new file mode 100644
index 0000000..8151a45
--- /dev/null
+++ b/docs/components/imagegenerationservertoolopenroutertype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ImageGenerationServerToolOpenRouterType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenerationServerToolOpenRouterType
+value: ImageGenerationServerToolOpenRouterType = "openrouter:image_generation"
+```
+
+
+## Values
+
+- `"openrouter:image_generation"`
diff --git a/docs/components/imagegenerationservertooloutputformat.mdx b/docs/components/imagegenerationservertooloutputformat.mdx
new file mode 100644
index 0000000..f19e909
--- /dev/null
+++ b/docs/components/imagegenerationservertooloutputformat.mdx
@@ -0,0 +1,21 @@
+---
+title: "ImageGenerationServerToolOutputFormat"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenerationServerToolOutputFormat
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ImageGenerationServerToolOutputFormat = "png"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"png"`
+- `"webp"`
+- `"jpeg"`
diff --git a/docs/components/imagegenerationservertoolquality.mdx b/docs/components/imagegenerationservertoolquality.mdx
new file mode 100644
index 0000000..ab9a217
--- /dev/null
+++ b/docs/components/imagegenerationservertoolquality.mdx
@@ -0,0 +1,22 @@
+---
+title: "ImageGenerationServerToolQuality"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenerationServerToolQuality
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ImageGenerationServerToolQuality = "low"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"low"`
+- `"medium"`
+- `"high"`
+- `"auto"`
diff --git a/docs/components/imagegenerationservertooltype.mdx b/docs/components/imagegenerationservertooltype.mdx
new file mode 100644
index 0000000..b677030
--- /dev/null
+++ b/docs/components/imagegenerationservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ImageGenerationServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenerationServerToolType
+value: ImageGenerationServerToolType = "image_generation"
+```
+
+
+## Values
+
+- `"image_generation"`
diff --git a/docs/components/imagegenerationstatus.md b/docs/components/imagegenerationstatus.md
deleted file mode 100644
index 22e0541..0000000
--- a/docs/components/imagegenerationstatus.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# ImageGenerationStatus
-
-
-## Values
-
-| Name | Value |
-| ------------- | ------------- |
-| `IN_PROGRESS` | in_progress |
-| `COMPLETED` | completed |
-| `GENERATING` | generating |
-| `FAILED` | failed |
\ No newline at end of file
diff --git a/docs/components/imagegenerationstatus.mdx b/docs/components/imagegenerationstatus.mdx
new file mode 100644
index 0000000..cabf0cc
--- /dev/null
+++ b/docs/components/imagegenerationstatus.mdx
@@ -0,0 +1,22 @@
+---
+title: "ImageGenerationStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenerationStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ImageGenerationStatus = "in_progress"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"in_progress"`
+- `"completed"`
+- `"generating"`
+- `"failed"`
diff --git a/docs/components/imagegenerationusage.mdx b/docs/components/imagegenerationusage.mdx
new file mode 100644
index 0000000..be9fe8f
--- /dev/null
+++ b/docs/components/imagegenerationusage.mdx
@@ -0,0 +1,23 @@
+---
+title: "ImageGenerationUsage"
+---
+
+Token and cost usage for the image generation request, when available
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `completion_tokens` | *int* | :heavy_check_mark: | The tokens generated | |
+| `completion_tokens_details` | [OptionalNullable[components.ImageGenerationUsageCompletionTokensDetails]](../components/imagegenerationusagecompletiontokensdetails.mdx) | :heavy_minus_sign: | N/A | |
+| `cost` | *OptionalNullable[float]* | :heavy_minus_sign: | Cost of the completion | |
+| `cost_details` | [OptionalNullable[components.CostDetails]](../components/costdetails.mdx) | :heavy_minus_sign: | Breakdown of upstream inference costs | \{
"upstream_inference_completions_cost": 0.0004,
"upstream_inference_cost": null,
"upstream_inference_prompt_cost": 0.0008
} |
+| `is_byok` | *Optional[bool]* | :heavy_minus_sign: | Whether a request was made using a Bring Your Own Key configuration | |
+| `iterations` | List[[components.AnthropicUsageIteration](../components/anthropicusageiteration.mdx)] | :heavy_minus_sign: | N/A | |
+| `prompt_tokens` | *int* | :heavy_check_mark: | Including images, input audio, and tools if any | |
+| `prompt_tokens_details` | [OptionalNullable[components.ImageGenerationUsagePromptTokensDetails]](../components/imagegenerationusageprompttokensdetails.mdx) | :heavy_minus_sign: | Breakdown of tokens used in the prompt. | |
+| `server_tool_use` | [OptionalNullable[components.ServerToolUse]](../components/servertooluse.mdx) | :heavy_minus_sign: | Usage for server-side tool execution (e.g., web search) | |
+| `service_tier` | *OptionalNullable[str]* | :heavy_minus_sign: | The service tier used by the upstream provider for this request | |
+| `speed` | [OptionalNullable[components.AnthropicSpeed]](../components/anthropicspeed.mdx) | :heavy_minus_sign: | N/A | standard |
+| `total_tokens` | *int* | :heavy_check_mark: | Sum of the above two fields | |
\ No newline at end of file
diff --git a/docs/components/imagegenerationusagecompletiontokensdetails.mdx b/docs/components/imagegenerationusagecompletiontokensdetails.mdx
new file mode 100644
index 0000000..9c56a84
--- /dev/null
+++ b/docs/components/imagegenerationusagecompletiontokensdetails.mdx
@@ -0,0 +1,11 @@
+---
+title: "ImageGenerationUsageCompletionTokensDetails"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- |
+| `audio_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Tokens generated by the model for audio output. |
+| `image_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Tokens generated by the model for image output. |
+| `reasoning_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Tokens generated by the model for reasoning. |
\ No newline at end of file
diff --git a/docs/components/imagegenerationusageprompttokensdetails.mdx b/docs/components/imagegenerationusageprompttokensdetails.mdx
new file mode 100644
index 0000000..a00b125
--- /dev/null
+++ b/docs/components/imagegenerationusageprompttokensdetails.mdx
@@ -0,0 +1,16 @@
+---
+title: "ImageGenerationUsagePromptTokensDetails"
+---
+
+Breakdown of tokens used in the prompt.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `audio_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Tokens used for input audio. |
+| `cache_write_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Tokens written to cache. Only returned for models with explicit caching and cache write pricing. |
+| `cached_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Tokens cached by the endpoint. |
+| `file_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Tokens used for input files/documents. |
+| `video_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Tokens used for input video. |
\ No newline at end of file
diff --git a/docs/components/imagegenpartialimageevent.mdx b/docs/components/imagegenpartialimageevent.mdx
new file mode 100644
index 0000000..b081c11
--- /dev/null
+++ b/docs/components/imagegenpartialimageevent.mdx
@@ -0,0 +1,14 @@
+---
+title: "ImageGenPartialImageEvent"
+---
+
+Emitted when a partial image becomes available during streaming generation
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `b64_json` | *str* | :heavy_check_mark: | Base64-encoded partial image data |
+| `partial_image_index` | *int* | :heavy_check_mark: | 0-based index indicating which partial image this is in the sequence |
+| `type` | [components.ImageGenPartialImageEventType](../components/imagegenpartialimageeventtype.mdx) | :heavy_check_mark: | The event type |
\ No newline at end of file
diff --git a/docs/components/imagegenpartialimageeventtype.mdx b/docs/components/imagegenpartialimageeventtype.mdx
new file mode 100644
index 0000000..89e2495
--- /dev/null
+++ b/docs/components/imagegenpartialimageeventtype.mdx
@@ -0,0 +1,17 @@
+---
+title: "ImageGenPartialImageEventType"
+---
+
+The event type
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenPartialImageEventType
+value: ImageGenPartialImageEventType = "image_generation.partial_image"
+```
+
+
+## Values
+
+- `"image_generation.partial_image"`
diff --git a/docs/components/imagegenstreamerrorevent.mdx b/docs/components/imagegenstreamerrorevent.mdx
new file mode 100644
index 0000000..befd442
--- /dev/null
+++ b/docs/components/imagegenstreamerrorevent.mdx
@@ -0,0 +1,13 @@
+---
+title: "ImageGenStreamErrorEvent"
+---
+
+Emitted when streaming generation fails after the SSE response starts
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `error` | [components.ImageGenStreamErrorEventError](../components/imagegenstreamerroreventerror.mdx) | :heavy_check_mark: | Provider error details |
+| `type` | [components.ImageGenStreamErrorEventType](../components/imagegenstreamerroreventtype.mdx) | :heavy_check_mark: | The event type |
\ No newline at end of file
diff --git a/docs/components/imagegenstreamerroreventerror.mdx b/docs/components/imagegenstreamerroreventerror.mdx
new file mode 100644
index 0000000..8539997
--- /dev/null
+++ b/docs/components/imagegenstreamerroreventerror.mdx
@@ -0,0 +1,15 @@
+---
+title: "ImageGenStreamErrorEventError"
+---
+
+Provider error details
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
+| `code` | *OptionalNullable[str]* | :heavy_minus_sign: | Provider error code, when supplied |
+| `message` | *str* | :heavy_check_mark: | Provider error message |
+| `param` | *OptionalNullable[str]* | :heavy_minus_sign: | Request parameter associated with the error, when supplied |
+| `type` | *OptionalNullable[str]* | :heavy_minus_sign: | Provider error type, when supplied |
\ No newline at end of file
diff --git a/docs/components/imagegenstreamerroreventtype.mdx b/docs/components/imagegenstreamerroreventtype.mdx
new file mode 100644
index 0000000..dc1d529
--- /dev/null
+++ b/docs/components/imagegenstreamerroreventtype.mdx
@@ -0,0 +1,17 @@
+---
+title: "ImageGenStreamErrorEventType"
+---
+
+The event type
+
+## Example Usage
+
+```python
+from openrouter.components import ImageGenStreamErrorEventType
+value: ImageGenStreamErrorEventType = "error"
+```
+
+
+## Values
+
+- `"error"`
diff --git a/docs/components/imagemodelarchitecture.mdx b/docs/components/imagemodelarchitecture.mdx
new file mode 100644
index 0000000..6842d9d
--- /dev/null
+++ b/docs/components/imagemodelarchitecture.mdx
@@ -0,0 +1,10 @@
+---
+title: "ImageModelArchitecture"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `input_modalities` | List[[components.InputModality](../components/inputmodality.mdx)] | :heavy_check_mark: | Supported input modalities |
+| `output_modalities` | List[[components.ImageOutputModality](../components/imageoutputmodality.mdx)] | :heavy_check_mark: | Supported output modalities |
\ No newline at end of file
diff --git a/docs/components/imagemodelendpointsresponse.mdx b/docs/components/imagemodelendpointsresponse.mdx
new file mode 100644
index 0000000..7d3ec9c
--- /dev/null
+++ b/docs/components/imagemodelendpointsresponse.mdx
@@ -0,0 +1,13 @@
+---
+title: "ImageModelEndpointsResponse"
+---
+
+The full per-endpoint records for an image model.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `endpoints` | List[[components.ImageEndpoint](../components/imageendpoint.mdx)] | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | Model slug | bytedance-seed/seedream-4.5 |
\ No newline at end of file
diff --git a/docs/components/imagemodellistitem.mdx b/docs/components/imagemodellistitem.mdx
new file mode 100644
index 0000000..633c99b
--- /dev/null
+++ b/docs/components/imagemodellistitem.mdx
@@ -0,0 +1,19 @@
+---
+title: "ImageModelListItem"
+---
+
+A single image model in the discovery listing.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `architecture` | [components.ImageModelArchitecture](../components/imagemodelarchitecture.mdx) | :heavy_check_mark: | N/A | \{
"input_modalities": [
"text",
"image"
],
"output_modalities": [
"image"
]
} |
+| `created` | *int* | :heavy_check_mark: | Unix timestamp (seconds) of when the model was created | 1692901234 |
+| `description` | *str* | :heavy_check_mark: | N/A | A text-to-image model. |
+| `endpoints` | *str* | :heavy_check_mark: | Relative URL to the full per-endpoint records for this model | /api/v1/images/models/bytedance-seed/seedream-4.5/endpoints |
+| `id` | *str* | :heavy_check_mark: | Model slug | bytedance-seed/seedream-4.5 |
+| `name` | *str* | :heavy_check_mark: | Display name | Seedream 4.5 |
+| `supported_parameters` | Dict[str, [components.CapabilityDescriptor](../components/capabilitydescriptor.mdx)] | :heavy_check_mark: | Union of supported parameters across every endpoint of this model. Coarse discovery aid; the definitive per-endpoint set is behind the endpoints URL. | \{
"output_compression": \{
"max": 100,
"min": 0,
"type": "range"
},
"resolution": \{
"type": "enum",
"values": [
"1K",
"2K",
"4K"
]
},
"seed": \{
"type": "boolean"
}
} |
+| `supports_streaming` | *bool* | :heavy_check_mark: | Whether any endpoint of this model supports native SSE streaming on the dedicated Image API (i.e. `stream: true` in the request). OR across endpoints. | false |
\ No newline at end of file
diff --git a/docs/components/imagemodelslistresponse.mdx b/docs/components/imagemodelslistresponse.mdx
new file mode 100644
index 0000000..b5d695b
--- /dev/null
+++ b/docs/components/imagemodelslistresponse.mdx
@@ -0,0 +1,12 @@
+---
+title: "ImageModelsListResponse"
+---
+
+List of image generation models.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `data` | List[[components.ImageModelListItem](../components/imagemodellistitem.mdx)] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/imageoutputmodality.mdx b/docs/components/imageoutputmodality.mdx
new file mode 100644
index 0000000..52ec9d7
--- /dev/null
+++ b/docs/components/imageoutputmodality.mdx
@@ -0,0 +1,26 @@
+---
+title: "ImageOutputModality"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ImageOutputModality
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ImageOutputModality = "text"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"text"`
+- `"image"`
+- `"embeddings"`
+- `"audio"`
+- `"video"`
+- `"rerank"`
+- `"speech"`
+- `"transcription"`
diff --git a/docs/components/imagepricingentry.mdx b/docs/components/imagepricingentry.mdx
new file mode 100644
index 0000000..8381e7e
--- /dev/null
+++ b/docs/components/imagepricingentry.mdx
@@ -0,0 +1,15 @@
+---
+title: "ImagePricingEntry"
+---
+
+One billable pricing line for an image provider.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `billable` | [components.Billable](../components/billable.mdx) | :heavy_check_mark: | N/A |
+| `cost_usd` | *float* | :heavy_check_mark: | N/A |
+| `unit` | [components.Unit](../components/unit.mdx) | :heavy_check_mark: | N/A |
+| `variant` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/imagestreamingresponse.mdx b/docs/components/imagestreamingresponse.mdx
new file mode 100644
index 0000000..8aad6cc
--- /dev/null
+++ b/docs/components/imagestreamingresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ImageStreamingResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `data` | [components.ImageStreamingResponseData](../components/imagestreamingresponsedata.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/imagestreamingresponsedata.mdx b/docs/components/imagestreamingresponsedata.mdx
new file mode 100644
index 0000000..1040027
--- /dev/null
+++ b/docs/components/imagestreamingresponsedata.mdx
@@ -0,0 +1,24 @@
+---
+title: "ImageStreamingResponseData"
+---
+
+## Supported Types
+
+### `components.ImageGenPartialImageEvent`
+
+```python
+value: components.ImageGenPartialImageEvent = /* values here */
+```
+
+### `components.ImageGenCompletedEvent`
+
+```python
+value: components.ImageGenCompletedEvent = /* values here */
+```
+
+### `components.ImageGenStreamErrorEvent`
+
+```python
+value: components.ImageGenStreamErrorEvent = /* values here */
+```
+
diff --git a/docs/components/incompletedetails.mdx b/docs/components/incompletedetails.mdx
new file mode 100644
index 0000000..7c1490a
--- /dev/null
+++ b/docs/components/incompletedetails.mdx
@@ -0,0 +1,9 @@
+---
+title: "IncompleteDetails"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
+| `reason` | [Optional[components.Reason]](../components/reason.mdx) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/input1.mdx b/docs/components/input1.mdx
new file mode 100644
index 0000000..43245bc
--- /dev/null
+++ b/docs/components/input1.mdx
@@ -0,0 +1,9 @@
+---
+title: "Input1"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------- | ---------------------------- | ---------------------------- | ---------------------------- | ---------------------------- |
+| `prompt` | *str* | :heavy_check_mark: | N/A | What is the meaning of life? |
\ No newline at end of file
diff --git a/docs/components/input2.mdx b/docs/components/input2.mdx
new file mode 100644
index 0000000..5dc5ade
--- /dev/null
+++ b/docs/components/input2.mdx
@@ -0,0 +1,9 @@
+---
+title: "Input2"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- |
+| `messages` | List[*Nullable[Any]*] | :heavy_check_mark: | N/A | [
\{
"content": "What is the meaning of life?",
"role": "user"
}
] |
\ No newline at end of file
diff --git a/docs/components/inputaudio.mdx b/docs/components/inputaudio.mdx
new file mode 100644
index 0000000..54aba1d
--- /dev/null
+++ b/docs/components/inputaudio.mdx
@@ -0,0 +1,13 @@
+---
+title: "InputAudio"
+---
+
+Audio input content item
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `input_audio` | [components.InputAudioInputAudio](../components/inputaudioinputaudio.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.InputAudioType](../components/inputaudiotype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/inputaudioinputaudio.mdx b/docs/components/inputaudioinputaudio.mdx
new file mode 100644
index 0000000..29ec9c9
--- /dev/null
+++ b/docs/components/inputaudioinputaudio.mdx
@@ -0,0 +1,10 @@
+---
+title: "InputAudioInputAudio"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- |
+| `data` | *str* | :heavy_check_mark: | N/A |
+| `format_` | [components.FormatEnum](../components/formatenum.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/inputaudiotype.mdx b/docs/components/inputaudiotype.mdx
new file mode 100644
index 0000000..9fadef3
--- /dev/null
+++ b/docs/components/inputaudiotype.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputAudioType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputAudioType
+value: InputAudioType = "input_audio"
+```
+
+
+## Values
+
+- `"input_audio"`
diff --git a/docs/components/inputfidelity.mdx b/docs/components/inputfidelity.mdx
new file mode 100644
index 0000000..df80baa
--- /dev/null
+++ b/docs/components/inputfidelity.mdx
@@ -0,0 +1,20 @@
+---
+title: "InputFidelity"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputFidelity
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: InputFidelity = "high"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"high"`
+- `"low"`
diff --git a/docs/components/inputfile.mdx b/docs/components/inputfile.mdx
new file mode 100644
index 0000000..2e4a15d
--- /dev/null
+++ b/docs/components/inputfile.mdx
@@ -0,0 +1,16 @@
+---
+title: "InputFile"
+---
+
+File input content item
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
+| `file_data` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `file_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `file_url` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `filename` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `type` | [components.InputFileType](../components/inputfiletype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/inputfiletype.mdx b/docs/components/inputfiletype.mdx
new file mode 100644
index 0000000..15dd4af
--- /dev/null
+++ b/docs/components/inputfiletype.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputFileType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputFileType
+value: InputFileType = "input_file"
+```
+
+
+## Values
+
+- `"input_file"`
diff --git a/docs/components/inputimage.mdx b/docs/components/inputimage.mdx
new file mode 100644
index 0000000..294eb9b
--- /dev/null
+++ b/docs/components/inputimage.mdx
@@ -0,0 +1,14 @@
+---
+title: "InputImage"
+---
+
+Image input content item
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `detail` | [components.InputImageDetail](../components/inputimagedetail.mdx) | :heavy_check_mark: | N/A |
+| `image_url` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `type` | [components.InputImageType](../components/inputimagetype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/inputimagedetail.mdx b/docs/components/inputimagedetail.mdx
new file mode 100644
index 0000000..a200994
--- /dev/null
+++ b/docs/components/inputimagedetail.mdx
@@ -0,0 +1,22 @@
+---
+title: "InputImageDetail"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputImageDetail
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: InputImageDetail = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"high"`
+- `"low"`
+- `"original"`
diff --git a/docs/components/inputimagemask.mdx b/docs/components/inputimagemask.mdx
new file mode 100644
index 0000000..74ce007
--- /dev/null
+++ b/docs/components/inputimagemask.mdx
@@ -0,0 +1,10 @@
+---
+title: "InputImageMask"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `file_id` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `image_url` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/inputimagetype.mdx b/docs/components/inputimagetype.mdx
new file mode 100644
index 0000000..b1eb47e
--- /dev/null
+++ b/docs/components/inputimagetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputImageType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputImageType
+value: InputImageType = "input_image"
+```
+
+
+## Values
+
+- `"input_image"`
diff --git a/docs/components/inputmessageitem.mdx b/docs/components/inputmessageitem.mdx
new file mode 100644
index 0000000..0a2f6e5
--- /dev/null
+++ b/docs/components/inputmessageitem.mdx
@@ -0,0 +1,12 @@
+---
+title: "InputMessageItem"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `content` | List[[components.InputMessageItemContentUnion](../components/inputmessageitemcontentunion.mdx)] | :heavy_minus_sign: | N/A |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `role` | [components.InputMessageItemRoleUnion](../components/inputmessageitemroleunion.mdx) | :heavy_check_mark: | N/A |
+| `type` | [Optional[components.InputMessageItemTypeMessage]](../components/inputmessageitemtypemessage.mdx) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/inputmessageitemcontentinputimage.mdx b/docs/components/inputmessageitemcontentinputimage.mdx
new file mode 100644
index 0000000..d029dec
--- /dev/null
+++ b/docs/components/inputmessageitemcontentinputimage.mdx
@@ -0,0 +1,14 @@
+---
+title: "InputMessageItemContentInputImage"
+---
+
+Image input content item
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `detail` | [components.InputMessageItemDetail](../components/inputmessageitemdetail.mdx) | :heavy_check_mark: | N/A |
+| `image_url` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `type` | [components.InputMessageItemTypeInputImage](../components/inputmessageitemtypeinputimage.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/inputmessageitemcontentunion.mdx b/docs/components/inputmessageitemcontentunion.mdx
new file mode 100644
index 0000000..f64ba6e
--- /dev/null
+++ b/docs/components/inputmessageitemcontentunion.mdx
@@ -0,0 +1,36 @@
+---
+title: "InputMessageItemContentUnion"
+---
+
+## Supported Types
+
+### `components.InputText`
+
+```python
+value: components.InputText = /* values here */
+```
+
+### `components.InputMessageItemContentInputImage`
+
+```python
+value: components.InputMessageItemContentInputImage = /* values here */
+```
+
+### `components.InputFile`
+
+```python
+value: components.InputFile = /* values here */
+```
+
+### `components.InputAudio`
+
+```python
+value: components.InputAudio = /* values here */
+```
+
+### `components.InputVideo`
+
+```python
+value: components.InputVideo = /* values here */
+```
+
diff --git a/docs/components/inputmessageitemdetail.mdx b/docs/components/inputmessageitemdetail.mdx
new file mode 100644
index 0000000..58974a1
--- /dev/null
+++ b/docs/components/inputmessageitemdetail.mdx
@@ -0,0 +1,22 @@
+---
+title: "InputMessageItemDetail"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputMessageItemDetail
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: InputMessageItemDetail = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"high"`
+- `"low"`
+- `"original"`
diff --git a/docs/components/inputmessageitemroledeveloper.mdx b/docs/components/inputmessageitemroledeveloper.mdx
new file mode 100644
index 0000000..3259477
--- /dev/null
+++ b/docs/components/inputmessageitemroledeveloper.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputMessageItemRoleDeveloper"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputMessageItemRoleDeveloper
+value: InputMessageItemRoleDeveloper = "developer"
+```
+
+
+## Values
+
+- `"developer"`
diff --git a/docs/components/inputmessageitemrolesystem.mdx b/docs/components/inputmessageitemrolesystem.mdx
new file mode 100644
index 0000000..064277e
--- /dev/null
+++ b/docs/components/inputmessageitemrolesystem.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputMessageItemRoleSystem"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputMessageItemRoleSystem
+value: InputMessageItemRoleSystem = "system"
+```
+
+
+## Values
+
+- `"system"`
diff --git a/docs/components/inputmessageitemroleunion.mdx b/docs/components/inputmessageitemroleunion.mdx
new file mode 100644
index 0000000..ae0a911
--- /dev/null
+++ b/docs/components/inputmessageitemroleunion.mdx
@@ -0,0 +1,24 @@
+---
+title: "InputMessageItemRoleUnion"
+---
+
+## Supported Types
+
+### `components.InputMessageItemRoleUser`
+
+```python
+value: components.InputMessageItemRoleUser = /* values here */
+```
+
+### `components.InputMessageItemRoleSystem`
+
+```python
+value: components.InputMessageItemRoleSystem = /* values here */
+```
+
+### `components.InputMessageItemRoleDeveloper`
+
+```python
+value: components.InputMessageItemRoleDeveloper = /* values here */
+```
+
diff --git a/docs/components/inputmessageitemroleuser.mdx b/docs/components/inputmessageitemroleuser.mdx
new file mode 100644
index 0000000..972c913
--- /dev/null
+++ b/docs/components/inputmessageitemroleuser.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputMessageItemRoleUser"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputMessageItemRoleUser
+value: InputMessageItemRoleUser = "user"
+```
+
+
+## Values
+
+- `"user"`
diff --git a/docs/components/inputmessageitemtypeinputimage.mdx b/docs/components/inputmessageitemtypeinputimage.mdx
new file mode 100644
index 0000000..03fdcb0
--- /dev/null
+++ b/docs/components/inputmessageitemtypeinputimage.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputMessageItemTypeInputImage"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputMessageItemTypeInputImage
+value: InputMessageItemTypeInputImage = "input_image"
+```
+
+
+## Values
+
+- `"input_image"`
diff --git a/docs/components/inputmessageitemtypemessage.mdx b/docs/components/inputmessageitemtypemessage.mdx
new file mode 100644
index 0000000..7b8d6b3
--- /dev/null
+++ b/docs/components/inputmessageitemtypemessage.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputMessageItemTypeMessage"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputMessageItemTypeMessage
+value: InputMessageItemTypeMessage = "message"
+```
+
+
+## Values
+
+- `"message"`
diff --git a/docs/components/inputmodality.md b/docs/components/inputmodality.md
deleted file mode 100644
index 89bdc2a..0000000
--- a/docs/components/inputmodality.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# InputModality
-
-
-## Values
-
-| Name | Value |
-| ------- | ------- |
-| `TEXT` | text |
-| `IMAGE` | image |
-| `FILE` | file |
-| `AUDIO` | audio |
-| `VIDEO` | video |
\ No newline at end of file
diff --git a/docs/components/inputmodality.mdx b/docs/components/inputmodality.mdx
new file mode 100644
index 0000000..37302a3
--- /dev/null
+++ b/docs/components/inputmodality.mdx
@@ -0,0 +1,23 @@
+---
+title: "InputModality"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputModality
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: InputModality = "text"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"text"`
+- `"image"`
+- `"file"`
+- `"audio"`
+- `"video"`
diff --git a/docs/components/inputreference.mdx b/docs/components/inputreference.mdx
new file mode 100644
index 0000000..8332cd0
--- /dev/null
+++ b/docs/components/inputreference.mdx
@@ -0,0 +1,27 @@
+---
+title: "InputReference"
+---
+
+A reference asset used to guide video generation. Image references are supported by all providers; audio and video references are only honored by providers that support them (currently BytePlus Seedance 2.0).
+
+
+## Supported Types
+
+### `components.ContentPartAudio`
+
+```python
+value: components.ContentPartAudio = /* values here */
+```
+
+### `components.ContentPartImage`
+
+```python
+value: components.ContentPartImage = /* values here */
+```
+
+### `components.ContentPartVideo`
+
+```python
+value: components.ContentPartVideo = /* values here */
+```
+
diff --git a/docs/components/inputschema.mdx b/docs/components/inputschema.mdx
new file mode 100644
index 0000000..0adafb6
--- /dev/null
+++ b/docs/components/inputschema.mdx
@@ -0,0 +1,12 @@
+---
+title: "InputSchema"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------- | -------------------------- | -------------------------- | -------------------------- |
+| `properties` | *OptionalNullable[Any]* | :heavy_minus_sign: | N/A |
+| `required` | List[*str*] | :heavy_minus_sign: | N/A |
+| `type` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `__pydantic_extra__` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputmessagecontent.md b/docs/components/inputscontent1.mdx
similarity index 89%
rename from docs/components/outputmessagecontent.md
rename to docs/components/inputscontent1.mdx
index d8ae814..99897ec 100644
--- a/docs/components/outputmessagecontent.md
+++ b/docs/components/inputscontent1.mdx
@@ -1,5 +1,6 @@
-# OutputMessageContent
-
+---
+title: "InputsContent1"
+---
## Supported Types
diff --git a/docs/components/inputscontent2.mdx b/docs/components/inputscontent2.mdx
new file mode 100644
index 0000000..2cfb979
--- /dev/null
+++ b/docs/components/inputscontent2.mdx
@@ -0,0 +1,24 @@
+---
+title: "InputsContent2"
+---
+
+## Supported Types
+
+### `List[components.InputsContent1]`
+
+```python
+value: List[components.InputsContent1] = /* values here */
+```
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/inputsmessage.mdx b/docs/components/inputsmessage.mdx
new file mode 100644
index 0000000..60f7bd2
--- /dev/null
+++ b/docs/components/inputsmessage.mdx
@@ -0,0 +1,17 @@
+---
+title: "InputsMessage"
+---
+
+An output message item
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `content` | [Nullable[components.InputsContent2]](../components/inputscontent2.mdx) | :heavy_check_mark: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `phase` | [OptionalNullable[components.InputsPhaseUnion]](../components/inputsphaseunion.mdx) | :heavy_minus_sign: | The phase of an assistant message. Use `commentary` for an intermediate assistant message and `final_answer` for the final assistant message. For follow-up requests with models like `gpt-5.3-codex` and later, preserve and resend phase on all assistant messages. Omitting it can degrade performance. Not used for user messages. |
+| `role` | [components.InputsRole](../components/inputsrole.mdx) | :heavy_check_mark: | N/A |
+| `status` | [Optional[components.InputsStatusUnion1]](../components/inputsstatusunion1.mdx) | :heavy_minus_sign: | N/A |
+| `type` | [components.InputsTypeMessage](../components/inputstypemessage.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/inputsphasecommentary.mdx b/docs/components/inputsphasecommentary.mdx
new file mode 100644
index 0000000..1c08b11
--- /dev/null
+++ b/docs/components/inputsphasecommentary.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputsPhaseCommentary"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputsPhaseCommentary
+value: InputsPhaseCommentary = "commentary"
+```
+
+
+## Values
+
+- `"commentary"`
diff --git a/docs/components/inputsphasefinalanswer.mdx b/docs/components/inputsphasefinalanswer.mdx
new file mode 100644
index 0000000..6dc3c8e
--- /dev/null
+++ b/docs/components/inputsphasefinalanswer.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputsPhaseFinalAnswer"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputsPhaseFinalAnswer
+value: InputsPhaseFinalAnswer = "final_answer"
+```
+
+
+## Values
+
+- `"final_answer"`
diff --git a/docs/components/inputsphaseunion.mdx b/docs/components/inputsphaseunion.mdx
new file mode 100644
index 0000000..cad0670
--- /dev/null
+++ b/docs/components/inputsphaseunion.mdx
@@ -0,0 +1,27 @@
+---
+title: "InputsPhaseUnion"
+---
+
+The phase of an assistant message. Use `commentary` for an intermediate assistant message and `final_answer` for the final assistant message. For follow-up requests with models like `gpt-5.3-codex` and later, preserve and resend phase on all assistant messages. Omitting it can degrade performance. Not used for user messages.
+
+
+## Supported Types
+
+### `components.InputsPhaseCommentary`
+
+```python
+value: components.InputsPhaseCommentary = /* values here */
+```
+
+### `components.InputsPhaseFinalAnswer`
+
+```python
+value: components.InputsPhaseFinalAnswer = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/inputsreasoning.mdx b/docs/components/inputsreasoning.mdx
new file mode 100644
index 0000000..60e9a1a
--- /dev/null
+++ b/docs/components/inputsreasoning.mdx
@@ -0,0 +1,19 @@
+---
+title: "InputsReasoning"
+---
+
+An output item containing reasoning
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `content` | List[[components.ReasoningTextContent](../components/reasoningtextcontent.mdx)] | :heavy_minus_sign: | N/A | |
+| `encrypted_content` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `status` | [Optional[components.InputsStatusUnion2]](../components/inputsstatusunion2.mdx) | :heavy_minus_sign: | N/A | |
+| `summary` | List[[components.ReasoningSummaryText](../components/reasoningsummarytext.mdx)] | :heavy_check_mark: | N/A | |
+| `type` | [components.InputsTypeReasoning](../components/inputstypereasoning.mdx) | :heavy_check_mark: | N/A | |
+| `format_` | [OptionalNullable[components.ReasoningFormat]](../components/reasoningformat.mdx) | :heavy_minus_sign: | N/A | unknown |
+| `signature` | *OptionalNullable[str]* | :heavy_minus_sign: | A signature for the reasoning content, used for verification | EvcBCkgIChABGAIqQKkSDbRuVEQUk9qN1odC098l9SEj... |
\ No newline at end of file
diff --git a/docs/components/inputsrole.mdx b/docs/components/inputsrole.mdx
new file mode 100644
index 0000000..e6e13f3
--- /dev/null
+++ b/docs/components/inputsrole.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputsRole"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputsRole
+value: InputsRole = "assistant"
+```
+
+
+## Values
+
+- `"assistant"`
diff --git a/docs/components/inputsstatuscompleted1.mdx b/docs/components/inputsstatuscompleted1.mdx
new file mode 100644
index 0000000..b19646a
--- /dev/null
+++ b/docs/components/inputsstatuscompleted1.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputsStatusCompleted1"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputsStatusCompleted1
+value: InputsStatusCompleted1 = "completed"
+```
+
+
+## Values
+
+- `"completed"`
diff --git a/docs/components/inputsstatuscompleted2.mdx b/docs/components/inputsstatuscompleted2.mdx
new file mode 100644
index 0000000..6830af4
--- /dev/null
+++ b/docs/components/inputsstatuscompleted2.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputsStatusCompleted2"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputsStatusCompleted2
+value: InputsStatusCompleted2 = "completed"
+```
+
+
+## Values
+
+- `"completed"`
diff --git a/docs/components/inputsstatusincomplete1.mdx b/docs/components/inputsstatusincomplete1.mdx
new file mode 100644
index 0000000..a022485
--- /dev/null
+++ b/docs/components/inputsstatusincomplete1.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputsStatusIncomplete1"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputsStatusIncomplete1
+value: InputsStatusIncomplete1 = "incomplete"
+```
+
+
+## Values
+
+- `"incomplete"`
diff --git a/docs/components/inputsstatusincomplete2.mdx b/docs/components/inputsstatusincomplete2.mdx
new file mode 100644
index 0000000..c84f517
--- /dev/null
+++ b/docs/components/inputsstatusincomplete2.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputsStatusIncomplete2"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputsStatusIncomplete2
+value: InputsStatusIncomplete2 = "incomplete"
+```
+
+
+## Values
+
+- `"incomplete"`
diff --git a/docs/components/inputsstatusinprogress1.mdx b/docs/components/inputsstatusinprogress1.mdx
new file mode 100644
index 0000000..4f9a03c
--- /dev/null
+++ b/docs/components/inputsstatusinprogress1.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputsStatusInProgress1"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputsStatusInProgress1
+value: InputsStatusInProgress1 = "in_progress"
+```
+
+
+## Values
+
+- `"in_progress"`
diff --git a/docs/components/inputsstatusinprogress2.mdx b/docs/components/inputsstatusinprogress2.mdx
new file mode 100644
index 0000000..ded7acc
--- /dev/null
+++ b/docs/components/inputsstatusinprogress2.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputsStatusInProgress2"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputsStatusInProgress2
+value: InputsStatusInProgress2 = "in_progress"
+```
+
+
+## Values
+
+- `"in_progress"`
diff --git a/docs/components/inputsstatusunion1.mdx b/docs/components/inputsstatusunion1.mdx
new file mode 100644
index 0000000..7b59ecd
--- /dev/null
+++ b/docs/components/inputsstatusunion1.mdx
@@ -0,0 +1,24 @@
+---
+title: "InputsStatusUnion1"
+---
+
+## Supported Types
+
+### `components.InputsStatusCompleted1`
+
+```python
+value: components.InputsStatusCompleted1 = /* values here */
+```
+
+### `components.InputsStatusIncomplete1`
+
+```python
+value: components.InputsStatusIncomplete1 = /* values here */
+```
+
+### `components.InputsStatusInProgress1`
+
+```python
+value: components.InputsStatusInProgress1 = /* values here */
+```
+
diff --git a/docs/components/inputsstatusunion2.mdx b/docs/components/inputsstatusunion2.mdx
new file mode 100644
index 0000000..c82be8e
--- /dev/null
+++ b/docs/components/inputsstatusunion2.mdx
@@ -0,0 +1,24 @@
+---
+title: "InputsStatusUnion2"
+---
+
+## Supported Types
+
+### `components.InputsStatusCompleted2`
+
+```python
+value: components.InputsStatusCompleted2 = /* values here */
+```
+
+### `components.InputsStatusIncomplete2`
+
+```python
+value: components.InputsStatusIncomplete2 = /* values here */
+```
+
+### `components.InputsStatusInProgress2`
+
+```python
+value: components.InputsStatusInProgress2 = /* values here */
+```
+
diff --git a/docs/components/inputstypemessage.mdx b/docs/components/inputstypemessage.mdx
new file mode 100644
index 0000000..1a8200c
--- /dev/null
+++ b/docs/components/inputstypemessage.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputsTypeMessage"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputsTypeMessage
+value: InputsTypeMessage = "message"
+```
+
+
+## Values
+
+- `"message"`
diff --git a/docs/components/inputstypereasoning.mdx b/docs/components/inputstypereasoning.mdx
new file mode 100644
index 0000000..a585778
--- /dev/null
+++ b/docs/components/inputstypereasoning.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputsTypeReasoning"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputsTypeReasoning
+value: InputsTypeReasoning = "reasoning"
+```
+
+
+## Values
+
+- `"reasoning"`
diff --git a/docs/components/inputsunion.mdx b/docs/components/inputsunion.mdx
new file mode 100644
index 0000000..33aee92
--- /dev/null
+++ b/docs/components/inputsunion.mdx
@@ -0,0 +1,21 @@
+---
+title: "InputsUnion"
+---
+
+Input for a response request - can be a string or array of items
+
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.InputsUnion1]`
+
+```python
+value: List[components.InputsUnion1] = /* values here */
+```
+
diff --git a/docs/components/inputsunion1.mdx b/docs/components/inputsunion1.mdx
new file mode 100644
index 0000000..9d37626
--- /dev/null
+++ b/docs/components/inputsunion1.mdx
@@ -0,0 +1,282 @@
+---
+title: "InputsUnion1"
+---
+
+## Supported Types
+
+### `components.ReasoningItem`
+
+```python
+value: components.ReasoningItem = /* values here */
+```
+
+### `components.EasyInputMessage`
+
+```python
+value: components.EasyInputMessage = /* values here */
+```
+
+### `components.InputMessageItem`
+
+```python
+value: components.InputMessageItem = /* values here */
+```
+
+### `components.FunctionCallItem`
+
+```python
+value: components.FunctionCallItem = /* values here */
+```
+
+### `components.FunctionCallOutputItem`
+
+```python
+value: components.FunctionCallOutputItem = /* values here */
+```
+
+### `components.ApplyPatchCallItem`
+
+```python
+value: components.ApplyPatchCallItem = /* values here */
+```
+
+### `components.ApplyPatchCallOutputItem`
+
+```python
+value: components.ApplyPatchCallOutputItem = /* values here */
+```
+
+### `components.InputsMessage`
+
+```python
+value: components.InputsMessage = /* values here */
+```
+
+### `components.InputsReasoning`
+
+```python
+value: components.InputsReasoning = /* values here */
+```
+
+### `components.OutputFunctionCallItem`
+
+```python
+value: components.OutputFunctionCallItem = /* values here */
+```
+
+### `components.OutputCustomToolCallItem`
+
+```python
+value: components.OutputCustomToolCallItem = /* values here */
+```
+
+### `components.OutputWebSearchCallItem`
+
+```python
+value: components.OutputWebSearchCallItem = /* values here */
+```
+
+### `components.OutputFileSearchCallItem`
+
+```python
+value: components.OutputFileSearchCallItem = /* values here */
+```
+
+### `components.OutputImageGenerationCallItem`
+
+```python
+value: components.OutputImageGenerationCallItem = /* values here */
+```
+
+### `components.OutputCodeInterpreterCallItem`
+
+```python
+value: components.OutputCodeInterpreterCallItem = /* values here */
+```
+
+### `components.OutputComputerCallItem`
+
+```python
+value: components.OutputComputerCallItem = /* values here */
+```
+
+### `components.OutputDatetimeItem`
+
+```python
+value: components.OutputDatetimeItem = /* values here */
+```
+
+### `components.OutputWebSearchServerToolItem`
+
+```python
+value: components.OutputWebSearchServerToolItem = /* values here */
+```
+
+### `components.OutputCodeInterpreterServerToolItem`
+
+```python
+value: components.OutputCodeInterpreterServerToolItem = /* values here */
+```
+
+### `components.OutputFileSearchServerToolItem`
+
+```python
+value: components.OutputFileSearchServerToolItem = /* values here */
+```
+
+### `components.OutputImageGenerationServerToolItem`
+
+```python
+value: components.OutputImageGenerationServerToolItem = /* values here */
+```
+
+### `components.OutputBrowserUseServerToolItem`
+
+```python
+value: components.OutputBrowserUseServerToolItem = /* values here */
+```
+
+### `components.OutputBashServerToolItem`
+
+```python
+value: components.OutputBashServerToolItem = /* values here */
+```
+
+### `components.OutputTextEditorServerToolItem`
+
+```python
+value: components.OutputTextEditorServerToolItem = /* values here */
+```
+
+### `components.OutputApplyPatchServerToolItem`
+
+```python
+value: components.OutputApplyPatchServerToolItem = /* values here */
+```
+
+### `components.OutputWebFetchServerToolItem`
+
+```python
+value: components.OutputWebFetchServerToolItem = /* values here */
+```
+
+### `components.OutputToolSearchServerToolItem`
+
+```python
+value: components.OutputToolSearchServerToolItem = /* values here */
+```
+
+### `components.OutputMemoryServerToolItem`
+
+```python
+value: components.OutputMemoryServerToolItem = /* values here */
+```
+
+### `components.OutputMcpServerToolItem`
+
+```python
+value: components.OutputMcpServerToolItem = /* values here */
+```
+
+### `components.OutputSearchModelsServerToolItem`
+
+```python
+value: components.OutputSearchModelsServerToolItem = /* values here */
+```
+
+### `components.OutputFusionServerToolItem`
+
+```python
+value: components.OutputFusionServerToolItem = /* values here */
+```
+
+### `components.OutputAdvisorServerToolItem`
+
+```python
+value: components.OutputAdvisorServerToolItem = /* values here */
+```
+
+### `components.OutputSubagentServerToolItem`
+
+```python
+value: components.OutputSubagentServerToolItem = /* values here */
+```
+
+### `components.OutputFilesServerToolItem`
+
+```python
+value: components.OutputFilesServerToolItem = /* values here */
+```
+
+### `components.LocalShellCallItem`
+
+```python
+value: components.LocalShellCallItem = /* values here */
+```
+
+### `components.LocalShellCallOutputItem`
+
+```python
+value: components.LocalShellCallOutputItem = /* values here */
+```
+
+### `components.ShellCallItem`
+
+```python
+value: components.ShellCallItem = /* values here */
+```
+
+### `components.ShellCallOutputItem`
+
+```python
+value: components.ShellCallOutputItem = /* values here */
+```
+
+### `components.McpListToolsItem`
+
+```python
+value: components.McpListToolsItem = /* values here */
+```
+
+### `components.McpApprovalRequestItem`
+
+```python
+value: components.McpApprovalRequestItem = /* values here */
+```
+
+### `components.McpApprovalResponseItem`
+
+```python
+value: components.McpApprovalResponseItem = /* values here */
+```
+
+### `components.McpCallItem`
+
+```python
+value: components.McpCallItem = /* values here */
+```
+
+### `components.CustomToolCallItem`
+
+```python
+value: components.CustomToolCallItem = /* values here */
+```
+
+### `components.CustomToolCallOutputItem`
+
+```python
+value: components.CustomToolCallOutputItem = /* values here */
+```
+
+### `components.CompactionItem`
+
+```python
+value: components.CompactionItem = /* values here */
+```
+
+### `components.ItemReferenceItem`
+
+```python
+value: components.ItemReferenceItem = /* values here */
+```
+
diff --git a/docs/components/inputtext.mdx b/docs/components/inputtext.mdx
new file mode 100644
index 0000000..5ebcb83
--- /dev/null
+++ b/docs/components/inputtext.mdx
@@ -0,0 +1,13 @@
+---
+title: "InputText"
+---
+
+Text input content item
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
+| `text` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.InputTextType](../components/inputtexttype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/inputtexttype.mdx b/docs/components/inputtexttype.mdx
new file mode 100644
index 0000000..18baf9c
--- /dev/null
+++ b/docs/components/inputtexttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputTextType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputTextType
+value: InputTextType = "input_text"
+```
+
+
+## Values
+
+- `"input_text"`
diff --git a/docs/components/inputtokensdetails.md b/docs/components/inputtokensdetails.mdx
similarity index 88%
rename from docs/components/inputtokensdetails.md
rename to docs/components/inputtokensdetails.mdx
index 7b6d823..c58b1d0 100644
--- a/docs/components/inputtokensdetails.md
+++ b/docs/components/inputtokensdetails.mdx
@@ -1,5 +1,6 @@
-# InputTokensDetails
-
+---
+title: "InputTokensDetails"
+---
## Fields
diff --git a/docs/components/inputunion.mdx b/docs/components/inputunion.mdx
new file mode 100644
index 0000000..53081e4
--- /dev/null
+++ b/docs/components/inputunion.mdx
@@ -0,0 +1,21 @@
+---
+title: "InputUnion"
+---
+
+The input to the generation — either a prompt string or an array of messages
+
+
+## Supported Types
+
+### `components.Input1`
+
+```python
+value: components.Input1 = /* values here */
+```
+
+### `components.Input2`
+
+```python
+value: components.Input2 = /* values here */
+```
+
diff --git a/docs/components/inputvideo.mdx b/docs/components/inputvideo.mdx
new file mode 100644
index 0000000..a303045
--- /dev/null
+++ b/docs/components/inputvideo.mdx
@@ -0,0 +1,13 @@
+---
+title: "InputVideo"
+---
+
+Video input content item
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- |
+| `type` | [components.InputVideoType](../components/inputvideotype.mdx) | :heavy_check_mark: | N/A |
+| `video_url` | *str* | :heavy_check_mark: | A base64 data URL or remote URL that resolves to a video file |
\ No newline at end of file
diff --git a/docs/components/inputvideotype.mdx b/docs/components/inputvideotype.mdx
new file mode 100644
index 0000000..31cfd35
--- /dev/null
+++ b/docs/components/inputvideotype.mdx
@@ -0,0 +1,15 @@
+---
+title: "InputVideoType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import InputVideoType
+value: InputVideoType = "input_video"
+```
+
+
+## Values
+
+- `"input_video"`
diff --git a/docs/components/instructtype.md b/docs/components/instructtype.md
deleted file mode 100644
index 44c350d..0000000
--- a/docs/components/instructtype.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# InstructType
-
-Instruction format type
-
-
-## Values
-
-| Name | Value |
-| --------------- | --------------- |
-| `NONE` | none |
-| `AIROBOROS` | airoboros |
-| `ALPACA` | alpaca |
-| `ALPACA_MODIF` | alpaca-modif |
-| `CHATML` | chatml |
-| `CLAUDE` | claude |
-| `CODE_LLAMA` | code-llama |
-| `GEMMA` | gemma |
-| `LLAMA2` | llama2 |
-| `LLAMA3` | llama3 |
-| `MISTRAL` | mistral |
-| `NEMOTRON` | nemotron |
-| `NEURAL` | neural |
-| `OPENCHAT` | openchat |
-| `PHI3` | phi3 |
-| `RWKV` | rwkv |
-| `VICUNA` | vicuna |
-| `ZEPHYR` | zephyr |
-| `DEEPSEEK_R1` | deepseek-r1 |
-| `DEEPSEEK_V3_1` | deepseek-v3.1 |
-| `QWQ` | qwq |
-| `QWEN3` | qwen3 |
\ No newline at end of file
diff --git a/docs/components/instructtype.mdx b/docs/components/instructtype.mdx
new file mode 100644
index 0000000..e3e71d1
--- /dev/null
+++ b/docs/components/instructtype.mdx
@@ -0,0 +1,42 @@
+---
+title: "InstructType"
+---
+
+Instruction format type
+
+## Example Usage
+
+```python
+from openrouter.components import InstructType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: InstructType = "none"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"none"`
+- `"airoboros"`
+- `"alpaca"`
+- `"alpaca-modif"`
+- `"chatml"`
+- `"claude"`
+- `"code-llama"`
+- `"gemma"`
+- `"llama2"`
+- `"llama3"`
+- `"mistral"`
+- `"nemotron"`
+- `"neural"`
+- `"openchat"`
+- `"phi3"`
+- `"rwkv"`
+- `"vicuna"`
+- `"zephyr"`
+- `"deepseek-r1"`
+- `"deepseek-v3.1"`
+- `"qwq"`
+- `"qwen3"`
diff --git a/docs/components/internalserverresponseerrordata.md b/docs/components/internalserverresponseerrordata.mdx
similarity index 92%
rename from docs/components/internalserverresponseerrordata.md
rename to docs/components/internalserverresponseerrordata.mdx
index b320ded..4db529f 100644
--- a/docs/components/internalserverresponseerrordata.md
+++ b/docs/components/internalserverresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# InternalServerResponseErrorData
+---
+title: "InternalServerResponseErrorData"
+---
Error data for InternalServerResponse
diff --git a/docs/components/itemreferenceitem.mdx b/docs/components/itemreferenceitem.mdx
new file mode 100644
index 0000000..5d91c20
--- /dev/null
+++ b/docs/components/itemreferenceitem.mdx
@@ -0,0 +1,13 @@
+---
+title: "ItemReferenceItem"
+---
+
+A reference to a previous response item by ID
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.ItemReferenceItemType](../components/itemreferenceitemtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/itemreferenceitemtype.mdx b/docs/components/itemreferenceitemtype.mdx
new file mode 100644
index 0000000..74c61e5
--- /dev/null
+++ b/docs/components/itemreferenceitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ItemReferenceItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ItemReferenceItemType
+value: ItemReferenceItemType = "item_reference"
+```
+
+
+## Values
+
+- `"item_reference"`
diff --git a/docs/components/keep.mdx b/docs/components/keep.mdx
new file mode 100644
index 0000000..4a4da75
--- /dev/null
+++ b/docs/components/keep.mdx
@@ -0,0 +1,24 @@
+---
+title: "Keep"
+---
+
+## Supported Types
+
+### `components.AnthropicThinkingTurns`
+
+```python
+value: components.AnthropicThinkingTurns = /* values here */
+```
+
+### `components.KeepAll`
+
+```python
+value: components.KeepAll = /* values here */
+```
+
+### `components.KeepEnum`
+
+```python
+value: components.KeepEnum = /* values here */
+```
+
diff --git a/docs/components/keepall.mdx b/docs/components/keepall.mdx
new file mode 100644
index 0000000..8f65526
--- /dev/null
+++ b/docs/components/keepall.mdx
@@ -0,0 +1,9 @@
+---
+title: "KeepAll"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `type` | [components.KeepType](../components/keeptype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/keepenum.mdx b/docs/components/keepenum.mdx
new file mode 100644
index 0000000..7790630
--- /dev/null
+++ b/docs/components/keepenum.mdx
@@ -0,0 +1,15 @@
+---
+title: "KeepEnum"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import KeepEnum
+value: KeepEnum = "all"
+```
+
+
+## Values
+
+- `"all"`
diff --git a/docs/components/keeptype.mdx b/docs/components/keeptype.mdx
new file mode 100644
index 0000000..99cde72
--- /dev/null
+++ b/docs/components/keeptype.mdx
@@ -0,0 +1,15 @@
+---
+title: "KeepType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import KeepType
+value: KeepType = "all"
+```
+
+
+## Values
+
+- `"all"`
diff --git a/docs/components/keyassignment.mdx b/docs/components/keyassignment.mdx
new file mode 100644
index 0000000..3c18ed0
--- /dev/null
+++ b/docs/components/keyassignment.mdx
@@ -0,0 +1,15 @@
+---
+title: "KeyAssignment"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `assigned_by` | *Nullable[str]* | :heavy_check_mark: | User ID of who made the assignment | user_abc123 |
+| `created_at` | *str* | :heavy_check_mark: | ISO 8601 timestamp of when the assignment was created | 2025-08-24T10:30:00Z |
+| `guardrail_id` | *str* | :heavy_check_mark: | ID of the guardrail | 550e8400-e29b-41d4-a716-446655440001 |
+| `id` | *str* | :heavy_check_mark: | Unique identifier for the assignment | 550e8400-e29b-41d4-a716-446655440000 |
+| `key_hash` | *str* | :heavy_check_mark: | Hash of the assigned API key | c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93 |
+| `key_label` | *str* | :heavy_check_mark: | Label of the API key | prod-key |
+| `key_name` | *str* | :heavy_check_mark: | Name of the API key | Production Key |
\ No newline at end of file
diff --git a/docs/components/legacychatcontentvideo.mdx b/docs/components/legacychatcontentvideo.mdx
new file mode 100644
index 0000000..f1d4b3d
--- /dev/null
+++ b/docs/components/legacychatcontentvideo.mdx
@@ -0,0 +1,15 @@
+---
+title: "~~LegacyChatContentVideo~~"
+---
+
+Video input content part (legacy format - deprecated)
+
+> :warning: **DEPRECATED**: This will be removed in a future release, please migrate away from it as soon as possible.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `type` | [components.LegacyChatContentVideoType](../components/legacychatcontentvideotype.mdx) | :heavy_check_mark: | N/A | |
+| `video_url` | [components.ChatContentVideoInput](../components/chatcontentvideoinput.mdx) | :heavy_check_mark: | Video input object | \{
"url": "https://example.com/video.mp4"
} |
\ No newline at end of file
diff --git a/docs/components/legacychatcontentvideotype.mdx b/docs/components/legacychatcontentvideotype.mdx
new file mode 100644
index 0000000..63991d9
--- /dev/null
+++ b/docs/components/legacychatcontentvideotype.mdx
@@ -0,0 +1,15 @@
+---
+title: "LegacyChatContentVideoType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import LegacyChatContentVideoType
+value: LegacyChatContentVideoType = "input_video"
+```
+
+
+## Values
+
+- `"input_video"`
diff --git a/docs/components/legacywebsearchservertool.mdx b/docs/components/legacywebsearchservertool.mdx
new file mode 100644
index 0000000..e966af5
--- /dev/null
+++ b/docs/components/legacywebsearchservertool.mdx
@@ -0,0 +1,17 @@
+---
+title: "LegacyWebSearchServerTool"
+---
+
+Web search tool configuration
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `engine` | [Optional[components.WebSearchEngineEnum]](../components/websearchengineenum.mdx) | :heavy_minus_sign: | Which search engine to use. "auto" (default) uses native if the provider supports it, otherwise Exa. "native" forces the provider's built-in search. "exa" forces the Exa search API. "firecrawl" uses Firecrawl (requires BYOK). "parallel" uses the Parallel search API. "perplexity" uses the Perplexity Search API (raw ranked results). | auto |
+| `filters` | [OptionalNullable[components.WebSearchDomainFilter]](../components/websearchdomainfilter.mdx) | :heavy_minus_sign: | N/A | \{
"allowed_domains": [
"example.com"
],
"excluded_domains": [
"spam.com"
]
} |
+| `max_results` | *Optional[int]* | :heavy_minus_sign: | Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped. | 5 |
+| `search_context_size` | [Optional[components.SearchContextSizeEnum]](../components/searchcontextsizeenum.mdx) | :heavy_minus_sign: | Size of the search context for web search tools | medium |
+| `type` | [components.LegacyWebSearchServerToolType](../components/legacywebsearchservertooltype.mdx) | :heavy_check_mark: | N/A | |
+| `user_location` | [OptionalNullable[components.WebSearchUserLocation]](../components/websearchuserlocation.mdx) | :heavy_minus_sign: | User location information for web search | \{
"city": "San Francisco",
"country": "USA",
"region": "California",
"timezone": "America/Los_Angeles",
"type": "approximate"
} |
\ No newline at end of file
diff --git a/docs/components/legacywebsearchservertooltype.mdx b/docs/components/legacywebsearchservertooltype.mdx
new file mode 100644
index 0000000..3bb4205
--- /dev/null
+++ b/docs/components/legacywebsearchservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "LegacyWebSearchServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import LegacyWebSearchServerToolType
+value: LegacyWebSearchServerToolType = "web_search"
+```
+
+
+## Values
+
+- `"web_search"`
diff --git a/docs/components/listbyokkeysresponse.mdx b/docs/components/listbyokkeysresponse.mdx
new file mode 100644
index 0000000..4e7fce4
--- /dev/null
+++ b/docs/components/listbyokkeysresponse.mdx
@@ -0,0 +1,10 @@
+---
+title: "ListBYOKKeysResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
+| `data` | List[[components.BYOKKey](../components/byokkey.mdx)] | :heavy_check_mark: | List of BYOK credentials. | |
+| `total_count` | *int* | :heavy_check_mark: | Total number of BYOK credentials matching the filters. | 1 |
\ No newline at end of file
diff --git a/docs/components/listendpointsresponse.md b/docs/components/listendpointsresponse.md
deleted file mode 100644
index 5a0af7d..0000000
--- a/docs/components/listendpointsresponse.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# ListEndpointsResponse
-
-List of available endpoints for a model
-
-
-## Fields
-
-| Field | Type | Required | Description | Example |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `architecture` | [components.Architecture](../components/architecture.md) | :heavy_check_mark: | N/A | {
"input_modalities": [
"text"
],
"instruct_type": "chatml",
"modality": "text-\u003etext",
"output_modalities": [
"text"
],
"tokenizer": "GPT"
} |
-| `created` | *int* | :heavy_check_mark: | Unix timestamp of when the model was created | 1692901234 |
-| `description` | *str* | :heavy_check_mark: | Description of the model | GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. |
-| `endpoints` | List[[components.PublicEndpoint](../components/publicendpoint.md)] | :heavy_check_mark: | List of available endpoints for this model | |
-| `id` | *str* | :heavy_check_mark: | Unique identifier for the model | openai/gpt-4 |
-| `name` | *str* | :heavy_check_mark: | Display name of the model | GPT-4 |
\ No newline at end of file
diff --git a/docs/components/listendpointsresponse.mdx b/docs/components/listendpointsresponse.mdx
new file mode 100644
index 0000000..2687145
--- /dev/null
+++ b/docs/components/listendpointsresponse.mdx
@@ -0,0 +1,17 @@
+---
+title: "ListEndpointsResponse"
+---
+
+List of available endpoints for a model
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `architecture` | [components.Architecture](../components/architecture.mdx) | :heavy_check_mark: | N/A | \{
"instruct_type": "chatml",
"modality": "text",
"tokenizer": "GPT"
} |
+| `created` | *int* | :heavy_check_mark: | Unix timestamp of when the model was created | 1692901234 |
+| `description` | *str* | :heavy_check_mark: | Description of the model | GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. |
+| `endpoints` | List[[components.PublicEndpoint](../components/publicendpoint.mdx)] | :heavy_check_mark: | List of available endpoints for this model | |
+| `id` | *str* | :heavy_check_mark: | Unique identifier for the model | openai/gpt-4 |
+| `name` | *str* | :heavy_check_mark: | Display name of the model | GPT-4 |
\ No newline at end of file
diff --git a/docs/components/listguardrailsresponse.mdx b/docs/components/listguardrailsresponse.mdx
new file mode 100644
index 0000000..b62bb9a
--- /dev/null
+++ b/docs/components/listguardrailsresponse.mdx
@@ -0,0 +1,10 @@
+---
+title: "ListGuardrailsResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `data` | List[[components.Guardrail](../components/guardrail.mdx)] | :heavy_check_mark: | List of guardrails | |
+| `total_count` | *int* | :heavy_check_mark: | Total number of guardrails | 25 |
\ No newline at end of file
diff --git a/docs/components/listkeyassignmentsresponse.mdx b/docs/components/listkeyassignmentsresponse.mdx
new file mode 100644
index 0000000..c6806c4
--- /dev/null
+++ b/docs/components/listkeyassignmentsresponse.mdx
@@ -0,0 +1,10 @@
+---
+title: "ListKeyAssignmentsResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
+| `data` | List[[components.KeyAssignment](../components/keyassignment.mdx)] | :heavy_check_mark: | List of key assignments | |
+| `total_count` | *int* | :heavy_check_mark: | Total number of key assignments for this guardrail | 25 |
\ No newline at end of file
diff --git a/docs/components/listmemberassignmentsresponse.mdx b/docs/components/listmemberassignmentsresponse.mdx
new file mode 100644
index 0000000..9e72b13
--- /dev/null
+++ b/docs/components/listmemberassignmentsresponse.mdx
@@ -0,0 +1,10 @@
+---
+title: "ListMemberAssignmentsResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `data` | List[[components.MemberAssignment](../components/memberassignment.mdx)] | :heavy_check_mark: | List of member assignments | |
+| `total_count` | *int* | :heavy_check_mark: | Total number of member assignments | 10 |
\ No newline at end of file
diff --git a/docs/components/listobservabilitydestinationsresponse.mdx b/docs/components/listobservabilitydestinationsresponse.mdx
new file mode 100644
index 0000000..912c6ca
--- /dev/null
+++ b/docs/components/listobservabilitydestinationsresponse.mdx
@@ -0,0 +1,10 @@
+---
+title: "ListObservabilityDestinationsResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `data` | List[[components.ObservabilityDestination](../components/observabilitydestination.mdx)] | :heavy_check_mark: | List of observability destinations. | |
+| `total_count` | *int* | :heavy_check_mark: | Total number of destinations matching the filters. | 1 |
\ No newline at end of file
diff --git a/docs/components/listpresetsresponse.mdx b/docs/components/listpresetsresponse.mdx
new file mode 100644
index 0000000..da04cab
--- /dev/null
+++ b/docs/components/listpresetsresponse.mdx
@@ -0,0 +1,13 @@
+---
+title: "ListPresetsResponse"
+---
+
+A paginated list of presets.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- |
+| `data` | List[[components.Preset](../components/preset.mdx)] | :heavy_check_mark: | N/A |
+| `total_count` | *int* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/listpresetversionsresponse.mdx b/docs/components/listpresetversionsresponse.mdx
new file mode 100644
index 0000000..768df79
--- /dev/null
+++ b/docs/components/listpresetversionsresponse.mdx
@@ -0,0 +1,13 @@
+---
+title: "ListPresetVersionsResponse"
+---
+
+A paginated list of preset versions.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `data` | List[[Nullable[components.PresetDesignatedVersion]](../components/presetdesignatedversion.mdx)] | :heavy_check_mark: | N/A |
+| `total_count` | *int* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/listworkspacebudgetsresponse.mdx b/docs/components/listworkspacebudgetsresponse.mdx
new file mode 100644
index 0000000..27bb746
--- /dev/null
+++ b/docs/components/listworkspacebudgetsresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ListWorkspaceBudgetsResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `data` | List[[components.WorkspaceBudget](../components/workspacebudget.mdx)] | :heavy_check_mark: | List of budgets configured for the workspace |
\ No newline at end of file
diff --git a/docs/components/listworkspacemembersresponse.mdx b/docs/components/listworkspacemembersresponse.mdx
new file mode 100644
index 0000000..90edcaf
--- /dev/null
+++ b/docs/components/listworkspacemembersresponse.mdx
@@ -0,0 +1,10 @@
+---
+title: "ListWorkspaceMembersResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `data` | List[[components.WorkspaceMember](../components/workspacemember.mdx)] | :heavy_check_mark: | List of workspace members | |
+| `total_count` | *int* | :heavy_check_mark: | Total number of members in the workspace | 5 |
\ No newline at end of file
diff --git a/docs/components/listworkspacesresponse.mdx b/docs/components/listworkspacesresponse.mdx
new file mode 100644
index 0000000..b78013a
--- /dev/null
+++ b/docs/components/listworkspacesresponse.mdx
@@ -0,0 +1,10 @@
+---
+title: "ListWorkspacesResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `data` | List[[components.Workspace](../components/workspace.mdx)] | :heavy_check_mark: | List of workspaces | |
+| `total_count` | *int* | :heavy_check_mark: | Total number of workspaces | 5 |
\ No newline at end of file
diff --git a/docs/components/localshellcallitem.mdx b/docs/components/localshellcallitem.mdx
new file mode 100644
index 0000000..c3ce8fe
--- /dev/null
+++ b/docs/components/localshellcallitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "LocalShellCallItem"
+---
+
+A local shell command execution call
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
+| `action` | [components.LocalShellCallItemAction](../components/localshellcallitemaction.mdx) | :heavy_check_mark: | N/A | |
+| `call_id` | *str* | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.TypeLocalShellCall](../components/typelocalshellcall.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/localshellcallitemaction.mdx b/docs/components/localshellcallitemaction.mdx
new file mode 100644
index 0000000..584d539
--- /dev/null
+++ b/docs/components/localshellcallitemaction.mdx
@@ -0,0 +1,14 @@
+---
+title: "LocalShellCallItemAction"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `command` | List[*str*] | :heavy_check_mark: | N/A |
+| `env` | Dict[str, *str*] | :heavy_check_mark: | N/A |
+| `timeout_ms` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A |
+| `type` | [components.TypeExec](../components/typeexec.mdx) | :heavy_check_mark: | N/A |
+| `user` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `working_directory` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/localshellcalloutputitem.mdx b/docs/components/localshellcalloutputitem.mdx
new file mode 100644
index 0000000..99fa6e2
--- /dev/null
+++ b/docs/components/localshellcalloutputitem.mdx
@@ -0,0 +1,15 @@
+---
+title: "LocalShellCallOutputItem"
+---
+
+Output from a local shell command execution
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `output` | *str* | :heavy_check_mark: | N/A | |
+| `status` | [OptionalNullable[components.LocalShellCallOutputItemStatus]](../components/localshellcalloutputitemstatus.mdx) | :heavy_minus_sign: | N/A | completed |
+| `type` | [components.LocalShellCallOutputItemType](../components/localshellcalloutputitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/localshellcalloutputitemstatus.mdx b/docs/components/localshellcalloutputitemstatus.mdx
new file mode 100644
index 0000000..35fda26
--- /dev/null
+++ b/docs/components/localshellcalloutputitemstatus.mdx
@@ -0,0 +1,21 @@
+---
+title: "LocalShellCallOutputItemStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import LocalShellCallOutputItemStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: LocalShellCallOutputItemStatus = "in_progress"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"in_progress"`
+- `"completed"`
+- `"incomplete"`
diff --git a/docs/components/localshellcalloutputitemtype.mdx b/docs/components/localshellcalloutputitemtype.mdx
new file mode 100644
index 0000000..e67622c
--- /dev/null
+++ b/docs/components/localshellcalloutputitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "LocalShellCallOutputItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import LocalShellCallOutputItemType
+value: LocalShellCallOutputItemType = "local_shell_call_output"
+```
+
+
+## Values
+
+- `"local_shell_call_output"`
diff --git a/docs/components/logic.mdx b/docs/components/logic.mdx
new file mode 100644
index 0000000..e9b7b00
--- /dev/null
+++ b/docs/components/logic.mdx
@@ -0,0 +1,20 @@
+---
+title: "Logic"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Logic
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Logic = "and"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"and"`
+- `"or"`
diff --git a/docs/components/logprob.mdx b/docs/components/logprob.mdx
new file mode 100644
index 0000000..6345da5
--- /dev/null
+++ b/docs/components/logprob.mdx
@@ -0,0 +1,12 @@
+---
+title: "Logprob"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `bytes_` | List[*int*] | :heavy_check_mark: | N/A |
+| `logprob` | *float* | :heavy_check_mark: | N/A |
+| `token` | *str* | :heavy_check_mark: | N/A |
+| `top_logprobs` | List[[components.ResponseOutputTextTopLogprob](../components/responseoutputtexttoplogprob.mdx)] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/maxprice.mdx b/docs/components/maxprice.mdx
new file mode 100644
index 0000000..e1892e2
--- /dev/null
+++ b/docs/components/maxprice.mdx
@@ -0,0 +1,16 @@
+---
+title: "MaxPrice"
+---
+
+The object specifying the maximum price you want to pay for this request. USD price per million tokens, for prompt and completion.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- |
+| `audio` | *Optional[str]* | :heavy_minus_sign: | Maximum price in USD per audio unit |
+| `completion` | *Optional[str]* | :heavy_minus_sign: | Maximum price in USD per million completion tokens |
+| `image` | *Optional[str]* | :heavy_minus_sign: | Maximum price in USD per image |
+| `prompt` | *Optional[str]* | :heavy_minus_sign: | Maximum price in USD per million prompt tokens |
+| `request` | *Optional[str]* | :heavy_minus_sign: | Maximum price in USD per request |
\ No newline at end of file
diff --git a/docs/components/mcpapprovalrequestitem.mdx b/docs/components/mcpapprovalrequestitem.mdx
new file mode 100644
index 0000000..d02d666
--- /dev/null
+++ b/docs/components/mcpapprovalrequestitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "McpApprovalRequestItem"
+---
+
+Request for approval to execute an MCP tool
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `arguments` | *str* | :heavy_check_mark: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `name` | *str* | :heavy_check_mark: | N/A |
+| `server_label` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.McpApprovalRequestItemType](../components/mcpapprovalrequestitemtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/mcpapprovalrequestitemtype.mdx b/docs/components/mcpapprovalrequestitemtype.mdx
new file mode 100644
index 0000000..dd72c2a
--- /dev/null
+++ b/docs/components/mcpapprovalrequestitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "McpApprovalRequestItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import McpApprovalRequestItemType
+value: McpApprovalRequestItemType = "mcp_approval_request"
+```
+
+
+## Values
+
+- `"mcp_approval_request"`
diff --git a/docs/components/mcpapprovalresponseitem.mdx b/docs/components/mcpapprovalresponseitem.mdx
new file mode 100644
index 0000000..d67c1e4
--- /dev/null
+++ b/docs/components/mcpapprovalresponseitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "McpApprovalResponseItem"
+---
+
+User response to an MCP tool approval request
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `approval_request_id` | *str* | :heavy_check_mark: | N/A |
+| `approve` | *bool* | :heavy_check_mark: | N/A |
+| `id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `reason` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `type` | [components.McpApprovalResponseItemType](../components/mcpapprovalresponseitemtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/mcpapprovalresponseitemtype.mdx b/docs/components/mcpapprovalresponseitemtype.mdx
new file mode 100644
index 0000000..4bbaed2
--- /dev/null
+++ b/docs/components/mcpapprovalresponseitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "McpApprovalResponseItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import McpApprovalResponseItemType
+value: McpApprovalResponseItemType = "mcp_approval_response"
+```
+
+
+## Values
+
+- `"mcp_approval_response"`
diff --git a/docs/components/mcpcallitem.mdx b/docs/components/mcpcallitem.mdx
new file mode 100644
index 0000000..a025e7d
--- /dev/null
+++ b/docs/components/mcpcallitem.mdx
@@ -0,0 +1,18 @@
+---
+title: "McpCallItem"
+---
+
+An MCP tool call with its output or error
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
+| `arguments` | *str* | :heavy_check_mark: | N/A |
+| `error` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `name` | *str* | :heavy_check_mark: | N/A |
+| `output` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `server_label` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.McpCallItemType](../components/mcpcallitemtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/mcpcallitemtype.mdx b/docs/components/mcpcallitemtype.mdx
new file mode 100644
index 0000000..8e60275
--- /dev/null
+++ b/docs/components/mcpcallitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "McpCallItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import McpCallItemType
+value: McpCallItemType = "mcp_call"
+```
+
+
+## Values
+
+- `"mcp_call"`
diff --git a/docs/components/mcplisttoolsitem.mdx b/docs/components/mcplisttoolsitem.mdx
new file mode 100644
index 0000000..decba2c
--- /dev/null
+++ b/docs/components/mcplisttoolsitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "McpListToolsItem"
+---
+
+List of available MCP tools from a server
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `error` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `server_label` | *str* | :heavy_check_mark: | N/A |
+| `tools` | List[[components.McpListToolsItemTool](../components/mcplisttoolsitemtool.mdx)] | :heavy_check_mark: | N/A |
+| `type` | [components.McpListToolsItemType](../components/mcplisttoolsitemtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/mcplisttoolsitemtool.mdx b/docs/components/mcplisttoolsitemtool.mdx
new file mode 100644
index 0000000..d73292f
--- /dev/null
+++ b/docs/components/mcplisttoolsitemtool.mdx
@@ -0,0 +1,12 @@
+---
+title: "McpListToolsItemTool"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------- | -------------------------- | -------------------------- | -------------------------- |
+| `annotations` | *OptionalNullable[Any]* | :heavy_minus_sign: | N/A |
+| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `input_schema` | Dict[str, *Nullable[Any]*] | :heavy_check_mark: | N/A |
+| `name` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/mcplisttoolsitemtype.mdx b/docs/components/mcplisttoolsitemtype.mdx
new file mode 100644
index 0000000..633df50
--- /dev/null
+++ b/docs/components/mcplisttoolsitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "McpListToolsItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import McpListToolsItemType
+value: McpListToolsItemType = "mcp_list_tools"
+```
+
+
+## Values
+
+- `"mcp_list_tools"`
diff --git a/docs/components/mcpservertool.mdx b/docs/components/mcpservertool.mdx
new file mode 100644
index 0000000..70f0519
--- /dev/null
+++ b/docs/components/mcpservertool.mdx
@@ -0,0 +1,20 @@
+---
+title: "McpServerTool"
+---
+
+MCP (Model Context Protocol) tool configuration
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `allowed_tools` | [OptionalNullable[components.AllowedToolsUnion]](../components/allowedtoolsunion.mdx) | :heavy_minus_sign: | N/A |
+| `authorization` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `connector_id` | [Optional[components.ConnectorID]](../components/connectorid.mdx) | :heavy_minus_sign: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | N/A |
+| `require_approval` | [OptionalNullable[components.RequireApprovalUnion]](../components/requireapprovalunion.mdx) | :heavy_minus_sign: | N/A |
+| `server_description` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `server_label` | *str* | :heavy_check_mark: | N/A |
+| `server_url` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `type` | [components.McpServerToolType](../components/mcpservertooltype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/mcpservertooltype.mdx b/docs/components/mcpservertooltype.mdx
new file mode 100644
index 0000000..b86c9a1
--- /dev/null
+++ b/docs/components/mcpservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "McpServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import McpServerToolType
+value: McpServerToolType = "mcp"
+```
+
+
+## Values
+
+- `"mcp"`
diff --git a/docs/components/memberassignment.mdx b/docs/components/memberassignment.mdx
new file mode 100644
index 0000000..589bcb6
--- /dev/null
+++ b/docs/components/memberassignment.mdx
@@ -0,0 +1,14 @@
+---
+title: "MemberAssignment"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- |
+| `assigned_by` | *Nullable[str]* | :heavy_check_mark: | User ID of who made the assignment | user_abc123 |
+| `created_at` | *str* | :heavy_check_mark: | ISO 8601 timestamp of when the assignment was created | 2025-08-24T10:30:00Z |
+| `guardrail_id` | *str* | :heavy_check_mark: | ID of the guardrail | 550e8400-e29b-41d4-a716-446655440001 |
+| `id` | *str* | :heavy_check_mark: | Unique identifier for the assignment | 550e8400-e29b-41d4-a716-446655440000 |
+| `organization_id` | *str* | :heavy_check_mark: | Organization ID | org_xyz789 |
+| `user_id` | *str* | :heavy_check_mark: | Clerk user ID of the assigned member | user_abc123 |
\ No newline at end of file
diff --git a/docs/components/memorylimit.mdx b/docs/components/memorylimit.mdx
new file mode 100644
index 0000000..11421f0
--- /dev/null
+++ b/docs/components/memorylimit.mdx
@@ -0,0 +1,22 @@
+---
+title: "MemoryLimit"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import MemoryLimit
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: MemoryLimit = "1g"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"1g"`
+- `"4g"`
+- `"16g"`
+- `"64g"`
diff --git a/docs/components/messagesadvisortoolresultblock.mdx b/docs/components/messagesadvisortoolresultblock.mdx
new file mode 100644
index 0000000..ae6b8d9
--- /dev/null
+++ b/docs/components/messagesadvisortoolresultblock.mdx
@@ -0,0 +1,14 @@
+---
+title: "MessagesAdvisorToolResultBlock"
+---
+
+Advisor tool result from a prior assistant turn, replayed back to the model on the next turn. Mirrors the block Anthropic returns in assistant content when the `advisor_20260301` tool runs.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `content` | Dict[str, *Nullable[Any]*] | :heavy_check_mark: | N/A |
+| `tool_use_id` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.MessagesAdvisorToolResultBlockType](../components/messagesadvisortoolresultblocktype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/messagesadvisortoolresultblocktype.mdx b/docs/components/messagesadvisortoolresultblocktype.mdx
new file mode 100644
index 0000000..e15e5c9
--- /dev/null
+++ b/docs/components/messagesadvisortoolresultblocktype.mdx
@@ -0,0 +1,15 @@
+---
+title: "MessagesAdvisorToolResultBlockType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import MessagesAdvisorToolResultBlockType
+value: MessagesAdvisorToolResultBlockType = "advisor_tool_result"
+```
+
+
+## Values
+
+- `"advisor_tool_result"`
diff --git a/docs/components/messagesfallbackparam.mdx b/docs/components/messagesfallbackparam.mdx
new file mode 100644
index 0000000..acb6084
--- /dev/null
+++ b/docs/components/messagesfallbackparam.mdx
@@ -0,0 +1,13 @@
+---
+title: "MessagesFallbackParam"
+---
+
+Fallback model to try when the primary model fails or refuses. Only the `model` field is supported; per-attempt overrides are rejected.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ |
+| `model` | *str* | :heavy_check_mark: | N/A | |
+| `__pydantic_extra__` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | \{
"model": "claude-opus-4-8"
} |
\ No newline at end of file
diff --git a/docs/components/messagesmessageparam.mdx b/docs/components/messagesmessageparam.mdx
new file mode 100644
index 0000000..698d1f4
--- /dev/null
+++ b/docs/components/messagesmessageparam.mdx
@@ -0,0 +1,13 @@
+---
+title: "MessagesMessageParam"
+---
+
+Anthropic message with OpenRouter extensions
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `content` | [components.MessagesMessageParamContentUnion5](../components/messagesmessageparamcontentunion5.mdx) | :heavy_check_mark: | N/A |
+| `role` | [components.MessagesMessageParamRole](../components/messagesmessageparamrole.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/messagesmessageparamcontentunion1.mdx b/docs/components/messagesmessageparamcontentunion1.mdx
new file mode 100644
index 0000000..3c0a29a
--- /dev/null
+++ b/docs/components/messagesmessageparamcontentunion1.mdx
@@ -0,0 +1,36 @@
+---
+title: "MessagesMessageParamContentUnion1"
+---
+
+## Supported Types
+
+### `components.AnthropicTextBlockParam`
+
+```python
+value: components.AnthropicTextBlockParam = /* values here */
+```
+
+### `components.AnthropicImageBlockParam`
+
+```python
+value: components.AnthropicImageBlockParam = /* values here */
+```
+
+### `components.ContentToolReference`
+
+```python
+value: components.ContentToolReference = /* values here */
+```
+
+### `components.AnthropicSearchResultBlockParam`
+
+```python
+value: components.AnthropicSearchResultBlockParam = /* values here */
+```
+
+### `components.AnthropicDocumentBlockParam`
+
+```python
+value: components.AnthropicDocumentBlockParam = /* values here */
+```
+
diff --git a/docs/components/messagesmessageparamcontentunion2.mdx b/docs/components/messagesmessageparamcontentunion2.mdx
new file mode 100644
index 0000000..f50498d
--- /dev/null
+++ b/docs/components/messagesmessageparamcontentunion2.mdx
@@ -0,0 +1,18 @@
+---
+title: "MessagesMessageParamContentUnion2"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.MessagesMessageParamContentUnion1]`
+
+```python
+value: List[components.MessagesMessageParamContentUnion1] = /* values here */
+```
+
diff --git a/docs/components/messagesmessageparamcontentunion3.mdx b/docs/components/messagesmessageparamcontentunion3.mdx
new file mode 100644
index 0000000..aacfcab
--- /dev/null
+++ b/docs/components/messagesmessageparamcontentunion3.mdx
@@ -0,0 +1,18 @@
+---
+title: "MessagesMessageParamContentUnion3"
+---
+
+## Supported Types
+
+### `List[components.AnthropicWebSearchResultBlockParam]`
+
+```python
+value: List[components.AnthropicWebSearchResultBlockParam] = /* values here */
+```
+
+### `components.ContentWebSearchToolResultError`
+
+```python
+value: components.ContentWebSearchToolResultError = /* values here */
+```
+
diff --git a/docs/components/messagesmessageparamcontentunion4.mdx b/docs/components/messagesmessageparamcontentunion4.mdx
new file mode 100644
index 0000000..41beca7
--- /dev/null
+++ b/docs/components/messagesmessageparamcontentunion4.mdx
@@ -0,0 +1,78 @@
+---
+title: "MessagesMessageParamContentUnion4"
+---
+
+## Supported Types
+
+### `components.AnthropicTextBlockParam`
+
+```python
+value: components.AnthropicTextBlockParam = /* values here */
+```
+
+### `components.AnthropicImageBlockParam`
+
+```python
+value: components.AnthropicImageBlockParam = /* values here */
+```
+
+### `components.AnthropicDocumentBlockParam`
+
+```python
+value: components.AnthropicDocumentBlockParam = /* values here */
+```
+
+### `components.ContentToolUse`
+
+```python
+value: components.ContentToolUse = /* values here */
+```
+
+### `components.ContentToolResult`
+
+```python
+value: components.ContentToolResult = /* values here */
+```
+
+### `components.ContentThinking`
+
+```python
+value: components.ContentThinking = /* values here */
+```
+
+### `components.ContentRedactedThinking`
+
+```python
+value: components.ContentRedactedThinking = /* values here */
+```
+
+### `components.ContentServerToolUse`
+
+```python
+value: components.ContentServerToolUse = /* values here */
+```
+
+### `components.ContentWebSearchToolResult`
+
+```python
+value: components.ContentWebSearchToolResult = /* values here */
+```
+
+### `components.AnthropicSearchResultBlockParam`
+
+```python
+value: components.AnthropicSearchResultBlockParam = /* values here */
+```
+
+### `components.ContentCompaction`
+
+```python
+value: components.ContentCompaction = /* values here */
+```
+
+### `components.MessagesAdvisorToolResultBlock`
+
+```python
+value: components.MessagesAdvisorToolResultBlock = /* values here */
+```
+
diff --git a/docs/components/messagesmessageparamcontentunion5.mdx b/docs/components/messagesmessageparamcontentunion5.mdx
new file mode 100644
index 0000000..f7bb2cc
--- /dev/null
+++ b/docs/components/messagesmessageparamcontentunion5.mdx
@@ -0,0 +1,18 @@
+---
+title: "MessagesMessageParamContentUnion5"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.MessagesMessageParamContentUnion4]`
+
+```python
+value: List[components.MessagesMessageParamContentUnion4] = /* values here */
+```
+
diff --git a/docs/components/messagesmessageparamrole.mdx b/docs/components/messagesmessageparamrole.mdx
new file mode 100644
index 0000000..ff70af3
--- /dev/null
+++ b/docs/components/messagesmessageparamrole.mdx
@@ -0,0 +1,21 @@
+---
+title: "MessagesMessageParamRole"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import MessagesMessageParamRole
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: MessagesMessageParamRole = "user"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"user"`
+- `"assistant"`
+- `"system"`
diff --git a/docs/components/messagesmessageparamtypecompaction.mdx b/docs/components/messagesmessageparamtypecompaction.mdx
new file mode 100644
index 0000000..371458c
--- /dev/null
+++ b/docs/components/messagesmessageparamtypecompaction.mdx
@@ -0,0 +1,15 @@
+---
+title: "MessagesMessageParamTypeCompaction"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import MessagesMessageParamTypeCompaction
+value: MessagesMessageParamTypeCompaction = "compaction"
+```
+
+
+## Values
+
+- `"compaction"`
diff --git a/docs/components/messagesoutputconfig.mdx b/docs/components/messagesoutputconfig.mdx
new file mode 100644
index 0000000..b5ce8e9
--- /dev/null
+++ b/docs/components/messagesoutputconfig.mdx
@@ -0,0 +1,14 @@
+---
+title: "MessagesOutputConfig"
+---
+
+Configuration for controlling output behavior. Supports the effort parameter and structured output format.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `effort` | [OptionalNullable[components.MessagesOutputConfigEffort]](../components/messagesoutputconfigeffort.mdx) | :heavy_minus_sign: | How much effort the model should put into its response. Higher effort levels may result in more thorough analysis but take longer. Valid values are `low`, `medium`, `high`, `xhigh`, or `max`. | medium |
+| `format_` | [OptionalNullable[components.MessagesOutputConfigFormat]](../components/messagesoutputconfigformat.mdx) | :heavy_minus_sign: | A schema to specify Claude's output format in responses. See [structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs). | |
+| `task_budget` | [OptionalNullable[components.TaskBudget]](../components/taskbudget.mdx) | :heavy_minus_sign: | Task budget for an agentic turn. The model sees a countdown of remaining tokens and uses it to prioritize work and wind down gracefully. Advisory — does not enforce a hard cap. | \{
"total": 400000,
"type": "tokens"
} |
\ No newline at end of file
diff --git a/docs/components/messagesoutputconfigeffort.mdx b/docs/components/messagesoutputconfigeffort.mdx
new file mode 100644
index 0000000..5de3f3f
--- /dev/null
+++ b/docs/components/messagesoutputconfigeffort.mdx
@@ -0,0 +1,25 @@
+---
+title: "MessagesOutputConfigEffort"
+---
+
+How much effort the model should put into its response. Higher effort levels may result in more thorough analysis but take longer. Valid values are `low`, `medium`, `high`, `xhigh`, or `max`.
+
+## Example Usage
+
+```python
+from openrouter.components import MessagesOutputConfigEffort
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: MessagesOutputConfigEffort = "low"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"low"`
+- `"medium"`
+- `"high"`
+- `"xhigh"`
+- `"max"`
diff --git a/docs/components/messagesoutputconfigformat.mdx b/docs/components/messagesoutputconfigformat.mdx
new file mode 100644
index 0000000..fdec2e4
--- /dev/null
+++ b/docs/components/messagesoutputconfigformat.mdx
@@ -0,0 +1,13 @@
+---
+title: "MessagesOutputConfigFormat"
+---
+
+A schema to specify Claude's output format in responses. See [structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs).
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `schema_` | Dict[str, *Nullable[Any]*] | :heavy_check_mark: | N/A |
+| `type` | [components.MessagesOutputConfigTypeJSONSchema](../components/messagesoutputconfigtypejsonschema.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/messagesoutputconfigtypejsonschema.mdx b/docs/components/messagesoutputconfigtypejsonschema.mdx
new file mode 100644
index 0000000..cff8f39
--- /dev/null
+++ b/docs/components/messagesoutputconfigtypejsonschema.mdx
@@ -0,0 +1,15 @@
+---
+title: "MessagesOutputConfigTypeJSONSchema"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import MessagesOutputConfigTypeJSONSchema
+value: MessagesOutputConfigTypeJSONSchema = "json_schema"
+```
+
+
+## Values
+
+- `"json_schema"`
diff --git a/docs/components/messagesrequest.mdx b/docs/components/messagesrequest.mdx
new file mode 100644
index 0000000..2b25d42
--- /dev/null
+++ b/docs/components/messagesrequest.mdx
@@ -0,0 +1,37 @@
+---
+title: "MessagesRequest"
+---
+
+Request schema for Anthropic Messages API endpoint
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `context_management` | [OptionalNullable[components.ContextManagement]](../components/contextmanagement.mdx) | :heavy_minus_sign: | N/A | |
+| `fallbacks` | List[[components.MessagesFallbackParam](../components/messagesfallbackparam.mdx)] | :heavy_minus_sign: | Fallback models to try if the primary model fails or refuses, in order. Handled by OpenRouter multi-model routing rather than Anthropic server-side fallbacks; cannot be combined with `models`. Each entry accepts only `model`. Maximum of 3 entries. | [
\{
"model": "claude-opus-4-8"
}
] |
+| `max_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `messages` | List[[components.MessagesMessageParam](../components/messagesmessageparam.mdx)] | :heavy_check_mark: | N/A | |
+| `metadata` | [Optional[components.MessagesRequestMetadata]](../components/messagesrequestmetadata.mdx) | :heavy_minus_sign: | N/A | |
+| `model` | *str* | :heavy_check_mark: | N/A | |
+| `models` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `output_config` | [Optional[components.MessagesOutputConfig]](../components/messagesoutputconfig.mdx) | :heavy_minus_sign: | Configuration for controlling output behavior. Supports the effort parameter and structured output format. | \{
"effort": "medium"
} |
+| `plugins` | List[[components.MessagesRequestPlugin](../components/messagesrequestplugin.mdx)] | :heavy_minus_sign: | Plugins you want to enable for this request, including their settings. | |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../components/providerpreferences.mdx) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | \{
"allow_fallbacks": true
} |
+| `service_tier` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `session_id` | *Optional[str]* | :heavy_minus_sign: | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | |
+| `speed` | [OptionalNullable[components.Speed]](../components/speed.mdx) | :heavy_minus_sign: | N/A | fast |
+| `stop_sequences` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `stop_server_tools_when` | List[[components.StopServerToolsWhenCondition](../components/stopservertoolswhencondition.mdx)] | :heavy_minus_sign: | Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`. | [
\{
"step_count": 5,
"type": "step_count_is"
},
\{
"max_cost_in_dollars": 0.5,
"type": "max_cost"
}
] |
+| `stream` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `system` | [Optional[components.System]](../components/system.mdx) | :heavy_minus_sign: | N/A | |
+| `temperature` | *Optional[float]* | :heavy_minus_sign: | N/A | |
+| `thinking` | [Optional[components.Thinking]](../components/thinking.mdx) | :heavy_minus_sign: | N/A | |
+| `tool_choice` | [Optional[components.ToolChoice]](../components/toolchoice.mdx) | :heavy_minus_sign: | N/A | |
+| `tools` | List[[components.MessagesRequestToolUnion](../components/messagesrequesttoolunion.mdx)] | :heavy_minus_sign: | N/A | |
+| `top_k` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `top_p` | *Optional[float]* | :heavy_minus_sign: | N/A | |
+| `trace` | [Optional[components.TraceConfig]](../components/traceconfig.mdx) | :heavy_minus_sign: | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
+| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 256 characters. | |
\ No newline at end of file
diff --git a/docs/components/messagesrequestmetadata.mdx b/docs/components/messagesrequestmetadata.mdx
new file mode 100644
index 0000000..fb2a556
--- /dev/null
+++ b/docs/components/messagesrequestmetadata.mdx
@@ -0,0 +1,9 @@
+---
+title: "MessagesRequestMetadata"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------- | ----------------------- | ----------------------- | ----------------------- |
+| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/messagesrequestplugin.mdx b/docs/components/messagesrequestplugin.mdx
new file mode 100644
index 0000000..eaf4fe4
--- /dev/null
+++ b/docs/components/messagesrequestplugin.mdx
@@ -0,0 +1,60 @@
+---
+title: "MessagesRequestPlugin"
+---
+
+## Supported Types
+
+### `components.AutoRouterPlugin`
+
+```python
+value: components.AutoRouterPlugin = /* values here */
+```
+
+### `components.ContextCompressionPlugin`
+
+```python
+value: components.ContextCompressionPlugin = /* values here */
+```
+
+### `components.FileParserPlugin`
+
+```python
+value: components.FileParserPlugin = /* values here */
+```
+
+### `components.FusionPlugin`
+
+```python
+value: components.FusionPlugin = /* values here */
+```
+
+### `components.ModerationPlugin`
+
+```python
+value: components.ModerationPlugin = /* values here */
+```
+
+### `components.ParetoRouterPlugin`
+
+```python
+value: components.ParetoRouterPlugin = /* values here */
+```
+
+### `components.ResponseHealingPlugin`
+
+```python
+value: components.ResponseHealingPlugin = /* values here */
+```
+
+### `components.WebSearchPlugin`
+
+```python
+value: components.WebSearchPlugin = /* values here */
+```
+
+### `components.WebFetchPlugin`
+
+```python
+value: components.WebFetchPlugin = /* values here */
+```
+
diff --git a/docs/components/messagesrequesttool.mdx b/docs/components/messagesrequesttool.mdx
new file mode 100644
index 0000000..e6fae82
--- /dev/null
+++ b/docs/components/messagesrequesttool.mdx
@@ -0,0 +1,10 @@
+---
+title: "MessagesRequestTool"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------- | -------------------------- | -------------------------- | -------------------------- |
+| `type` | *str* | :heavy_check_mark: | N/A |
+| `__pydantic_extra__` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/messagesrequesttoolunion.mdx b/docs/components/messagesrequesttoolunion.mdx
new file mode 100644
index 0000000..b24e866
--- /dev/null
+++ b/docs/components/messagesrequesttoolunion.mdx
@@ -0,0 +1,84 @@
+---
+title: "MessagesRequestToolUnion"
+---
+
+## Supported Types
+
+### `components.ToolCustom`
+
+```python
+value: components.ToolCustom = /* values here */
+```
+
+### `components.ToolBash20250124`
+
+```python
+value: components.ToolBash20250124 = /* values here */
+```
+
+### `components.ToolTextEditor20250124`
+
+```python
+value: components.ToolTextEditor20250124 = /* values here */
+```
+
+### `components.ToolWebSearch20250305`
+
+```python
+value: components.ToolWebSearch20250305 = /* values here */
+```
+
+### `components.ToolWebSearch20260209`
+
+```python
+value: components.ToolWebSearch20260209 = /* values here */
+```
+
+### `components.ToolAdvisor20260301`
+
+```python
+value: components.ToolAdvisor20260301 = /* values here */
+```
+
+### `components.BashServerTool`
+
+```python
+value: components.BashServerTool = /* values here */
+```
+
+### `components.DatetimeServerTool`
+
+```python
+value: components.DatetimeServerTool = /* values here */
+```
+
+### `components.ImageGenerationServerToolOpenRouter`
+
+```python
+value: components.ImageGenerationServerToolOpenRouter = /* values here */
+```
+
+### `components.ChatSearchModelsServerTool`
+
+```python
+value: components.ChatSearchModelsServerTool = /* values here */
+```
+
+### `components.WebFetchServerTool`
+
+```python
+value: components.WebFetchServerTool = /* values here */
+```
+
+### `components.OpenRouterWebSearchServerTool`
+
+```python
+value: components.OpenRouterWebSearchServerTool = /* values here */
+```
+
+### `components.MessagesRequestTool`
+
+```python
+value: components.MessagesRequestTool = /* values here */
+```
+
diff --git a/docs/components/metadatalevel.mdx b/docs/components/metadatalevel.mdx
new file mode 100644
index 0000000..6025f74
--- /dev/null
+++ b/docs/components/metadatalevel.mdx
@@ -0,0 +1,22 @@
+---
+title: "MetadataLevel"
+---
+
+Opt-in level for surfacing routing metadata on the response under `openrouter_metadata`.
+
+## Example Usage
+
+```python
+from openrouter.components import MetadataLevel
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: MetadataLevel = "disabled"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"disabled"`
+- `"enabled"`
diff --git a/docs/components/method.mdx b/docs/components/method.mdx
new file mode 100644
index 0000000..90145e7
--- /dev/null
+++ b/docs/components/method.mdx
@@ -0,0 +1,20 @@
+---
+title: "Method"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Method
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Method = "POST"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"POST"`
+- `"PUT"`
diff --git a/docs/components/modality.md b/docs/components/modality.md
deleted file mode 100644
index 54561e4..0000000
--- a/docs/components/modality.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Modality
-
-
-## Values
-
-| Name | Value |
-| ------- | ------- |
-| `TEXT` | text |
-| `IMAGE` | image |
-| `AUDIO` | audio |
\ No newline at end of file
diff --git a/docs/components/modality.mdx b/docs/components/modality.mdx
new file mode 100644
index 0000000..e1d39ed
--- /dev/null
+++ b/docs/components/modality.mdx
@@ -0,0 +1,21 @@
+---
+title: "Modality"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Modality
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Modality = "text"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"text"`
+- `"image"`
+- `"audio"`
diff --git a/docs/components/mode.mdx b/docs/components/mode.mdx
new file mode 100644
index 0000000..4efff0e
--- /dev/null
+++ b/docs/components/mode.mdx
@@ -0,0 +1,18 @@
+---
+title: "Mode"
+---
+
+## Supported Types
+
+### `components.ModeAuto`
+
+```python
+value: components.ModeAuto = /* values here */
+```
+
+### `components.ModeRequired`
+
+```python
+value: components.ModeRequired = /* values here */
+```
+
diff --git a/docs/components/modeauto.mdx b/docs/components/modeauto.mdx
new file mode 100644
index 0000000..432f9b6
--- /dev/null
+++ b/docs/components/modeauto.mdx
@@ -0,0 +1,15 @@
+---
+title: "ModeAuto"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ModeAuto
+value: ModeAuto = "auto"
+```
+
+
+## Values
+
+- `"auto"`
diff --git a/docs/components/model.md b/docs/components/model.mdx
similarity index 80%
rename from docs/components/model.md
rename to docs/components/model.mdx
index edb000f..e8757cb 100644
--- a/docs/components/model.md
+++ b/docs/components/model.mdx
@@ -1,4 +1,6 @@
-# Model
+---
+title: "Model"
+---
Information about an AI model available on OpenRouter
@@ -7,22 +9,22 @@ Information about an AI model available on OpenRouter
| Field | Type | Required | Description | Example |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `architecture` | [components.ModelArchitecture](../components/modelarchitecture.md) | :heavy_check_mark: | Model architecture information | {
"input_modalities": [
"text"
],
"instruct_type": "chatml",
"modality": "text-\u003etext",
"output_modalities": [
"text"
],
"tokenizer": "GPT"
} |
-| `benchmarks` | [Optional[components.ModelBenchmarks]](../components/modelbenchmarks.md) | :heavy_minus_sign: | Third-party benchmark rankings for this model. Omitted when no benchmark data is available. | {
"artificial_analysis": {
"agentic_index": 55.8,
"coding_index": 63.2,
"intelligence_index": 71.4
},
"design_arena": [
{
"arena": "models",
"category": "website",
"elo": 1385.2,
"rank": 5,
"win_rate": 62.5
}
]
} |
+| `architecture` | [components.ModelArchitecture](../components/modelarchitecture.mdx) | :heavy_check_mark: | Model architecture information | \{
"input_modalities": [
"text"
],
"instruct_type": "chatml",
"modality": "text-\u003etext",
"output_modalities": [
"text"
],
"tokenizer": "GPT"
} |
+| `benchmarks` | [Optional[components.ModelBenchmarks]](../components/modelbenchmarks.mdx) | :heavy_minus_sign: | Third-party benchmark rankings for this model. Omitted when no benchmark data is available. | \{
"artificial_analysis": \{
"agentic_index": 55.8,
"coding_index": 63.2,
"intelligence_index": 71.4
},
"design_arena": [
\{
"arena": "models",
"category": "website",
"elo": 1385.2,
"rank": 5,
"win_rate": 62.5
}
]
} |
| `canonical_slug` | *str* | :heavy_check_mark: | Canonical slug for the model | openai/gpt-4 |
| `context_length` | *Nullable[int]* | :heavy_check_mark: | Maximum context length in tokens | 8192 |
| `created` | *int* | :heavy_check_mark: | Unix timestamp of when the model was created | 1692901234 |
-| `default_parameters` | [Nullable[components.DefaultParameters]](../components/defaultparameters.md) | :heavy_check_mark: | Default parameters for this model | {
"frequency_penalty": 0,
"presence_penalty": 0,
"repetition_penalty": 1,
"temperature": 0.7,
"top_k": 0,
"top_p": 0.9
} |
+| `default_parameters` | [Nullable[components.DefaultParameters]](../components/defaultparameters.mdx) | :heavy_check_mark: | Default parameters for this model | \{
"frequency_penalty": 0,
"presence_penalty": 0,
"repetition_penalty": 1,
"temperature": 0.7,
"top_k": 0,
"top_p": 0.9
} |
| `description` | *Optional[str]* | :heavy_minus_sign: | Description of the model | GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. |
| `expiration_date` | *OptionalNullable[str]* | :heavy_minus_sign: | The date after which the model may be removed. ISO 8601 date string (YYYY-MM-DD) or null if no expiration. | 2025-06-01 |
| `hugging_face_id` | *OptionalNullable[str]* | :heavy_minus_sign: | Hugging Face model identifier, if applicable | microsoft/DialoGPT-medium |
| `id` | *str* | :heavy_check_mark: | Unique identifier for the model | openai/gpt-4 |
| `knowledge_cutoff` | *OptionalNullable[str]* | :heavy_minus_sign: | The date up to which the model was trained on data. ISO 8601 date string (YYYY-MM-DD) or null if unknown. | 2024-10-01 |
-| `links` | [components.ModelLinks](../components/modellinks.md) | :heavy_check_mark: | Related API endpoints and resources for this model. | {
"details": "/api/v1/models/openai/gpt-5.4/endpoints"
} |
+| `links` | [components.ModelLinks](../components/modellinks.mdx) | :heavy_check_mark: | Related API endpoints and resources for this model. | \{
"details": "/api/v1/models/openai/gpt-5.4/endpoints"
} |
| `name` | *str* | :heavy_check_mark: | Display name of the model | GPT-4 |
-| `per_request_limits` | [Nullable[components.PerRequestLimits]](../components/perrequestlimits.md) | :heavy_check_mark: | Per-request token limits | {
"completion_tokens": 1000,
"prompt_tokens": 1000
} |
-| `pricing` | [components.PublicPricing](../components/publicpricing.md) | :heavy_check_mark: | Pricing information for the model | {
"completion": "0.00006",
"image": "0",
"prompt": "0.00003",
"request": "0"
} |
-| `reasoning` | [Optional[components.ModelReasoning]](../components/modelreasoning.md) | :heavy_minus_sign: | Reasoning effort configuration. Omitted for non-reasoning models and dynamic router models. | {
"default_effort": "medium",
"default_enabled": true,
"mandatory": false,
"supported_efforts": [
"high",
"medium",
"low",
"minimal"
]
} |
-| `supported_parameters` | List[[components.Parameter](../components/parameter.md)] | :heavy_check_mark: | List of supported parameters for this model | |
-| `supported_voices` | List[*str*] | :heavy_check_mark: | List of supported voice identifiers for TTS models. Null for non-TTS models. | |
-| `top_provider` | [components.TopProviderInfo](../components/topproviderinfo.md) | :heavy_check_mark: | Information about the top provider for this model | {
"context_length": 8192,
"is_moderated": true,
"max_completion_tokens": 4096
} |
\ No newline at end of file
+| `per_request_limits` | [Nullable[components.PerRequestLimits]](../components/perrequestlimits.mdx) | :heavy_check_mark: | Per-request token limits | \{
"completion_tokens": 1000,
"prompt_tokens": 1000
} |
+| `pricing` | [components.PublicPricing](../components/publicpricing.mdx) | :heavy_check_mark: | Pricing information for the model | \{
"completion": "0.00006",
"image": "0",
"prompt": "0.00003",
"request": "0"
} |
+| `reasoning` | [Optional[components.ModelReasoning]](../components/modelreasoning.mdx) | :heavy_minus_sign: | Reasoning effort configuration. Omitted for non-reasoning models and dynamic router models. | \{
"default_effort": "medium",
"default_enabled": true,
"mandatory": false,
"supported_efforts": [
"high",
"medium",
"low",
"minimal"
]
} |
+| `supported_parameters` | List[[components.Parameter](../components/parameter.mdx)] | :heavy_check_mark: | List of supported parameters for this model | |
+| `supported_voices` | List[*str*] | :heavy_check_mark: | List of supported voice identifiers for TTS models. Null for non-TTS models. | null |
+| `top_provider` | [components.TopProviderInfo](../components/topproviderinfo.mdx) | :heavy_check_mark: | Information about the top provider for this model | \{
"context_length": 8192,
"is_moderated": true,
"max_completion_tokens": 4096
} |
\ No newline at end of file
diff --git a/docs/components/modelarchitecture.md b/docs/components/modelarchitecture.mdx
similarity index 67%
rename from docs/components/modelarchitecture.md
rename to docs/components/modelarchitecture.mdx
index 7579049..3035c9b 100644
--- a/docs/components/modelarchitecture.md
+++ b/docs/components/modelarchitecture.mdx
@@ -1,4 +1,6 @@
-# ModelArchitecture
+---
+title: "ModelArchitecture"
+---
Model architecture information
@@ -7,8 +9,8 @@ Model architecture information
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
-| `input_modalities` | List[[components.InputModality](../components/inputmodality.md)] | :heavy_check_mark: | Supported input modalities | |
-| `instruct_type` | [OptionalNullable[components.ModelArchitectureInstructType]](../components/modelarchitectureinstructtype.md) | :heavy_minus_sign: | Instruction format type | chatml |
+| `input_modalities` | List[[components.InputModality](../components/inputmodality.mdx)] | :heavy_check_mark: | Supported input modalities | |
+| `instruct_type` | [OptionalNullable[components.ModelArchitectureInstructType]](../components/modelarchitectureinstructtype.mdx) | :heavy_minus_sign: | Instruction format type | chatml |
| `modality` | *Nullable[str]* | :heavy_check_mark: | Primary modality of the model | text->text |
-| `output_modalities` | List[[components.OutputModality](../components/outputmodality.md)] | :heavy_check_mark: | Supported output modalities | |
-| `tokenizer` | [Optional[components.ModelGroup]](../components/modelgroup.md) | :heavy_minus_sign: | Tokenizer type used by the model | GPT |
\ No newline at end of file
+| `output_modalities` | List[[components.OutputModality](../components/outputmodality.mdx)] | :heavy_check_mark: | Supported output modalities | |
+| `tokenizer` | [Optional[components.ModelGroup]](../components/modelgroup.mdx) | :heavy_minus_sign: | Tokenizer type used by the model | GPT |
\ No newline at end of file
diff --git a/docs/components/modelarchitectureinstructtype.md b/docs/components/modelarchitectureinstructtype.md
deleted file mode 100644
index eabbbe3..0000000
--- a/docs/components/modelarchitectureinstructtype.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# ModelArchitectureInstructType
-
-Instruction format type
-
-
-## Values
-
-| Name | Value |
-| --------------- | --------------- |
-| `NONE` | none |
-| `AIROBOROS` | airoboros |
-| `ALPACA` | alpaca |
-| `ALPACA_MODIF` | alpaca-modif |
-| `CHATML` | chatml |
-| `CLAUDE` | claude |
-| `CODE_LLAMA` | code-llama |
-| `GEMMA` | gemma |
-| `LLAMA2` | llama2 |
-| `LLAMA3` | llama3 |
-| `MISTRAL` | mistral |
-| `NEMOTRON` | nemotron |
-| `NEURAL` | neural |
-| `OPENCHAT` | openchat |
-| `PHI3` | phi3 |
-| `RWKV` | rwkv |
-| `VICUNA` | vicuna |
-| `ZEPHYR` | zephyr |
-| `DEEPSEEK_R1` | deepseek-r1 |
-| `DEEPSEEK_V3_1` | deepseek-v3.1 |
-| `QWQ` | qwq |
-| `QWEN3` | qwen3 |
\ No newline at end of file
diff --git a/docs/components/modelarchitectureinstructtype.mdx b/docs/components/modelarchitectureinstructtype.mdx
new file mode 100644
index 0000000..c8d0213
--- /dev/null
+++ b/docs/components/modelarchitectureinstructtype.mdx
@@ -0,0 +1,42 @@
+---
+title: "ModelArchitectureInstructType"
+---
+
+Instruction format type
+
+## Example Usage
+
+```python
+from openrouter.components import ModelArchitectureInstructType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ModelArchitectureInstructType = "none"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"none"`
+- `"airoboros"`
+- `"alpaca"`
+- `"alpaca-modif"`
+- `"chatml"`
+- `"claude"`
+- `"code-llama"`
+- `"gemma"`
+- `"llama2"`
+- `"llama3"`
+- `"mistral"`
+- `"nemotron"`
+- `"neural"`
+- `"openchat"`
+- `"phi3"`
+- `"rwkv"`
+- `"vicuna"`
+- `"zephyr"`
+- `"deepseek-r1"`
+- `"deepseek-v3.1"`
+- `"qwq"`
+- `"qwen3"`
diff --git a/docs/components/modelbenchmarks.mdx b/docs/components/modelbenchmarks.mdx
new file mode 100644
index 0000000..f9d4890
--- /dev/null
+++ b/docs/components/modelbenchmarks.mdx
@@ -0,0 +1,13 @@
+---
+title: "ModelBenchmarks"
+---
+
+Third-party benchmark rankings for this model. Omitted when no benchmark data is available.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `artificial_analysis` | [Optional[components.AABenchmarkEntry]](../components/aabenchmarkentry.mdx) | :heavy_minus_sign: | Artificial Analysis benchmark index scores. | \{
"agentic_index": 55.8,
"coding_index": 63.2,
"intelligence_index": 71.4
} |
+| `design_arena` | List[[components.DABenchmarkEntry](../components/dabenchmarkentry.mdx)] | :heavy_check_mark: | Design Arena ELO rankings across arena+category pairs. | [
\{
"arena": "models",
"category": "website",
"elo": 1385.2,
"rank": 5,
"win_rate": 62.5
}
] |
\ No newline at end of file
diff --git a/docs/components/modelenum.mdx b/docs/components/modelenum.mdx
new file mode 100644
index 0000000..815fb46
--- /dev/null
+++ b/docs/components/modelenum.mdx
@@ -0,0 +1,20 @@
+---
+title: "ModelEnum"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ModelEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ModelEnum = "gpt-image-1"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"gpt-image-1"`
+- `"gpt-image-1-mini"`
diff --git a/docs/components/modelgroup.md b/docs/components/modelgroup.md
deleted file mode 100644
index 80ef8a0..0000000
--- a/docs/components/modelgroup.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# ModelGroup
-
-Tokenizer type used by the model
-
-
-## Values
-
-| Name | Value |
-| ----------- | ----------- |
-| `ROUTER` | Router |
-| `MEDIA` | Media |
-| `OTHER` | Other |
-| `GPT` | GPT |
-| `CLAUDE` | Claude |
-| `GEMINI` | Gemini |
-| `GEMMA` | Gemma |
-| `GROK` | Grok |
-| `COHERE` | Cohere |
-| `NOVA` | Nova |
-| `QWEN` | Qwen |
-| `YI` | Yi |
-| `DEEP_SEEK` | DeepSeek |
-| `MISTRAL` | Mistral |
-| `LLAMA2` | Llama2 |
-| `LLAMA3` | Llama3 |
-| `LLAMA4` | Llama4 |
-| `PA_LM` | PaLM |
-| `RWKV` | RWKV |
-| `QWEN3` | Qwen3 |
\ No newline at end of file
diff --git a/docs/components/modelgroup.mdx b/docs/components/modelgroup.mdx
new file mode 100644
index 0000000..f5c67b1
--- /dev/null
+++ b/docs/components/modelgroup.mdx
@@ -0,0 +1,40 @@
+---
+title: "ModelGroup"
+---
+
+Tokenizer type used by the model
+
+## Example Usage
+
+```python
+from openrouter.components import ModelGroup
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ModelGroup = "Router"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"Router"`
+- `"Media"`
+- `"Other"`
+- `"GPT"`
+- `"Claude"`
+- `"Gemini"`
+- `"Gemma"`
+- `"Grok"`
+- `"Cohere"`
+- `"Nova"`
+- `"Qwen"`
+- `"Yi"`
+- `"DeepSeek"`
+- `"Mistral"`
+- `"Llama2"`
+- `"Llama3"`
+- `"Llama4"`
+- `"PaLM"`
+- `"RWKV"`
+- `"Qwen3"`
diff --git a/docs/components/modellinks.mdx b/docs/components/modellinks.mdx
new file mode 100644
index 0000000..2a62599
--- /dev/null
+++ b/docs/components/modellinks.mdx
@@ -0,0 +1,12 @@
+---
+title: "ModelLinks"
+---
+
+Related API endpoints and resources for this model.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- |
+| `details` | *str* | :heavy_check_mark: | URL for the model details/endpoints API | /api/v1/models/openai/gpt-5.4/endpoints |
\ No newline at end of file
diff --git a/docs/components/modelreasoning.mdx b/docs/components/modelreasoning.mdx
new file mode 100644
index 0000000..b8d2364
--- /dev/null
+++ b/docs/components/modelreasoning.mdx
@@ -0,0 +1,16 @@
+---
+title: "ModelReasoning"
+---
+
+Reasoning effort configuration. Omitted for non-reasoning models and dynamic router models.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `default_effort` | [OptionalNullable[components.DefaultEffort]](../components/defaulteffort.mdx) | :heavy_minus_sign: | N/A | medium |
+| `default_enabled` | *Optional[bool]* | :heavy_minus_sign: | Default reasoning enabled state when the client does not set `reasoning.enabled`. | |
+| `mandatory` | *bool* | :heavy_check_mark: | When true, reasoning cannot be disabled and effort "none" is rejected. | |
+| `supported_efforts` | List[[Nullable[components.ReasoningEffort]](../components/reasoningeffort.mdx)] | :heavy_minus_sign: | Allowed reasoning effort values for this model, in descending effort order (highest first). Null means no allowlist — all gateway effort values are accepted. | |
+| `supports_max_tokens` | *Optional[bool]* | :heavy_minus_sign: | Present and `true` when the model accepts `reasoning.max_tokens` in requests (Anthropic-style) instead of or in addition to `reasoning.effort`. Omitted otherwise. | |
\ No newline at end of file
diff --git a/docs/components/modelresponse.mdx b/docs/components/modelresponse.mdx
new file mode 100644
index 0000000..9ced330
--- /dev/null
+++ b/docs/components/modelresponse.mdx
@@ -0,0 +1,12 @@
+---
+title: "ModelResponse"
+---
+
+Single model response
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.Model](../components/model.mdx) | :heavy_check_mark: | Information about an AI model available on OpenRouter | \{
"architecture": \{
"input_modalities": [
"text"
],
"instruct_type": "chatml",
"modality": "text-\u003etext",
"output_modalities": [
"text"
],
"tokenizer": "GPT"
},
"canonical_slug": "openai/gpt-4",
"context_length": 8192,
"created": 1692901234,
"default_parameters": null,
"description": "GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.",
"expiration_date": null,
"id": "openai/gpt-4",
"knowledge_cutoff": null,
"links": \{
"details": "/api/v1/models/openai/gpt-5.4/endpoints"
},
"name": "GPT-4",
"per_request_limits": null,
"pricing": \{
"completion": "0.00006",
"image": "0",
"prompt": "0.00003",
"request": "0"
},
"reasoning": \{
"default_effort": "medium",
"default_enabled": true,
"mandatory": false,
"supported_efforts": [
"high",
"medium",
"low",
"minimal"
]
},
"supported_parameters": [
"temperature",
"top_p",
"max_tokens"
],
"supported_voices": null,
"top_provider": \{
"context_length": 8192,
"is_moderated": true,
"max_completion_tokens": 4096
}
} |
\ No newline at end of file
diff --git a/docs/components/modelscountresponse.md b/docs/components/modelscountresponse.mdx
similarity index 75%
rename from docs/components/modelscountresponse.md
rename to docs/components/modelscountresponse.mdx
index 4ad6e6a..104a32f 100644
--- a/docs/components/modelscountresponse.md
+++ b/docs/components/modelscountresponse.mdx
@@ -1,4 +1,6 @@
-# ModelsCountResponse
+---
+title: "ModelsCountResponse"
+---
Model count data
@@ -7,4 +9,4 @@ Model count data
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
-| `data` | [components.ModelsCountResponseData](../components/modelscountresponsedata.md) | :heavy_check_mark: | Model count data | {
"count": 150
} |
\ No newline at end of file
+| `data` | [components.ModelsCountResponseData](../components/modelscountresponsedata.mdx) | :heavy_check_mark: | Model count data | \{
"count": 150
} |
\ No newline at end of file
diff --git a/docs/components/modelscountresponsedata.mdx b/docs/components/modelscountresponsedata.mdx
new file mode 100644
index 0000000..9e1b914
--- /dev/null
+++ b/docs/components/modelscountresponsedata.mdx
@@ -0,0 +1,12 @@
+---
+title: "ModelsCountResponseData"
+---
+
+Model count data
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- |
+| `count` | *int* | :heavy_check_mark: | Total number of available models | 150 |
\ No newline at end of file
diff --git a/docs/components/modelslistresponse.md b/docs/components/modelslistresponse.mdx
similarity index 89%
rename from docs/components/modelslistresponse.md
rename to docs/components/modelslistresponse.mdx
index 04b43f5..140ec11 100644
--- a/docs/components/modelslistresponse.md
+++ b/docs/components/modelslistresponse.mdx
@@ -1,4 +1,6 @@
-# ModelsListResponse
+---
+title: "ModelsListResponse"
+---
List of available models
@@ -7,4 +9,4 @@ List of available models
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `data` | List[[components.Model](../components/model.md)] | :heavy_check_mark: | List of available models | [
{
"architecture": {
"input_modalities": [
"text"
],
"instruct_type": "chatml",
"modality": "text-\u003etext",
"output_modalities": [
"text"
],
"tokenizer": "GPT"
},
"canonical_slug": "openai/gpt-4",
"context_length": 8192,
"created": 1692901234,
"default_parameters": null,
"description": "GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.",
"expiration_date": null,
"id": "openai/gpt-4",
"knowledge_cutoff": null,
"links": {
"details": "/api/v1/models/openai/gpt-5.4/endpoints"
},
"name": "GPT-4",
"per_request_limits": null,
"pricing": {
"completion": "0.00006",
"image": "0",
"prompt": "0.00003",
"request": "0"
},
"supported_parameters": [
"temperature",
"top_p",
"max_tokens"
],
"supported_voices": null,
"top_provider": {
"context_length": 8192,
"is_moderated": true,
"max_completion_tokens": 4096
}
}
] |
\ No newline at end of file
+| `data` | List[[components.Model](../components/model.mdx)] | :heavy_check_mark: | List of available models | [
\{
"architecture": \{
"input_modalities": [
"text"
],
"instruct_type": "chatml",
"modality": "text-\u003etext",
"output_modalities": [
"text"
],
"tokenizer": "GPT"
},
"canonical_slug": "openai/gpt-4",
"context_length": 8192,
"created": 1692901234,
"default_parameters": null,
"description": "GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.",
"expiration_date": null,
"id": "openai/gpt-4",
"knowledge_cutoff": null,
"links": \{
"details": "/api/v1/models/openai/gpt-5.4/endpoints"
},
"name": "GPT-4",
"per_request_limits": null,
"pricing": \{
"completion": "0.00006",
"image": "0",
"prompt": "0.00003",
"request": "0"
},
"supported_parameters": [
"temperature",
"top_p",
"max_tokens"
],
"supported_voices": null,
"top_provider": \{
"context_length": 8192,
"is_moderated": true,
"max_completion_tokens": 4096
}
}
] |
\ No newline at end of file
diff --git a/docs/components/moderation.mdx b/docs/components/moderation.mdx
new file mode 100644
index 0000000..74bc3fb
--- /dev/null
+++ b/docs/components/moderation.mdx
@@ -0,0 +1,20 @@
+---
+title: "Moderation"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Moderation
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Moderation = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"low"`
diff --git a/docs/components/moderationplugin.mdx b/docs/components/moderationplugin.mdx
new file mode 100644
index 0000000..0fd2af6
--- /dev/null
+++ b/docs/components/moderationplugin.mdx
@@ -0,0 +1,9 @@
+---
+title: "ModerationPlugin"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `id` | [components.ModerationPluginID](../components/moderationpluginid.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/moderationpluginid.mdx b/docs/components/moderationpluginid.mdx
new file mode 100644
index 0000000..0d006f3
--- /dev/null
+++ b/docs/components/moderationpluginid.mdx
@@ -0,0 +1,15 @@
+---
+title: "ModerationPluginID"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ModerationPluginID
+value: ModerationPluginID = "moderation"
+```
+
+
+## Values
+
+- `"moderation"`
diff --git a/docs/components/moderequired.mdx b/docs/components/moderequired.mdx
new file mode 100644
index 0000000..5ccf31a
--- /dev/null
+++ b/docs/components/moderequired.mdx
@@ -0,0 +1,15 @@
+---
+title: "ModeRequired"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ModeRequired
+value: ModeRequired = "required"
+```
+
+
+## Values
+
+- `"required"`
diff --git a/docs/components/multimodalmedia.mdx b/docs/components/multimodalmedia.mdx
new file mode 100644
index 0000000..9b621c1
--- /dev/null
+++ b/docs/components/multimodalmedia.mdx
@@ -0,0 +1,10 @@
+---
+title: "MultimodalMedia"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `data` | *str* | :heavy_check_mark: | N/A |
+| `format_` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/nameadvisor.mdx b/docs/components/nameadvisor.mdx
new file mode 100644
index 0000000..e7df77c
--- /dev/null
+++ b/docs/components/nameadvisor.mdx
@@ -0,0 +1,15 @@
+---
+title: "NameAdvisor"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import NameAdvisor
+value: NameAdvisor = "advisor"
+```
+
+
+## Values
+
+- `"advisor"`
diff --git a/docs/components/namebash.mdx b/docs/components/namebash.mdx
new file mode 100644
index 0000000..d6efdde
--- /dev/null
+++ b/docs/components/namebash.mdx
@@ -0,0 +1,15 @@
+---
+title: "NameBash"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import NameBash
+value: NameBash = "bash"
+```
+
+
+## Values
+
+- `"bash"`
diff --git a/docs/components/namestrreplaceeditor.mdx b/docs/components/namestrreplaceeditor.mdx
new file mode 100644
index 0000000..5dea596
--- /dev/null
+++ b/docs/components/namestrreplaceeditor.mdx
@@ -0,0 +1,15 @@
+---
+title: "NameStrReplaceEditor"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import NameStrReplaceEditor
+value: NameStrReplaceEditor = "str_replace_editor"
+```
+
+
+## Values
+
+- `"str_replace_editor"`
diff --git a/docs/components/namewebsearch1.mdx b/docs/components/namewebsearch1.mdx
new file mode 100644
index 0000000..41ced4e
--- /dev/null
+++ b/docs/components/namewebsearch1.mdx
@@ -0,0 +1,15 @@
+---
+title: "NameWebSearch1"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import NameWebSearch1
+value: NameWebSearch1 = "web_search"
+```
+
+
+## Values
+
+- `"web_search"`
diff --git a/docs/components/namewebsearch2.mdx b/docs/components/namewebsearch2.mdx
new file mode 100644
index 0000000..f6803b0
--- /dev/null
+++ b/docs/components/namewebsearch2.mdx
@@ -0,0 +1,15 @@
+---
+title: "NameWebSearch2"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import NameWebSearch2
+value: NameWebSearch2 = "web_search"
+```
+
+
+## Values
+
+- `"web_search"`
diff --git a/docs/components/never.mdx b/docs/components/never.mdx
new file mode 100644
index 0000000..37ce7d3
--- /dev/null
+++ b/docs/components/never.mdx
@@ -0,0 +1,9 @@
+---
+title: "Never"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `tool_names` | List[*str*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/notfoundresponseerrordata.md b/docs/components/notfoundresponseerrordata.mdx
similarity index 93%
rename from docs/components/notfoundresponseerrordata.md
rename to docs/components/notfoundresponseerrordata.mdx
index 0ba2485..1fed737 100644
--- a/docs/components/notfoundresponseerrordata.md
+++ b/docs/components/notfoundresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# NotFoundResponseErrorData
+---
+title: "NotFoundResponseErrorData"
+---
Error data for NotFoundResponse
diff --git a/docs/components/observabilityarizedestination.mdx b/docs/components/observabilityarizedestination.mdx
new file mode 100644
index 0000000..9eefcee
--- /dev/null
+++ b/docs/components/observabilityarizedestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityArizeDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityArizeDestinationConfig](../components/observabilityarizedestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityArizeDestinationType](../components/observabilityarizedestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilityarizedestinationconfig.mdx b/docs/components/observabilityarizedestinationconfig.mdx
new file mode 100644
index 0000000..9a4f66b
--- /dev/null
+++ b/docs/components/observabilityarizedestinationconfig.mdx
@@ -0,0 +1,13 @@
+---
+title: "ObservabilityArizeDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
+| `api_key` | *str* | :heavy_check_mark: | N/A |
+| `base_url` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `model_id` | *str* | :heavy_check_mark: | The name of the tracing project in Arize AX |
+| `space_key` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/observabilityarizedestinationtype.mdx b/docs/components/observabilityarizedestinationtype.mdx
new file mode 100644
index 0000000..8fb879f
--- /dev/null
+++ b/docs/components/observabilityarizedestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityArizeDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityArizeDestinationType
+value: ObservabilityArizeDestinationType = "arize"
+```
+
+
+## Values
+
+- `"arize"`
diff --git a/docs/components/observabilitybraintrustdestination.mdx b/docs/components/observabilitybraintrustdestination.mdx
new file mode 100644
index 0000000..bd21dcc
--- /dev/null
+++ b/docs/components/observabilitybraintrustdestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityBraintrustDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityBraintrustDestinationConfig](../components/observabilitybraintrustdestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityBraintrustDestinationType](../components/observabilitybraintrustdestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilitybraintrustdestinationconfig.mdx b/docs/components/observabilitybraintrustdestinationconfig.mdx
new file mode 100644
index 0000000..56fcb62
--- /dev/null
+++ b/docs/components/observabilitybraintrustdestinationconfig.mdx
@@ -0,0 +1,12 @@
+---
+title: "ObservabilityBraintrustDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
+| `api_key` | *str* | :heavy_check_mark: | N/A |
+| `base_url` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `project_id` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/observabilitybraintrustdestinationtype.mdx b/docs/components/observabilitybraintrustdestinationtype.mdx
new file mode 100644
index 0000000..2686027
--- /dev/null
+++ b/docs/components/observabilitybraintrustdestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityBraintrustDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityBraintrustDestinationType
+value: ObservabilityBraintrustDestinationType = "braintrust"
+```
+
+
+## Values
+
+- `"braintrust"`
diff --git a/docs/components/observabilityclickhousedestination.mdx b/docs/components/observabilityclickhousedestination.mdx
new file mode 100644
index 0000000..1791dbf
--- /dev/null
+++ b/docs/components/observabilityclickhousedestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityClickhouseDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityClickhouseDestinationConfig](../components/observabilityclickhousedestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityClickhouseDestinationType](../components/observabilityclickhousedestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilityclickhousedestinationconfig.mdx b/docs/components/observabilityclickhousedestinationconfig.mdx
new file mode 100644
index 0000000..8135b0f
--- /dev/null
+++ b/docs/components/observabilityclickhousedestinationconfig.mdx
@@ -0,0 +1,14 @@
+---
+title: "ObservabilityClickhouseDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `database` | *str* | :heavy_check_mark: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `host` | *str* | :heavy_check_mark: | N/A |
+| `password` | *str* | :heavy_check_mark: | N/A |
+| `table` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `username` | *str* | :heavy_check_mark: | If you have not set a specific username in ClickHouse, simply type in 'default' below. |
\ No newline at end of file
diff --git a/docs/components/observabilityclickhousedestinationtype.mdx b/docs/components/observabilityclickhousedestinationtype.mdx
new file mode 100644
index 0000000..c450839
--- /dev/null
+++ b/docs/components/observabilityclickhousedestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityClickhouseDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityClickhouseDestinationType
+value: ObservabilityClickhouseDestinationType = "clickhouse"
+```
+
+
+## Values
+
+- `"clickhouse"`
diff --git a/docs/components/observabilitydatadogdestination.mdx b/docs/components/observabilitydatadogdestination.mdx
new file mode 100644
index 0000000..c3a0631
--- /dev/null
+++ b/docs/components/observabilitydatadogdestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityDatadogDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityDatadogDestinationConfig](../components/observabilitydatadogdestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityDatadogDestinationType](../components/observabilitydatadogdestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilitydatadogdestinationconfig.mdx b/docs/components/observabilitydatadogdestinationconfig.mdx
new file mode 100644
index 0000000..56d2279
--- /dev/null
+++ b/docs/components/observabilitydatadogdestinationconfig.mdx
@@ -0,0 +1,12 @@
+---
+title: "ObservabilityDatadogDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
+| `api_key` | *str* | :heavy_check_mark: | Datadog API key must have LLM Observability permissions. Create at: |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `ml_app` | *str* | :heavy_check_mark: | Name to identify your application in Datadog LLM Observability |
+| `url` | *Optional[str]* | :heavy_minus_sign: | Datadog API URL for your region (e.g., https://api.datadoghq.com, https://api.us3.datadoghq.com, https://api.datadoghq.eu) |
\ No newline at end of file
diff --git a/docs/components/observabilitydatadogdestinationtype.mdx b/docs/components/observabilitydatadogdestinationtype.mdx
new file mode 100644
index 0000000..872d16f
--- /dev/null
+++ b/docs/components/observabilitydatadogdestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityDatadogDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityDatadogDestinationType
+value: ObservabilityDatadogDestinationType = "datadog"
+```
+
+
+## Values
+
+- `"datadog"`
diff --git a/docs/components/observabilitydestination.mdx b/docs/components/observabilitydestination.mdx
new file mode 100644
index 0000000..3fcbba1
--- /dev/null
+++ b/docs/components/observabilitydestination.mdx
@@ -0,0 +1,108 @@
+---
+title: "ObservabilityDestination"
+---
+
+## Supported Types
+
+### `components.ObservabilityArizeDestination`
+
+```python
+value: components.ObservabilityArizeDestination = /* values here */
+```
+
+### `components.ObservabilityBraintrustDestination`
+
+```python
+value: components.ObservabilityBraintrustDestination = /* values here */
+```
+
+### `components.ObservabilityClickhouseDestination`
+
+```python
+value: components.ObservabilityClickhouseDestination = /* values here */
+```
+
+### `components.ObservabilityDatadogDestination`
+
+```python
+value: components.ObservabilityDatadogDestination = /* values here */
+```
+
+### `components.ObservabilityGrafanaDestination`
+
+```python
+value: components.ObservabilityGrafanaDestination = /* values here */
+```
+
+### `components.ObservabilityLangfuseDestination`
+
+```python
+value: components.ObservabilityLangfuseDestination = /* values here */
+```
+
+### `components.ObservabilityLangsmithDestination`
+
+```python
+value: components.ObservabilityLangsmithDestination = /* values here */
+```
+
+### `components.ObservabilityNewrelicDestination`
+
+```python
+value: components.ObservabilityNewrelicDestination = /* values here */
+```
+
+### `components.ObservabilityOpikDestination`
+
+```python
+value: components.ObservabilityOpikDestination = /* values here */
+```
+
+### `components.ObservabilityOtelCollectorDestination`
+
+```python
+value: components.ObservabilityOtelCollectorDestination = /* values here */
+```
+
+### `components.ObservabilityPosthogDestination`
+
+```python
+value: components.ObservabilityPosthogDestination = /* values here */
+```
+
+### `components.ObservabilityRampDestination`
+
+```python
+value: components.ObservabilityRampDestination = /* values here */
+```
+
+### `components.ObservabilityS3Destination`
+
+```python
+value: components.ObservabilityS3Destination = /* values here */
+```
+
+### `components.ObservabilitySentryDestination`
+
+```python
+value: components.ObservabilitySentryDestination = /* values here */
+```
+
+### `components.ObservabilitySnowflakeDestination`
+
+```python
+value: components.ObservabilitySnowflakeDestination = /* values here */
+```
+
+### `components.ObservabilityWeaveDestination`
+
+```python
+value: components.ObservabilityWeaveDestination = /* values here */
+```
+
+### `components.ObservabilityWebhookDestination`
+
+```python
+value: components.ObservabilityWebhookDestination = /* values here */
+```
+
diff --git a/docs/components/observabilityfilterrulesconfig.mdx b/docs/components/observabilityfilterrulesconfig.mdx
new file mode 100644
index 0000000..4633042
--- /dev/null
+++ b/docs/components/observabilityfilterrulesconfig.mdx
@@ -0,0 +1,13 @@
+---
+title: "ObservabilityFilterRulesConfig"
+---
+
+Optional structured filter rules controlling which events are forwarded.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | N/A |
+| `groups` | List[[components.Group](../components/group.mdx)] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/observabilityfilterrulesconfigvalue.mdx b/docs/components/observabilityfilterrulesconfigvalue.mdx
new file mode 100644
index 0000000..6b335f6
--- /dev/null
+++ b/docs/components/observabilityfilterrulesconfigvalue.mdx
@@ -0,0 +1,18 @@
+---
+title: "ObservabilityFilterRulesConfigValue"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `float`
+
+```python
+value: float = /* values here */
+```
+
diff --git a/docs/components/observabilitygrafanadestination.mdx b/docs/components/observabilitygrafanadestination.mdx
new file mode 100644
index 0000000..f0c1cfd
--- /dev/null
+++ b/docs/components/observabilitygrafanadestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityGrafanaDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityGrafanaDestinationConfig](../components/observabilitygrafanadestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityGrafanaDestinationType](../components/observabilitygrafanadestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilitygrafanadestinationconfig.mdx b/docs/components/observabilitygrafanadestinationconfig.mdx
new file mode 100644
index 0000000..34d561c
--- /dev/null
+++ b/docs/components/observabilitygrafanadestinationconfig.mdx
@@ -0,0 +1,12 @@
+---
+title: "ObservabilityGrafanaDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
+| `api_key` | *str* | :heavy_check_mark: | N/A |
+| `base_url` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `instance_id` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/observabilitygrafanadestinationtype.mdx b/docs/components/observabilitygrafanadestinationtype.mdx
new file mode 100644
index 0000000..b3a87a6
--- /dev/null
+++ b/docs/components/observabilitygrafanadestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityGrafanaDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityGrafanaDestinationType
+value: ObservabilityGrafanaDestinationType = "grafana"
+```
+
+
+## Values
+
+- `"grafana"`
diff --git a/docs/components/observabilitylangfusedestination.mdx b/docs/components/observabilitylangfusedestination.mdx
new file mode 100644
index 0000000..5364c63
--- /dev/null
+++ b/docs/components/observabilitylangfusedestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityLangfuseDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityLangfuseDestinationConfig](../components/observabilitylangfusedestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityLangfuseDestinationType](../components/observabilitylangfusedestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilitylangfusedestinationconfig.mdx b/docs/components/observabilitylangfusedestinationconfig.mdx
new file mode 100644
index 0000000..cabadb2
--- /dev/null
+++ b/docs/components/observabilitylangfusedestinationconfig.mdx
@@ -0,0 +1,12 @@
+---
+title: "ObservabilityLangfuseDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
+| `base_url` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `public_key` | *str* | :heavy_check_mark: | N/A |
+| `secret_key` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/observabilitylangfusedestinationtype.mdx b/docs/components/observabilitylangfusedestinationtype.mdx
new file mode 100644
index 0000000..0a0ef90
--- /dev/null
+++ b/docs/components/observabilitylangfusedestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityLangfuseDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityLangfuseDestinationType
+value: ObservabilityLangfuseDestinationType = "langfuse"
+```
+
+
+## Values
+
+- `"langfuse"`
diff --git a/docs/components/observabilitylangsmithdestination.mdx b/docs/components/observabilitylangsmithdestination.mdx
new file mode 100644
index 0000000..20e1a3e
--- /dev/null
+++ b/docs/components/observabilitylangsmithdestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityLangsmithDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityLangsmithDestinationConfig](../components/observabilitylangsmithdestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityLangsmithDestinationType](../components/observabilitylangsmithdestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilitylangsmithdestinationconfig.mdx b/docs/components/observabilitylangsmithdestinationconfig.mdx
new file mode 100644
index 0000000..0a1f76e
--- /dev/null
+++ b/docs/components/observabilitylangsmithdestinationconfig.mdx
@@ -0,0 +1,13 @@
+---
+title: "ObservabilityLangsmithDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
+| `api_key` | *str* | :heavy_check_mark: | N/A |
+| `endpoint` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `project` | *Optional[str]* | :heavy_minus_sign: | The name for this project, such as pr-openrouter-demo. Defaults to "main" if not set. |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Required for org-scoped API keys. Find this in your LangSmith workspace settings. |
\ No newline at end of file
diff --git a/docs/components/observabilitylangsmithdestinationtype.mdx b/docs/components/observabilitylangsmithdestinationtype.mdx
new file mode 100644
index 0000000..4cc128c
--- /dev/null
+++ b/docs/components/observabilitylangsmithdestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityLangsmithDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityLangsmithDestinationType
+value: ObservabilityLangsmithDestinationType = "langsmith"
+```
+
+
+## Values
+
+- `"langsmith"`
diff --git a/docs/components/observabilitynewrelicdestination.mdx b/docs/components/observabilitynewrelicdestination.mdx
new file mode 100644
index 0000000..b04a7f8
--- /dev/null
+++ b/docs/components/observabilitynewrelicdestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityNewrelicDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityNewrelicDestinationConfig](../components/observabilitynewrelicdestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityNewrelicDestinationType](../components/observabilitynewrelicdestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilitynewrelicdestinationconfig.mdx b/docs/components/observabilitynewrelicdestinationconfig.mdx
new file mode 100644
index 0000000..eb8542d
--- /dev/null
+++ b/docs/components/observabilitynewrelicdestinationconfig.mdx
@@ -0,0 +1,11 @@
+---
+title: "ObservabilityNewrelicDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `license_key` | *str* | :heavy_check_mark: | N/A |
+| `region` | [Optional[components.Region]](../components/region.mdx) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/observabilitynewrelicdestinationtype.mdx b/docs/components/observabilitynewrelicdestinationtype.mdx
new file mode 100644
index 0000000..8f74ec6
--- /dev/null
+++ b/docs/components/observabilitynewrelicdestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityNewrelicDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityNewrelicDestinationType
+value: ObservabilityNewrelicDestinationType = "newrelic"
+```
+
+
+## Values
+
+- `"newrelic"`
diff --git a/docs/components/observabilityopikdestination.mdx b/docs/components/observabilityopikdestination.mdx
new file mode 100644
index 0000000..82ab82d
--- /dev/null
+++ b/docs/components/observabilityopikdestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityOpikDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityOpikDestinationConfig](../components/observabilityopikdestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityOpikDestinationType](../components/observabilityopikdestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilityopikdestinationconfig.mdx b/docs/components/observabilityopikdestinationconfig.mdx
new file mode 100644
index 0000000..ce71d1f
--- /dev/null
+++ b/docs/components/observabilityopikdestinationconfig.mdx
@@ -0,0 +1,12 @@
+---
+title: "ObservabilityOpikDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
+| `api_key` | *str* | :heavy_check_mark: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `project_name` | *str* | :heavy_check_mark: | N/A |
+| `workspace` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/observabilityopikdestinationtype.mdx b/docs/components/observabilityopikdestinationtype.mdx
new file mode 100644
index 0000000..f768937
--- /dev/null
+++ b/docs/components/observabilityopikdestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityOpikDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityOpikDestinationType
+value: ObservabilityOpikDestinationType = "opik"
+```
+
+
+## Values
+
+- `"opik"`
diff --git a/docs/components/observabilityotelcollectordestination.mdx b/docs/components/observabilityotelcollectordestination.mdx
new file mode 100644
index 0000000..43f3a51
--- /dev/null
+++ b/docs/components/observabilityotelcollectordestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityOtelCollectorDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityOtelCollectorDestinationConfig](../components/observabilityotelcollectordestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityOtelCollectorDestinationType](../components/observabilityotelcollectordestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilityotelcollectordestinationconfig.mdx b/docs/components/observabilityotelcollectordestinationconfig.mdx
new file mode 100644
index 0000000..c0e46e2
--- /dev/null
+++ b/docs/components/observabilityotelcollectordestinationconfig.mdx
@@ -0,0 +1,10 @@
+---
+title: "ObservabilityOtelCollectorDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `endpoint` | *str* | :heavy_check_mark: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers as a JSON object. For Axiom, use \{"Authorization": "Bearer xaat-xxx", "X-Axiom-Dataset": "your-dataset"} |
\ No newline at end of file
diff --git a/docs/components/observabilityotelcollectordestinationtype.mdx b/docs/components/observabilityotelcollectordestinationtype.mdx
new file mode 100644
index 0000000..04d51fc
--- /dev/null
+++ b/docs/components/observabilityotelcollectordestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityOtelCollectorDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityOtelCollectorDestinationType
+value: ObservabilityOtelCollectorDestinationType = "otel-collector"
+```
+
+
+## Values
+
+- `"otel-collector"`
diff --git a/docs/components/observabilityposthogdestination.mdx b/docs/components/observabilityposthogdestination.mdx
new file mode 100644
index 0000000..e6b8ee1
--- /dev/null
+++ b/docs/components/observabilityposthogdestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityPosthogDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityPosthogDestinationConfig](../components/observabilityposthogdestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityPosthogDestinationType](../components/observabilityposthogdestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilityposthogdestinationconfig.mdx b/docs/components/observabilityposthogdestinationconfig.mdx
new file mode 100644
index 0000000..2c0c48d
--- /dev/null
+++ b/docs/components/observabilityposthogdestinationconfig.mdx
@@ -0,0 +1,11 @@
+---
+title: "ObservabilityPosthogDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
+| `api_key` | *str* | :heavy_check_mark: | N/A |
+| `endpoint` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
\ No newline at end of file
diff --git a/docs/components/observabilityposthogdestinationtype.mdx b/docs/components/observabilityposthogdestinationtype.mdx
new file mode 100644
index 0000000..15d5f4b
--- /dev/null
+++ b/docs/components/observabilityposthogdestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityPosthogDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityPosthogDestinationType
+value: ObservabilityPosthogDestinationType = "posthog"
+```
+
+
+## Values
+
+- `"posthog"`
diff --git a/docs/components/observabilityrampdestination.mdx b/docs/components/observabilityrampdestination.mdx
new file mode 100644
index 0000000..7821836
--- /dev/null
+++ b/docs/components/observabilityrampdestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityRampDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityRampDestinationConfig](../components/observabilityrampdestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityRampDestinationType](../components/observabilityrampdestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilityrampdestinationconfig.mdx b/docs/components/observabilityrampdestinationconfig.mdx
new file mode 100644
index 0000000..809d417
--- /dev/null
+++ b/docs/components/observabilityrampdestinationconfig.mdx
@@ -0,0 +1,11 @@
+---
+title: "ObservabilityRampDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- |
+| `api_key` | *str* | :heavy_check_mark: | Generate this in your Ramp integration settings. |
+| `base_url` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to Ramp. |
\ No newline at end of file
diff --git a/docs/components/observabilityrampdestinationtype.mdx b/docs/components/observabilityrampdestinationtype.mdx
new file mode 100644
index 0000000..c344370
--- /dev/null
+++ b/docs/components/observabilityrampdestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityRampDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityRampDestinationType
+value: ObservabilityRampDestinationType = "ramp"
+```
+
+
+## Values
+
+- `"ramp"`
diff --git a/docs/components/observabilitys3destination.mdx b/docs/components/observabilitys3destination.mdx
new file mode 100644
index 0000000..14ec127
--- /dev/null
+++ b/docs/components/observabilitys3destination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityS3Destination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityS3DestinationConfig](../components/observabilitys3destinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityS3DestinationType](../components/observabilitys3destinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilitys3destinationconfig.mdx b/docs/components/observabilitys3destinationconfig.mdx
new file mode 100644
index 0000000..3974209
--- /dev/null
+++ b/docs/components/observabilitys3destinationconfig.mdx
@@ -0,0 +1,17 @@
+---
+title: "ObservabilityS3DestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `access_key_id` | *str* | :heavy_check_mark: | N/A |
+| `bucket_name` | *str* | :heavy_check_mark: | N/A |
+| `endpoint` | *Optional[str]* | :heavy_minus_sign: | Only for S3-compatible services like Cloudflare R2 (https://account-id.r2.cloudflarestorage.com) or MinIO. Leave blank for standard AWS S3. |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `path_template` | *Optional[str]* | :heavy_minus_sign: | Template for S3 object path. The filename (\{traceId}-\{timestamp}.json) is automatically appended. Available variables: \{prefix}, \{date}, \{year}, \{month}, \{day}, \{apiKeyName} |
+| `prefix` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `region` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `secret_access_key` | *str* | :heavy_check_mark: | N/A |
+| `session_token` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/observabilitys3destinationtype.mdx b/docs/components/observabilitys3destinationtype.mdx
new file mode 100644
index 0000000..0ef939a
--- /dev/null
+++ b/docs/components/observabilitys3destinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityS3DestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityS3DestinationType
+value: ObservabilityS3DestinationType = "s3"
+```
+
+
+## Values
+
+- `"s3"`
diff --git a/docs/components/observabilitysentrydestination.mdx b/docs/components/observabilitysentrydestination.mdx
new file mode 100644
index 0000000..6f37f7d
--- /dev/null
+++ b/docs/components/observabilitysentrydestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilitySentryDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilitySentryDestinationConfig](../components/observabilitysentrydestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilitySentryDestinationType](../components/observabilitysentrydestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilitysentrydestinationconfig.mdx b/docs/components/observabilitysentrydestinationconfig.mdx
new file mode 100644
index 0000000..99f775d
--- /dev/null
+++ b/docs/components/observabilitysentrydestinationconfig.mdx
@@ -0,0 +1,11 @@
+---
+title: "ObservabilitySentryDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
+| `dsn` | *str* | :heavy_check_mark: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `otlp_endpoint` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/observabilitysentrydestinationtype.mdx b/docs/components/observabilitysentrydestinationtype.mdx
new file mode 100644
index 0000000..b4948a3
--- /dev/null
+++ b/docs/components/observabilitysentrydestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilitySentryDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilitySentryDestinationType
+value: ObservabilitySentryDestinationType = "sentry"
+```
+
+
+## Values
+
+- `"sentry"`
diff --git a/docs/components/observabilitysnowflakedestination.mdx b/docs/components/observabilitysnowflakedestination.mdx
new file mode 100644
index 0000000..0cc7f73
--- /dev/null
+++ b/docs/components/observabilitysnowflakedestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilitySnowflakeDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilitySnowflakeDestinationConfig](../components/observabilitysnowflakedestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilitySnowflakeDestinationType](../components/observabilitysnowflakedestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilitysnowflakedestinationconfig.mdx b/docs/components/observabilitysnowflakedestinationconfig.mdx
new file mode 100644
index 0000000..5ad320c
--- /dev/null
+++ b/docs/components/observabilitysnowflakedestinationconfig.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilitySnowflakeDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
+| `account` | *str* | :heavy_check_mark: | N/A |
+| `database` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `schema_` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `table` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `token` | *str* | :heavy_check_mark: | N/A |
+| `warehouse` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/observabilitysnowflakedestinationtype.mdx b/docs/components/observabilitysnowflakedestinationtype.mdx
new file mode 100644
index 0000000..c3cc873
--- /dev/null
+++ b/docs/components/observabilitysnowflakedestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilitySnowflakeDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilitySnowflakeDestinationType
+value: ObservabilitySnowflakeDestinationType = "snowflake"
+```
+
+
+## Values
+
+- `"snowflake"`
diff --git a/docs/components/observabilityweavedestination.mdx b/docs/components/observabilityweavedestination.mdx
new file mode 100644
index 0000000..4f9d6b1
--- /dev/null
+++ b/docs/components/observabilityweavedestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityWeaveDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityWeaveDestinationConfig](../components/observabilityweavedestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityWeaveDestinationType](../components/observabilityweavedestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilityweavedestinationconfig.mdx b/docs/components/observabilityweavedestinationconfig.mdx
new file mode 100644
index 0000000..8900785
--- /dev/null
+++ b/docs/components/observabilityweavedestinationconfig.mdx
@@ -0,0 +1,13 @@
+---
+title: "ObservabilityWeaveDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
+| `api_key` | *str* | :heavy_check_mark: | N/A |
+| `base_url` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `entity` | *str* | :heavy_check_mark: | N/A |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | Custom HTTP headers to include in requests to this destination. |
+| `project` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/observabilityweavedestinationtype.mdx b/docs/components/observabilityweavedestinationtype.mdx
new file mode 100644
index 0000000..dcaffb2
--- /dev/null
+++ b/docs/components/observabilityweavedestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityWeaveDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityWeaveDestinationType
+value: ObservabilityWeaveDestinationType = "weave"
+```
+
+
+## Values
+
+- `"weave"`
diff --git a/docs/components/observabilitywebhookdestination.mdx b/docs/components/observabilitywebhookdestination.mdx
new file mode 100644
index 0000000..6be7531
--- /dev/null
+++ b/docs/components/observabilitywebhookdestination.mdx
@@ -0,0 +1,20 @@
+---
+title: "ObservabilityWebhookDestination"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_check_mark: | Optional allowlist of OpenRouter API key hashes (`api_keys.hash`) whose traffic is forwarded to this destination. `null` means all keys. | null |
+| `config` | [components.ObservabilityWebhookDestinationConfig](../components/observabilitywebhookdestinationconfig.mdx) | :heavy_check_mark: | N/A | |
+| `created_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was created. | 2025-08-24T10:30:00Z |
+| `enabled` | *bool* | :heavy_check_mark: | Whether this destination is currently enabled. | true |
+| `filter_rules` | [Nullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_check_mark: | Optional structured filter rules controlling which events are forwarded. | null |
+| `id` | *str* | :heavy_check_mark: | Stable public identifier for this destination. | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `name` | *Nullable[str]* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *bool* | :heavy_check_mark: | When true, request/response bodies are not forwarded to this destination — only metadata. | false |
+| `sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for events sent to this destination, between 0.0001 and 1 (1 = 100%). | 1 |
+| `type` | [components.ObservabilityWebhookDestinationType](../components/observabilitywebhookdestinationtype.mdx) | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | ISO timestamp of when the destination was last updated. | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace this destination belongs to. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/observabilitywebhookdestinationconfig.mdx b/docs/components/observabilitywebhookdestinationconfig.mdx
new file mode 100644
index 0000000..8dab0b1
--- /dev/null
+++ b/docs/components/observabilitywebhookdestinationconfig.mdx
@@ -0,0 +1,11 @@
+---
+title: "ObservabilityWebhookDestinationConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
+| `headers` | Dict[str, *str*] | :heavy_minus_sign: | N/A |
+| `method` | [Optional[components.Method]](../components/method.mdx) | :heavy_minus_sign: | N/A |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/observabilitywebhookdestinationtype.mdx b/docs/components/observabilitywebhookdestinationtype.mdx
new file mode 100644
index 0000000..bf3c27b
--- /dev/null
+++ b/docs/components/observabilitywebhookdestinationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObservabilityWebhookDestinationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ObservabilityWebhookDestinationType
+value: ObservabilityWebhookDestinationType = "webhook"
+```
+
+
+## Values
+
+- `"webhook"`
diff --git a/docs/components/only.mdx b/docs/components/only.mdx
new file mode 100644
index 0000000..cc284e2
--- /dev/null
+++ b/docs/components/only.mdx
@@ -0,0 +1,18 @@
+---
+title: "Only"
+---
+
+## Supported Types
+
+### `components.ProviderName`
+
+```python
+value: components.ProviderName = /* values here */
+```
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
diff --git a/docs/components/openairesponsecustomtoolcall.mdx b/docs/components/openairesponsecustomtoolcall.mdx
new file mode 100644
index 0000000..6d91912
--- /dev/null
+++ b/docs/components/openairesponsecustomtoolcall.mdx
@@ -0,0 +1,14 @@
+---
+title: "OpenAIResponseCustomToolCall"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `call_id` | *str* | :heavy_check_mark: | N/A |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `input` | *str* | :heavy_check_mark: | N/A |
+| `name` | *str* | :heavy_check_mark: | N/A |
+| `namespace` | *Optional[str]* | :heavy_minus_sign: | Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server) |
+| `type` | [components.OpenAIResponseCustomToolCallType](../components/openairesponsecustomtoolcalltype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/openairesponsecustomtoolcalloutput.mdx b/docs/components/openairesponsecustomtoolcalloutput.mdx
new file mode 100644
index 0000000..a553965
--- /dev/null
+++ b/docs/components/openairesponsecustomtoolcalloutput.mdx
@@ -0,0 +1,12 @@
+---
+title: "OpenAIResponseCustomToolCallOutput"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `call_id` | *str* | :heavy_check_mark: | N/A |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `output` | [components.OpenAIResponseCustomToolCallOutputOutput2](../components/openairesponsecustomtoolcalloutputoutput2.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.OpenAIResponseCustomToolCallOutputType](../components/openairesponsecustomtoolcalloutputtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/openairesponsecustomtoolcalloutputoutput1.mdx b/docs/components/openairesponsecustomtoolcalloutputoutput1.mdx
new file mode 100644
index 0000000..ef5467e
--- /dev/null
+++ b/docs/components/openairesponsecustomtoolcalloutputoutput1.mdx
@@ -0,0 +1,24 @@
+---
+title: "OpenAIResponseCustomToolCallOutputOutput1"
+---
+
+## Supported Types
+
+### `components.InputFile`
+
+```python
+value: components.InputFile = /* values here */
+```
+
+### `components.InputImage`
+
+```python
+value: components.InputImage = /* values here */
+```
+
+### `components.InputText`
+
+```python
+value: components.InputText = /* values here */
+```
+
diff --git a/docs/components/openairesponsecustomtoolcalloutputoutput2.mdx b/docs/components/openairesponsecustomtoolcalloutputoutput2.mdx
new file mode 100644
index 0000000..74b5365
--- /dev/null
+++ b/docs/components/openairesponsecustomtoolcalloutputoutput2.mdx
@@ -0,0 +1,18 @@
+---
+title: "OpenAIResponseCustomToolCallOutputOutput2"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.OpenAIResponseCustomToolCallOutputOutput1]`
+
+```python
+value: List[components.OpenAIResponseCustomToolCallOutputOutput1] = /* values here */
+```
+
diff --git a/docs/components/openairesponsecustomtoolcalloutputtype.mdx b/docs/components/openairesponsecustomtoolcalloutputtype.mdx
new file mode 100644
index 0000000..6ccce45
--- /dev/null
+++ b/docs/components/openairesponsecustomtoolcalloutputtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponseCustomToolCallOutputType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponseCustomToolCallOutputType
+value: OpenAIResponseCustomToolCallOutputType = "custom_tool_call_output"
+```
+
+
+## Values
+
+- `"custom_tool_call_output"`
diff --git a/docs/components/openairesponsecustomtoolcalltype.mdx b/docs/components/openairesponsecustomtoolcalltype.mdx
new file mode 100644
index 0000000..8c38bc0
--- /dev/null
+++ b/docs/components/openairesponsecustomtoolcalltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponseCustomToolCallType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponseCustomToolCallType
+value: OpenAIResponseCustomToolCallType = "custom_tool_call"
+```
+
+
+## Values
+
+- `"custom_tool_call"`
diff --git a/docs/components/openairesponsefunctiontoolcall.mdx b/docs/components/openairesponsefunctiontoolcall.mdx
new file mode 100644
index 0000000..efdbbbc
--- /dev/null
+++ b/docs/components/openairesponsefunctiontoolcall.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponseFunctionToolCall"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `arguments` | *str* | :heavy_check_mark: | N/A | |
+| `call_id` | *str* | :heavy_check_mark: | N/A | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `namespace` | *Optional[str]* | :heavy_minus_sign: | Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server) | |
+| `status` | [Optional[components.ToolCallStatus]](../components/toolcallstatus.mdx) | :heavy_minus_sign: | N/A | completed |
+| `type` | [components.OpenAIResponseFunctionToolCallType](../components/openairesponsefunctiontoolcalltype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/openairesponsefunctiontoolcalloutput.mdx b/docs/components/openairesponsefunctiontoolcalloutput.mdx
new file mode 100644
index 0000000..0ccfaaf
--- /dev/null
+++ b/docs/components/openairesponsefunctiontoolcalloutput.mdx
@@ -0,0 +1,13 @@
+---
+title: "OpenAIResponseFunctionToolCallOutput"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
+| `call_id` | *str* | :heavy_check_mark: | N/A | |
+| `id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `output` | [components.OpenAIResponseFunctionToolCallOutputOutput2](../components/openairesponsefunctiontoolcalloutputoutput2.mdx) | :heavy_check_mark: | N/A | |
+| `status` | [OptionalNullable[components.OpenAIResponseFunctionToolCallOutputStatus]](../components/openairesponsefunctiontoolcalloutputstatus.mdx) | :heavy_minus_sign: | N/A | completed |
+| `type` | [components.OpenAIResponseFunctionToolCallOutputType](../components/openairesponsefunctiontoolcalloutputtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/openairesponsefunctiontoolcalloutputoutput1.mdx b/docs/components/openairesponsefunctiontoolcalloutputoutput1.mdx
new file mode 100644
index 0000000..b2fb9df
--- /dev/null
+++ b/docs/components/openairesponsefunctiontoolcalloutputoutput1.mdx
@@ -0,0 +1,24 @@
+---
+title: "OpenAIResponseFunctionToolCallOutputOutput1"
+---
+
+## Supported Types
+
+### `components.InputFile`
+
+```python
+value: components.InputFile = /* values here */
+```
+
+### `components.InputImage`
+
+```python
+value: components.InputImage = /* values here */
+```
+
+### `components.InputText`
+
+```python
+value: components.InputText = /* values here */
+```
+
diff --git a/docs/components/openairesponsefunctiontoolcalloutputoutput2.mdx b/docs/components/openairesponsefunctiontoolcalloutputoutput2.mdx
new file mode 100644
index 0000000..3b498b5
--- /dev/null
+++ b/docs/components/openairesponsefunctiontoolcalloutputoutput2.mdx
@@ -0,0 +1,18 @@
+---
+title: "OpenAIResponseFunctionToolCallOutputOutput2"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.OpenAIResponseFunctionToolCallOutputOutput1]`
+
+```python
+value: List[components.OpenAIResponseFunctionToolCallOutputOutput1] = /* values here */
+```
+
diff --git a/docs/components/openairesponsefunctiontoolcalloutputstatus.mdx b/docs/components/openairesponsefunctiontoolcalloutputstatus.mdx
new file mode 100644
index 0000000..d5e7af3
--- /dev/null
+++ b/docs/components/openairesponsefunctiontoolcalloutputstatus.mdx
@@ -0,0 +1,21 @@
+---
+title: "OpenAIResponseFunctionToolCallOutputStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponseFunctionToolCallOutputStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: OpenAIResponseFunctionToolCallOutputStatus = "in_progress"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"in_progress"`
+- `"completed"`
+- `"incomplete"`
diff --git a/docs/components/openairesponsefunctiontoolcalloutputtype.mdx b/docs/components/openairesponsefunctiontoolcalloutputtype.mdx
new file mode 100644
index 0000000..16e5b20
--- /dev/null
+++ b/docs/components/openairesponsefunctiontoolcalloutputtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponseFunctionToolCallOutputType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponseFunctionToolCallOutputType
+value: OpenAIResponseFunctionToolCallOutputType = "function_call_output"
+```
+
+
+## Values
+
+- `"function_call_output"`
diff --git a/docs/components/openairesponsefunctiontoolcalltype.mdx b/docs/components/openairesponsefunctiontoolcalltype.mdx
new file mode 100644
index 0000000..f0e32f3
--- /dev/null
+++ b/docs/components/openairesponsefunctiontoolcalltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponseFunctionToolCallType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponseFunctionToolCallType
+value: OpenAIResponseFunctionToolCallType = "function_call"
+```
+
+
+## Values
+
+- `"function_call"`
diff --git a/docs/components/openairesponseinputmessageitem.mdx b/docs/components/openairesponseinputmessageitem.mdx
new file mode 100644
index 0000000..8670ec0
--- /dev/null
+++ b/docs/components/openairesponseinputmessageitem.mdx
@@ -0,0 +1,12 @@
+---
+title: "OpenAIResponseInputMessageItem"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `content` | List[[components.OpenAIResponseInputMessageItemContent](../components/openairesponseinputmessageitemcontent.mdx)] | :heavy_check_mark: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `role` | [components.OpenAIResponseInputMessageItemRoleUnion](../components/openairesponseinputmessageitemroleunion.mdx) | :heavy_check_mark: | N/A |
+| `type` | [Optional[components.OpenAIResponseInputMessageItemType]](../components/openairesponseinputmessageitemtype.mdx) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/openairesponseinputmessageitemcontent.mdx b/docs/components/openairesponseinputmessageitemcontent.mdx
new file mode 100644
index 0000000..560a4f5
--- /dev/null
+++ b/docs/components/openairesponseinputmessageitemcontent.mdx
@@ -0,0 +1,30 @@
+---
+title: "OpenAIResponseInputMessageItemContent"
+---
+
+## Supported Types
+
+### `components.InputAudio`
+
+```python
+value: components.InputAudio = /* values here */
+```
+
+### `components.InputFile`
+
+```python
+value: components.InputFile = /* values here */
+```
+
+### `components.InputImage`
+
+```python
+value: components.InputImage = /* values here */
+```
+
+### `components.InputText`
+
+```python
+value: components.InputText = /* values here */
+```
+
diff --git a/docs/components/openairesponseinputmessageitemroledeveloper.mdx b/docs/components/openairesponseinputmessageitemroledeveloper.mdx
new file mode 100644
index 0000000..8470f14
--- /dev/null
+++ b/docs/components/openairesponseinputmessageitemroledeveloper.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponseInputMessageItemRoleDeveloper"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponseInputMessageItemRoleDeveloper
+value: OpenAIResponseInputMessageItemRoleDeveloper = "developer"
+```
+
+
+## Values
+
+- `"developer"`
diff --git a/docs/components/openairesponseinputmessageitemrolesystem.mdx b/docs/components/openairesponseinputmessageitemrolesystem.mdx
new file mode 100644
index 0000000..a09674e
--- /dev/null
+++ b/docs/components/openairesponseinputmessageitemrolesystem.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponseInputMessageItemRoleSystem"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponseInputMessageItemRoleSystem
+value: OpenAIResponseInputMessageItemRoleSystem = "system"
+```
+
+
+## Values
+
+- `"system"`
diff --git a/docs/components/openairesponseinputmessageitemroleunion.mdx b/docs/components/openairesponseinputmessageitemroleunion.mdx
new file mode 100644
index 0000000..6551653
--- /dev/null
+++ b/docs/components/openairesponseinputmessageitemroleunion.mdx
@@ -0,0 +1,24 @@
+---
+title: "OpenAIResponseInputMessageItemRoleUnion"
+---
+
+## Supported Types
+
+### `components.OpenAIResponseInputMessageItemRoleUser`
+
+```python
+value: components.OpenAIResponseInputMessageItemRoleUser = /* values here */
+```
+
+### `components.OpenAIResponseInputMessageItemRoleSystem`
+
+```python
+value: components.OpenAIResponseInputMessageItemRoleSystem = /* values here */
+```
+
+### `components.OpenAIResponseInputMessageItemRoleDeveloper`
+
+```python
+value: components.OpenAIResponseInputMessageItemRoleDeveloper = /* values here */
+```
+
diff --git a/docs/components/openairesponseinputmessageitemroleuser.mdx b/docs/components/openairesponseinputmessageitemroleuser.mdx
new file mode 100644
index 0000000..23b5d7e
--- /dev/null
+++ b/docs/components/openairesponseinputmessageitemroleuser.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponseInputMessageItemRoleUser"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponseInputMessageItemRoleUser
+value: OpenAIResponseInputMessageItemRoleUser = "user"
+```
+
+
+## Values
+
+- `"user"`
diff --git a/docs/components/openairesponseinputmessageitemtype.mdx b/docs/components/openairesponseinputmessageitemtype.mdx
new file mode 100644
index 0000000..27637b7
--- /dev/null
+++ b/docs/components/openairesponseinputmessageitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponseInputMessageItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponseInputMessageItemType
+value: OpenAIResponseInputMessageItemType = "message"
+```
+
+
+## Values
+
+- `"message"`
diff --git a/docs/components/openairesponsesannotation.md b/docs/components/openairesponsesannotation.mdx
similarity index 87%
rename from docs/components/openairesponsesannotation.md
rename to docs/components/openairesponsesannotation.mdx
index e3b6962..d5de3b2 100644
--- a/docs/components/openairesponsesannotation.md
+++ b/docs/components/openairesponsesannotation.mdx
@@ -1,5 +1,6 @@
-# OpenAIResponsesAnnotation
-
+---
+title: "OpenAIResponsesAnnotation"
+---
## Supported Types
diff --git a/docs/components/openairesponsesrefusalcontent.md b/docs/components/openairesponsesrefusalcontent.mdx
similarity index 88%
rename from docs/components/openairesponsesrefusalcontent.md
rename to docs/components/openairesponsesrefusalcontent.mdx
index ea13450..c687dab 100644
--- a/docs/components/openairesponsesrefusalcontent.md
+++ b/docs/components/openairesponsesrefusalcontent.mdx
@@ -1,9 +1,10 @@
-# OpenAIResponsesRefusalContent
-
+---
+title: "OpenAIResponsesRefusalContent"
+---
## Fields
| Field | Type | Required | Description |
| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| `refusal` | *str* | :heavy_check_mark: | N/A |
-| `type` | [components.OpenAIResponsesRefusalContentType](../components/openairesponsesrefusalcontenttype.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `type` | [components.OpenAIResponsesRefusalContentType](../components/openairesponsesrefusalcontenttype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/openairesponsesrefusalcontenttype.md b/docs/components/openairesponsesrefusalcontenttype.md
deleted file mode 100644
index e94bdd2..0000000
--- a/docs/components/openairesponsesrefusalcontenttype.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OpenAIResponsesRefusalContentType
-
-
-## Values
-
-| Name | Value |
-| --------- | --------- |
-| `REFUSAL` | refusal |
\ No newline at end of file
diff --git a/docs/components/openairesponsesrefusalcontenttype.mdx b/docs/components/openairesponsesrefusalcontenttype.mdx
new file mode 100644
index 0000000..c1d90a5
--- /dev/null
+++ b/docs/components/openairesponsesrefusalcontenttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponsesRefusalContentType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponsesRefusalContentType
+value: OpenAIResponsesRefusalContentType = "refusal"
+```
+
+
+## Values
+
+- `"refusal"`
diff --git a/docs/components/openairesponsesresponsestatus.md b/docs/components/openairesponsesresponsestatus.md
deleted file mode 100644
index a362844..0000000
--- a/docs/components/openairesponsesresponsestatus.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# OpenAIResponsesResponseStatus
-
-
-## Values
-
-| Name | Value |
-| ------------- | ------------- |
-| `COMPLETED` | completed |
-| `INCOMPLETE` | incomplete |
-| `IN_PROGRESS` | in_progress |
-| `FAILED` | failed |
-| `CANCELLED` | cancelled |
-| `QUEUED` | queued |
\ No newline at end of file
diff --git a/docs/components/openairesponsesresponsestatus.mdx b/docs/components/openairesponsesresponsestatus.mdx
new file mode 100644
index 0000000..c833b87
--- /dev/null
+++ b/docs/components/openairesponsesresponsestatus.mdx
@@ -0,0 +1,24 @@
+---
+title: "OpenAIResponsesResponseStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponsesResponseStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: OpenAIResponsesResponseStatus = "completed"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"completed"`
+- `"incomplete"`
+- `"in_progress"`
+- `"failed"`
+- `"cancelled"`
+- `"queued"`
diff --git a/docs/components/openairesponsestoolchoice.md b/docs/components/openairesponsestoolchoice.mdx
similarity index 73%
rename from docs/components/openairesponsestoolchoice.md
rename to docs/components/openairesponsestoolchoice.mdx
index 72b8738..71090a1 100644
--- a/docs/components/openairesponsestoolchoice.md
+++ b/docs/components/openairesponsestoolchoice.mdx
@@ -1,8 +1,9 @@
-# OpenAIResponsesToolChoice
-
+---
+title: "OpenAIResponsesToolChoice"
+---
## Fields
| Field | Type | Required | Description |
| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
-| `type` | [components.Type](../components/type.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `type` | [components.Type](../components/type.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/openairesponsestoolchoiceapplypatch.mdx b/docs/components/openairesponsestoolchoiceapplypatch.mdx
new file mode 100644
index 0000000..de012d5
--- /dev/null
+++ b/docs/components/openairesponsestoolchoiceapplypatch.mdx
@@ -0,0 +1,9 @@
+---
+title: "OpenAIResponsesToolChoiceApplyPatch"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `type` | [components.OpenAIResponsesToolChoiceTypeApplyPatch](../components/openairesponsestoolchoicetypeapplypatch.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/openairesponsestoolchoiceauto.md b/docs/components/openairesponsestoolchoiceauto.md
deleted file mode 100644
index 5a958ab..0000000
--- a/docs/components/openairesponsestoolchoiceauto.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OpenAIResponsesToolChoiceAuto
-
-
-## Values
-
-| Name | Value |
-| ------ | ------ |
-| `AUTO` | auto |
\ No newline at end of file
diff --git a/docs/components/openairesponsestoolchoiceauto.mdx b/docs/components/openairesponsestoolchoiceauto.mdx
new file mode 100644
index 0000000..b91f4fb
--- /dev/null
+++ b/docs/components/openairesponsestoolchoiceauto.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponsesToolChoiceAuto"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponsesToolChoiceAuto
+value: OpenAIResponsesToolChoiceAuto = "auto"
+```
+
+
+## Values
+
+- `"auto"`
diff --git a/docs/components/openairesponsestoolchoicefunction.md b/docs/components/openairesponsestoolchoicefunction.mdx
similarity index 87%
rename from docs/components/openairesponsestoolchoicefunction.md
rename to docs/components/openairesponsestoolchoicefunction.mdx
index 9163b3d..e08dad5 100644
--- a/docs/components/openairesponsestoolchoicefunction.md
+++ b/docs/components/openairesponsestoolchoicefunction.mdx
@@ -1,9 +1,10 @@
-# OpenAIResponsesToolChoiceFunction
-
+---
+title: "OpenAIResponsesToolChoiceFunction"
+---
## Fields
| Field | Type | Required | Description |
| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `name` | *str* | :heavy_check_mark: | N/A |
-| `type` | [components.OpenAIResponsesToolChoiceTypeFunction](../components/openairesponsestoolchoicetypefunction.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `type` | [components.OpenAIResponsesToolChoiceTypeFunction](../components/openairesponsestoolchoicetypefunction.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/openairesponsestoolchoicenone.md b/docs/components/openairesponsestoolchoicenone.md
deleted file mode 100644
index d5c51ac..0000000
--- a/docs/components/openairesponsestoolchoicenone.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OpenAIResponsesToolChoiceNone
-
-
-## Values
-
-| Name | Value |
-| ------ | ------ |
-| `NONE` | none |
\ No newline at end of file
diff --git a/docs/components/openairesponsestoolchoicenone.mdx b/docs/components/openairesponsestoolchoicenone.mdx
new file mode 100644
index 0000000..8b1df80
--- /dev/null
+++ b/docs/components/openairesponsestoolchoicenone.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponsesToolChoiceNone"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponsesToolChoiceNone
+value: OpenAIResponsesToolChoiceNone = "none"
+```
+
+
+## Values
+
+- `"none"`
diff --git a/docs/components/openairesponsestoolchoicerequired.md b/docs/components/openairesponsestoolchoicerequired.md
deleted file mode 100644
index 57aefba..0000000
--- a/docs/components/openairesponsestoolchoicerequired.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OpenAIResponsesToolChoiceRequired
-
-
-## Values
-
-| Name | Value |
-| ---------- | ---------- |
-| `REQUIRED` | required |
\ No newline at end of file
diff --git a/docs/components/openairesponsestoolchoicerequired.mdx b/docs/components/openairesponsestoolchoicerequired.mdx
new file mode 100644
index 0000000..e7f185a
--- /dev/null
+++ b/docs/components/openairesponsestoolchoicerequired.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponsesToolChoiceRequired"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponsesToolChoiceRequired
+value: OpenAIResponsesToolChoiceRequired = "required"
+```
+
+
+## Values
+
+- `"required"`
diff --git a/docs/components/openairesponsestoolchoiceshell.mdx b/docs/components/openairesponsestoolchoiceshell.mdx
new file mode 100644
index 0000000..b0451b7
--- /dev/null
+++ b/docs/components/openairesponsestoolchoiceshell.mdx
@@ -0,0 +1,9 @@
+---
+title: "OpenAIResponsesToolChoiceShell"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `type` | [components.OpenAIResponsesToolChoiceTypeShell](../components/openairesponsestoolchoicetypeshell.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/openairesponsestoolchoicetypeapplypatch.mdx b/docs/components/openairesponsestoolchoicetypeapplypatch.mdx
new file mode 100644
index 0000000..cc32b5a
--- /dev/null
+++ b/docs/components/openairesponsestoolchoicetypeapplypatch.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponsesToolChoiceTypeApplyPatch"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponsesToolChoiceTypeApplyPatch
+value: OpenAIResponsesToolChoiceTypeApplyPatch = "apply_patch"
+```
+
+
+## Values
+
+- `"apply_patch"`
diff --git a/docs/components/openairesponsestoolchoicetypefunction.md b/docs/components/openairesponsestoolchoicetypefunction.md
deleted file mode 100644
index de3caa3..0000000
--- a/docs/components/openairesponsestoolchoicetypefunction.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OpenAIResponsesToolChoiceTypeFunction
-
-
-## Values
-
-| Name | Value |
-| ---------- | ---------- |
-| `FUNCTION` | function |
\ No newline at end of file
diff --git a/docs/components/openairesponsestoolchoicetypefunction.mdx b/docs/components/openairesponsestoolchoicetypefunction.mdx
new file mode 100644
index 0000000..39952ef
--- /dev/null
+++ b/docs/components/openairesponsestoolchoicetypefunction.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponsesToolChoiceTypeFunction"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponsesToolChoiceTypeFunction
+value: OpenAIResponsesToolChoiceTypeFunction = "function"
+```
+
+
+## Values
+
+- `"function"`
diff --git a/docs/components/openairesponsestoolchoicetypeshell.mdx b/docs/components/openairesponsestoolchoicetypeshell.mdx
new file mode 100644
index 0000000..9c0bbd8
--- /dev/null
+++ b/docs/components/openairesponsestoolchoicetypeshell.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponsesToolChoiceTypeShell"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponsesToolChoiceTypeShell
+value: OpenAIResponsesToolChoiceTypeShell = "shell"
+```
+
+
+## Values
+
+- `"shell"`
diff --git a/docs/components/openairesponsestoolchoicetypewebsearchpreview.md b/docs/components/openairesponsestoolchoicetypewebsearchpreview.md
deleted file mode 100644
index 93b161b..0000000
--- a/docs/components/openairesponsestoolchoicetypewebsearchpreview.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OpenAIResponsesToolChoiceTypeWebSearchPreview
-
-
-## Values
-
-| Name | Value |
-| -------------------- | -------------------- |
-| `WEB_SEARCH_PREVIEW` | web_search_preview |
\ No newline at end of file
diff --git a/docs/components/openairesponsestoolchoicetypewebsearchpreview.mdx b/docs/components/openairesponsestoolchoicetypewebsearchpreview.mdx
new file mode 100644
index 0000000..febd1ed
--- /dev/null
+++ b/docs/components/openairesponsestoolchoicetypewebsearchpreview.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponsesToolChoiceTypeWebSearchPreview"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponsesToolChoiceTypeWebSearchPreview
+value: OpenAIResponsesToolChoiceTypeWebSearchPreview = "web_search_preview"
+```
+
+
+## Values
+
+- `"web_search_preview"`
diff --git a/docs/components/openairesponsestoolchoicetypewebsearchpreview20250311.md b/docs/components/openairesponsestoolchoicetypewebsearchpreview20250311.md
deleted file mode 100644
index 3162d39..0000000
--- a/docs/components/openairesponsestoolchoicetypewebsearchpreview20250311.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OpenAIResponsesToolChoiceTypeWebSearchPreview20250311
-
-
-## Values
-
-| Name | Value |
-| ------------------------------- | ------------------------------- |
-| `WEB_SEARCH_PREVIEW_2025_03_11` | web_search_preview_2025_03_11 |
\ No newline at end of file
diff --git a/docs/components/openairesponsestoolchoicetypewebsearchpreview20250311.mdx b/docs/components/openairesponsestoolchoicetypewebsearchpreview20250311.mdx
new file mode 100644
index 0000000..c23dcea
--- /dev/null
+++ b/docs/components/openairesponsestoolchoicetypewebsearchpreview20250311.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenAIResponsesToolChoiceTypeWebSearchPreview20250311"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponsesToolChoiceTypeWebSearchPreview20250311
+value: OpenAIResponsesToolChoiceTypeWebSearchPreview20250311 = "web_search_preview_2025_03_11"
+```
+
+
+## Values
+
+- `"web_search_preview_2025_03_11"`
diff --git a/docs/components/openairesponsestoolchoiceunion.md b/docs/components/openairesponsestoolchoiceunion.mdx
similarity index 95%
rename from docs/components/openairesponsestoolchoiceunion.md
rename to docs/components/openairesponsestoolchoiceunion.mdx
index 15e1482..d44bdba 100644
--- a/docs/components/openairesponsestoolchoiceunion.md
+++ b/docs/components/openairesponsestoolchoiceunion.mdx
@@ -1,5 +1,6 @@
-# OpenAIResponsesToolChoiceUnion
-
+---
+title: "OpenAIResponsesToolChoiceUnion"
+---
## Supported Types
diff --git a/docs/components/openairesponsestruncation.md b/docs/components/openairesponsestruncation.md
deleted file mode 100644
index aafecae..0000000
--- a/docs/components/openairesponsestruncation.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# OpenAIResponsesTruncation
-
-
-## Values
-
-| Name | Value |
-| ---------- | ---------- |
-| `AUTO` | auto |
-| `DISABLED` | disabled |
\ No newline at end of file
diff --git a/docs/components/openairesponsestruncation.mdx b/docs/components/openairesponsestruncation.mdx
new file mode 100644
index 0000000..58f86b3
--- /dev/null
+++ b/docs/components/openairesponsestruncation.mdx
@@ -0,0 +1,20 @@
+---
+title: "OpenAIResponsesTruncation"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenAIResponsesTruncation
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: OpenAIResponsesTruncation = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"disabled"`
diff --git a/docs/components/openresponsescreatedevent.mdx b/docs/components/openresponsescreatedevent.mdx
new file mode 100644
index 0000000..a0433fe
--- /dev/null
+++ b/docs/components/openresponsescreatedevent.mdx
@@ -0,0 +1,14 @@
+---
+title: "OpenResponsesCreatedEvent"
+---
+
+Event emitted when a response is created
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `response` | [components.OpenResponsesResult](../components/openresponsesresult.mdx) | :heavy_check_mark: | Complete non-streaming response from the Responses API | \{
"created_at": 1704067200,
"error": null,
"id": "resp-abc123",
"incomplete_details": null,
"instructions": null,
"max_output_tokens": null,
"metadata": null,
"model": "gpt-4",
"object": "response",
"output": [
\{
"content": [
\{
"annotations": [],
"text": "Hello! How can I help you today?",
"type": "output_text"
}
],
"id": "msg-abc123",
"role": "assistant",
"status": "completed",
"type": "message"
}
],
"parallel_tool_calls": true,
"status": "completed",
"temperature": null,
"tool_choice": "auto",
"tools": [],
"top_p": null,
"usage": \{
"input_tokens": 10,
"input_tokens_details": \{
"cached_tokens": 0
},
"output_tokens": 25,
"output_tokens_details": \{
"reasoning_tokens": 0
},
"total_tokens": 35
}
} |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A | |
+| `type` | [components.OpenResponsesCreatedEventType](../components/openresponsescreatedeventtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/openresponsescreatedeventtype.mdx b/docs/components/openresponsescreatedeventtype.mdx
new file mode 100644
index 0000000..0bde4b8
--- /dev/null
+++ b/docs/components/openresponsescreatedeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenResponsesCreatedEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenResponsesCreatedEventType
+value: OpenResponsesCreatedEventType = "response.created"
+```
+
+
+## Values
+
+- `"response.created"`
diff --git a/docs/components/openresponsesinprogressevent.mdx b/docs/components/openresponsesinprogressevent.mdx
new file mode 100644
index 0000000..a2e79d4
--- /dev/null
+++ b/docs/components/openresponsesinprogressevent.mdx
@@ -0,0 +1,14 @@
+---
+title: "OpenResponsesInProgressEvent"
+---
+
+Event emitted when a response is in progress
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `response` | [components.OpenResponsesResult](../components/openresponsesresult.mdx) | :heavy_check_mark: | Complete non-streaming response from the Responses API | \{
"created_at": 1704067200,
"error": null,
"id": "resp-abc123",
"incomplete_details": null,
"instructions": null,
"max_output_tokens": null,
"metadata": null,
"model": "gpt-4",
"object": "response",
"output": [
\{
"content": [
\{
"annotations": [],
"text": "Hello! How can I help you today?",
"type": "output_text"
}
],
"id": "msg-abc123",
"role": "assistant",
"status": "completed",
"type": "message"
}
],
"parallel_tool_calls": true,
"status": "completed",
"temperature": null,
"tool_choice": "auto",
"tools": [],
"top_p": null,
"usage": \{
"input_tokens": 10,
"input_tokens_details": \{
"cached_tokens": 0
},
"output_tokens": 25,
"output_tokens_details": \{
"reasoning_tokens": 0
},
"total_tokens": 35
}
} |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A | |
+| `type` | [components.OpenResponsesInProgressEventType](../components/openresponsesinprogresseventtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/openresponsesinprogresseventtype.mdx b/docs/components/openresponsesinprogresseventtype.mdx
new file mode 100644
index 0000000..09effe2
--- /dev/null
+++ b/docs/components/openresponsesinprogresseventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenResponsesInProgressEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenResponsesInProgressEventType
+value: OpenResponsesInProgressEventType = "response.in_progress"
+```
+
+
+## Values
+
+- `"response.in_progress"`
diff --git a/docs/components/openresponsesresult.mdx b/docs/components/openresponsesresult.mdx
new file mode 100644
index 0000000..b987eca
--- /dev/null
+++ b/docs/components/openresponsesresult.mdx
@@ -0,0 +1,47 @@
+---
+title: "OpenResponsesResult"
+---
+
+Complete non-streaming response from the Responses API
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
+| `completed_at` | *Nullable[int]* | :heavy_check_mark: | N/A | |
+| `created_at` | *int* | :heavy_check_mark: | N/A | |
+| `error` | [Nullable[components.ResponsesErrorField]](../components/responseserrorfield.mdx) | :heavy_check_mark: | Error information returned from the API | \{
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please try again later."
} |
+| `frequency_penalty` | *Nullable[float]* | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `incomplete_details` | [Nullable[components.IncompleteDetails]](../components/incompletedetails.mdx) | :heavy_check_mark: | N/A | \{
"reason": "max_output_tokens"
} |
+| `instructions` | [Nullable[components.BaseInputsUnion]](../components/baseinputsunion.mdx) | :heavy_check_mark: | N/A | [
\{
"content": "What is the weather today?",
"role": "user"
}
] |
+| `max_output_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
+| `max_tool_calls` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
+| `metadata` | Dict[str, *str*] | :heavy_check_mark: | Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed. | \{
"session_id": "abc-def-ghi",
"user_id": "123"
} |
+| `model` | *str* | :heavy_check_mark: | N/A | |
+| `object` | [components.OpenResponsesResultObject](../components/openresponsesresultobject.mdx) | :heavy_check_mark: | N/A | |
+| `output` | List[[components.OutputItems](../components/outputitems.mdx)] | :heavy_check_mark: | N/A | |
+| `output_text` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `parallel_tool_calls` | *bool* | :heavy_check_mark: | N/A | |
+| `presence_penalty` | *Nullable[float]* | :heavy_check_mark: | N/A | |
+| `previous_response_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `prompt` | [OptionalNullable[components.StoredPromptTemplate]](../components/storedprompttemplate.mdx) | :heavy_minus_sign: | N/A | \{
"id": "prompt-abc123",
"variables": \{
"name": "John"
}
} |
+| `prompt_cache_key` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `reasoning` | [OptionalNullable[components.BaseReasoningConfig]](../components/basereasoningconfig.mdx) | :heavy_minus_sign: | N/A | \{
"effort": "medium",
"summary": "auto"
} |
+| `safety_identifier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `service_tier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.OpenAIResponsesResponseStatus](../components/openairesponsesresponsestatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `store` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `temperature` | *Nullable[float]* | :heavy_check_mark: | N/A | |
+| `text` | [Optional[components.TextExtendedConfig]](../components/textextendedconfig.mdx) | :heavy_minus_sign: | Text output configuration including format and verbosity | \{
"format": \{
"type": "text"
}
} |
+| `tool_choice` | [components.OpenAIResponsesToolChoiceUnion](../components/openairesponsestoolchoiceunion.mdx) | :heavy_check_mark: | N/A | auto |
+| `tools` | List[[components.OpenResponsesResultToolUnion](../components/openresponsesresulttoolunion.mdx)] | :heavy_check_mark: | N/A | |
+| `top_logprobs` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `top_p` | *Nullable[float]* | :heavy_check_mark: | N/A | |
+| `truncation` | [OptionalNullable[components.Truncation]](../components/truncation.mdx) | :heavy_minus_sign: | N/A | auto |
+| `usage` | [OptionalNullable[components.Usage]](../components/usage.mdx) | :heavy_minus_sign: | Token usage information for the response | \{
"cost": 0.0012,
"cost_details": \{
"upstream_inference_cost": null,
"upstream_inference_input_cost": 0.0008,
"upstream_inference_output_cost": 0.0004
},
"input_tokens": 10,
"input_tokens_details": \{
"cached_tokens": 0
},
"output_tokens": 25,
"output_tokens_details": \{
"reasoning_tokens": 0
},
"total_tokens": 35
} |
+| `user` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `error_type` | [Optional[components.APIErrorType]](../components/apierrortype.mdx) | :heavy_minus_sign: | Canonical OpenRouter error type, stable across all API formats | rate_limit_exceeded |
+| `openrouter_metadata` | [Optional[components.OpenRouterMetadata]](../components/openroutermetadata.mdx) | :heavy_minus_sign: | N/A | \{
"attempt": 1,
"endpoints": \{
"available": [
\{
"model": "openai/gpt-4o",
"provider": "OpenAI",
"selected": true
}
],
"total": 1
},
"is_byok": false,
"region": "iad",
"requested": "openai/gpt-4o",
"strategy": "direct",
"summary": "available=1, selected=OpenAI"
} |
\ No newline at end of file
diff --git a/docs/components/openresponsesresultobject.mdx b/docs/components/openresponsesresultobject.mdx
new file mode 100644
index 0000000..53ba3e6
--- /dev/null
+++ b/docs/components/openresponsesresultobject.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenResponsesResultObject"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenResponsesResultObject
+value: OpenResponsesResultObject = "response"
+```
+
+
+## Values
+
+- `"response"`
diff --git a/docs/components/openresponsesresulttoolfunction.mdx b/docs/components/openresponsesresulttoolfunction.mdx
new file mode 100644
index 0000000..f0fbd6b
--- /dev/null
+++ b/docs/components/openresponsesresulttoolfunction.mdx
@@ -0,0 +1,16 @@
+---
+title: "OpenResponsesResultToolFunction"
+---
+
+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, *Nullable[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
diff --git a/docs/components/openresponsesresulttoolunion.mdx b/docs/components/openresponsesresulttoolunion.mdx
new file mode 100644
index 0000000..13ed401
--- /dev/null
+++ b/docs/components/openresponsesresulttoolunion.mdx
@@ -0,0 +1,90 @@
+---
+title: "OpenResponsesResultToolUnion"
+---
+
+## Supported Types
+
+### `components.OpenResponsesResultToolFunction`
+
+```python
+value: components.OpenResponsesResultToolFunction = /* values here */
+```
+
+### `components.PreviewWebSearchServerTool`
+
+```python
+value: components.PreviewWebSearchServerTool = /* values here */
+```
+
+### `components.Preview20250311WebSearchServerTool`
+
+```python
+value: components.Preview20250311WebSearchServerTool = /* values here */
+```
+
+### `components.LegacyWebSearchServerTool`
+
+```python
+value: components.LegacyWebSearchServerTool = /* values here */
+```
+
+### `components.WebSearchServerTool`
+
+```python
+value: components.WebSearchServerTool = /* values here */
+```
+
+### `components.FileSearchServerTool`
+
+```python
+value: components.FileSearchServerTool = /* values here */
+```
+
+### `components.ComputerUseServerTool`
+
+```python
+value: components.ComputerUseServerTool = /* values here */
+```
+
+### `components.CodeInterpreterServerTool`
+
+```python
+value: components.CodeInterpreterServerTool = /* values here */
+```
+
+### `components.McpServerTool`
+
+```python
+value: components.McpServerTool = /* values here */
+```
+
+### `components.ImageGenerationServerTool`
+
+```python
+value: components.ImageGenerationServerTool = /* values here */
+```
+
+### `components.CodexLocalShellTool`
+
+```python
+value: components.CodexLocalShellTool = /* values here */
+```
+
+### `components.ShellServerTool`
+
+```python
+value: components.ShellServerTool = /* values here */
+```
+
+### `components.ApplyPatchServerTool`
+
+```python
+value: components.ApplyPatchServerTool = /* values here */
+```
+
+### `components.CustomTool`
+
+```python
+value: components.CustomTool = /* values here */
+```
+
diff --git a/docs/components/openresponsesresulttype.mdx b/docs/components/openresponsesresulttype.mdx
new file mode 100644
index 0000000..6ef2ae2
--- /dev/null
+++ b/docs/components/openresponsesresulttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenResponsesResultType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenResponsesResultType
+value: OpenResponsesResultType = "function"
+```
+
+
+## Values
+
+- `"function"`
diff --git a/docs/components/openroutermetadata.mdx b/docs/components/openroutermetadata.mdx
new file mode 100644
index 0000000..812ccb2
--- /dev/null
+++ b/docs/components/openroutermetadata.mdx
@@ -0,0 +1,18 @@
+---
+title: "OpenRouterMetadata"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
+| `attempt` | *int* | :heavy_check_mark: | N/A | |
+| `attempts` | List[[components.RouterAttempt](../components/routerattempt.mdx)] | :heavy_minus_sign: | N/A | |
+| `endpoints` | [components.EndpointsMetadata](../components/endpointsmetadata.mdx) | :heavy_check_mark: | N/A | \{
"available": [
\{
"model": "openai/gpt-4o",
"provider": "OpenAI",
"selected": true
}
],
"total": 3
} |
+| `is_byok` | *bool* | :heavy_check_mark: | N/A | |
+| `params` | [Optional[components.RouterParams]](../components/routerparams.mdx) | :heavy_minus_sign: | N/A | \{
"version_group": "anthropic/claude-sonnet-4"
} |
+| `pipeline` | List[[components.PipelineStage](../components/pipelinestage.mdx)] | :heavy_minus_sign: | N/A | |
+| `region` | *Nullable[str]* | :heavy_check_mark: | N/A | |
+| `requested` | *str* | :heavy_check_mark: | N/A | |
+| `strategy` | [components.RoutingStrategy](../components/routingstrategy.mdx) | :heavy_check_mark: | N/A | direct |
+| `summary` | *str* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/openrouterwebsearchservertool.mdx b/docs/components/openrouterwebsearchservertool.mdx
new file mode 100644
index 0000000..3842a52
--- /dev/null
+++ b/docs/components/openrouterwebsearchservertool.mdx
@@ -0,0 +1,13 @@
+---
+title: "OpenRouterWebSearchServerTool"
+---
+
+OpenRouter built-in server tool: searches the web for current information
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `parameters` | [Optional[components.WebSearchConfig]](../components/websearchconfig.mdx) | :heavy_minus_sign: | N/A | \{
"max_results": 5,
"search_context_size": "medium"
} |
+| `type` | [components.OpenRouterWebSearchServerToolType](../components/openrouterwebsearchservertooltype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/openrouterwebsearchservertooltype.mdx b/docs/components/openrouterwebsearchservertooltype.mdx
new file mode 100644
index 0000000..6f2a785
--- /dev/null
+++ b/docs/components/openrouterwebsearchservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OpenRouterWebSearchServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OpenRouterWebSearchServerToolType
+value: OpenRouterWebSearchServerToolType = "openrouter:web_search"
+```
+
+
+## Values
+
+- `"openrouter:web_search"`
diff --git a/docs/components/operator.mdx b/docs/components/operator.mdx
new file mode 100644
index 0000000..b4df5fb
--- /dev/null
+++ b/docs/components/operator.mdx
@@ -0,0 +1,31 @@
+---
+title: "Operator"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Operator
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Operator = "equals"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"equals"`
+- `"not_equals"`
+- `"contains"`
+- `"not_contains"`
+- `"regex"`
+- `"starts_with"`
+- `"ends_with"`
+- `"gt"`
+- `"lt"`
+- `"gte"`
+- `"lte"`
+- `"exists"`
+- `"not_exists"`
diff --git a/docs/components/order.mdx b/docs/components/order.mdx
new file mode 100644
index 0000000..edc1ffc
--- /dev/null
+++ b/docs/components/order.mdx
@@ -0,0 +1,18 @@
+---
+title: "Order"
+---
+
+## Supported Types
+
+### `components.ProviderName`
+
+```python
+value: components.ProviderName = /* values here */
+```
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
diff --git a/docs/components/outcome.mdx b/docs/components/outcome.mdx
new file mode 100644
index 0000000..98279af
--- /dev/null
+++ b/docs/components/outcome.mdx
@@ -0,0 +1,18 @@
+---
+title: "Outcome"
+---
+
+## Supported Types
+
+### `components.OutcomeExit`
+
+```python
+value: components.OutcomeExit = /* values here */
+```
+
+### `components.OutcomeTimeout`
+
+```python
+value: components.OutcomeTimeout = /* values here */
+```
+
diff --git a/docs/components/outcomeexit.mdx b/docs/components/outcomeexit.mdx
new file mode 100644
index 0000000..dd9bda6
--- /dev/null
+++ b/docs/components/outcomeexit.mdx
@@ -0,0 +1,10 @@
+---
+title: "OutcomeExit"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `exit_code` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.TypeExit](../components/typeexit.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outcometimeout.mdx b/docs/components/outcometimeout.mdx
new file mode 100644
index 0000000..6fe515d
--- /dev/null
+++ b/docs/components/outcometimeout.mdx
@@ -0,0 +1,9 @@
+---
+title: "OutcomeTimeout"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
+| `type` | [components.TypeTimeout](../components/typetimeout.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputadvisorservertoolitem.mdx b/docs/components/outputadvisorservertoolitem.mdx
new file mode 100644
index 0000000..e89c743
--- /dev/null
+++ b/docs/components/outputadvisorservertoolitem.mdx
@@ -0,0 +1,19 @@
+---
+title: "OutputAdvisorServerToolItem"
+---
+
+An openrouter:advisor server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `advice` | *Optional[str]* | :heavy_minus_sign: | The advisor model's response (the advice text returned to the executor). | |
+| `error` | *Optional[str]* | :heavy_minus_sign: | Error message when the advisor call did not produce advice. | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `instance_name` | *Optional[str]* | :heavy_minus_sign: | Provider-safe function name of the specific advisor instance that produced this item (e.g. `openrouter_advisor__1`). Present only when more than one advisor tool is configured; omitted for the default single advisor. Echo this field back unchanged so the advisor's cross-request memory stays namespaced to the correct instance. This identity is positional: it is derived from the index of the advisor entry in the request `tools` array, so clients must keep the order of advisor tool entries stable across requests in a conversation. Reordering or inserting advisor entries shifts these names and causes each advisor's cross-request memory to be attributed to the wrong instance. | openrouter_advisor__1 |
+| `model` | *Optional[str]* | :heavy_minus_sign: | Slug of the advisor model that was consulted. | |
+| `prompt` | *Optional[str]* | :heavy_minus_sign: | The prompt the executor sent to the advisor. | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputAdvisorServerToolItemType](../components/outputadvisorservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputadvisorservertoolitemtype.mdx b/docs/components/outputadvisorservertoolitemtype.mdx
new file mode 100644
index 0000000..2d7fd48
--- /dev/null
+++ b/docs/components/outputadvisorservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputAdvisorServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputAdvisorServerToolItemType
+value: OutputAdvisorServerToolItemType = "openrouter:advisor"
+```
+
+
+## Values
+
+- `"openrouter:advisor"`
diff --git a/docs/components/outputapplypatchcallitem.mdx b/docs/components/outputapplypatchcallitem.mdx
new file mode 100644
index 0000000..2a02c6e
--- /dev/null
+++ b/docs/components/outputapplypatchcallitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "OutputApplyPatchCallItem"
+---
+
+A native `apply_patch_call` output item matching OpenAI's Responses API shape. Emitted when the client requested the `apply_patch` shorthand.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
+| `call_id` | *str* | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `operation` | [components.ApplyPatchCallOperation](../components/applypatchcalloperation.mdx) | :heavy_check_mark: | The patch operation requested by an `apply_patch_call`. `create_file` and `update_file` carry a V4A diff; `delete_file` omits it. | \{
"diff": "@@ function main() \{\n+ console.log(\"hi\");\n }",
"path": "/src/main.ts",
"type": "update_file"
} |
+| `status` | [components.ApplyPatchCallStatus](../components/applypatchcallstatus.mdx) | :heavy_check_mark: | Lifecycle state of an `apply_patch_call` output item. | completed |
+| `type` | [components.OutputApplyPatchCallItemType](../components/outputapplypatchcallitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputapplypatchcallitemtype.mdx b/docs/components/outputapplypatchcallitemtype.mdx
new file mode 100644
index 0000000..17a39e6
--- /dev/null
+++ b/docs/components/outputapplypatchcallitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputApplyPatchCallItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputApplyPatchCallItemType
+value: OutputApplyPatchCallItemType = "apply_patch_call"
+```
+
+
+## Values
+
+- `"apply_patch_call"`
diff --git a/docs/components/outputapplypatchservertoolitem.mdx b/docs/components/outputapplypatchservertoolitem.mdx
new file mode 100644
index 0000000..b27640e
--- /dev/null
+++ b/docs/components/outputapplypatchservertoolitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "OutputApplyPatchServerToolItem"
+---
+
+An openrouter:apply_patch server tool output item. The turn halts when validation succeeds so the client can apply the patch and echo an `apply_patch_call_output` on the next turn.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
+| `call_id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `operation` | [Optional[components.ApplyPatchCallOperation]](../components/applypatchcalloperation.mdx) | :heavy_minus_sign: | The patch operation requested by an `apply_patch_call`. `create_file` and `update_file` carry a V4A diff; `delete_file` omits it. | \{
"diff": "@@ function main() \{\n+ console.log(\"hi\");\n }",
"path": "/src/main.ts",
"type": "update_file"
} |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputApplyPatchServerToolItemType](../components/outputapplypatchservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputapplypatchservertoolitemtype.mdx b/docs/components/outputapplypatchservertoolitemtype.mdx
new file mode 100644
index 0000000..ad79a32
--- /dev/null
+++ b/docs/components/outputapplypatchservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputApplyPatchServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputApplyPatchServerToolItemType
+value: OutputApplyPatchServerToolItemType = "openrouter:apply_patch"
+```
+
+
+## Values
+
+- `"openrouter:apply_patch"`
diff --git a/docs/components/outputbashservertoolitem.mdx b/docs/components/outputbashservertoolitem.mdx
new file mode 100644
index 0000000..c039dfa
--- /dev/null
+++ b/docs/components/outputbashservertoolitem.mdx
@@ -0,0 +1,18 @@
+---
+title: "OutputBashServerToolItem"
+---
+
+An openrouter:bash server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `command` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `exit_code` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `stderr` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `stdout` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `type` | [components.OutputBashServerToolItemType](../components/outputbashservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputbashservertoolitemtype.mdx b/docs/components/outputbashservertoolitemtype.mdx
new file mode 100644
index 0000000..801e62b
--- /dev/null
+++ b/docs/components/outputbashservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputBashServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputBashServerToolItemType
+value: OutputBashServerToolItemType = "openrouter:bash"
+```
+
+
+## Values
+
+- `"openrouter:bash"`
diff --git a/docs/components/outputbrowseruseservertoolitem.mdx b/docs/components/outputbrowseruseservertoolitem.mdx
new file mode 100644
index 0000000..d8f75dc
--- /dev/null
+++ b/docs/components/outputbrowseruseservertoolitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "OutputBrowserUseServerToolItem"
+---
+
+An openrouter:browser_use server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `action` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `screenshot_b64` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputBrowserUseServerToolItemType](../components/outputbrowseruseservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputbrowseruseservertoolitemtype.mdx b/docs/components/outputbrowseruseservertoolitemtype.mdx
new file mode 100644
index 0000000..4e1ac84
--- /dev/null
+++ b/docs/components/outputbrowseruseservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputBrowserUseServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputBrowserUseServerToolItemType
+value: OutputBrowserUseServerToolItemType = "openrouter:browser_use"
+```
+
+
+## Values
+
+- `"openrouter:browser_use"`
diff --git a/docs/components/outputcodeinterpretercallitem.mdx b/docs/components/outputcodeinterpretercallitem.mdx
new file mode 100644
index 0000000..08f2804
--- /dev/null
+++ b/docs/components/outputcodeinterpretercallitem.mdx
@@ -0,0 +1,17 @@
+---
+title: "OutputCodeInterpreterCallItem"
+---
+
+A code interpreter execution call with outputs
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
+| `code` | *Nullable[str]* | :heavy_check_mark: | N/A | |
+| `container_id` | *str* | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `outputs` | List[[components.OutputCodeInterpreterCallItemOutputUnion](../components/outputcodeinterpretercallitemoutputunion.mdx)] | :heavy_check_mark: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.TypeCodeInterpreterCall](../components/typecodeinterpretercall.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputcodeinterpretercallitemoutputunion.mdx b/docs/components/outputcodeinterpretercallitemoutputunion.mdx
new file mode 100644
index 0000000..02e6c2c
--- /dev/null
+++ b/docs/components/outputcodeinterpretercallitemoutputunion.mdx
@@ -0,0 +1,18 @@
+---
+title: "OutputCodeInterpreterCallItemOutputUnion"
+---
+
+## Supported Types
+
+### `components.OutputImage`
+
+```python
+value: components.OutputImage = /* values here */
+```
+
+### `components.OutputLogs`
+
+```python
+value: components.OutputLogs = /* values here */
+```
+
diff --git a/docs/components/outputcodeinterpretercallitemtypeimage.mdx b/docs/components/outputcodeinterpretercallitemtypeimage.mdx
new file mode 100644
index 0000000..c901280
--- /dev/null
+++ b/docs/components/outputcodeinterpretercallitemtypeimage.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputCodeInterpreterCallItemTypeImage"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputCodeInterpreterCallItemTypeImage
+value: OutputCodeInterpreterCallItemTypeImage = "image"
+```
+
+
+## Values
+
+- `"image"`
diff --git a/docs/components/outputcodeinterpreterservertoolitem.mdx b/docs/components/outputcodeinterpreterservertoolitem.mdx
new file mode 100644
index 0000000..3b97b10
--- /dev/null
+++ b/docs/components/outputcodeinterpreterservertoolitem.mdx
@@ -0,0 +1,19 @@
+---
+title: "OutputCodeInterpreterServerToolItem"
+---
+
+An openrouter:code_interpreter server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `code` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `exit_code` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `language` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `stderr` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `stdout` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `type` | [components.OutputCodeInterpreterServerToolItemType](../components/outputcodeinterpreterservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputcodeinterpreterservertoolitemtype.mdx b/docs/components/outputcodeinterpreterservertoolitemtype.mdx
new file mode 100644
index 0000000..a9b4162
--- /dev/null
+++ b/docs/components/outputcodeinterpreterservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputCodeInterpreterServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputCodeInterpreterServerToolItemType
+value: OutputCodeInterpreterServerToolItemType = "openrouter:code_interpreter"
+```
+
+
+## Values
+
+- `"openrouter:code_interpreter"`
diff --git a/docs/components/outputcomputercallitem.mdx b/docs/components/outputcomputercallitem.mdx
new file mode 100644
index 0000000..7d0669a
--- /dev/null
+++ b/docs/components/outputcomputercallitem.mdx
@@ -0,0 +1,14 @@
+---
+title: "OutputComputerCallItem"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `action` | *OptionalNullable[Any]* | :heavy_minus_sign: | N/A |
+| `call_id` | *str* | :heavy_check_mark: | N/A |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `pending_safety_checks` | List[[components.PendingSafetyCheck](../components/pendingsafetycheck.mdx)] | :heavy_check_mark: | N/A |
+| `status` | [components.OutputComputerCallItemStatus](../components/outputcomputercallitemstatus.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.OutputComputerCallItemType](../components/outputcomputercallitemtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputcomputercallitemstatus.mdx b/docs/components/outputcomputercallitemstatus.mdx
new file mode 100644
index 0000000..7d7e680
--- /dev/null
+++ b/docs/components/outputcomputercallitemstatus.mdx
@@ -0,0 +1,21 @@
+---
+title: "OutputComputerCallItemStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputComputerCallItemStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: OutputComputerCallItemStatus = "completed"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"completed"`
+- `"incomplete"`
+- `"in_progress"`
diff --git a/docs/components/outputcomputercallitemtype.mdx b/docs/components/outputcomputercallitemtype.mdx
new file mode 100644
index 0000000..072ec0f
--- /dev/null
+++ b/docs/components/outputcomputercallitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputComputerCallItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputComputerCallItemType
+value: OutputComputerCallItemType = "computer_call"
+```
+
+
+## Values
+
+- `"computer_call"`
diff --git a/docs/components/outputcustomtoolcallitem.mdx b/docs/components/outputcustomtoolcallitem.mdx
new file mode 100644
index 0000000..6cc163b
--- /dev/null
+++ b/docs/components/outputcustomtoolcallitem.mdx
@@ -0,0 +1,17 @@
+---
+title: "OutputCustomToolCallItem"
+---
+
+A call to a custom (freeform-grammar) tool created by the model — distinct from `function_call`. Used for tools like Codex CLI's `apply_patch` whose payload is opaque text rather than JSON arguments.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
+| `call_id` | *str* | :heavy_check_mark: | N/A |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `input` | *str* | :heavy_check_mark: | N/A |
+| `name` | *str* | :heavy_check_mark: | N/A |
+| `namespace` | *Optional[str]* | :heavy_minus_sign: | Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server) |
+| `type` | [components.OutputCustomToolCallItemType](../components/outputcustomtoolcallitemtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputcustomtoolcallitemtype.mdx b/docs/components/outputcustomtoolcallitemtype.mdx
new file mode 100644
index 0000000..9bf4d0f
--- /dev/null
+++ b/docs/components/outputcustomtoolcallitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputCustomToolCallItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputCustomToolCallItemType
+value: OutputCustomToolCallItemType = "custom_tool_call"
+```
+
+
+## Values
+
+- `"custom_tool_call"`
diff --git a/docs/components/outputdatetimeitem.mdx b/docs/components/outputdatetimeitem.mdx
new file mode 100644
index 0000000..c698d7e
--- /dev/null
+++ b/docs/components/outputdatetimeitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "OutputDatetimeItem"
+---
+
+An openrouter:datetime server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `datetime_` | *str* | :heavy_check_mark: | ISO 8601 datetime string | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `timezone` | *str* | :heavy_check_mark: | IANA timezone name | |
+| `type` | [components.OutputDatetimeItemType](../components/outputdatetimeitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputdatetimeitemtype.mdx b/docs/components/outputdatetimeitemtype.mdx
new file mode 100644
index 0000000..62bc007
--- /dev/null
+++ b/docs/components/outputdatetimeitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputDatetimeItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputDatetimeItemType
+value: OutputDatetimeItemType = "openrouter:datetime"
+```
+
+
+## Values
+
+- `"openrouter:datetime"`
diff --git a/docs/components/outputfilesearchcallitem.mdx b/docs/components/outputfilesearchcallitem.mdx
new file mode 100644
index 0000000..9b9ef44
--- /dev/null
+++ b/docs/components/outputfilesearchcallitem.mdx
@@ -0,0 +1,12 @@
+---
+title: "OutputFileSearchCallItem"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `queries` | List[*str*] | :heavy_check_mark: | N/A | |
+| `status` | [components.WebSearchStatus](../components/websearchstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputFileSearchCallItemType](../components/outputfilesearchcallitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputfilesearchcallitemtype.mdx b/docs/components/outputfilesearchcallitemtype.mdx
new file mode 100644
index 0000000..9109c9a
--- /dev/null
+++ b/docs/components/outputfilesearchcallitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputFileSearchCallItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputFileSearchCallItemType
+value: OutputFileSearchCallItemType = "file_search_call"
+```
+
+
+## Values
+
+- `"file_search_call"`
diff --git a/docs/components/outputfilesearchservertoolitem.mdx b/docs/components/outputfilesearchservertoolitem.mdx
new file mode 100644
index 0000000..2095688
--- /dev/null
+++ b/docs/components/outputfilesearchservertoolitem.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputFileSearchServerToolItem"
+---
+
+An openrouter:file_search server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `queries` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputFileSearchServerToolItemType](../components/outputfilesearchservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputfilesearchservertoolitemtype.mdx b/docs/components/outputfilesearchservertoolitemtype.mdx
new file mode 100644
index 0000000..fe499bd
--- /dev/null
+++ b/docs/components/outputfilesearchservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputFileSearchServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputFileSearchServerToolItemType
+value: OutputFileSearchServerToolItemType = "openrouter:file_search"
+```
+
+
+## Values
+
+- `"openrouter:file_search"`
diff --git a/docs/components/outputfilesservertoolitem.mdx b/docs/components/outputfilesservertoolitem.mdx
new file mode 100644
index 0000000..111b79f
--- /dev/null
+++ b/docs/components/outputfilesservertoolitem.mdx
@@ -0,0 +1,19 @@
+---
+title: "OutputFilesServerToolItem"
+---
+
+An openrouter:files server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `error` | *Optional[str]* | :heavy_minus_sign: | Error message when the file operation failed. | |
+| `file_id` | *Optional[str]* | :heavy_minus_sign: | The target file id supplied in the tool-call arguments. | |
+| `filename` | *Optional[str]* | :heavy_minus_sign: | The target filename supplied in the tool-call arguments. | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `operation` | *Optional[str]* | :heavy_minus_sign: | The file operation performed (list, read, write, or edit). | |
+| `result` | *Optional[str]* | :heavy_minus_sign: | JSON-serialized result of the file operation. | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputFilesServerToolItemType](../components/outputfilesservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputfilesservertoolitemtype.mdx b/docs/components/outputfilesservertoolitemtype.mdx
new file mode 100644
index 0000000..f9eb656
--- /dev/null
+++ b/docs/components/outputfilesservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputFilesServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputFilesServerToolItemType
+value: OutputFilesServerToolItemType = "openrouter:files"
+```
+
+
+## Values
+
+- `"openrouter:files"`
diff --git a/docs/components/outputfunctioncallitem.mdx b/docs/components/outputfunctioncallitem.mdx
new file mode 100644
index 0000000..86a1cd0
--- /dev/null
+++ b/docs/components/outputfunctioncallitem.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputFunctionCallItem"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `arguments` | *str* | :heavy_check_mark: | N/A |
+| `call_id` | *str* | :heavy_check_mark: | N/A |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `name` | *str* | :heavy_check_mark: | N/A |
+| `namespace` | *Optional[str]* | :heavy_minus_sign: | Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server) |
+| `status` | [Optional[components.OutputFunctionCallItemStatusUnion]](../components/outputfunctioncallitemstatusunion.mdx) | :heavy_minus_sign: | N/A |
+| `type` | [components.OutputFunctionCallItemType](../components/outputfunctioncallitemtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputfunctioncallitemstatuscompleted.mdx b/docs/components/outputfunctioncallitemstatuscompleted.mdx
new file mode 100644
index 0000000..ec84cfa
--- /dev/null
+++ b/docs/components/outputfunctioncallitemstatuscompleted.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputFunctionCallItemStatusCompleted"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputFunctionCallItemStatusCompleted
+value: OutputFunctionCallItemStatusCompleted = "completed"
+```
+
+
+## Values
+
+- `"completed"`
diff --git a/docs/components/outputfunctioncallitemstatusincomplete.mdx b/docs/components/outputfunctioncallitemstatusincomplete.mdx
new file mode 100644
index 0000000..b95a0a0
--- /dev/null
+++ b/docs/components/outputfunctioncallitemstatusincomplete.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputFunctionCallItemStatusIncomplete"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputFunctionCallItemStatusIncomplete
+value: OutputFunctionCallItemStatusIncomplete = "incomplete"
+```
+
+
+## Values
+
+- `"incomplete"`
diff --git a/docs/components/outputfunctioncallitemstatusinprogress.mdx b/docs/components/outputfunctioncallitemstatusinprogress.mdx
new file mode 100644
index 0000000..7204f29
--- /dev/null
+++ b/docs/components/outputfunctioncallitemstatusinprogress.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputFunctionCallItemStatusInProgress"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputFunctionCallItemStatusInProgress
+value: OutputFunctionCallItemStatusInProgress = "in_progress"
+```
+
+
+## Values
+
+- `"in_progress"`
diff --git a/docs/components/outputfunctioncallitemstatusunion.mdx b/docs/components/outputfunctioncallitemstatusunion.mdx
new file mode 100644
index 0000000..d4cb118
--- /dev/null
+++ b/docs/components/outputfunctioncallitemstatusunion.mdx
@@ -0,0 +1,24 @@
+---
+title: "OutputFunctionCallItemStatusUnion"
+---
+
+## Supported Types
+
+### `components.OutputFunctionCallItemStatusCompleted`
+
+```python
+value: components.OutputFunctionCallItemStatusCompleted = /* values here */
+```
+
+### `components.OutputFunctionCallItemStatusIncomplete`
+
+```python
+value: components.OutputFunctionCallItemStatusIncomplete = /* values here */
+```
+
+### `components.OutputFunctionCallItemStatusInProgress`
+
+```python
+value: components.OutputFunctionCallItemStatusInProgress = /* values here */
+```
+
diff --git a/docs/components/outputfunctioncallitemtype.mdx b/docs/components/outputfunctioncallitemtype.mdx
new file mode 100644
index 0000000..700af38
--- /dev/null
+++ b/docs/components/outputfunctioncallitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputFunctionCallItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputFunctionCallItemType
+value: OutputFunctionCallItemType = "function_call"
+```
+
+
+## Values
+
+- `"function_call"`
diff --git a/docs/components/outputfusionservertoolitem.mdx b/docs/components/outputfusionservertoolitem.mdx
new file mode 100644
index 0000000..996340e
--- /dev/null
+++ b/docs/components/outputfusionservertoolitem.mdx
@@ -0,0 +1,20 @@
+---
+title: "OutputFusionServerToolItem"
+---
+
+An openrouter:fusion server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `analysis` | [Optional[components.FusionAnalysisResult]](../components/fusionanalysisresult.mdx) | :heavy_minus_sign: | Structured analysis produced by the fusion judge model. | \{
"blind_spots": [
"No model considered the impact on existing API consumers."
],
"consensus": [
"All panel models agree the request is asking for a concise summary."
],
"contradictions": [
\{
"stances": [
\{
"model": "openai/gpt-5",
"stance": "Favors an incremental rollout."
},
\{
"model": "anthropic/claude-sonnet-4.5",
"stance": "Favors a single coordinated migration."
}
],
"topic": "Recommended approach"
}
],
"partial_coverage": [
\{
"models": [
"openai/gpt-5"
],
"point": "Only one model addressed the rollback strategy."
}
],
"unique_insights": [
\{
"insight": "Highlighted a backwards-compatibility risk the other models missed.",
"model": "anthropic/claude-sonnet-4.5"
}
]
} |
+| `error` | *Optional[str]* | :heavy_minus_sign: | Error message when the fusion run did not produce an analysis result. | |
+| `failed_models` | List[[components.FailedModel](../components/failedmodel.mdx)] | :heavy_minus_sign: | Models that were requested as part of the analysis panel but did not produce a response. Present when at least one requested analysis model failed. The fusion result is still usable but was produced from a degraded panel. | |
+| `failure_reason` | *Optional[str]* | :heavy_minus_sign: | Typed failure reason when the fusion run failed. Possible values include: all_panels_failed, insufficient_credits, rate_limited, judge_not_valid_json, judge_schema_mismatch, judge_upstream_error, judge_empty_completion. | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `responses` | List[[components.Response](../components/response.mdx)] | :heavy_minus_sign: | Analysis models that produced a response in this fusion run, with each model's full panel content. | |
+| `sources` | List[[components.FusionSource](../components/fusionsource.mdx)] | :heavy_minus_sign: | Web pages the analysis panels and judge retrieved via web search during this fusion run, deduplicated by URL across the whole run. Present when at least one model cited a source. | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputFusionServerToolItemType](../components/outputfusionservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputfusionservertoolitemtype.mdx b/docs/components/outputfusionservertoolitemtype.mdx
new file mode 100644
index 0000000..5b050d8
--- /dev/null
+++ b/docs/components/outputfusionservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputFusionServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputFusionServerToolItemType
+value: OutputFusionServerToolItemType = "openrouter:fusion"
+```
+
+
+## Values
+
+- `"openrouter:fusion"`
diff --git a/docs/components/outputimage.mdx b/docs/components/outputimage.mdx
new file mode 100644
index 0000000..a7b8246
--- /dev/null
+++ b/docs/components/outputimage.mdx
@@ -0,0 +1,10 @@
+---
+title: "OutputImage"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
+| `type` | [components.OutputCodeInterpreterCallItemTypeImage](../components/outputcodeinterpretercallitemtypeimage.mdx) | :heavy_check_mark: | N/A |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputimagegenerationcallitem.mdx b/docs/components/outputimagegenerationcallitem.mdx
new file mode 100644
index 0000000..d992609
--- /dev/null
+++ b/docs/components/outputimagegenerationcallitem.mdx
@@ -0,0 +1,12 @@
+---
+title: "OutputImageGenerationCallItem"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `result` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ImageGenerationStatus](../components/imagegenerationstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputImageGenerationCallItemType](../components/outputimagegenerationcallitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputimagegenerationcallitemtype.mdx b/docs/components/outputimagegenerationcallitemtype.mdx
new file mode 100644
index 0000000..bb97b95
--- /dev/null
+++ b/docs/components/outputimagegenerationcallitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputImageGenerationCallItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputImageGenerationCallItemType
+value: OutputImageGenerationCallItemType = "image_generation_call"
+```
+
+
+## Values
+
+- `"image_generation_call"`
diff --git a/docs/components/outputimagegenerationservertoolitem.mdx b/docs/components/outputimagegenerationservertoolitem.mdx
new file mode 100644
index 0000000..516d44b
--- /dev/null
+++ b/docs/components/outputimagegenerationservertoolitem.mdx
@@ -0,0 +1,18 @@
+---
+title: "OutputImageGenerationServerToolItem"
+---
+
+An openrouter:image_generation server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `image_b64` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `image_url` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `result` | *OptionalNullable[str]* | :heavy_minus_sign: | The generated image as a base64-encoded string or URL, matching OpenAI image_generation_call format | |
+| `revised_prompt` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputImageGenerationServerToolItemType](../components/outputimagegenerationservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputimagegenerationservertoolitemtype.mdx b/docs/components/outputimagegenerationservertoolitemtype.mdx
new file mode 100644
index 0000000..6296f5a
--- /dev/null
+++ b/docs/components/outputimagegenerationservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputImageGenerationServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputImageGenerationServerToolItemType
+value: OutputImageGenerationServerToolItemType = "openrouter:image_generation"
+```
+
+
+## Values
+
+- `"openrouter:image_generation"`
diff --git a/docs/components/outputitemimagegenerationcall.md b/docs/components/outputitemimagegenerationcall.mdx
similarity index 80%
rename from docs/components/outputitemimagegenerationcall.md
rename to docs/components/outputitemimagegenerationcall.mdx
index 735eb05..a9c86dd 100644
--- a/docs/components/outputitemimagegenerationcall.md
+++ b/docs/components/outputitemimagegenerationcall.mdx
@@ -1,5 +1,6 @@
-# OutputItemImageGenerationCall
-
+---
+title: "OutputItemImageGenerationCall"
+---
## Fields
@@ -7,5 +8,5 @@
| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| `id` | *str* | :heavy_check_mark: | N/A | |
| `result` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
-| `status` | [components.ImageGenerationStatus](../components/imagegenerationstatus.md) | :heavy_check_mark: | N/A | completed |
-| `type` | [components.OutputItemImageGenerationCallType](../components/outputitemimagegenerationcalltype.md) | :heavy_check_mark: | N/A | |
\ No newline at end of file
+| `status` | [components.ImageGenerationStatus](../components/imagegenerationstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputItemImageGenerationCallType](../components/outputitemimagegenerationcalltype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputitemimagegenerationcalltype.md b/docs/components/outputitemimagegenerationcalltype.md
deleted file mode 100644
index d9e663f..0000000
--- a/docs/components/outputitemimagegenerationcalltype.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OutputItemImageGenerationCallType
-
-
-## Values
-
-| Name | Value |
-| ----------------------- | ----------------------- |
-| `IMAGE_GENERATION_CALL` | image_generation_call |
\ No newline at end of file
diff --git a/docs/components/outputitemimagegenerationcalltype.mdx b/docs/components/outputitemimagegenerationcalltype.mdx
new file mode 100644
index 0000000..7e12c2e
--- /dev/null
+++ b/docs/components/outputitemimagegenerationcalltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputItemImageGenerationCallType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputItemImageGenerationCallType
+value: OutputItemImageGenerationCallType = "image_generation_call"
+```
+
+
+## Values
+
+- `"image_generation_call"`
diff --git a/docs/components/outputitems.mdx b/docs/components/outputitems.mdx
new file mode 100644
index 0000000..f73cc66
--- /dev/null
+++ b/docs/components/outputitems.mdx
@@ -0,0 +1,189 @@
+---
+title: "OutputItems"
+---
+
+An output item from the response
+
+
+## Supported Types
+
+### `components.OutputApplyPatchCallItem`
+
+```python
+value: components.OutputApplyPatchCallItem = /* values here */
+```
+
+### `components.OutputCodeInterpreterCallItem`
+
+```python
+value: components.OutputCodeInterpreterCallItem = /* values here */
+```
+
+### `components.OutputComputerCallItem`
+
+```python
+value: components.OutputComputerCallItem = /* values here */
+```
+
+### `components.OutputCustomToolCallItem`
+
+```python
+value: components.OutputCustomToolCallItem = /* values here */
+```
+
+### `components.OutputFileSearchCallItem`
+
+```python
+value: components.OutputFileSearchCallItem = /* values here */
+```
+
+### `components.OutputFunctionCallItem`
+
+```python
+value: components.OutputFunctionCallItem = /* values here */
+```
+
+### `components.OutputImageGenerationCallItem`
+
+```python
+value: components.OutputImageGenerationCallItem = /* values here */
+```
+
+### `components.OutputMessageItem`
+
+```python
+value: components.OutputMessageItem = /* values here */
+```
+
+### `components.OutputAdvisorServerToolItem`
+
+```python
+value: components.OutputAdvisorServerToolItem = /* values here */
+```
+
+### `components.OutputApplyPatchServerToolItem`
+
+```python
+value: components.OutputApplyPatchServerToolItem = /* values here */
+```
+
+### `components.OutputBashServerToolItem`
+
+```python
+value: components.OutputBashServerToolItem = /* values here */
+```
+
+### `components.OutputBrowserUseServerToolItem`
+
+```python
+value: components.OutputBrowserUseServerToolItem = /* values here */
+```
+
+### `components.OutputCodeInterpreterServerToolItem`
+
+```python
+value: components.OutputCodeInterpreterServerToolItem = /* values here */
+```
+
+### `components.OutputDatetimeItem`
+
+```python
+value: components.OutputDatetimeItem = /* values here */
+```
+
+### `components.OutputSearchModelsServerToolItem`
+
+```python
+value: components.OutputSearchModelsServerToolItem = /* values here */
+```
+
+### `components.OutputFileSearchServerToolItem`
+
+```python
+value: components.OutputFileSearchServerToolItem = /* values here */
+```
+
+### `components.OutputFilesServerToolItem`
+
+```python
+value: components.OutputFilesServerToolItem = /* values here */
+```
+
+### `components.OutputFusionServerToolItem`
+
+```python
+value: components.OutputFusionServerToolItem = /* values here */
+```
+
+### `components.OutputImageGenerationServerToolItem`
+
+```python
+value: components.OutputImageGenerationServerToolItem = /* values here */
+```
+
+### `components.OutputMcpServerToolItem`
+
+```python
+value: components.OutputMcpServerToolItem = /* values here */
+```
+
+### `components.OutputMemoryServerToolItem`
+
+```python
+value: components.OutputMemoryServerToolItem = /* values here */
+```
+
+### `components.OutputSubagentServerToolItem`
+
+```python
+value: components.OutputSubagentServerToolItem = /* values here */
+```
+
+### `components.OutputTextEditorServerToolItem`
+
+```python
+value: components.OutputTextEditorServerToolItem = /* values here */
+```
+
+### `components.OutputToolSearchServerToolItem`
+
+```python
+value: components.OutputToolSearchServerToolItem = /* values here */
+```
+
+### `components.OutputWebFetchServerToolItem`
+
+```python
+value: components.OutputWebFetchServerToolItem = /* values here */
+```
+
+### `components.OutputWebSearchServerToolItem`
+
+```python
+value: components.OutputWebSearchServerToolItem = /* values here */
+```
+
+### `components.OutputReasoningItem`
+
+```python
+value: components.OutputReasoningItem = /* values here */
+```
+
+### `components.OutputShellCallItem`
+
+```python
+value: components.OutputShellCallItem = /* values here */
+```
+
+### `components.OutputShellCallOutputItem`
+
+```python
+value: components.OutputShellCallOutputItem = /* values here */
+```
+
+### `components.OutputWebSearchCallItem`
+
+```python
+value: components.OutputWebSearchCallItem = /* values here */
+```
+
diff --git a/docs/components/outputlogs.mdx b/docs/components/outputlogs.mdx
new file mode 100644
index 0000000..e6eb732
--- /dev/null
+++ b/docs/components/outputlogs.mdx
@@ -0,0 +1,10 @@
+---
+title: "OutputLogs"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `logs` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.TypeLogs](../components/typelogs.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputmcpservertoolitem.mdx b/docs/components/outputmcpservertoolitem.mdx
new file mode 100644
index 0000000..d11d1e7
--- /dev/null
+++ b/docs/components/outputmcpservertoolitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "OutputMcpServerToolItem"
+---
+
+An openrouter:mcp server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `server_label` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `tool_name` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `type` | [components.OutputMcpServerToolItemType](../components/outputmcpservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputmcpservertoolitemtype.mdx b/docs/components/outputmcpservertoolitemtype.mdx
new file mode 100644
index 0000000..b98202d
--- /dev/null
+++ b/docs/components/outputmcpservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMcpServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMcpServerToolItemType
+value: OutputMcpServerToolItemType = "openrouter:mcp"
+```
+
+
+## Values
+
+- `"openrouter:mcp"`
diff --git a/docs/components/outputmemoryservertoolitem.mdx b/docs/components/outputmemoryservertoolitem.mdx
new file mode 100644
index 0000000..f6fdc65
--- /dev/null
+++ b/docs/components/outputmemoryservertoolitem.mdx
@@ -0,0 +1,17 @@
+---
+title: "OutputMemoryServerToolItem"
+---
+
+An openrouter:memory server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `action` | [Optional[components.ActionEnum]](../components/actionenum.mdx) | :heavy_minus_sign: | N/A | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputMemoryServerToolItemType](../components/outputmemoryservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
+| `value` | *OptionalNullable[Any]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputmemoryservertoolitemtype.mdx b/docs/components/outputmemoryservertoolitemtype.mdx
new file mode 100644
index 0000000..6a65103
--- /dev/null
+++ b/docs/components/outputmemoryservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMemoryServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMemoryServerToolItemType
+value: OutputMemoryServerToolItemType = "openrouter:memory"
+```
+
+
+## Values
+
+- `"openrouter:memory"`
diff --git a/docs/components/outputmessage.md b/docs/components/outputmessage.mdx
similarity index 86%
rename from docs/components/outputmessage.md
rename to docs/components/outputmessage.mdx
index e59886c..9cd8a40 100644
--- a/docs/components/outputmessage.md
+++ b/docs/components/outputmessage.mdx
@@ -1,13 +1,14 @@
-# OutputMessage
-
+---
+title: "OutputMessage"
+---
## Fields
| Field | Type | Required | Description |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `content` | List[[components.OutputMessageContent](../components/outputmessagecontent.md)] | :heavy_check_mark: | N/A |
+| `content` | List[[components.OutputMessageContent](../components/outputmessagecontent.mdx)] | :heavy_check_mark: | N/A |
| `id` | *str* | :heavy_check_mark: | N/A |
-| `phase` | [OptionalNullable[components.OutputMessagePhaseUnion]](../components/outputmessagephaseunion.md) | :heavy_minus_sign: | The phase of an assistant message. Use `commentary` for an intermediate assistant message and `final_answer` for the final assistant message. For follow-up requests with models like `gpt-5.3-codex` and later, preserve and resend phase on all assistant messages. Omitting it can degrade performance. Not used for user messages. |
-| `role` | [components.OutputMessageRole](../components/outputmessagerole.md) | :heavy_check_mark: | N/A |
-| `status` | [Optional[components.OutputMessageStatusUnion]](../components/outputmessagestatusunion.md) | :heavy_minus_sign: | N/A |
-| `type` | [components.OutputMessageType](../components/outputmessagetype.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `phase` | [OptionalNullable[components.OutputMessagePhaseUnion]](../components/outputmessagephaseunion.mdx) | :heavy_minus_sign: | The phase of an assistant message. Use `commentary` for an intermediate assistant message and `final_answer` for the final assistant message. For follow-up requests with models like `gpt-5.3-codex` and later, preserve and resend phase on all assistant messages. Omitting it can degrade performance. Not used for user messages. |
+| `role` | [components.OutputMessageRole](../components/outputmessagerole.mdx) | :heavy_check_mark: | N/A |
+| `status` | [Optional[components.OutputMessageStatusUnion]](../components/outputmessagestatusunion.mdx) | :heavy_minus_sign: | N/A |
+| `type` | [components.OutputMessageType](../components/outputmessagetype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputmessagecontent.mdx b/docs/components/outputmessagecontent.mdx
new file mode 100644
index 0000000..04594cd
--- /dev/null
+++ b/docs/components/outputmessagecontent.mdx
@@ -0,0 +1,18 @@
+---
+title: "OutputMessageContent"
+---
+
+## Supported Types
+
+### `components.ResponseOutputText`
+
+```python
+value: components.ResponseOutputText = /* values here */
+```
+
+### `components.OpenAIResponsesRefusalContent`
+
+```python
+value: components.OpenAIResponsesRefusalContent = /* values here */
+```
+
diff --git a/docs/components/outputmessageitem.mdx b/docs/components/outputmessageitem.mdx
new file mode 100644
index 0000000..f02e8d2
--- /dev/null
+++ b/docs/components/outputmessageitem.mdx
@@ -0,0 +1,17 @@
+---
+title: "OutputMessageItem"
+---
+
+An output message item
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `content` | List[[components.OutputMessageItemContent](../components/outputmessageitemcontent.mdx)] | :heavy_check_mark: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `phase` | [OptionalNullable[components.OutputMessageItemPhaseUnion]](../components/outputmessageitemphaseunion.mdx) | :heavy_minus_sign: | The phase of an assistant message. Use `commentary` for an intermediate assistant message and `final_answer` for the final assistant message. For follow-up requests with models like `gpt-5.3-codex` and later, preserve and resend phase on all assistant messages. Omitting it can degrade performance. Not used for user messages. |
+| `role` | [components.OutputMessageItemRole](../components/outputmessageitemrole.mdx) | :heavy_check_mark: | N/A |
+| `status` | [Optional[components.OutputMessageItemStatusUnion]](../components/outputmessageitemstatusunion.mdx) | :heavy_minus_sign: | N/A |
+| `type` | [components.OutputMessageItemType](../components/outputmessageitemtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputmessageitemcontent.mdx b/docs/components/outputmessageitemcontent.mdx
new file mode 100644
index 0000000..3fe04b2
--- /dev/null
+++ b/docs/components/outputmessageitemcontent.mdx
@@ -0,0 +1,18 @@
+---
+title: "OutputMessageItemContent"
+---
+
+## Supported Types
+
+### `components.ResponseOutputText`
+
+```python
+value: components.ResponseOutputText = /* values here */
+```
+
+### `components.OpenAIResponsesRefusalContent`
+
+```python
+value: components.OpenAIResponsesRefusalContent = /* values here */
+```
+
diff --git a/docs/components/outputmessageitemphasecommentary.mdx b/docs/components/outputmessageitemphasecommentary.mdx
new file mode 100644
index 0000000..67ae51f
--- /dev/null
+++ b/docs/components/outputmessageitemphasecommentary.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessageItemPhaseCommentary"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessageItemPhaseCommentary
+value: OutputMessageItemPhaseCommentary = "commentary"
+```
+
+
+## Values
+
+- `"commentary"`
diff --git a/docs/components/outputmessageitemphasefinalanswer.mdx b/docs/components/outputmessageitemphasefinalanswer.mdx
new file mode 100644
index 0000000..5fded9e
--- /dev/null
+++ b/docs/components/outputmessageitemphasefinalanswer.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessageItemPhaseFinalAnswer"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessageItemPhaseFinalAnswer
+value: OutputMessageItemPhaseFinalAnswer = "final_answer"
+```
+
+
+## Values
+
+- `"final_answer"`
diff --git a/docs/components/outputmessageitemphaseunion.mdx b/docs/components/outputmessageitemphaseunion.mdx
new file mode 100644
index 0000000..39b73fb
--- /dev/null
+++ b/docs/components/outputmessageitemphaseunion.mdx
@@ -0,0 +1,27 @@
+---
+title: "OutputMessageItemPhaseUnion"
+---
+
+The phase of an assistant message. Use `commentary` for an intermediate assistant message and `final_answer` for the final assistant message. For follow-up requests with models like `gpt-5.3-codex` and later, preserve and resend phase on all assistant messages. Omitting it can degrade performance. Not used for user messages.
+
+
+## Supported Types
+
+### `components.OutputMessageItemPhaseCommentary`
+
+```python
+value: components.OutputMessageItemPhaseCommentary = /* values here */
+```
+
+### `components.OutputMessageItemPhaseFinalAnswer`
+
+```python
+value: components.OutputMessageItemPhaseFinalAnswer = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/outputmessageitemrole.mdx b/docs/components/outputmessageitemrole.mdx
new file mode 100644
index 0000000..b6456e4
--- /dev/null
+++ b/docs/components/outputmessageitemrole.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessageItemRole"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessageItemRole
+value: OutputMessageItemRole = "assistant"
+```
+
+
+## Values
+
+- `"assistant"`
diff --git a/docs/components/outputmessageitemstatuscompleted.mdx b/docs/components/outputmessageitemstatuscompleted.mdx
new file mode 100644
index 0000000..43f950c
--- /dev/null
+++ b/docs/components/outputmessageitemstatuscompleted.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessageItemStatusCompleted"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessageItemStatusCompleted
+value: OutputMessageItemStatusCompleted = "completed"
+```
+
+
+## Values
+
+- `"completed"`
diff --git a/docs/components/outputmessageitemstatusincomplete.mdx b/docs/components/outputmessageitemstatusincomplete.mdx
new file mode 100644
index 0000000..7191dab
--- /dev/null
+++ b/docs/components/outputmessageitemstatusincomplete.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessageItemStatusIncomplete"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessageItemStatusIncomplete
+value: OutputMessageItemStatusIncomplete = "incomplete"
+```
+
+
+## Values
+
+- `"incomplete"`
diff --git a/docs/components/outputmessageitemstatusinprogress.mdx b/docs/components/outputmessageitemstatusinprogress.mdx
new file mode 100644
index 0000000..978dbbc
--- /dev/null
+++ b/docs/components/outputmessageitemstatusinprogress.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessageItemStatusInProgress"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessageItemStatusInProgress
+value: OutputMessageItemStatusInProgress = "in_progress"
+```
+
+
+## Values
+
+- `"in_progress"`
diff --git a/docs/components/outputmessageitemstatusunion.mdx b/docs/components/outputmessageitemstatusunion.mdx
new file mode 100644
index 0000000..d573646
--- /dev/null
+++ b/docs/components/outputmessageitemstatusunion.mdx
@@ -0,0 +1,24 @@
+---
+title: "OutputMessageItemStatusUnion"
+---
+
+## Supported Types
+
+### `components.OutputMessageItemStatusCompleted`
+
+```python
+value: components.OutputMessageItemStatusCompleted = /* values here */
+```
+
+### `components.OutputMessageItemStatusIncomplete`
+
+```python
+value: components.OutputMessageItemStatusIncomplete = /* values here */
+```
+
+### `components.OutputMessageItemStatusInProgress`
+
+```python
+value: components.OutputMessageItemStatusInProgress = /* values here */
+```
+
diff --git a/docs/components/outputmessageitemtype.mdx b/docs/components/outputmessageitemtype.mdx
new file mode 100644
index 0000000..8baacb4
--- /dev/null
+++ b/docs/components/outputmessageitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessageItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessageItemType
+value: OutputMessageItemType = "message"
+```
+
+
+## Values
+
+- `"message"`
diff --git a/docs/components/outputmessagephasecommentary.mdx b/docs/components/outputmessagephasecommentary.mdx
new file mode 100644
index 0000000..c03db0f
--- /dev/null
+++ b/docs/components/outputmessagephasecommentary.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessagePhaseCommentary"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessagePhaseCommentary
+value: OutputMessagePhaseCommentary = "commentary"
+```
+
+
+## Values
+
+- `"commentary"`
diff --git a/docs/components/outputmessagephasefinalanswer.mdx b/docs/components/outputmessagephasefinalanswer.mdx
new file mode 100644
index 0000000..47d6cfd
--- /dev/null
+++ b/docs/components/outputmessagephasefinalanswer.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessagePhaseFinalAnswer"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessagePhaseFinalAnswer
+value: OutputMessagePhaseFinalAnswer = "final_answer"
+```
+
+
+## Values
+
+- `"final_answer"`
diff --git a/docs/components/outputmessagephaseunion.mdx b/docs/components/outputmessagephaseunion.mdx
new file mode 100644
index 0000000..67491fd
--- /dev/null
+++ b/docs/components/outputmessagephaseunion.mdx
@@ -0,0 +1,27 @@
+---
+title: "OutputMessagePhaseUnion"
+---
+
+The phase of an assistant message. Use `commentary` for an intermediate assistant message and `final_answer` for the final assistant message. For follow-up requests with models like `gpt-5.3-codex` and later, preserve and resend phase on all assistant messages. Omitting it can degrade performance. Not used for user messages.
+
+
+## Supported Types
+
+### `components.OutputMessagePhaseCommentary`
+
+```python
+value: components.OutputMessagePhaseCommentary = /* values here */
+```
+
+### `components.OutputMessagePhaseFinalAnswer`
+
+```python
+value: components.OutputMessagePhaseFinalAnswer = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/outputmessagerole.md b/docs/components/outputmessagerole.md
deleted file mode 100644
index 21b1616..0000000
--- a/docs/components/outputmessagerole.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OutputMessageRole
-
-
-## Values
-
-| Name | Value |
-| ----------- | ----------- |
-| `ASSISTANT` | assistant |
\ No newline at end of file
diff --git a/docs/components/outputmessagerole.mdx b/docs/components/outputmessagerole.mdx
new file mode 100644
index 0000000..342943e
--- /dev/null
+++ b/docs/components/outputmessagerole.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessageRole"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessageRole
+value: OutputMessageRole = "assistant"
+```
+
+
+## Values
+
+- `"assistant"`
diff --git a/docs/components/outputmessagestatuscompleted.md b/docs/components/outputmessagestatuscompleted.md
deleted file mode 100644
index 2b0254b..0000000
--- a/docs/components/outputmessagestatuscompleted.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OutputMessageStatusCompleted
-
-
-## Values
-
-| Name | Value |
-| ----------- | ----------- |
-| `COMPLETED` | completed |
\ No newline at end of file
diff --git a/docs/components/outputmessagestatuscompleted.mdx b/docs/components/outputmessagestatuscompleted.mdx
new file mode 100644
index 0000000..8e7698d
--- /dev/null
+++ b/docs/components/outputmessagestatuscompleted.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessageStatusCompleted"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessageStatusCompleted
+value: OutputMessageStatusCompleted = "completed"
+```
+
+
+## Values
+
+- `"completed"`
diff --git a/docs/components/outputmessagestatusincomplete.md b/docs/components/outputmessagestatusincomplete.md
deleted file mode 100644
index 3146b10..0000000
--- a/docs/components/outputmessagestatusincomplete.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OutputMessageStatusIncomplete
-
-
-## Values
-
-| Name | Value |
-| ------------ | ------------ |
-| `INCOMPLETE` | incomplete |
\ No newline at end of file
diff --git a/docs/components/outputmessagestatusincomplete.mdx b/docs/components/outputmessagestatusincomplete.mdx
new file mode 100644
index 0000000..c492398
--- /dev/null
+++ b/docs/components/outputmessagestatusincomplete.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessageStatusIncomplete"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessageStatusIncomplete
+value: OutputMessageStatusIncomplete = "incomplete"
+```
+
+
+## Values
+
+- `"incomplete"`
diff --git a/docs/components/outputmessagestatusinprogress.md b/docs/components/outputmessagestatusinprogress.md
deleted file mode 100644
index eb31df4..0000000
--- a/docs/components/outputmessagestatusinprogress.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OutputMessageStatusInProgress
-
-
-## Values
-
-| Name | Value |
-| ------------- | ------------- |
-| `IN_PROGRESS` | in_progress |
\ No newline at end of file
diff --git a/docs/components/outputmessagestatusinprogress.mdx b/docs/components/outputmessagestatusinprogress.mdx
new file mode 100644
index 0000000..94ee4f9
--- /dev/null
+++ b/docs/components/outputmessagestatusinprogress.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessageStatusInProgress"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessageStatusInProgress
+value: OutputMessageStatusInProgress = "in_progress"
+```
+
+
+## Values
+
+- `"in_progress"`
diff --git a/docs/components/outputmessagestatusunion.md b/docs/components/outputmessagestatusunion.mdx
similarity index 90%
rename from docs/components/outputmessagestatusunion.md
rename to docs/components/outputmessagestatusunion.mdx
index 6dae9ad..46b30d6 100644
--- a/docs/components/outputmessagestatusunion.md
+++ b/docs/components/outputmessagestatusunion.mdx
@@ -1,5 +1,6 @@
-# OutputMessageStatusUnion
-
+---
+title: "OutputMessageStatusUnion"
+---
## Supported Types
diff --git a/docs/components/outputmessagetype.md b/docs/components/outputmessagetype.md
deleted file mode 100644
index acbedfe..0000000
--- a/docs/components/outputmessagetype.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# OutputMessageType
-
-
-## Values
-
-| Name | Value |
-| --------- | --------- |
-| `MESSAGE` | message |
\ No newline at end of file
diff --git a/docs/components/outputmessagetype.mdx b/docs/components/outputmessagetype.mdx
new file mode 100644
index 0000000..5f80faa
--- /dev/null
+++ b/docs/components/outputmessagetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputMessageType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputMessageType
+value: OutputMessageType = "message"
+```
+
+
+## Values
+
+- `"message"`
diff --git a/docs/components/outputmodality.md b/docs/components/outputmodality.md
deleted file mode 100644
index 2e0633e..0000000
--- a/docs/components/outputmodality.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# OutputModality
-
-
-## Values
-
-| Name | Value |
-| --------------- | --------------- |
-| `TEXT` | text |
-| `IMAGE` | image |
-| `EMBEDDINGS` | embeddings |
-| `AUDIO` | audio |
-| `VIDEO` | video |
-| `RERANK` | rerank |
-| `SPEECH` | speech |
-| `TRANSCRIPTION` | transcription |
\ No newline at end of file
diff --git a/docs/components/outputmodality.mdx b/docs/components/outputmodality.mdx
new file mode 100644
index 0000000..f052813
--- /dev/null
+++ b/docs/components/outputmodality.mdx
@@ -0,0 +1,26 @@
+---
+title: "OutputModality"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputModality
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: OutputModality = "text"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"text"`
+- `"image"`
+- `"embeddings"`
+- `"audio"`
+- `"video"`
+- `"rerank"`
+- `"speech"`
+- `"transcription"`
diff --git a/docs/components/outputmodalityenum.mdx b/docs/components/outputmodalityenum.mdx
new file mode 100644
index 0000000..2d9b6fc
--- /dev/null
+++ b/docs/components/outputmodalityenum.mdx
@@ -0,0 +1,20 @@
+---
+title: "OutputModalityEnum"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputModalityEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: OutputModalityEnum = "text"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"text"`
+- `"image"`
diff --git a/docs/components/outputreasoningitem.mdx b/docs/components/outputreasoningitem.mdx
new file mode 100644
index 0000000..761085b
--- /dev/null
+++ b/docs/components/outputreasoningitem.mdx
@@ -0,0 +1,19 @@
+---
+title: "OutputReasoningItem"
+---
+
+An output item containing reasoning
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| `content` | List[[components.ReasoningTextContent](../components/reasoningtextcontent.mdx)] | :heavy_minus_sign: | N/A | |
+| `encrypted_content` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `status` | [Optional[components.OutputReasoningItemStatusUnion]](../components/outputreasoningitemstatusunion.mdx) | :heavy_minus_sign: | N/A | |
+| `summary` | List[[components.ReasoningSummaryText](../components/reasoningsummarytext.mdx)] | :heavy_check_mark: | N/A | |
+| `type` | [components.OutputReasoningItemType](../components/outputreasoningitemtype.mdx) | :heavy_check_mark: | N/A | |
+| `format_` | [OptionalNullable[components.ReasoningFormat]](../components/reasoningformat.mdx) | :heavy_minus_sign: | N/A | unknown |
+| `signature` | *OptionalNullable[str]* | :heavy_minus_sign: | A signature for the reasoning content, used for verification | EvcBCkgIChABGAIqQKkSDbRuVEQUk9qN1odC098l9SEj... |
\ No newline at end of file
diff --git a/docs/components/outputreasoningitemstatuscompleted.mdx b/docs/components/outputreasoningitemstatuscompleted.mdx
new file mode 100644
index 0000000..f2e1877
--- /dev/null
+++ b/docs/components/outputreasoningitemstatuscompleted.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputReasoningItemStatusCompleted"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputReasoningItemStatusCompleted
+value: OutputReasoningItemStatusCompleted = "completed"
+```
+
+
+## Values
+
+- `"completed"`
diff --git a/docs/components/outputreasoningitemstatusincomplete.mdx b/docs/components/outputreasoningitemstatusincomplete.mdx
new file mode 100644
index 0000000..0e81c76
--- /dev/null
+++ b/docs/components/outputreasoningitemstatusincomplete.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputReasoningItemStatusIncomplete"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputReasoningItemStatusIncomplete
+value: OutputReasoningItemStatusIncomplete = "incomplete"
+```
+
+
+## Values
+
+- `"incomplete"`
diff --git a/docs/components/outputreasoningitemstatusinprogress.mdx b/docs/components/outputreasoningitemstatusinprogress.mdx
new file mode 100644
index 0000000..07a0760
--- /dev/null
+++ b/docs/components/outputreasoningitemstatusinprogress.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputReasoningItemStatusInProgress"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputReasoningItemStatusInProgress
+value: OutputReasoningItemStatusInProgress = "in_progress"
+```
+
+
+## Values
+
+- `"in_progress"`
diff --git a/docs/components/outputreasoningitemstatusunion.mdx b/docs/components/outputreasoningitemstatusunion.mdx
new file mode 100644
index 0000000..276711e
--- /dev/null
+++ b/docs/components/outputreasoningitemstatusunion.mdx
@@ -0,0 +1,24 @@
+---
+title: "OutputReasoningItemStatusUnion"
+---
+
+## Supported Types
+
+### `components.OutputReasoningItemStatusCompleted`
+
+```python
+value: components.OutputReasoningItemStatusCompleted = /* values here */
+```
+
+### `components.OutputReasoningItemStatusIncomplete`
+
+```python
+value: components.OutputReasoningItemStatusIncomplete = /* values here */
+```
+
+### `components.OutputReasoningItemStatusInProgress`
+
+```python
+value: components.OutputReasoningItemStatusInProgress = /* values here */
+```
+
diff --git a/docs/components/outputreasoningitemtype.mdx b/docs/components/outputreasoningitemtype.mdx
new file mode 100644
index 0000000..241c030
--- /dev/null
+++ b/docs/components/outputreasoningitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputReasoningItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputReasoningItemType
+value: OutputReasoningItemType = "reasoning"
+```
+
+
+## Values
+
+- `"reasoning"`
diff --git a/docs/components/outputsearchmodelsservertoolitem.mdx b/docs/components/outputsearchmodelsservertoolitem.mdx
new file mode 100644
index 0000000..bb1946a
--- /dev/null
+++ b/docs/components/outputsearchmodelsservertoolitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "OutputSearchModelsServerToolItem"
+---
+
+An openrouter:experimental__search_models server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `arguments` | *Optional[str]* | :heavy_minus_sign: | The JSON arguments submitted to the search tool (e.g. \{"query":"Claude"}) | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `query` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputSearchModelsServerToolItemType](../components/outputsearchmodelsservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputsearchmodelsservertoolitemtype.mdx b/docs/components/outputsearchmodelsservertoolitemtype.mdx
new file mode 100644
index 0000000..8090460
--- /dev/null
+++ b/docs/components/outputsearchmodelsservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputSearchModelsServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputSearchModelsServerToolItemType
+value: OutputSearchModelsServerToolItemType = "openrouter:experimental__search_models"
+```
+
+
+## Values
+
+- `"openrouter:experimental__search_models"`
diff --git a/docs/components/outputshellcallitem.mdx b/docs/components/outputshellcallitem.mdx
new file mode 100644
index 0000000..994c3c0
--- /dev/null
+++ b/docs/components/outputshellcallitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "OutputShellCallItem"
+---
+
+A native `shell_call` output item matching OpenAI's Responses API shape. Emitted for the sandbox-backed `shell` tool.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `action` | [Optional[components.OutputShellCallItemAction]](../components/outputshellcallitemaction.mdx) | :heavy_minus_sign: | N/A | |
+| `call_id` | *str* | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `status` | [components.ShellCallStatus](../components/shellcallstatus.mdx) | :heavy_check_mark: | Status of a shell call or its output. | completed |
+| `type` | [components.OutputShellCallItemType](../components/outputshellcallitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputshellcallitemaction.mdx b/docs/components/outputshellcallitemaction.mdx
new file mode 100644
index 0000000..2e9c76f
--- /dev/null
+++ b/docs/components/outputshellcallitemaction.mdx
@@ -0,0 +1,11 @@
+---
+title: "OutputShellCallItemAction"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------- | ------------------- | ------------------- | ------------------- |
+| `commands` | List[*str*] | :heavy_check_mark: | N/A |
+| `max_output_length` | *Nullable[int]* | :heavy_check_mark: | N/A |
+| `timeout_ms` | *Nullable[int]* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputshellcallitemtype.mdx b/docs/components/outputshellcallitemtype.mdx
new file mode 100644
index 0000000..6e25f4c
--- /dev/null
+++ b/docs/components/outputshellcallitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputShellCallItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputShellCallItemType
+value: OutputShellCallItemType = "shell_call"
+```
+
+
+## Values
+
+- `"shell_call"`
diff --git a/docs/components/outputshellcalloutputitem.mdx b/docs/components/outputshellcalloutputitem.mdx
new file mode 100644
index 0000000..b8fc79b
--- /dev/null
+++ b/docs/components/outputshellcalloutputitem.mdx
@@ -0,0 +1,17 @@
+---
+title: "OutputShellCallOutputItem"
+---
+
+A native `shell_call_output` item matching OpenAI's Responses API shape. Carries per-command stdout, stderr, and the exit/timeout outcome.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `call_id` | *str* | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `max_output_length` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
+| `output` | List[[components.OutputShellCallOutputItemOutput](../components/outputshellcalloutputitemoutput.mdx)] | :heavy_check_mark: | N/A | |
+| `status` | [components.ShellCallStatus](../components/shellcallstatus.mdx) | :heavy_check_mark: | Status of a shell call or its output. | completed |
+| `type` | [components.OutputShellCallOutputItemTypeShellCallOutput](../components/outputshellcalloutputitemtypeshellcalloutput.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputshellcalloutputitemoutput.mdx b/docs/components/outputshellcalloutputitemoutput.mdx
new file mode 100644
index 0000000..ca3f63f
--- /dev/null
+++ b/docs/components/outputshellcalloutputitemoutput.mdx
@@ -0,0 +1,11 @@
+---
+title: "OutputShellCallOutputItemOutput"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `outcome` | [components.Outcome](../components/outcome.mdx) | :heavy_check_mark: | N/A |
+| `stderr` | *str* | :heavy_check_mark: | N/A |
+| `stdout` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputshellcalloutputitemtypeshellcalloutput.mdx b/docs/components/outputshellcalloutputitemtypeshellcalloutput.mdx
new file mode 100644
index 0000000..2bfc5b8
--- /dev/null
+++ b/docs/components/outputshellcalloutputitemtypeshellcalloutput.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputShellCallOutputItemTypeShellCallOutput"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputShellCallOutputItemTypeShellCallOutput
+value: OutputShellCallOutputItemTypeShellCallOutput = "shell_call_output"
+```
+
+
+## Values
+
+- `"shell_call_output"`
diff --git a/docs/components/outputsubagentservertoolitem.mdx b/docs/components/outputsubagentservertoolitem.mdx
new file mode 100644
index 0000000..edc8261
--- /dev/null
+++ b/docs/components/outputsubagentservertoolitem.mdx
@@ -0,0 +1,19 @@
+---
+title: "OutputSubagentServerToolItem"
+---
+
+An openrouter:subagent server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `error` | *Optional[str]* | :heavy_minus_sign: | Error message when the subagent task did not produce an outcome. | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `model` | *Optional[str]* | :heavy_minus_sign: | Slug of the worker model that executed the task. | |
+| `outcome` | *Optional[str]* | :heavy_minus_sign: | The worker model's result (the outcome text returned to the delegating model). | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `task_description` | *Optional[str]* | :heavy_minus_sign: | The task description the delegating model sent to the worker. | |
+| `task_name` | *Optional[str]* | :heavy_minus_sign: | The short task identifier the delegating model supplied. | |
+| `type` | [components.OutputSubagentServerToolItemType](../components/outputsubagentservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputsubagentservertoolitemtype.mdx b/docs/components/outputsubagentservertoolitemtype.mdx
new file mode 100644
index 0000000..19c0ebb
--- /dev/null
+++ b/docs/components/outputsubagentservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputSubagentServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputSubagentServerToolItemType
+value: OutputSubagentServerToolItemType = "openrouter:subagent"
+```
+
+
+## Values
+
+- `"openrouter:subagent"`
diff --git a/docs/components/outputtexteditorservertoolitem.mdx b/docs/components/outputtexteditorservertoolitem.mdx
new file mode 100644
index 0000000..2739149
--- /dev/null
+++ b/docs/components/outputtexteditorservertoolitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "OutputTextEditorServerToolItem"
+---
+
+An openrouter:text_editor server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `command` | [Optional[components.Command]](../components/command.mdx) | :heavy_minus_sign: | N/A | |
+| `file_path` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputTextEditorServerToolItemType](../components/outputtexteditorservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputtexteditorservertoolitemtype.mdx b/docs/components/outputtexteditorservertoolitemtype.mdx
new file mode 100644
index 0000000..73d4403
--- /dev/null
+++ b/docs/components/outputtexteditorservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputTextEditorServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputTextEditorServerToolItemType
+value: OutputTextEditorServerToolItemType = "openrouter:text_editor"
+```
+
+
+## Values
+
+- `"openrouter:text_editor"`
diff --git a/docs/components/outputtokensdetails.md b/docs/components/outputtokensdetails.mdx
similarity index 87%
rename from docs/components/outputtokensdetails.md
rename to docs/components/outputtokensdetails.mdx
index 59bf427..9c9b6d5 100644
--- a/docs/components/outputtokensdetails.md
+++ b/docs/components/outputtokensdetails.mdx
@@ -1,5 +1,6 @@
-# OutputTokensDetails
-
+---
+title: "OutputTokensDetails"
+---
## Fields
diff --git a/docs/components/outputtoolsearchservertoolitem.mdx b/docs/components/outputtoolsearchservertoolitem.mdx
new file mode 100644
index 0000000..af768f2
--- /dev/null
+++ b/docs/components/outputtoolsearchservertoolitem.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputToolSearchServerToolItem"
+---
+
+An openrouter:tool_search server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `query` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputToolSearchServerToolItemType](../components/outputtoolsearchservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputtoolsearchservertoolitemtype.mdx b/docs/components/outputtoolsearchservertoolitemtype.mdx
new file mode 100644
index 0000000..49c6685
--- /dev/null
+++ b/docs/components/outputtoolsearchservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputToolSearchServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputToolSearchServerToolItemType
+value: OutputToolSearchServerToolItemType = "openrouter:tool_search"
+```
+
+
+## Values
+
+- `"openrouter:tool_search"`
diff --git a/docs/components/outputwebfetchservertoolitem.mdx b/docs/components/outputwebfetchservertoolitem.mdx
new file mode 100644
index 0000000..9c045b8
--- /dev/null
+++ b/docs/components/outputwebfetchservertoolitem.mdx
@@ -0,0 +1,19 @@
+---
+title: "OutputWebFetchServerToolItem"
+---
+
+An openrouter:web_fetch server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `content` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `error` | *Optional[str]* | :heavy_minus_sign: | The error message if the fetch failed. | |
+| `http_status` | *Optional[int]* | :heavy_minus_sign: | The HTTP status code returned by the upstream URL fetch. | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `type` | [components.OutputWebFetchServerToolItemType](../components/outputwebfetchservertoolitemtype.mdx) | :heavy_check_mark: | N/A | |
+| `url` | *Optional[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputwebfetchservertoolitemtype.mdx b/docs/components/outputwebfetchservertoolitemtype.mdx
new file mode 100644
index 0000000..909b5a9
--- /dev/null
+++ b/docs/components/outputwebfetchservertoolitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputWebFetchServerToolItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputWebFetchServerToolItemType
+value: OutputWebFetchServerToolItemType = "openrouter:web_fetch"
+```
+
+
+## Values
+
+- `"openrouter:web_fetch"`
diff --git a/docs/components/outputwebsearchcallitem.mdx b/docs/components/outputwebsearchcallitem.mdx
new file mode 100644
index 0000000..3a389a5
--- /dev/null
+++ b/docs/components/outputwebsearchcallitem.mdx
@@ -0,0 +1,12 @@
+---
+title: "OutputWebSearchCallItem"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `action` | [Optional[components.Action]](../components/action.mdx) | :heavy_minus_sign: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `status` | [components.WebSearchStatus](../components/websearchstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.TypeWebSearchCall](../components/typewebsearchcall.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputwebsearchcallitemactionsearch.mdx b/docs/components/outputwebsearchcallitemactionsearch.mdx
new file mode 100644
index 0000000..8a3bea4
--- /dev/null
+++ b/docs/components/outputwebsearchcallitemactionsearch.mdx
@@ -0,0 +1,12 @@
+---
+title: "OutputWebSearchCallItemActionSearch"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `queries` | List[*str*] | :heavy_minus_sign: | N/A |
+| `query` | *str* | :heavy_check_mark: | N/A |
+| `sources` | List[[components.WebSearchSource](../components/websearchsource.mdx)] | :heavy_minus_sign: | N/A |
+| `type` | [components.ActionTypeSearch](../components/actiontypesearch.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputwebsearchservertoolitem.mdx b/docs/components/outputwebsearchservertoolitem.mdx
new file mode 100644
index 0000000..b7fb42b
--- /dev/null
+++ b/docs/components/outputwebsearchservertoolitem.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputWebSearchServerToolItem"
+---
+
+An openrouter:web_search server tool output item
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `action` | [Optional[components.OutputWebSearchServerToolItemAction]](../components/outputwebsearchservertoolitemaction.mdx) | :heavy_minus_sign: | The search action performed, matching OpenAI web_search_call.action shape. Includes the query the model issued and optional source URLs returned by the search provider. | |
+| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [components.ToolCallStatus](../components/toolcallstatus.mdx) | :heavy_check_mark: | N/A | completed |
+| `type` | [components.OutputWebSearchServerToolItemTypeOpenrouterWebSearch](../components/outputwebsearchservertoolitemtypeopenrouterwebsearch.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/outputwebsearchservertoolitemaction.mdx b/docs/components/outputwebsearchservertoolitemaction.mdx
new file mode 100644
index 0000000..ca6a895
--- /dev/null
+++ b/docs/components/outputwebsearchservertoolitemaction.mdx
@@ -0,0 +1,14 @@
+---
+title: "OutputWebSearchServerToolItemAction"
+---
+
+The search action performed, matching OpenAI web_search_call.action shape. Includes the query the model issued and optional source URLs returned by the search provider.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
+| `query` | *str* | :heavy_check_mark: | N/A |
+| `sources` | List[[components.OutputWebSearchServerToolItemSource](../components/outputwebsearchservertoolitemsource.mdx)] | :heavy_minus_sign: | N/A |
+| `type` | [components.OutputWebSearchServerToolItemTypeSearch](../components/outputwebsearchservertoolitemtypesearch.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputwebsearchservertoolitemsource.mdx b/docs/components/outputwebsearchservertoolitemsource.mdx
new file mode 100644
index 0000000..5c1f410
--- /dev/null
+++ b/docs/components/outputwebsearchservertoolitemsource.mdx
@@ -0,0 +1,10 @@
+---
+title: "OutputWebSearchServerToolItemSource"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `type` | [components.OutputWebSearchServerToolItemTypeURL](../components/outputwebsearchservertoolitemtypeurl.mdx) | :heavy_check_mark: | N/A |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/outputwebsearchservertoolitemtypeopenrouterwebsearch.mdx b/docs/components/outputwebsearchservertoolitemtypeopenrouterwebsearch.mdx
new file mode 100644
index 0000000..c2d2d4d
--- /dev/null
+++ b/docs/components/outputwebsearchservertoolitemtypeopenrouterwebsearch.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputWebSearchServerToolItemTypeOpenrouterWebSearch"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputWebSearchServerToolItemTypeOpenrouterWebSearch
+value: OutputWebSearchServerToolItemTypeOpenrouterWebSearch = "openrouter:web_search"
+```
+
+
+## Values
+
+- `"openrouter:web_search"`
diff --git a/docs/components/outputwebsearchservertoolitemtypesearch.mdx b/docs/components/outputwebsearchservertoolitemtypesearch.mdx
new file mode 100644
index 0000000..5695514
--- /dev/null
+++ b/docs/components/outputwebsearchservertoolitemtypesearch.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputWebSearchServerToolItemTypeSearch"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputWebSearchServerToolItemTypeSearch
+value: OutputWebSearchServerToolItemTypeSearch = "search"
+```
+
+
+## Values
+
+- `"search"`
diff --git a/docs/components/outputwebsearchservertoolitemtypeurl.mdx b/docs/components/outputwebsearchservertoolitemtypeurl.mdx
new file mode 100644
index 0000000..7bcc872
--- /dev/null
+++ b/docs/components/outputwebsearchservertoolitemtypeurl.mdx
@@ -0,0 +1,15 @@
+---
+title: "OutputWebSearchServerToolItemTypeURL"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import OutputWebSearchServerToolItemTypeURL
+value: OutputWebSearchServerToolItemTypeURL = "url"
+```
+
+
+## Values
+
+- `"url"`
diff --git a/docs/components/parameter.md b/docs/components/parameter.md
deleted file mode 100644
index c00420e..0000000
--- a/docs/components/parameter.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Parameter
-
-
-## Values
-
-| Name | Value |
-| ----------------------- | ----------------------- |
-| `TEMPERATURE` | temperature |
-| `TOP_P` | top_p |
-| `TOP_K` | top_k |
-| `MIN_P` | min_p |
-| `TOP_A` | top_a |
-| `FREQUENCY_PENALTY` | frequency_penalty |
-| `PRESENCE_PENALTY` | presence_penalty |
-| `REPETITION_PENALTY` | repetition_penalty |
-| `MAX_TOKENS` | max_tokens |
-| `MAX_COMPLETION_TOKENS` | max_completion_tokens |
-| `LOGIT_BIAS` | logit_bias |
-| `LOGPROBS` | logprobs |
-| `TOP_LOGPROBS` | top_logprobs |
-| `SEED` | seed |
-| `RESPONSE_FORMAT` | response_format |
-| `STRUCTURED_OUTPUTS` | structured_outputs |
-| `STOP` | stop |
-| `TOOLS` | tools |
-| `TOOL_CHOICE` | tool_choice |
-| `PARALLEL_TOOL_CALLS` | parallel_tool_calls |
-| `INCLUDE_REASONING` | include_reasoning |
-| `REASONING` | reasoning |
-| `REASONING_EFFORT` | reasoning_effort |
-| `WEB_SEARCH_OPTIONS` | web_search_options |
-| `VERBOSITY` | verbosity |
\ No newline at end of file
diff --git a/docs/components/parameter.mdx b/docs/components/parameter.mdx
new file mode 100644
index 0000000..eef5a5c
--- /dev/null
+++ b/docs/components/parameter.mdx
@@ -0,0 +1,43 @@
+---
+title: "Parameter"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Parameter
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Parameter = "temperature"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"temperature"`
+- `"top_p"`
+- `"top_k"`
+- `"min_p"`
+- `"top_a"`
+- `"frequency_penalty"`
+- `"presence_penalty"`
+- `"repetition_penalty"`
+- `"max_tokens"`
+- `"max_completion_tokens"`
+- `"logit_bias"`
+- `"logprobs"`
+- `"top_logprobs"`
+- `"seed"`
+- `"response_format"`
+- `"structured_outputs"`
+- `"stop"`
+- `"tools"`
+- `"tool_choice"`
+- `"parallel_tool_calls"`
+- `"include_reasoning"`
+- `"reasoning"`
+- `"reasoning_effort"`
+- `"web_search_options"`
+- `"verbosity"`
diff --git a/docs/components/paretorouterplugin.mdx b/docs/components/paretorouterplugin.mdx
new file mode 100644
index 0000000..c7ff4bd
--- /dev/null
+++ b/docs/components/paretorouterplugin.mdx
@@ -0,0 +1,11 @@
+---
+title: "ParetoRouterPlugin"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Set to false to disable the pareto-router plugin for this request. Defaults to true. | |
+| `id` | [components.ParetoRouterPluginID](../components/paretorouterpluginid.mdx) | :heavy_check_mark: | N/A | |
+| `min_coding_score` | *Optional[float]* | :heavy_minus_sign: | Minimum desired coding score between 0 and 1, where 1 is best. Higher values select from stronger coding models (sourced from Artificial Analysis coding percentiles). Maps internally to one of three tiers (low, medium, high). Omit to use the router default tier. | 0.8 |
\ No newline at end of file
diff --git a/docs/components/paretorouterpluginid.mdx b/docs/components/paretorouterpluginid.mdx
new file mode 100644
index 0000000..7e0cdb5
--- /dev/null
+++ b/docs/components/paretorouterpluginid.mdx
@@ -0,0 +1,15 @@
+---
+title: "ParetoRouterPluginID"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ParetoRouterPluginID
+value: ParetoRouterPluginID = "pareto-router"
+```
+
+
+## Values
+
+- `"pareto-router"`
diff --git a/docs/components/partialcoverage.mdx b/docs/components/partialcoverage.mdx
new file mode 100644
index 0000000..7c7807b
--- /dev/null
+++ b/docs/components/partialcoverage.mdx
@@ -0,0 +1,10 @@
+---
+title: "PartialCoverage"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `models` | List[*str*] | :heavy_check_mark: | N/A |
+| `point` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/partition.md b/docs/components/partition.md
deleted file mode 100644
index 4f49e41..0000000
--- a/docs/components/partition.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Partition
-
-Partitioning strategy for sorting: "model" (default) groups endpoints by model before sorting (fallback models remain fallbacks), "none" sorts all endpoints together regardless of model.
-
-
-## Values
-
-| Name | Value |
-| ------- | ------- |
-| `MODEL` | model |
-| `NONE` | none |
\ No newline at end of file
diff --git a/docs/components/partition.mdx b/docs/components/partition.mdx
new file mode 100644
index 0000000..c61b4bc
--- /dev/null
+++ b/docs/components/partition.mdx
@@ -0,0 +1,22 @@
+---
+title: "Partition"
+---
+
+Partitioning strategy for sorting: "model" (default) groups endpoints by model before sorting (fallback models remain fallbacks), "none" sorts all endpoints together regardless of model.
+
+## Example Usage
+
+```python
+from openrouter.components import Partition
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Partition = "model"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"model"`
+- `"none"`
diff --git a/docs/components/payloadtoolargeresponseerrordata.md b/docs/components/payloadtoolargeresponseerrordata.mdx
similarity index 92%
rename from docs/components/payloadtoolargeresponseerrordata.md
rename to docs/components/payloadtoolargeresponseerrordata.mdx
index 197ba50..3d55fb2 100644
--- a/docs/components/payloadtoolargeresponseerrordata.md
+++ b/docs/components/payloadtoolargeresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# PayloadTooLargeResponseErrorData
+---
+title: "PayloadTooLargeResponseErrorData"
+---
Error data for PayloadTooLargeResponse
diff --git a/docs/components/paymentrequiredresponseerrordata.md b/docs/components/paymentrequiredresponseerrordata.mdx
similarity index 92%
rename from docs/components/paymentrequiredresponseerrordata.md
rename to docs/components/paymentrequiredresponseerrordata.mdx
index e083b1f..2dc83a9 100644
--- a/docs/components/paymentrequiredresponseerrordata.md
+++ b/docs/components/paymentrequiredresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# PaymentRequiredResponseErrorData
+---
+title: "PaymentRequiredResponseErrorData"
+---
Error data for PaymentRequiredResponse
diff --git a/docs/components/pdfparserengine.md b/docs/components/pdfparserengine.mdx
similarity index 91%
rename from docs/components/pdfparserengine.md
rename to docs/components/pdfparserengine.mdx
index 8889dad..a78f4de 100644
--- a/docs/components/pdfparserengine.md
+++ b/docs/components/pdfparserengine.mdx
@@ -1,4 +1,6 @@
-# PDFParserEngine
+---
+title: "PDFParserEngine"
+---
The engine to use for parsing PDF files. "pdf-text" is deprecated and automatically redirected to "cloudflare-ai".
diff --git a/docs/components/pdfparserengineenum.mdx b/docs/components/pdfparserengineenum.mdx
new file mode 100644
index 0000000..69ef293
--- /dev/null
+++ b/docs/components/pdfparserengineenum.mdx
@@ -0,0 +1,21 @@
+---
+title: "PDFParserEngineEnum"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import PDFParserEngineEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: PDFParserEngineEnum = "mistral-ocr"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"mistral-ocr"`
+- `"native"`
+- `"cloudflare-ai"`
diff --git a/docs/components/pdfparserenginepdftext.mdx b/docs/components/pdfparserenginepdftext.mdx
new file mode 100644
index 0000000..b1b3339
--- /dev/null
+++ b/docs/components/pdfparserenginepdftext.mdx
@@ -0,0 +1,15 @@
+---
+title: "PDFParserEnginePDFText"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import PDFParserEnginePDFText
+value: PDFParserEnginePDFText = "pdf-text"
+```
+
+
+## Values
+
+- `"pdf-text"`
diff --git a/docs/components/pdfparseroptions.md b/docs/components/pdfparseroptions.mdx
similarity index 80%
rename from docs/components/pdfparseroptions.md
rename to docs/components/pdfparseroptions.mdx
index 05a4fc4..2e83052 100644
--- a/docs/components/pdfparseroptions.md
+++ b/docs/components/pdfparseroptions.mdx
@@ -1,4 +1,6 @@
-# PDFParserOptions
+---
+title: "PDFParserOptions"
+---
Options for PDF parsing.
@@ -7,4 +9,4 @@ Options for PDF parsing.
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
-| `engine` | [Optional[components.PDFParserEngine]](../components/pdfparserengine.md) | :heavy_minus_sign: | The engine to use for parsing PDF files. "pdf-text" is deprecated and automatically redirected to "cloudflare-ai". | cloudflare-ai |
\ No newline at end of file
+| `engine` | [Optional[components.PDFParserEngine]](../components/pdfparserengine.mdx) | :heavy_minus_sign: | The engine to use for parsing PDF files. "pdf-text" is deprecated and automatically redirected to "cloudflare-ai". | cloudflare-ai |
\ No newline at end of file
diff --git a/docs/components/pendingsafetycheck.mdx b/docs/components/pendingsafetycheck.mdx
new file mode 100644
index 0000000..4d484ee
--- /dev/null
+++ b/docs/components/pendingsafetycheck.mdx
@@ -0,0 +1,11 @@
+---
+title: "PendingSafetyCheck"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `code` | *str* | :heavy_check_mark: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `message` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/percentilelatencycutoffs.md b/docs/components/percentilelatencycutoffs.mdx
similarity index 95%
rename from docs/components/percentilelatencycutoffs.md
rename to docs/components/percentilelatencycutoffs.mdx
index 6a2c04f..60b8ab2 100644
--- a/docs/components/percentilelatencycutoffs.md
+++ b/docs/components/percentilelatencycutoffs.mdx
@@ -1,4 +1,6 @@
-# PercentileLatencyCutoffs
+---
+title: "PercentileLatencyCutoffs"
+---
Percentile-based latency cutoffs. All specified cutoffs must be met for an endpoint to be preferred.
diff --git a/docs/components/percentilestats.md b/docs/components/percentilestats.mdx
similarity index 96%
rename from docs/components/percentilestats.md
rename to docs/components/percentilestats.mdx
index 6f47431..ff5277c 100644
--- a/docs/components/percentilestats.md
+++ b/docs/components/percentilestats.mdx
@@ -1,4 +1,6 @@
-# PercentileStats
+---
+title: "PercentileStats"
+---
Latency percentiles in milliseconds over the last 30 minutes. Latency measures time to first token. Only visible when authenticated with an API key or cookie; returns null for unauthenticated requests.
diff --git a/docs/components/percentilethroughputcutoffs.md b/docs/components/percentilethroughputcutoffs.mdx
similarity index 95%
rename from docs/components/percentilethroughputcutoffs.md
rename to docs/components/percentilethroughputcutoffs.mdx
index dff209d..86ea312 100644
--- a/docs/components/percentilethroughputcutoffs.md
+++ b/docs/components/percentilethroughputcutoffs.mdx
@@ -1,4 +1,6 @@
-# PercentileThroughputCutoffs
+---
+title: "PercentileThroughputCutoffs"
+---
Percentile-based throughput cutoffs. All specified cutoffs must be met for an endpoint to be preferred.
diff --git a/docs/components/perrequestlimits.md b/docs/components/perrequestlimits.mdx
similarity index 96%
rename from docs/components/perrequestlimits.md
rename to docs/components/perrequestlimits.mdx
index f42074d..c03fb6f 100644
--- a/docs/components/perrequestlimits.md
+++ b/docs/components/perrequestlimits.mdx
@@ -1,4 +1,6 @@
-# PerRequestLimits
+---
+title: "PerRequestLimits"
+---
Per-request token limits
diff --git a/docs/components/pipelinestage.mdx b/docs/components/pipelinestage.mdx
new file mode 100644
index 0000000..fb00025
--- /dev/null
+++ b/docs/components/pipelinestage.mdx
@@ -0,0 +1,15 @@
+---
+title: "PipelineStage"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `cost_usd` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
+| `data` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
+| `guardrail_id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `guardrail_scope` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `type` | [components.PipelineStageType](../components/pipelinestagetype.mdx) | :heavy_check_mark: | Categorical kind of a pipeline stage. Multiple plugins can share a type (e.g. all guardrail-level plugins emit `guardrail`); the `name` field disambiguates which plugin emitted it. | guardrail |
\ No newline at end of file
diff --git a/docs/components/pipelinestagetype.mdx b/docs/components/pipelinestagetype.mdx
new file mode 100644
index 0000000..dbf6cac
--- /dev/null
+++ b/docs/components/pipelinestagetype.mdx
@@ -0,0 +1,25 @@
+---
+title: "PipelineStageType"
+---
+
+Categorical kind of a pipeline stage. Multiple plugins can share a type (e.g. all guardrail-level plugins emit `guardrail`); the `name` field disambiguates which plugin emitted it.
+
+## Example Usage
+
+```python
+from openrouter.components import PipelineStageType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: PipelineStageType = "guardrail"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"guardrail"`
+- `"plugin"`
+- `"server_tools"`
+- `"response_healing"`
+- `"context_compression"`
diff --git a/docs/components/preferredmaxlatency.md b/docs/components/preferredmaxlatency.mdx
similarity index 94%
rename from docs/components/preferredmaxlatency.md
rename to docs/components/preferredmaxlatency.mdx
index ce96e64..0c78ef7 100644
--- a/docs/components/preferredmaxlatency.md
+++ b/docs/components/preferredmaxlatency.mdx
@@ -1,4 +1,6 @@
-# PreferredMaxLatency
+---
+title: "PreferredMaxLatency"
+---
Preferred maximum latency (in seconds). Can be a number (applies to p50) or an object with percentile-specific cutoffs. Endpoints above the threshold(s) may still be used, but are deprioritized in routing. When using fallback models, this may cause a fallback model to be used instead of the primary model if it meets the threshold.
diff --git a/docs/components/preferredminthroughput.md b/docs/components/preferredminthroughput.mdx
similarity index 93%
rename from docs/components/preferredminthroughput.md
rename to docs/components/preferredminthroughput.mdx
index fd49bf8..348b570 100644
--- a/docs/components/preferredminthroughput.md
+++ b/docs/components/preferredminthroughput.mdx
@@ -1,4 +1,6 @@
-# PreferredMinThroughput
+---
+title: "PreferredMinThroughput"
+---
Preferred minimum throughput (in tokens per second). Can be a number (applies to p50) or an object with percentile-specific cutoffs. Endpoints below the threshold(s) may still be used, but are deprioritized in routing. When using fallback models, this may cause a fallback model to be used instead of the primary model if it meets the threshold.
diff --git a/docs/components/preset.mdx b/docs/components/preset.mdx
new file mode 100644
index 0000000..af18885
--- /dev/null
+++ b/docs/components/preset.mdx
@@ -0,0 +1,22 @@
+---
+title: "Preset"
+---
+
+A preset without version details.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `created_at` | *str* | :heavy_check_mark: | N/A | |
+| `creator_user_id` | *Nullable[str]* | :heavy_check_mark: | N/A | |
+| `description` | *Nullable[str]* | :heavy_check_mark: | N/A | |
+| `designated_version_id` | *Nullable[str]* | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `slug` | *str* | :heavy_check_mark: | N/A | |
+| `status` | [components.PresetStatus](../components/presetstatus.mdx) | :heavy_check_mark: | The status of a preset. | active |
+| `status_updated_at` | *Nullable[str]* | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | N/A | |
+| `workspace_id` | *Nullable[str]* | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/presetdesignatedversion.mdx b/docs/components/presetdesignatedversion.mdx
new file mode 100644
index 0000000..0db5491
--- /dev/null
+++ b/docs/components/presetdesignatedversion.mdx
@@ -0,0 +1,19 @@
+---
+title: "PresetDesignatedVersion"
+---
+
+A specific version of a preset, containing config and optional system prompt.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------- | -------------------------- | -------------------------- | -------------------------- |
+| `config` | Dict[str, *Nullable[Any]*] | :heavy_check_mark: | N/A |
+| `created_at` | *str* | :heavy_check_mark: | N/A |
+| `creator_id` | *str* | :heavy_check_mark: | N/A |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `preset_id` | *str* | :heavy_check_mark: | N/A |
+| `system_prompt` | *Nullable[str]* | :heavy_check_mark: | N/A |
+| `updated_at` | *str* | :heavy_check_mark: | N/A |
+| `version` | *int* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/presetenum.mdx b/docs/components/presetenum.mdx
new file mode 100644
index 0000000..d4ae3a8
--- /dev/null
+++ b/docs/components/presetenum.mdx
@@ -0,0 +1,23 @@
+---
+title: "PresetEnum"
+---
+
+A curated OpenRouter fusion preset (slugs follow `-`, e.g. `general-high`). Expands server-side into the preset's analysis_models panel and judge model, so callers never name individual models. Explicitly provided `analysis_models` / `model` take precedence.
+
+## Example Usage
+
+```python
+from openrouter.components import PresetEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: PresetEnum = "general-high"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"general-high"`
+- `"general-budget"`
+- `"general-fast"`
diff --git a/docs/components/presetstatus.mdx b/docs/components/presetstatus.mdx
new file mode 100644
index 0000000..7eafb31
--- /dev/null
+++ b/docs/components/presetstatus.mdx
@@ -0,0 +1,23 @@
+---
+title: "PresetStatus"
+---
+
+The status of a preset.
+
+## Example Usage
+
+```python
+from openrouter.components import PresetStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: PresetStatus = "active"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"active"`
+- `"disabled"`
+- `"archived"`
diff --git a/docs/components/presetwithdesignatedversion.mdx b/docs/components/presetwithdesignatedversion.mdx
new file mode 100644
index 0000000..56d189d
--- /dev/null
+++ b/docs/components/presetwithdesignatedversion.mdx
@@ -0,0 +1,23 @@
+---
+title: "PresetWithDesignatedVersion"
+---
+
+A preset with its currently designated version.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `created_at` | *str* | :heavy_check_mark: | N/A | |
+| `creator_user_id` | *Nullable[str]* | :heavy_check_mark: | N/A | |
+| `description` | *Nullable[str]* | :heavy_check_mark: | N/A | |
+| `designated_version_id` | *Nullable[str]* | :heavy_check_mark: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `slug` | *str* | :heavy_check_mark: | N/A | |
+| `status` | [components.PresetStatus](../components/presetstatus.mdx) | :heavy_check_mark: | The status of a preset. | active |
+| `status_updated_at` | *Nullable[str]* | :heavy_check_mark: | N/A | |
+| `updated_at` | *str* | :heavy_check_mark: | N/A | |
+| `workspace_id` | *Nullable[str]* | :heavy_check_mark: | N/A | |
+| `designated_version` | [Nullable[components.PresetDesignatedVersion]](../components/presetdesignatedversion.mdx) | :heavy_check_mark: | A specific version of a preset, containing config and optional system prompt. | \{
"config": \{
"model": "openai/gpt-4o",
"temperature": 0.7
},
"created_at": "2026-04-20T10:00:00Z",
"creator_id": "user_2dHFtVWx2n56w6HkM0000000000",
"id": "550e8400-e29b-41d4-a716-446655440000",
"preset_id": "650e8400-e29b-41d4-a716-446655440001",
"system_prompt": "You are a helpful assistant.",
"updated_at": "2026-04-20T10:00:00Z",
"version": 1
} |
\ No newline at end of file
diff --git a/docs/components/preview20250311websearchservertool.mdx b/docs/components/preview20250311websearchservertool.mdx
new file mode 100644
index 0000000..51a09f1
--- /dev/null
+++ b/docs/components/preview20250311websearchservertool.mdx
@@ -0,0 +1,17 @@
+---
+title: "Preview20250311WebSearchServerTool"
+---
+
+Web search preview tool configuration (2025-03-11 version)
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `engine` | [Optional[components.WebSearchEngineEnum]](../components/websearchengineenum.mdx) | :heavy_minus_sign: | Which search engine to use. "auto" (default) uses native if the provider supports it, otherwise Exa. "native" forces the provider's built-in search. "exa" forces the Exa search API. "firecrawl" uses Firecrawl (requires BYOK). "parallel" uses the Parallel search API. "perplexity" uses the Perplexity Search API (raw ranked results). | auto |
+| `filters` | [OptionalNullable[components.WebSearchDomainFilter]](../components/websearchdomainfilter.mdx) | :heavy_minus_sign: | N/A | \{
"allowed_domains": [
"example.com"
],
"excluded_domains": [
"spam.com"
]
} |
+| `max_results` | *Optional[int]* | :heavy_minus_sign: | Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped. | 5 |
+| `search_context_size` | [Optional[components.SearchContextSizeEnum]](../components/searchcontextsizeenum.mdx) | :heavy_minus_sign: | Size of the search context for web search tools | medium |
+| `type` | [components.Preview20250311WebSearchServerToolType](../components/preview20250311websearchservertooltype.mdx) | :heavy_check_mark: | N/A | |
+| `user_location` | [OptionalNullable[components.PreviewWebSearchUserLocation]](../components/previewwebsearchuserlocation.mdx) | :heavy_minus_sign: | N/A | \{
"city": "San Francisco",
"country": "USA",
"region": "California",
"timezone": "America/Los_Angeles",
"type": "approximate"
} |
\ No newline at end of file
diff --git a/docs/components/preview20250311websearchservertooltype.mdx b/docs/components/preview20250311websearchservertooltype.mdx
new file mode 100644
index 0000000..3669d05
--- /dev/null
+++ b/docs/components/preview20250311websearchservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "Preview20250311WebSearchServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Preview20250311WebSearchServerToolType
+value: Preview20250311WebSearchServerToolType = "web_search_preview_2025_03_11"
+```
+
+
+## Values
+
+- `"web_search_preview_2025_03_11"`
diff --git a/docs/components/previewwebsearchservertool.mdx b/docs/components/previewwebsearchservertool.mdx
new file mode 100644
index 0000000..66b4f3f
--- /dev/null
+++ b/docs/components/previewwebsearchservertool.mdx
@@ -0,0 +1,17 @@
+---
+title: "PreviewWebSearchServerTool"
+---
+
+Web search preview tool configuration
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `engine` | [Optional[components.WebSearchEngineEnum]](../components/websearchengineenum.mdx) | :heavy_minus_sign: | Which search engine to use. "auto" (default) uses native if the provider supports it, otherwise Exa. "native" forces the provider's built-in search. "exa" forces the Exa search API. "firecrawl" uses Firecrawl (requires BYOK). "parallel" uses the Parallel search API. "perplexity" uses the Perplexity Search API (raw ranked results). | auto |
+| `filters` | [OptionalNullable[components.WebSearchDomainFilter]](../components/websearchdomainfilter.mdx) | :heavy_minus_sign: | N/A | \{
"allowed_domains": [
"example.com"
],
"excluded_domains": [
"spam.com"
]
} |
+| `max_results` | *Optional[int]* | :heavy_minus_sign: | Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped. | 5 |
+| `search_context_size` | [Optional[components.SearchContextSizeEnum]](../components/searchcontextsizeenum.mdx) | :heavy_minus_sign: | Size of the search context for web search tools | medium |
+| `type` | [components.PreviewWebSearchServerToolType](../components/previewwebsearchservertooltype.mdx) | :heavy_check_mark: | N/A | |
+| `user_location` | [OptionalNullable[components.PreviewWebSearchUserLocation]](../components/previewwebsearchuserlocation.mdx) | :heavy_minus_sign: | N/A | \{
"city": "San Francisco",
"country": "USA",
"region": "California",
"timezone": "America/Los_Angeles",
"type": "approximate"
} |
\ No newline at end of file
diff --git a/docs/components/previewwebsearchservertooltype.mdx b/docs/components/previewwebsearchservertooltype.mdx
new file mode 100644
index 0000000..6d45399
--- /dev/null
+++ b/docs/components/previewwebsearchservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "PreviewWebSearchServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import PreviewWebSearchServerToolType
+value: PreviewWebSearchServerToolType = "web_search_preview"
+```
+
+
+## Values
+
+- `"web_search_preview"`
diff --git a/docs/components/previewwebsearchuserlocation.mdx b/docs/components/previewwebsearchuserlocation.mdx
new file mode 100644
index 0000000..1695e40
--- /dev/null
+++ b/docs/components/previewwebsearchuserlocation.mdx
@@ -0,0 +1,13 @@
+---
+title: "PreviewWebSearchUserLocation"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `city` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `country` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `region` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `timezone` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `type` | [components.PreviewWebSearchUserLocationType](../components/previewwebsearchuserlocationtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/previewwebsearchuserlocationtype.mdx b/docs/components/previewwebsearchuserlocationtype.mdx
new file mode 100644
index 0000000..414a520
--- /dev/null
+++ b/docs/components/previewwebsearchuserlocationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "PreviewWebSearchUserLocationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import PreviewWebSearchUserLocationType
+value: PreviewWebSearchUserLocationType = "approximate"
+```
+
+
+## Values
+
+- `"approximate"`
diff --git a/docs/components/pricing.md b/docs/components/pricing.mdx
similarity index 99%
rename from docs/components/pricing.md
rename to docs/components/pricing.mdx
index 69ac72c..78ac34b 100644
--- a/docs/components/pricing.md
+++ b/docs/components/pricing.mdx
@@ -1,5 +1,6 @@
-# Pricing
-
+---
+title: "Pricing"
+---
## Fields
diff --git a/docs/components/promptinjectionscanscope.mdx b/docs/components/promptinjectionscanscope.mdx
new file mode 100644
index 0000000..1d91d32
--- /dev/null
+++ b/docs/components/promptinjectionscanscope.mdx
@@ -0,0 +1,22 @@
+---
+title: "PromptInjectionScanScope"
+---
+
+Which message roles to scan for prompt injection. Only applies to the regex-prompt-injection builtin. Defaults to all_messages.
+
+## Example Usage
+
+```python
+from openrouter.components import PromptInjectionScanScope
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: PromptInjectionScanScope = "user_only"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"user_only"`
+- `"all_messages"`
diff --git a/docs/components/providername.md b/docs/components/providername.md
deleted file mode 100644
index 5f38179..0000000
--- a/docs/components/providername.md
+++ /dev/null
@@ -1,98 +0,0 @@
-# ProviderName
-
-
-## Values
-
-| Name | Value |
-| ------------------- | ------------------- |
-| `AKASH_ML` | AkashML |
-| `AI21` | AI21 |
-| `AION_LABS` | AionLabs |
-| `ALIBABA` | Alibaba |
-| `AMBIENT` | Ambient |
-| `BAIDU` | Baidu |
-| `AMAZON_BEDROCK` | Amazon Bedrock |
-| `AMAZON_NOVA` | Amazon Nova |
-| `ANTHROPIC` | Anthropic |
-| `ARCEE_AI` | Arcee AI |
-| `ATLAS_CLOUD` | AtlasCloud |
-| `AVIAN` | Avian |
-| `AZURE` | Azure |
-| `BASE_TEN` | BaseTen |
-| `BYTE_PLUS` | BytePlus |
-| `BLACK_FOREST_LABS` | Black Forest Labs |
-| `CEREBRAS` | Cerebras |
-| `CHUTES` | Chutes |
-| `CIRRASCALE` | Cirrascale |
-| `CLARIFAI` | Clarifai |
-| `CLOUDFLARE` | Cloudflare |
-| `COHERE` | Cohere |
-| `CRUCIBLE` | Crucible |
-| `CRUSOE` | Crusoe |
-| `DARKBLOOM` | Darkbloom |
-| `DECART` | Decart |
-| `DEEP_INFRA` | DeepInfra |
-| `DEEP_SEEK` | DeepSeek |
-| `DEKA_LLM` | DekaLLM |
-| `DIGITAL_OCEAN` | DigitalOcean |
-| `FEATHERLESS` | Featherless |
-| `FIREWORKS` | Fireworks |
-| `FRIENDLI` | Friendli |
-| `GMI_CLOUD` | GMICloud |
-| `GOOGLE` | Google |
-| `GOOGLE_AI_STUDIO` | Google AI Studio |
-| `GROQ` | Groq |
-| `HEY_GEN` | HeyGen |
-| `INCEPTION` | Inception |
-| `INCEPTRON` | Inceptron |
-| `INFERENCE_NET` | InferenceNet |
-| `IONSTREAM` | Ionstream |
-| `INFERMATIC` | Infermatic |
-| `IO_NET` | Io Net |
-| `INFERACT_V_LLM` | Inferact vLLM |
-| `INFLECTION` | Inflection |
-| `LIQUID` | Liquid |
-| `MARA` | Mara |
-| `MANCER_2` | Mancer 2 |
-| `MINIMAX` | Minimax |
-| `MODEL_RUN` | ModelRun |
-| `MISTRAL` | Mistral |
-| `MODULAR` | Modular |
-| `MOONSHOT_AI` | Moonshot AI |
-| `MORPH` | Morph |
-| `N_COMPASS` | NCompass |
-| `NEBIUS` | Nebius |
-| `NEX_AGI` | Nex AGI |
-| `NEXT_BIT` | NextBit |
-| `NOVITA` | Novita |
-| `NVIDIA` | Nvidia |
-| `OPEN_AI` | OpenAI |
-| `OPEN_INFERENCE` | OpenInference |
-| `PARASAIL` | Parasail |
-| `POOLSIDE` | Poolside |
-| `PERCEPTRON` | Perceptron |
-| `PERPLEXITY` | Perplexity |
-| `PHALA` | Phala |
-| `RECRAFT` | Recraft |
-| `REKA` | Reka |
-| `RELACE` | Relace |
-| `SAKANA_AI` | Sakana AI |
-| `SAMBA_NOVA` | SambaNova |
-| `SEED` | Seed |
-| `SILICON_FLOW` | SiliconFlow |
-| `SOURCEFUL` | Sourceful |
-| `STEP_FUN` | StepFun |
-| `STEALTH` | Stealth |
-| `STREAM_LAKE` | StreamLake |
-| `SWITCHPOINT` | Switchpoint |
-| `TENSTORRENT` | Tenstorrent |
-| `TOGETHER` | Together |
-| `UPSTAGE` | Upstage |
-| `VENICE` | Venice |
-| `WAFER` | Wafer |
-| `WAND_B` | WandB |
-| `QUIVER` | Quiver |
-| `XIAOMI` | Xiaomi |
-| `X_AI` | xAI |
-| `Z_AI` | Z.AI |
-| `FAKE_PROVIDER` | FakeProvider |
\ No newline at end of file
diff --git a/docs/components/providername.mdx b/docs/components/providername.mdx
new file mode 100644
index 0000000..f7cde44
--- /dev/null
+++ b/docs/components/providername.mdx
@@ -0,0 +1,109 @@
+---
+title: "ProviderName"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ProviderName
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ProviderName = "AkashML"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"AkashML"`
+- `"AI21"`
+- `"AionLabs"`
+- `"Alibaba"`
+- `"Ambient"`
+- `"Baidu"`
+- `"Amazon Bedrock"`
+- `"Amazon Nova"`
+- `"Anthropic"`
+- `"Arcee AI"`
+- `"AtlasCloud"`
+- `"Avian"`
+- `"Azure"`
+- `"BaseTen"`
+- `"BytePlus"`
+- `"Black Forest Labs"`
+- `"Cerebras"`
+- `"Chutes"`
+- `"Cirrascale"`
+- `"Clarifai"`
+- `"Cloudflare"`
+- `"Cohere"`
+- `"Crucible"`
+- `"Crusoe"`
+- `"Darkbloom"`
+- `"Decart"`
+- `"DeepInfra"`
+- `"DeepSeek"`
+- `"DekaLLM"`
+- `"DigitalOcean"`
+- `"Featherless"`
+- `"Fireworks"`
+- `"Friendli"`
+- `"GMICloud"`
+- `"Google"`
+- `"Google AI Studio"`
+- `"Groq"`
+- `"HeyGen"`
+- `"Inception"`
+- `"Inceptron"`
+- `"InferenceNet"`
+- `"Ionstream"`
+- `"Infermatic"`
+- `"Io Net"`
+- `"Inferact vLLM"`
+- `"Inflection"`
+- `"Liquid"`
+- `"Mara"`
+- `"Mancer 2"`
+- `"Minimax"`
+- `"ModelRun"`
+- `"Mistral"`
+- `"Modular"`
+- `"Moonshot AI"`
+- `"Morph"`
+- `"NCompass"`
+- `"Nebius"`
+- `"Nex AGI"`
+- `"NextBit"`
+- `"Novita"`
+- `"Nvidia"`
+- `"OpenAI"`
+- `"OpenInference"`
+- `"Parasail"`
+- `"Poolside"`
+- `"Perceptron"`
+- `"Perplexity"`
+- `"Phala"`
+- `"Recraft"`
+- `"Reka"`
+- `"Relace"`
+- `"Sakana AI"`
+- `"SambaNova"`
+- `"Seed"`
+- `"SiliconFlow"`
+- `"Sourceful"`
+- `"StepFun"`
+- `"Stealth"`
+- `"StreamLake"`
+- `"Switchpoint"`
+- `"Tenstorrent"`
+- `"Together"`
+- `"Upstage"`
+- `"Venice"`
+- `"Wafer"`
+- `"WandB"`
+- `"Quiver"`
+- `"Xiaomi"`
+- `"xAI"`
+- `"Z.AI"`
+- `"FakeProvider"`
diff --git a/docs/components/provideroptions.mdx b/docs/components/provideroptions.mdx
new file mode 100644
index 0000000..b15b96f
--- /dev/null
+++ b/docs/components/provideroptions.mdx
@@ -0,0 +1,131 @@
+---
+title: "ProviderOptions"
+---
+
+Provider-specific options keyed by provider slug. Only options for the matched provider are forwarded; the rest are ignored. Unrecognized keys are silently dropped.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------- | -------------------------- | -------------------------- | -------------------------- |
+| `oneai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ai21` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `aion_labs` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `akashml` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `alibaba` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `amazon_bedrock` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `amazon_nova` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ambient` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `anthropic` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `anyscale` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `arcee_ai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `atlas_cloud` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `atoma` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `avian` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `azure` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `baidu` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `baseten` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `black_forest_labs` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `byteplus` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `centml` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `cerebras` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `chutes` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `cirrascale` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `clarifai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `cloudflare` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `cohere` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `crofai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `crucible` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `crusoe` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `darkbloom` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `decart` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `deepinfra` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `deepseek` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `dekallm` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `digitalocean` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `enfer` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `fake_provider` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `featherless` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `fireworks` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `friendli` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `gmicloud` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `google_ai_studio` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `google_vertex` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `gopomelo` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `groq` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `heygen` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `huggingface` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `hyperbolic` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `hyperbolic_quantized` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inception` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inceptron` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inferact_vllm` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inference_net` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `infermatic` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inflection` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inocloud` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `io_net` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ionstream` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `klusterai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `lambda_` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `lepton` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `liquid` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `lynn` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `lynn_private` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `mancer` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `mancer_old` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `mara` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `meta` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `minimax` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `mistral` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `modal` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `modelrun` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `modular` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `moonshotai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `morph` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ncompass` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nebius` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nex_agi` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nextbit` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nineteen` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `novita` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nvidia` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `octoai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `open_inference` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `openai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `parasail` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `perceptron` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `perplexity` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `phala` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `poolside` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `quiver` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `recraft` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `recursal` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `reflection` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `reka` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `relace` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `replicate` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sakana_ai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sambanova` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sambanova_cloaked` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `seed` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sf_compute` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `siliconflow` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sourceful` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `stealth` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `stepfun` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `streamlake` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `switchpoint` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `targon` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `tenstorrent` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `together` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `together_lite` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ubicloud` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `upstage` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `venice` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `wafer` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `wandb` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `xai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `xiaomi` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `z_ai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/provideroverloadedresponseerrordata.md b/docs/components/provideroverloadedresponseerrordata.mdx
similarity index 92%
rename from docs/components/provideroverloadedresponseerrordata.md
rename to docs/components/provideroverloadedresponseerrordata.mdx
index afebc30..05bcfce 100644
--- a/docs/components/provideroverloadedresponseerrordata.md
+++ b/docs/components/provideroverloadedresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# ProviderOverloadedResponseErrorData
+---
+title: "ProviderOverloadedResponseErrorData"
+---
Error data for ProviderOverloadedResponse
diff --git a/docs/components/providerpreferences.md b/docs/components/providerpreferences.mdx
similarity index 81%
rename from docs/components/providerpreferences.md
rename to docs/components/providerpreferences.mdx
index 2321236..750d3a2 100644
--- a/docs/components/providerpreferences.md
+++ b/docs/components/providerpreferences.mdx
@@ -1,4 +1,6 @@
-# ProviderPreferences
+---
+title: "ProviderPreferences"
+---
When multiple model providers are available, optionally indicate your routing preference.
@@ -8,15 +10,15 @@ When multiple model providers are available, optionally indicate your routing pr
| Field | Type | Required | Description | Example |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `allow_fallbacks` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to allow backup providers to serve requests
- true: (default) when the primary provider (or your custom providers in "order") is unavailable, use the next best provider.
- false: use only the primary/custom provider, and return the upstream error if it's unavailable.
| |
-| `data_collection` | [OptionalNullable[components.DataCollection]](../components/datacollection.md) | :heavy_minus_sign: | Data collection setting. If no available model provider meets the requirement, your request will return an error.
- allow: (default) allow providers which store user data non-transiently and may train on it
- deny: use only providers which do not collect user data. | allow |
+| `data_collection` | [OptionalNullable[components.DataCollection]](../components/datacollection.mdx) | :heavy_minus_sign: | Data collection setting. If no available model provider meets the requirement, your request will return an error.
- allow: (default) allow providers which store user data non-transiently and may train on it
- deny: use only providers which do not collect user data. | allow |
| `enforce_distillable_text` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to restrict routing to only models that allow text distillation. When true, only models where the author has allowed distillation will be used. | true |
-| `ignore` | List[[components.Ignore](../components/ignore.md)] | :heavy_minus_sign: | List of provider slugs to ignore. If provided, this list is merged with your account-wide ignored provider settings for this request. | [
"openai",
"anthropic"
] |
-| `max_price` | [Optional[components.MaxPrice]](../components/maxprice.md) | :heavy_minus_sign: | The object specifying the maximum price you want to pay for this request. USD price per million tokens, for prompt and completion. | |
-| `only` | List[[components.Only](../components/only.md)] | :heavy_minus_sign: | List of provider slugs to allow. If provided, this list is merged with your account-wide allowed provider settings for this request. | [
"openai",
"anthropic"
] |
-| `order` | List[[components.Order](../components/order.md)] | :heavy_minus_sign: | An ordered list of provider slugs. The router will attempt to use the first provider in the subset of this list that supports your requested model, and fall back to the next if it is unavailable. If no providers are available, the request will fail with an error message. | [
"openai",
"anthropic"
] |
-| `preferred_max_latency` | [OptionalNullable[components.PreferredMaxLatency]](../components/preferredmaxlatency.md) | :heavy_minus_sign: | Preferred maximum latency (in seconds). Can be a number (applies to p50) or an object with percentile-specific cutoffs. Endpoints above the threshold(s) may still be used, but are deprioritized in routing. When using fallback models, this may cause a fallback model to be used instead of the primary model if it meets the threshold. | 5 |
-| `preferred_min_throughput` | [OptionalNullable[components.PreferredMinThroughput]](../components/preferredminthroughput.md) | :heavy_minus_sign: | Preferred minimum throughput (in tokens per second). Can be a number (applies to p50) or an object with percentile-specific cutoffs. Endpoints below the threshold(s) may still be used, but are deprioritized in routing. When using fallback models, this may cause a fallback model to be used instead of the primary model if it meets the threshold. | 100 |
-| `quantizations` | List[[components.Quantization](../components/quantization.md)] | :heavy_minus_sign: | A list of quantization levels to filter the provider by. | |
+| `ignore` | List[[components.Ignore](../components/ignore.mdx)] | :heavy_minus_sign: | List of provider slugs to ignore. If provided, this list is merged with your account-wide ignored provider settings for this request. | [
"openai",
"anthropic"
] |
+| `max_price` | [Optional[components.MaxPrice]](../components/maxprice.mdx) | :heavy_minus_sign: | The object specifying the maximum price you want to pay for this request. USD price per million tokens, for prompt and completion. | |
+| `only` | List[[components.Only](../components/only.mdx)] | :heavy_minus_sign: | List of provider slugs to allow. If provided, this list is merged with your account-wide allowed provider settings for this request. | [
"openai",
"anthropic"
] |
+| `order` | List[[components.Order](../components/order.mdx)] | :heavy_minus_sign: | An ordered list of provider slugs. The router will attempt to use the first provider in the subset of this list that supports your requested model, and fall back to the next if it is unavailable. If no providers are available, the request will fail with an error message. | [
"openai",
"anthropic"
] |
+| `preferred_max_latency` | [OptionalNullable[components.PreferredMaxLatency]](../components/preferredmaxlatency.mdx) | :heavy_minus_sign: | Preferred maximum latency (in seconds). Can be a number (applies to p50) or an object with percentile-specific cutoffs. Endpoints above the threshold(s) may still be used, but are deprioritized in routing. When using fallback models, this may cause a fallback model to be used instead of the primary model if it meets the threshold. | 5 |
+| `preferred_min_throughput` | [OptionalNullable[components.PreferredMinThroughput]](../components/preferredminthroughput.mdx) | :heavy_minus_sign: | Preferred minimum throughput (in tokens per second). Can be a number (applies to p50) or an object with percentile-specific cutoffs. Endpoints below the threshold(s) may still be used, but are deprioritized in routing. When using fallback models, this may cause a fallback model to be used instead of the primary model if it meets the threshold. | 100 |
+| `quantizations` | List[[components.Quantization](../components/quantization.mdx)] | :heavy_minus_sign: | A list of quantization levels to filter the provider by. | |
| `require_parameters` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to filter providers to only those that support the parameters you've provided. If this setting is omitted or set to false, then providers will receive only the parameters they support, and ignore the rest. | |
-| `sort` | [OptionalNullable[components.Sort]](../components/sort.md) | :heavy_minus_sign: | The sorting strategy to use for this request, if "order" is not specified. When set, no load balancing is performed. | price |
+| `sort` | [OptionalNullable[components.Sort]](../components/sort.mdx) | :heavy_minus_sign: | The sorting strategy to use for this request, if "order" is not specified. When set, no load balancing is performed. | price |
| `zdr` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to restrict routing to only ZDR (Zero Data Retention) endpoints. When true, only endpoints that do not retain prompts will be used. | true |
\ No newline at end of file
diff --git a/docs/components/providerresponse.mdx b/docs/components/providerresponse.mdx
new file mode 100644
index 0000000..65abb90
--- /dev/null
+++ b/docs/components/providerresponse.mdx
@@ -0,0 +1,18 @@
+---
+title: "ProviderResponse"
+---
+
+Details of a provider response for a generation attempt
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `endpoint_id` | *Optional[str]* | :heavy_minus_sign: | Internal endpoint identifier | ep_abc123 |
+| `id` | *Optional[str]* | :heavy_minus_sign: | Upstream provider response identifier | chatcmpl-abc123 |
+| `is_byok` | *Optional[bool]* | :heavy_minus_sign: | Whether the request used a bring-your-own-key | false |
+| `latency` | *Optional[float]* | :heavy_minus_sign: | Response latency in milliseconds | 1200 |
+| `model_permaslug` | *Optional[str]* | :heavy_minus_sign: | Canonical model slug | openai/gpt-4 |
+| `provider_name` | [Optional[components.ProviderResponseProviderName]](../components/providerresponseprovidername.mdx) | :heavy_minus_sign: | Name of the provider | OpenAI |
+| `status` | *Nullable[int]* | :heavy_check_mark: | HTTP status code from the provider | 200 |
\ No newline at end of file
diff --git a/docs/components/providerresponseprovidername.mdx b/docs/components/providerresponseprovidername.mdx
new file mode 100644
index 0000000..85c97ab
--- /dev/null
+++ b/docs/components/providerresponseprovidername.mdx
@@ -0,0 +1,140 @@
+---
+title: "ProviderResponseProviderName"
+---
+
+Name of the provider
+
+## Example Usage
+
+```python
+from openrouter.components import ProviderResponseProviderName
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ProviderResponseProviderName = "AnyScale"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"AnyScale"`
+- `"Atoma"`
+- `"Cent-ML"`
+- `"CrofAI"`
+- `"Enfer"`
+- `"GoPomelo"`
+- `"HuggingFace"`
+- `"Hyperbolic"`
+- `"Hyperbolic 2"`
+- `"InoCloud"`
+- `"Kluster"`
+- `"Lambda"`
+- `"Lepton"`
+- `"Lynn 2"`
+- `"Lynn"`
+- `"Mancer"`
+- `"Meta"`
+- `"Modal"`
+- `"Nineteen"`
+- `"OctoAI"`
+- `"Recursal"`
+- `"Reflection"`
+- `"Replicate"`
+- `"SambaNova 2"`
+- `"SF Compute"`
+- `"Targon"`
+- `"Together 2"`
+- `"Ubicloud"`
+- `"01.AI"`
+- `"AkashML"`
+- `"AI21"`
+- `"AionLabs"`
+- `"Alibaba"`
+- `"Ambient"`
+- `"Baidu"`
+- `"Amazon Bedrock"`
+- `"Amazon Nova"`
+- `"Anthropic"`
+- `"Arcee AI"`
+- `"AtlasCloud"`
+- `"Avian"`
+- `"Azure"`
+- `"BaseTen"`
+- `"BytePlus"`
+- `"Black Forest Labs"`
+- `"Cerebras"`
+- `"Chutes"`
+- `"Cirrascale"`
+- `"Clarifai"`
+- `"Cloudflare"`
+- `"Cohere"`
+- `"Crucible"`
+- `"Crusoe"`
+- `"Darkbloom"`
+- `"Decart"`
+- `"DeepInfra"`
+- `"DeepSeek"`
+- `"DekaLLM"`
+- `"DigitalOcean"`
+- `"Featherless"`
+- `"Fireworks"`
+- `"Friendli"`
+- `"GMICloud"`
+- `"Google"`
+- `"Google AI Studio"`
+- `"Groq"`
+- `"HeyGen"`
+- `"Inception"`
+- `"Inceptron"`
+- `"InferenceNet"`
+- `"Ionstream"`
+- `"Infermatic"`
+- `"Io Net"`
+- `"Inferact vLLM"`
+- `"Inflection"`
+- `"Liquid"`
+- `"Mara"`
+- `"Mancer 2"`
+- `"Minimax"`
+- `"ModelRun"`
+- `"Mistral"`
+- `"Modular"`
+- `"Moonshot AI"`
+- `"Morph"`
+- `"NCompass"`
+- `"Nebius"`
+- `"Nex AGI"`
+- `"NextBit"`
+- `"Novita"`
+- `"Nvidia"`
+- `"OpenAI"`
+- `"OpenInference"`
+- `"Parasail"`
+- `"Poolside"`
+- `"Perceptron"`
+- `"Perplexity"`
+- `"Phala"`
+- `"Recraft"`
+- `"Reka"`
+- `"Relace"`
+- `"Sakana AI"`
+- `"SambaNova"`
+- `"Seed"`
+- `"SiliconFlow"`
+- `"Sourceful"`
+- `"StepFun"`
+- `"Stealth"`
+- `"StreamLake"`
+- `"Switchpoint"`
+- `"Tenstorrent"`
+- `"Together"`
+- `"Upstage"`
+- `"Venice"`
+- `"Wafer"`
+- `"WandB"`
+- `"Quiver"`
+- `"Xiaomi"`
+- `"xAI"`
+- `"Z.AI"`
+- `"FakeProvider"`
diff --git a/docs/components/providersort.md b/docs/components/providersort.md
deleted file mode 100644
index 82a08f5..0000000
--- a/docs/components/providersort.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# ProviderSort
-
-The provider sorting strategy (price, throughput, latency)
-
-
-## Values
-
-| Name | Value |
-| ------------ | ------------ |
-| `PRICE` | price |
-| `THROUGHPUT` | throughput |
-| `LATENCY` | latency |
-| `EXACTO` | exacto |
\ No newline at end of file
diff --git a/docs/components/providersort.mdx b/docs/components/providersort.mdx
new file mode 100644
index 0000000..cbfa63e
--- /dev/null
+++ b/docs/components/providersort.mdx
@@ -0,0 +1,24 @@
+---
+title: "ProviderSort"
+---
+
+The provider sorting strategy (price, throughput, latency)
+
+## Example Usage
+
+```python
+from openrouter.components import ProviderSort
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ProviderSort = "price"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"price"`
+- `"throughput"`
+- `"latency"`
+- `"exacto"`
diff --git a/docs/components/providersortconfig.md b/docs/components/providersortconfig.mdx
similarity index 75%
rename from docs/components/providersortconfig.md
rename to docs/components/providersortconfig.mdx
index 70db18a..5aa8e90 100644
--- a/docs/components/providersortconfig.md
+++ b/docs/components/providersortconfig.mdx
@@ -1,4 +1,6 @@
-# ProviderSortConfig
+---
+title: "ProviderSortConfig"
+---
The provider sorting strategy (price, throughput, latency)
@@ -7,5 +9,5 @@ The provider sorting strategy (price, throughput, latency)
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `by` | [OptionalNullable[components.By]](../components/by.md) | :heavy_minus_sign: | The provider sorting strategy (price, throughput, latency) | price |
-| `partition` | [OptionalNullable[components.Partition]](../components/partition.md) | :heavy_minus_sign: | Partitioning strategy for sorting: "model" (default) groups endpoints by model before sorting (fallback models remain fallbacks), "none" sorts all endpoints together regardless of model. | model |
\ No newline at end of file
+| `by` | [OptionalNullable[components.By]](../components/by.mdx) | :heavy_minus_sign: | The provider sorting strategy (price, throughput, latency) | price |
+| `partition` | [OptionalNullable[components.Partition]](../components/partition.mdx) | :heavy_minus_sign: | Partitioning strategy for sorting: "model" (default) groups endpoints by model before sorting (fallback models remain fallbacks), "none" sorts all endpoints together regardless of model. | model |
\ No newline at end of file
diff --git a/docs/components/publicendpoint.md b/docs/components/publicendpoint.mdx
similarity index 87%
rename from docs/components/publicendpoint.md
rename to docs/components/publicendpoint.mdx
index de97989..53b22a2 100644
--- a/docs/components/publicendpoint.md
+++ b/docs/components/publicendpoint.mdx
@@ -1,4 +1,6 @@
-# PublicEndpoint
+---
+title: "PublicEndpoint"
+---
Information about a specific model endpoint
@@ -8,20 +10,20 @@ Information about a specific model endpoint
| Field | Type | Required | Description | Example |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `context_length` | *int* | :heavy_check_mark: | N/A | |
-| `latency_last_30m` | [Nullable[components.PercentileStats]](../components/percentilestats.md) | :heavy_check_mark: | Latency percentiles in milliseconds over the last 30 minutes. Latency measures time to first token. Only visible when authenticated with an API key or cookie; returns null for unauthenticated requests. | {
"p50": 25.5,
"p75": 35.2,
"p90": 48.7,
"p99": 85.3
} |
+| `latency_last_30m` | [Nullable[components.PercentileStats]](../components/percentilestats.mdx) | :heavy_check_mark: | Latency percentiles in milliseconds over the last 30 minutes. Latency measures time to first token. Only visible when authenticated with an API key or cookie; returns null for unauthenticated requests. | \{
"p50": 25.5,
"p75": 35.2,
"p90": 48.7,
"p99": 85.3
} |
| `max_completion_tokens` | *Nullable[int]* | :heavy_check_mark: | N/A | |
| `max_prompt_tokens` | *Nullable[int]* | :heavy_check_mark: | N/A | |
| `model_id` | *str* | :heavy_check_mark: | The unique identifier for the model (permaslug) | openai/gpt-4 |
| `model_name` | *str* | :heavy_check_mark: | N/A | |
| `name` | *str* | :heavy_check_mark: | N/A | |
-| `pricing` | [components.Pricing](../components/pricing.md) | :heavy_check_mark: | N/A | |
-| `provider_name` | [components.ProviderName](../components/providername.md) | :heavy_check_mark: | N/A | OpenAI |
-| `quantization` | [Nullable[components.PublicEndpointQuantization]](../components/publicendpointquantization.md) | :heavy_check_mark: | N/A | fp16 |
-| `status` | [Optional[components.EndpointStatus]](../components/endpointstatus.md) | :heavy_minus_sign: | N/A | 0 |
-| `supported_parameters` | List[[components.Parameter](../components/parameter.md)] | :heavy_check_mark: | N/A | |
+| `pricing` | [components.Pricing](../components/pricing.mdx) | :heavy_check_mark: | N/A | |
+| `provider_name` | [components.ProviderName](../components/providername.mdx) | :heavy_check_mark: | N/A | OpenAI |
+| `quantization` | [Nullable[components.PublicEndpointQuantization]](../components/publicendpointquantization.mdx) | :heavy_check_mark: | N/A | fp16 |
+| `status` | [Optional[components.EndpointStatus]](../components/endpointstatus.mdx) | :heavy_minus_sign: | N/A | 0 |
+| `supported_parameters` | List[[components.Parameter](../components/parameter.mdx)] | :heavy_check_mark: | N/A | |
| `supports_implicit_caching` | *bool* | :heavy_check_mark: | N/A | |
| `tag` | *str* | :heavy_check_mark: | N/A | |
-| `throughput_last_30m` | [Nullable[components.PercentileStats]](../components/percentilestats.md) | :heavy_check_mark: | N/A | {
"p50": 25.5,
"p75": 35.2,
"p90": 48.7,
"p99": 85.3
} |
+| `throughput_last_30m` | [Nullable[components.PercentileStats]](../components/percentilestats.mdx) | :heavy_check_mark: | N/A | \{
"p50": 25.5,
"p75": 35.2,
"p90": 48.7,
"p99": 85.3
} |
| `uptime_last_1d` | *Nullable[float]* | :heavy_check_mark: | Uptime percentage over the last 1 day, calculated as successful requests / (successful + error requests) * 100. Rate-limited requests are excluded. Returns null if insufficient data. | |
| `uptime_last_30m` | *Nullable[float]* | :heavy_check_mark: | N/A | |
| `uptime_last_5m` | *Nullable[float]* | :heavy_check_mark: | Uptime percentage over the last 5 minutes, calculated as successful requests / (successful + error requests) * 100. Rate-limited requests are excluded. Returns null if insufficient data. | |
\ No newline at end of file
diff --git a/docs/components/publicendpointquantization.md b/docs/components/publicendpointquantization.md
deleted file mode 100644
index 7d0edd2..0000000
--- a/docs/components/publicendpointquantization.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# PublicEndpointQuantization
-
-
-## Values
-
-| Name | Value |
-| --------- | --------- |
-| `INT4` | int4 |
-| `INT8` | int8 |
-| `FP4` | fp4 |
-| `FP6` | fp6 |
-| `FP8` | fp8 |
-| `FP16` | fp16 |
-| `BF16` | bf16 |
-| `FP32` | fp32 |
-| `UNKNOWN` | unknown |
\ No newline at end of file
diff --git a/docs/components/publicendpointquantization.mdx b/docs/components/publicendpointquantization.mdx
new file mode 100644
index 0000000..4498d08
--- /dev/null
+++ b/docs/components/publicendpointquantization.mdx
@@ -0,0 +1,27 @@
+---
+title: "PublicEndpointQuantization"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import PublicEndpointQuantization
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: PublicEndpointQuantization = "int4"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"int4"`
+- `"int8"`
+- `"fp4"`
+- `"fp6"`
+- `"fp8"`
+- `"fp16"`
+- `"bf16"`
+- `"fp32"`
+- `"unknown"`
diff --git a/docs/components/publicpricing.md b/docs/components/publicpricing.mdx
similarity index 99%
rename from docs/components/publicpricing.md
rename to docs/components/publicpricing.mdx
index 0746b99..0d8f6cf 100644
--- a/docs/components/publicpricing.md
+++ b/docs/components/publicpricing.mdx
@@ -1,4 +1,6 @@
-# PublicPricing
+---
+title: "PublicPricing"
+---
Pricing information for the model
diff --git a/docs/components/quantization.md b/docs/components/quantization.md
deleted file mode 100644
index 7a0574a..0000000
--- a/docs/components/quantization.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Quantization
-
-
-## Values
-
-| Name | Value |
-| --------- | --------- |
-| `INT4` | int4 |
-| `INT8` | int8 |
-| `FP4` | fp4 |
-| `FP6` | fp6 |
-| `FP8` | fp8 |
-| `FP16` | fp16 |
-| `BF16` | bf16 |
-| `FP32` | fp32 |
-| `UNKNOWN` | unknown |
\ No newline at end of file
diff --git a/docs/components/quantization.mdx b/docs/components/quantization.mdx
new file mode 100644
index 0000000..cdbf8d7
--- /dev/null
+++ b/docs/components/quantization.mdx
@@ -0,0 +1,27 @@
+---
+title: "Quantization"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Quantization
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Quantization = "int4"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"int4"`
+- `"int8"`
+- `"fp4"`
+- `"fp6"`
+- `"fp8"`
+- `"fp16"`
+- `"bf16"`
+- `"fp32"`
+- `"unknown"`
diff --git a/docs/components/rangecapability.mdx b/docs/components/rangecapability.mdx
new file mode 100644
index 0000000..34425c5
--- /dev/null
+++ b/docs/components/rangecapability.mdx
@@ -0,0 +1,14 @@
+---
+title: "RangeCapability"
+---
+
+A parameter that accepts any value within an inclusive numeric range.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `max` | *float* | :heavy_check_mark: | N/A |
+| `min` | *float* | :heavy_check_mark: | N/A |
+| `type` | [components.RangeCapabilityType](../components/rangecapabilitytype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/rangecapabilitytype.mdx b/docs/components/rangecapabilitytype.mdx
new file mode 100644
index 0000000..e4d767d
--- /dev/null
+++ b/docs/components/rangecapabilitytype.mdx
@@ -0,0 +1,15 @@
+---
+title: "RangeCapabilityType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import RangeCapabilityType
+value: RangeCapabilityType = "range"
+```
+
+
+## Values
+
+- `"range"`
diff --git a/docs/components/ranker.mdx b/docs/components/ranker.mdx
new file mode 100644
index 0000000..7a7b811
--- /dev/null
+++ b/docs/components/ranker.mdx
@@ -0,0 +1,20 @@
+---
+title: "Ranker"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Ranker
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Ranker = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"default-2024-11-15"`
diff --git a/docs/components/rankingoptions.mdx b/docs/components/rankingoptions.mdx
new file mode 100644
index 0000000..2f3d38a
--- /dev/null
+++ b/docs/components/rankingoptions.mdx
@@ -0,0 +1,10 @@
+---
+title: "RankingOptions"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
+| `ranker` | [Optional[components.Ranker]](../components/ranker.mdx) | :heavy_minus_sign: | N/A |
+| `score_threshold` | *Optional[float]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/rankingsdailyitem.mdx b/docs/components/rankingsdailyitem.mdx
new file mode 100644
index 0000000..b2e7602
--- /dev/null
+++ b/docs/components/rankingsdailyitem.mdx
@@ -0,0 +1,11 @@
+---
+title: "RankingsDailyItem"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `date_` | *str* | :heavy_check_mark: | UTC calendar date the row is aggregated over (YYYY-MM-DD). | 2026-05-11 |
+| `model_permaslug` | *str* | :heavy_check_mark: | Model variant permaslug (e.g. `openai/gpt-4o-2024-05-13`, `openai/gpt-4o-2024-05-13:free`). Non-default variants include a `:variant` suffix and are ranked as their own entry. The reserved value `other` denotes the aggregated row covering every model outside the daily top 50 for that date — always sorted last within its date. | openai/gpt-4o-2024-05-13 |
+| `total_tokens` | *str* | :heavy_check_mark: | Sum of `prompt_tokens + completion_tokens` for the day, returned as a decimal string so 64-bit values are not truncated. | 12345678 |
\ No newline at end of file
diff --git a/docs/components/rankingsdailymeta.mdx b/docs/components/rankingsdailymeta.mdx
new file mode 100644
index 0000000..cdc00fc
--- /dev/null
+++ b/docs/components/rankingsdailymeta.mdx
@@ -0,0 +1,12 @@
+---
+title: "RankingsDailyMeta"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `as_of` | *str* | :heavy_check_mark: | ISO-8601 timestamp of when the response was generated. Reflects data-freshness because the underlying materialized view continuously ingests upstream events. | 2026-05-12T02:00:00Z |
+| `end_date` | *str* | :heavy_check_mark: | Resolved end of the date window (UTC, inclusive). | 2026-05-11 |
+| `start_date` | *str* | :heavy_check_mark: | Resolved start of the date window (UTC, inclusive). | 2026-04-12 |
+| `version` | [components.RankingsDailyMetaVersion](../components/rankingsdailymetaversion.mdx) | :heavy_check_mark: | Dataset version. Field names and grain are stable for the life of `v1`. | |
\ No newline at end of file
diff --git a/docs/components/rankingsdailymetaversion.mdx b/docs/components/rankingsdailymetaversion.mdx
new file mode 100644
index 0000000..2744527
--- /dev/null
+++ b/docs/components/rankingsdailymetaversion.mdx
@@ -0,0 +1,17 @@
+---
+title: "RankingsDailyMetaVersion"
+---
+
+Dataset version. Field names and grain are stable for the life of `v1`.
+
+## Example Usage
+
+```python
+from openrouter.components import RankingsDailyMetaVersion
+value: RankingsDailyMetaVersion = "v1"
+```
+
+
+## Values
+
+- `"v1"`
diff --git a/docs/components/rankingsdailyresponse.mdx b/docs/components/rankingsdailyresponse.mdx
new file mode 100644
index 0000000..13cf299
--- /dev/null
+++ b/docs/components/rankingsdailyresponse.mdx
@@ -0,0 +1,10 @@
+---
+title: "RankingsDailyResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | List[[components.RankingsDailyItem](../components/rankingsdailyitem.mdx)] | :heavy_check_mark: | Up to 51 rows per day — the top 50 public models by `total_tokens` for each UTC calendar date in the window, plus one aggregated `other` row summing every model outside that top 50 (omitted when the long tail is empty). Rows are sorted by `date` ascending, then by `total_tokens` descending, with `other` pinned last within its date. Ties between real models break alphabetically on `model_permaslug` so the order is stable across requests. | |
+| `meta` | [components.RankingsDailyMeta](../components/rankingsdailymeta.mdx) | :heavy_check_mark: | N/A | \{
"as_of": "2026-05-12T02:00:00Z",
"end_date": "2026-05-11",
"start_date": "2026-04-12",
"version": "v1"
} |
\ No newline at end of file
diff --git a/docs/components/reason.md b/docs/components/reason.md
deleted file mode 100644
index 1c21d04..0000000
--- a/docs/components/reason.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Reason
-
-
-## Values
-
-| Name | Value |
-| ------------------- | ------------------- |
-| `MAX_OUTPUT_TOKENS` | max_output_tokens |
-| `CONTENT_FILTER` | content_filter |
\ No newline at end of file
diff --git a/docs/components/reason.mdx b/docs/components/reason.mdx
new file mode 100644
index 0000000..99c4a37
--- /dev/null
+++ b/docs/components/reason.mdx
@@ -0,0 +1,20 @@
+---
+title: "Reason"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Reason
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Reason = "max_output_tokens"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"max_output_tokens"`
+- `"content_filter"`
diff --git a/docs/components/reasoningconfig.mdx b/docs/components/reasoningconfig.mdx
new file mode 100644
index 0000000..819b083
--- /dev/null
+++ b/docs/components/reasoningconfig.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningConfig"
+---
+
+Configuration for reasoning mode in the response
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `effort` | [OptionalNullable[components.ReasoningEffort]](../components/reasoningeffort.mdx) | :heavy_minus_sign: | N/A | medium |
+| `summary` | [OptionalNullable[components.ReasoningSummaryVerbosity]](../components/reasoningsummaryverbosity.mdx) | :heavy_minus_sign: | N/A | auto |
+| `enabled` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
+| `max_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/components/reasoningdeltaevent.mdx b/docs/components/reasoningdeltaevent.mdx
new file mode 100644
index 0000000..2c29c42
--- /dev/null
+++ b/docs/components/reasoningdeltaevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "ReasoningDeltaEvent"
+---
+
+Event emitted when reasoning text delta is streamed
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `content_index` | *int* | :heavy_check_mark: | N/A |
+| `delta` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.ReasoningDeltaEventType](../components/reasoningdeltaeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/reasoningdeltaeventtype.mdx b/docs/components/reasoningdeltaeventtype.mdx
new file mode 100644
index 0000000..6c358d0
--- /dev/null
+++ b/docs/components/reasoningdeltaeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningDeltaEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningDeltaEventType
+value: ReasoningDeltaEventType = "response.reasoning_text.delta"
+```
+
+
+## Values
+
+- `"response.reasoning_text.delta"`
diff --git a/docs/components/reasoningdetailencrypted.md b/docs/components/reasoningdetailencrypted.mdx
similarity index 82%
rename from docs/components/reasoningdetailencrypted.md
rename to docs/components/reasoningdetailencrypted.mdx
index 44d9d2d..af4cce6 100644
--- a/docs/components/reasoningdetailencrypted.md
+++ b/docs/components/reasoningdetailencrypted.mdx
@@ -1,4 +1,6 @@
-# ReasoningDetailEncrypted
+---
+title: "ReasoningDetailEncrypted"
+---
Reasoning detail encrypted schema
@@ -8,7 +10,7 @@ Reasoning detail encrypted schema
| Field | Type | Required | Description | Example |
| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| `data` | *str* | :heavy_check_mark: | N/A | |
-| `format_` | [OptionalNullable[components.ReasoningFormat]](../components/reasoningformat.md) | :heavy_minus_sign: | N/A | unknown |
+| `format_` | [OptionalNullable[components.ReasoningFormat]](../components/reasoningformat.mdx) | :heavy_minus_sign: | N/A | unknown |
| `id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
| `index` | *Optional[int]* | :heavy_minus_sign: | N/A | |
-| `type` | [components.ReasoningDetailEncryptedType](../components/reasoningdetailencryptedtype.md) | :heavy_check_mark: | N/A | |
\ No newline at end of file
+| `type` | [components.ReasoningDetailEncryptedType](../components/reasoningdetailencryptedtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/reasoningdetailencryptedtype.md b/docs/components/reasoningdetailencryptedtype.md
deleted file mode 100644
index c574453..0000000
--- a/docs/components/reasoningdetailencryptedtype.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# ReasoningDetailEncryptedType
-
-
-## Values
-
-| Name | Value |
-| --------------------- | --------------------- |
-| `REASONING_ENCRYPTED` | reasoning.encrypted |
\ No newline at end of file
diff --git a/docs/components/reasoningdetailencryptedtype.mdx b/docs/components/reasoningdetailencryptedtype.mdx
new file mode 100644
index 0000000..3779ebb
--- /dev/null
+++ b/docs/components/reasoningdetailencryptedtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningDetailEncryptedType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningDetailEncryptedType
+value: ReasoningDetailEncryptedType = "reasoning.encrypted"
+```
+
+
+## Values
+
+- `"reasoning.encrypted"`
diff --git a/docs/components/reasoningdetailsummary.md b/docs/components/reasoningdetailsummary.mdx
similarity index 79%
rename from docs/components/reasoningdetailsummary.md
rename to docs/components/reasoningdetailsummary.mdx
index 1a6e291..f0ad47f 100644
--- a/docs/components/reasoningdetailsummary.md
+++ b/docs/components/reasoningdetailsummary.mdx
@@ -1,4 +1,6 @@
-# ReasoningDetailSummary
+---
+title: "ReasoningDetailSummary"
+---
Reasoning detail summary schema
@@ -7,8 +9,8 @@ Reasoning detail summary schema
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
-| `format_` | [OptionalNullable[components.ReasoningFormat]](../components/reasoningformat.md) | :heavy_minus_sign: | N/A | unknown |
+| `format_` | [OptionalNullable[components.ReasoningFormat]](../components/reasoningformat.mdx) | :heavy_minus_sign: | N/A | unknown |
| `id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
| `index` | *Optional[int]* | :heavy_minus_sign: | N/A | |
| `summary` | *str* | :heavy_check_mark: | N/A | |
-| `type` | [components.ReasoningDetailSummaryType](../components/reasoningdetailsummarytype.md) | :heavy_check_mark: | N/A | |
\ No newline at end of file
+| `type` | [components.ReasoningDetailSummaryType](../components/reasoningdetailsummarytype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/reasoningdetailsummarytype.md b/docs/components/reasoningdetailsummarytype.md
deleted file mode 100644
index 6de96b9..0000000
--- a/docs/components/reasoningdetailsummarytype.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# ReasoningDetailSummaryType
-
-
-## Values
-
-| Name | Value |
-| ------------------- | ------------------- |
-| `REASONING_SUMMARY` | reasoning.summary |
\ No newline at end of file
diff --git a/docs/components/reasoningdetailsummarytype.mdx b/docs/components/reasoningdetailsummarytype.mdx
new file mode 100644
index 0000000..7061072
--- /dev/null
+++ b/docs/components/reasoningdetailsummarytype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningDetailSummaryType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningDetailSummaryType
+value: ReasoningDetailSummaryType = "reasoning.summary"
+```
+
+
+## Values
+
+- `"reasoning.summary"`
diff --git a/docs/components/reasoningdetailtext.md b/docs/components/reasoningdetailtext.mdx
similarity index 85%
rename from docs/components/reasoningdetailtext.md
rename to docs/components/reasoningdetailtext.mdx
index 52b1133..54a6696 100644
--- a/docs/components/reasoningdetailtext.md
+++ b/docs/components/reasoningdetailtext.mdx
@@ -1,4 +1,6 @@
-# ReasoningDetailText
+---
+title: "ReasoningDetailText"
+---
Reasoning detail text schema
@@ -7,9 +9,9 @@ Reasoning detail text schema
| Field | Type | Required | Description | Example |
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
-| `format_` | [OptionalNullable[components.ReasoningFormat]](../components/reasoningformat.md) | :heavy_minus_sign: | N/A | unknown |
+| `format_` | [OptionalNullable[components.ReasoningFormat]](../components/reasoningformat.mdx) | :heavy_minus_sign: | N/A | unknown |
| `id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
| `index` | *Optional[int]* | :heavy_minus_sign: | N/A | |
| `signature` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
| `text` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
-| `type` | [components.ReasoningDetailTextType](../components/reasoningdetailtexttype.md) | :heavy_check_mark: | N/A | |
\ No newline at end of file
+| `type` | [components.ReasoningDetailTextType](../components/reasoningdetailtexttype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/reasoningdetailtexttype.md b/docs/components/reasoningdetailtexttype.md
deleted file mode 100644
index 2a56e42..0000000
--- a/docs/components/reasoningdetailtexttype.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# ReasoningDetailTextType
-
-
-## Values
-
-| Name | Value |
-| ---------------- | ---------------- |
-| `REASONING_TEXT` | reasoning.text |
\ No newline at end of file
diff --git a/docs/components/reasoningdetailtexttype.mdx b/docs/components/reasoningdetailtexttype.mdx
new file mode 100644
index 0000000..4b94f54
--- /dev/null
+++ b/docs/components/reasoningdetailtexttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningDetailTextType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningDetailTextType
+value: ReasoningDetailTextType = "reasoning.text"
+```
+
+
+## Values
+
+- `"reasoning.text"`
diff --git a/docs/components/reasoningdetailunion.md b/docs/components/reasoningdetailunion.mdx
similarity index 91%
rename from docs/components/reasoningdetailunion.md
rename to docs/components/reasoningdetailunion.mdx
index 015b016..49ac02b 100644
--- a/docs/components/reasoningdetailunion.md
+++ b/docs/components/reasoningdetailunion.mdx
@@ -1,4 +1,6 @@
-# ReasoningDetailUnion
+---
+title: "ReasoningDetailUnion"
+---
Reasoning detail union schema
diff --git a/docs/components/reasoningdoneevent.mdx b/docs/components/reasoningdoneevent.mdx
new file mode 100644
index 0000000..6068c9d
--- /dev/null
+++ b/docs/components/reasoningdoneevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "ReasoningDoneEvent"
+---
+
+Event emitted when reasoning text streaming is complete
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
+| `content_index` | *int* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `text` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.ReasoningDoneEventType](../components/reasoningdoneeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/reasoningdoneeventtype.mdx b/docs/components/reasoningdoneeventtype.mdx
new file mode 100644
index 0000000..55393ca
--- /dev/null
+++ b/docs/components/reasoningdoneeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningDoneEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningDoneEventType
+value: ReasoningDoneEventType = "response.reasoning_text.done"
+```
+
+
+## Values
+
+- `"response.reasoning_text.done"`
diff --git a/docs/components/reasoningeffort.mdx b/docs/components/reasoningeffort.mdx
new file mode 100644
index 0000000..2cfb430
--- /dev/null
+++ b/docs/components/reasoningeffort.mdx
@@ -0,0 +1,25 @@
+---
+title: "ReasoningEffort"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningEffort
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ReasoningEffort = "max"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"max"`
+- `"xhigh"`
+- `"high"`
+- `"medium"`
+- `"low"`
+- `"minimal"`
+- `"none"`
diff --git a/docs/components/reasoningformat.mdx b/docs/components/reasoningformat.mdx
new file mode 100644
index 0000000..704d054
--- /dev/null
+++ b/docs/components/reasoningformat.mdx
@@ -0,0 +1,24 @@
+---
+title: "ReasoningFormat"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningFormat
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ReasoningFormat = "unknown"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"unknown"`
+- `"openai-responses-v1"`
+- `"azure-openai-responses-v1"`
+- `"xai-responses-v1"`
+- `"anthropic-claude-v1"`
+- `"google-gemini-v1"`
diff --git a/docs/components/reasoningitem.mdx b/docs/components/reasoningitem.mdx
new file mode 100644
index 0000000..1afe618
--- /dev/null
+++ b/docs/components/reasoningitem.mdx
@@ -0,0 +1,19 @@
+---
+title: "ReasoningItem"
+---
+
+Reasoning output item with signature and format extensions
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `content` | List[[components.ReasoningTextContent](../components/reasoningtextcontent.mdx)] | :heavy_minus_sign: | N/A | |
+| `encrypted_content` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `status` | [Optional[components.ReasoningItemStatusUnion]](../components/reasoningitemstatusunion.mdx) | :heavy_minus_sign: | N/A | |
+| `summary` | List[[components.ReasoningSummaryText](../components/reasoningsummarytext.mdx)] | :heavy_check_mark: | N/A | |
+| `type` | [components.ReasoningItemType](../components/reasoningitemtype.mdx) | :heavy_check_mark: | N/A | |
+| `format_` | [OptionalNullable[components.ReasoningFormat]](../components/reasoningformat.mdx) | :heavy_minus_sign: | N/A | unknown |
+| `signature` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/components/reasoningitemstatuscompleted.mdx b/docs/components/reasoningitemstatuscompleted.mdx
new file mode 100644
index 0000000..431f14f
--- /dev/null
+++ b/docs/components/reasoningitemstatuscompleted.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningItemStatusCompleted"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningItemStatusCompleted
+value: ReasoningItemStatusCompleted = "completed"
+```
+
+
+## Values
+
+- `"completed"`
diff --git a/docs/components/reasoningitemstatusincomplete.mdx b/docs/components/reasoningitemstatusincomplete.mdx
new file mode 100644
index 0000000..6c2942a
--- /dev/null
+++ b/docs/components/reasoningitemstatusincomplete.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningItemStatusIncomplete"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningItemStatusIncomplete
+value: ReasoningItemStatusIncomplete = "incomplete"
+```
+
+
+## Values
+
+- `"incomplete"`
diff --git a/docs/components/reasoningitemstatusinprogress.mdx b/docs/components/reasoningitemstatusinprogress.mdx
new file mode 100644
index 0000000..3bcf012
--- /dev/null
+++ b/docs/components/reasoningitemstatusinprogress.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningItemStatusInProgress"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningItemStatusInProgress
+value: ReasoningItemStatusInProgress = "in_progress"
+```
+
+
+## Values
+
+- `"in_progress"`
diff --git a/docs/components/reasoningitemstatusunion.mdx b/docs/components/reasoningitemstatusunion.mdx
new file mode 100644
index 0000000..e6ea628
--- /dev/null
+++ b/docs/components/reasoningitemstatusunion.mdx
@@ -0,0 +1,24 @@
+---
+title: "ReasoningItemStatusUnion"
+---
+
+## Supported Types
+
+### `components.ReasoningItemStatusCompleted`
+
+```python
+value: components.ReasoningItemStatusCompleted = /* values here */
+```
+
+### `components.ReasoningItemStatusIncomplete`
+
+```python
+value: components.ReasoningItemStatusIncomplete = /* values here */
+```
+
+### `components.ReasoningItemStatusInProgress`
+
+```python
+value: components.ReasoningItemStatusInProgress = /* values here */
+```
+
diff --git a/docs/components/reasoningitemtype.mdx b/docs/components/reasoningitemtype.mdx
new file mode 100644
index 0000000..ce469f0
--- /dev/null
+++ b/docs/components/reasoningitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningItemType
+value: ReasoningItemType = "reasoning"
+```
+
+
+## Values
+
+- `"reasoning"`
diff --git a/docs/components/reasoningsummarypartaddedevent.mdx b/docs/components/reasoningsummarypartaddedevent.mdx
new file mode 100644
index 0000000..277f616
--- /dev/null
+++ b/docs/components/reasoningsummarypartaddedevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "ReasoningSummaryPartAddedEvent"
+---
+
+Event emitted when a reasoning summary part is added
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `item_id` | *str* | :heavy_check_mark: | N/A | |
+| `output_index` | *int* | :heavy_check_mark: | N/A | |
+| `part` | [components.ReasoningSummaryText](../components/reasoningsummarytext.mdx) | :heavy_check_mark: | N/A | \{
"text": "Analyzed the problem using first principles",
"type": "summary_text"
} |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A | |
+| `summary_index` | *int* | :heavy_check_mark: | N/A | |
+| `type` | [components.ReasoningSummaryPartAddedEventType](../components/reasoningsummarypartaddedeventtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/reasoningsummarypartaddedeventtype.mdx b/docs/components/reasoningsummarypartaddedeventtype.mdx
new file mode 100644
index 0000000..6b1f94b
--- /dev/null
+++ b/docs/components/reasoningsummarypartaddedeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningSummaryPartAddedEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningSummaryPartAddedEventType
+value: ReasoningSummaryPartAddedEventType = "response.reasoning_summary_part.added"
+```
+
+
+## Values
+
+- `"response.reasoning_summary_part.added"`
diff --git a/docs/components/reasoningsummarypartdoneevent.mdx b/docs/components/reasoningsummarypartdoneevent.mdx
new file mode 100644
index 0000000..f648a1e
--- /dev/null
+++ b/docs/components/reasoningsummarypartdoneevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "ReasoningSummaryPartDoneEvent"
+---
+
+Event emitted when a reasoning summary part is complete
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `item_id` | *str* | :heavy_check_mark: | N/A | |
+| `output_index` | *int* | :heavy_check_mark: | N/A | |
+| `part` | [components.ReasoningSummaryText](../components/reasoningsummarytext.mdx) | :heavy_check_mark: | N/A | \{
"text": "Analyzed the problem using first principles",
"type": "summary_text"
} |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A | |
+| `summary_index` | *int* | :heavy_check_mark: | N/A | |
+| `type` | [components.ReasoningSummaryPartDoneEventType](../components/reasoningsummarypartdoneeventtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/reasoningsummarypartdoneeventtype.mdx b/docs/components/reasoningsummarypartdoneeventtype.mdx
new file mode 100644
index 0000000..74d9653
--- /dev/null
+++ b/docs/components/reasoningsummarypartdoneeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningSummaryPartDoneEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningSummaryPartDoneEventType
+value: ReasoningSummaryPartDoneEventType = "response.reasoning_summary_part.done"
+```
+
+
+## Values
+
+- `"response.reasoning_summary_part.done"`
diff --git a/docs/components/reasoningsummarytext.md b/docs/components/reasoningsummarytext.mdx
similarity index 87%
rename from docs/components/reasoningsummarytext.md
rename to docs/components/reasoningsummarytext.mdx
index 9786305..0a97676 100644
--- a/docs/components/reasoningsummarytext.md
+++ b/docs/components/reasoningsummarytext.mdx
@@ -1,9 +1,10 @@
-# ReasoningSummaryText
-
+---
+title: "ReasoningSummaryText"
+---
## Fields
| Field | Type | Required | Description |
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| `text` | *str* | :heavy_check_mark: | N/A |
-| `type` | [components.ReasoningSummaryTextType](../components/reasoningsummarytexttype.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `type` | [components.ReasoningSummaryTextType](../components/reasoningsummarytexttype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/reasoningsummarytextdeltaevent.mdx b/docs/components/reasoningsummarytextdeltaevent.mdx
new file mode 100644
index 0000000..204b30e
--- /dev/null
+++ b/docs/components/reasoningsummarytextdeltaevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "ReasoningSummaryTextDeltaEvent"
+---
+
+Event emitted when reasoning summary text delta is streamed
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `delta` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `summary_index` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.ReasoningSummaryTextDeltaEventType](../components/reasoningsummarytextdeltaeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/reasoningsummarytextdeltaeventtype.mdx b/docs/components/reasoningsummarytextdeltaeventtype.mdx
new file mode 100644
index 0000000..a7ac9a9
--- /dev/null
+++ b/docs/components/reasoningsummarytextdeltaeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningSummaryTextDeltaEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningSummaryTextDeltaEventType
+value: ReasoningSummaryTextDeltaEventType = "response.reasoning_summary_text.delta"
+```
+
+
+## Values
+
+- `"response.reasoning_summary_text.delta"`
diff --git a/docs/components/reasoningsummarytextdoneevent.mdx b/docs/components/reasoningsummarytextdoneevent.mdx
new file mode 100644
index 0000000..540a20c
--- /dev/null
+++ b/docs/components/reasoningsummarytextdoneevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "ReasoningSummaryTextDoneEvent"
+---
+
+Event emitted when reasoning summary text streaming is complete
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `summary_index` | *int* | :heavy_check_mark: | N/A |
+| `text` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.ReasoningSummaryTextDoneEventType](../components/reasoningsummarytextdoneeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/reasoningsummarytextdoneeventtype.mdx b/docs/components/reasoningsummarytextdoneeventtype.mdx
new file mode 100644
index 0000000..64982e7
--- /dev/null
+++ b/docs/components/reasoningsummarytextdoneeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningSummaryTextDoneEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningSummaryTextDoneEventType
+value: ReasoningSummaryTextDoneEventType = "response.reasoning_summary_text.done"
+```
+
+
+## Values
+
+- `"response.reasoning_summary_text.done"`
diff --git a/docs/components/reasoningsummarytexttype.md b/docs/components/reasoningsummarytexttype.md
deleted file mode 100644
index af36e33..0000000
--- a/docs/components/reasoningsummarytexttype.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# ReasoningSummaryTextType
-
-
-## Values
-
-| Name | Value |
-| -------------- | -------------- |
-| `SUMMARY_TEXT` | summary_text |
\ No newline at end of file
diff --git a/docs/components/reasoningsummarytexttype.mdx b/docs/components/reasoningsummarytexttype.mdx
new file mode 100644
index 0000000..4768528
--- /dev/null
+++ b/docs/components/reasoningsummarytexttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningSummaryTextType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningSummaryTextType
+value: ReasoningSummaryTextType = "summary_text"
+```
+
+
+## Values
+
+- `"summary_text"`
diff --git a/docs/components/reasoningsummaryverbosity.mdx b/docs/components/reasoningsummaryverbosity.mdx
new file mode 100644
index 0000000..a62813b
--- /dev/null
+++ b/docs/components/reasoningsummaryverbosity.mdx
@@ -0,0 +1,21 @@
+---
+title: "ReasoningSummaryVerbosity"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningSummaryVerbosity
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ReasoningSummaryVerbosity = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"concise"`
+- `"detailed"`
diff --git a/docs/components/reasoningtextcontent.md b/docs/components/reasoningtextcontent.mdx
similarity index 87%
rename from docs/components/reasoningtextcontent.md
rename to docs/components/reasoningtextcontent.mdx
index 500d7a1..6fbaeee 100644
--- a/docs/components/reasoningtextcontent.md
+++ b/docs/components/reasoningtextcontent.mdx
@@ -1,9 +1,10 @@
-# ReasoningTextContent
-
+---
+title: "ReasoningTextContent"
+---
## Fields
| Field | Type | Required | Description |
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| `text` | *str* | :heavy_check_mark: | N/A |
-| `type` | [components.ReasoningTextContentType](../components/reasoningtextcontenttype.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `type` | [components.ReasoningTextContentType](../components/reasoningtextcontenttype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/reasoningtextcontenttype.md b/docs/components/reasoningtextcontenttype.md
deleted file mode 100644
index f3646d4..0000000
--- a/docs/components/reasoningtextcontenttype.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# ReasoningTextContentType
-
-
-## Values
-
-| Name | Value |
-| ---------------- | ---------------- |
-| `REASONING_TEXT` | reasoning_text |
\ No newline at end of file
diff --git a/docs/components/reasoningtextcontenttype.mdx b/docs/components/reasoningtextcontenttype.mdx
new file mode 100644
index 0000000..9724b52
--- /dev/null
+++ b/docs/components/reasoningtextcontenttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ReasoningTextContentType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ReasoningTextContentType
+value: ReasoningTextContentType = "reasoning_text"
+```
+
+
+## Values
+
+- `"reasoning_text"`
diff --git a/docs/components/refusaldeltaevent.mdx b/docs/components/refusaldeltaevent.mdx
new file mode 100644
index 0000000..046947a
--- /dev/null
+++ b/docs/components/refusaldeltaevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "RefusalDeltaEvent"
+---
+
+Event emitted when a refusal delta is streamed
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `content_index` | *int* | :heavy_check_mark: | N/A |
+| `delta` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.RefusalDeltaEventType](../components/refusaldeltaeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/refusaldeltaeventtype.mdx b/docs/components/refusaldeltaeventtype.mdx
new file mode 100644
index 0000000..eb1088e
--- /dev/null
+++ b/docs/components/refusaldeltaeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "RefusalDeltaEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import RefusalDeltaEventType
+value: RefusalDeltaEventType = "response.refusal.delta"
+```
+
+
+## Values
+
+- `"response.refusal.delta"`
diff --git a/docs/components/refusaldoneevent.mdx b/docs/components/refusaldoneevent.mdx
new file mode 100644
index 0000000..ccc2709
--- /dev/null
+++ b/docs/components/refusaldoneevent.mdx
@@ -0,0 +1,17 @@
+---
+title: "RefusalDoneEvent"
+---
+
+Event emitted when refusal streaming is complete
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `content_index` | *int* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `refusal` | *str* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.RefusalDoneEventType](../components/refusaldoneeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/refusaldoneeventtype.mdx b/docs/components/refusaldoneeventtype.mdx
new file mode 100644
index 0000000..a6e370b
--- /dev/null
+++ b/docs/components/refusaldoneeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "RefusalDoneEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import RefusalDoneEventType
+value: RefusalDoneEventType = "response.refusal.done"
+```
+
+
+## Values
+
+- `"response.refusal.done"`
diff --git a/docs/components/region.mdx b/docs/components/region.mdx
new file mode 100644
index 0000000..51b26cc
--- /dev/null
+++ b/docs/components/region.mdx
@@ -0,0 +1,20 @@
+---
+title: "Region"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Region
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Region = "us"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"us"`
+- `"eu"`
diff --git a/docs/components/requesttimeoutresponseerrordata.md b/docs/components/requesttimeoutresponseerrordata.mdx
similarity index 92%
rename from docs/components/requesttimeoutresponseerrordata.md
rename to docs/components/requesttimeoutresponseerrordata.mdx
index 2e062ef..71579d9 100644
--- a/docs/components/requesttimeoutresponseerrordata.md
+++ b/docs/components/requesttimeoutresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# RequestTimeoutResponseErrorData
+---
+title: "RequestTimeoutResponseErrorData"
+---
Error data for RequestTimeoutResponse
diff --git a/docs/components/requireapproval.mdx b/docs/components/requireapproval.mdx
new file mode 100644
index 0000000..79583bf
--- /dev/null
+++ b/docs/components/requireapproval.mdx
@@ -0,0 +1,10 @@
+---
+title: "RequireApproval"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
+| `always` | [Optional[components.Always]](../components/always.mdx) | :heavy_minus_sign: | N/A |
+| `never` | [Optional[components.Never]](../components/never.mdx) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/requireapprovalalways.mdx b/docs/components/requireapprovalalways.mdx
new file mode 100644
index 0000000..520f072
--- /dev/null
+++ b/docs/components/requireapprovalalways.mdx
@@ -0,0 +1,15 @@
+---
+title: "RequireApprovalAlways"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import RequireApprovalAlways
+value: RequireApprovalAlways = "always"
+```
+
+
+## Values
+
+- `"always"`
diff --git a/docs/components/requireapprovalnever.mdx b/docs/components/requireapprovalnever.mdx
new file mode 100644
index 0000000..0e65abe
--- /dev/null
+++ b/docs/components/requireapprovalnever.mdx
@@ -0,0 +1,15 @@
+---
+title: "RequireApprovalNever"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import RequireApprovalNever
+value: RequireApprovalNever = "never"
+```
+
+
+## Values
+
+- `"never"`
diff --git a/docs/components/requireapprovalunion.mdx b/docs/components/requireapprovalunion.mdx
new file mode 100644
index 0000000..9ff15b4
--- /dev/null
+++ b/docs/components/requireapprovalunion.mdx
@@ -0,0 +1,30 @@
+---
+title: "RequireApprovalUnion"
+---
+
+## Supported Types
+
+### `components.RequireApproval`
+
+```python
+value: components.RequireApproval = /* values here */
+```
+
+### `components.RequireApprovalAlways`
+
+```python
+value: components.RequireApprovalAlways = /* values here */
+```
+
+### `components.RequireApprovalNever`
+
+```python
+value: components.RequireApprovalNever = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/resetinterval.mdx b/docs/components/resetinterval.mdx
new file mode 100644
index 0000000..a22e204
--- /dev/null
+++ b/docs/components/resetinterval.mdx
@@ -0,0 +1,23 @@
+---
+title: "ResetInterval"
+---
+
+Interval at which spend resets. Null means a lifetime (one-time) budget.
+
+## Example Usage
+
+```python
+from openrouter.components import ResetInterval
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ResetInterval = "daily"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"daily"`
+- `"weekly"`
+- `"monthly"`
diff --git a/docs/components/response.mdx b/docs/components/response.mdx
new file mode 100644
index 0000000..f12a0a0
--- /dev/null
+++ b/docs/components/response.mdx
@@ -0,0 +1,10 @@
+---
+title: "Response"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `content` | *Optional[str]* | :heavy_minus_sign: | N/A |
+| `model` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/responseformat.md b/docs/components/responseformat.mdx
similarity index 95%
rename from docs/components/responseformat.md
rename to docs/components/responseformat.mdx
index 86cd005..29709ef 100644
--- a/docs/components/responseformat.md
+++ b/docs/components/responseformat.mdx
@@ -1,4 +1,6 @@
-# ResponseFormat
+---
+title: "ResponseFormat"
+---
Response format configuration
diff --git a/docs/components/responseformatenum.mdx b/docs/components/responseformatenum.mdx
new file mode 100644
index 0000000..0b7c4b0
--- /dev/null
+++ b/docs/components/responseformatenum.mdx
@@ -0,0 +1,22 @@
+---
+title: "ResponseFormatEnum"
+---
+
+Audio output format
+
+## Example Usage
+
+```python
+from openrouter.components import ResponseFormatEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ResponseFormatEnum = "mp3"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"mp3"`
+- `"pcm"`
diff --git a/docs/components/responsehealingplugin.mdx b/docs/components/responsehealingplugin.mdx
new file mode 100644
index 0000000..8b89cfa
--- /dev/null
+++ b/docs/components/responsehealingplugin.mdx
@@ -0,0 +1,10 @@
+---
+title: "ResponseHealingPlugin"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Set to false to disable the response-healing plugin for this request. Defaults to true. |
+| `id` | [components.ResponseHealingPluginID](../components/responsehealingpluginid.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/responsehealingpluginid.mdx b/docs/components/responsehealingpluginid.mdx
new file mode 100644
index 0000000..0dce5ce
--- /dev/null
+++ b/docs/components/responsehealingpluginid.mdx
@@ -0,0 +1,15 @@
+---
+title: "ResponseHealingPluginID"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ResponseHealingPluginID
+value: ResponseHealingPluginID = "response-healing"
+```
+
+
+## Values
+
+- `"response-healing"`
diff --git a/docs/components/responseincludesenum.mdx b/docs/components/responseincludesenum.mdx
new file mode 100644
index 0000000..a5cb010
--- /dev/null
+++ b/docs/components/responseincludesenum.mdx
@@ -0,0 +1,23 @@
+---
+title: "ResponseIncludesEnum"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ResponseIncludesEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ResponseIncludesEnum = "file_search_call.results"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"file_search_call.results"`
+- `"message.input_image.image_url"`
+- `"computer_call_output.output.image_url"`
+- `"reasoning.encrypted_content"`
+- `"code_interpreter_call.outputs"`
diff --git a/docs/components/responseoutputtext.md b/docs/components/responseoutputtext.mdx
similarity index 66%
rename from docs/components/responseoutputtext.md
rename to docs/components/responseoutputtext.mdx
index ad73bf9..a6879aa 100644
--- a/docs/components/responseoutputtext.md
+++ b/docs/components/responseoutputtext.mdx
@@ -1,11 +1,12 @@
-# ResponseOutputText
-
+---
+title: "ResponseOutputText"
+---
## Fields
| Field | Type | Required | Description |
| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
-| `annotations` | List[[components.OpenAIResponsesAnnotation](../components/openairesponsesannotation.md)] | :heavy_minus_sign: | N/A |
-| `logprobs` | List[[components.Logprob](../components/logprob.md)] | :heavy_minus_sign: | N/A |
+| `annotations` | List[[components.OpenAIResponsesAnnotation](../components/openairesponsesannotation.mdx)] | :heavy_minus_sign: | N/A |
+| `logprobs` | List[[components.Logprob](../components/logprob.mdx)] | :heavy_minus_sign: | N/A |
| `text` | *str* | :heavy_check_mark: | N/A |
-| `type` | [components.ResponseOutputTextType](../components/responseoutputtexttype.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `type` | [components.ResponseOutputTextType](../components/responseoutputtexttype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/responseoutputtexttoplogprob.mdx b/docs/components/responseoutputtexttoplogprob.mdx
new file mode 100644
index 0000000..b085f18
--- /dev/null
+++ b/docs/components/responseoutputtexttoplogprob.mdx
@@ -0,0 +1,11 @@
+---
+title: "ResponseOutputTextTopLogprob"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `bytes_` | List[*int*] | :heavy_check_mark: | N/A |
+| `logprob` | *float* | :heavy_check_mark: | N/A |
+| `token` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/responseoutputtexttype.md b/docs/components/responseoutputtexttype.md
deleted file mode 100644
index 8c8a3d7..0000000
--- a/docs/components/responseoutputtexttype.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# ResponseOutputTextType
-
-
-## Values
-
-| Name | Value |
-| ------------- | ------------- |
-| `OUTPUT_TEXT` | output_text |
\ No newline at end of file
diff --git a/docs/components/responseoutputtexttype.mdx b/docs/components/responseoutputtexttype.mdx
new file mode 100644
index 0000000..aa7c892
--- /dev/null
+++ b/docs/components/responseoutputtexttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ResponseOutputTextType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ResponseOutputTextType
+value: ResponseOutputTextType = "output_text"
+```
+
+
+## Values
+
+- `"output_text"`
diff --git a/docs/components/responseserrorfield.md b/docs/components/responseserrorfield.mdx
similarity index 81%
rename from docs/components/responseserrorfield.md
rename to docs/components/responseserrorfield.mdx
index e21193b..996cffe 100644
--- a/docs/components/responseserrorfield.md
+++ b/docs/components/responseserrorfield.mdx
@@ -1,4 +1,6 @@
-# ResponsesErrorField
+---
+title: "ResponsesErrorField"
+---
Error information returned from the API
@@ -7,5 +9,5 @@ Error information returned from the API
| Field | Type | Required | Description |
| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
-| `code` | [components.Code](../components/code.md) | :heavy_check_mark: | N/A |
+| `code` | [components.Code](../components/code.mdx) | :heavy_check_mark: | N/A |
| `message` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/responsesrequest.mdx b/docs/components/responsesrequest.mdx
new file mode 100644
index 0000000..eb2f654
--- /dev/null
+++ b/docs/components/responsesrequest.mdx
@@ -0,0 +1,49 @@
+---
+title: "ResponsesRequest"
+---
+
+Request schema for Responses endpoint
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `debug` | [Optional[components.ChatDebugOptions]](../components/chatdebugoptions.mdx) | :heavy_minus_sign: | Debug options for inspecting request transformations (streaming only) | \{
"echo_upstream_body": true
} |
+| `frequency_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
+| `image_config` | Dict[str, [components.ImageConfig](../components/imageconfig.mdx)] | :heavy_minus_sign: | Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details. | \{
"aspect_ratio": "16:9",
"quality": "high"
} |
+| `include` | List[[components.ResponseIncludesEnum](../components/responseincludesenum.mdx)] | :heavy_minus_sign: | N/A | |
+| `input` | [Optional[components.InputsUnion]](../components/inputsunion.mdx) | :heavy_minus_sign: | Input for a response request - can be a string or array of items | [
\{
"content": "What is the weather today?",
"role": "user"
}
] |
+| `instructions` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `max_output_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
+| `max_tool_calls` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
+| `metadata` | Dict[str, *str*] | :heavy_minus_sign: | Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed. | \{
"session_id": "abc-def-ghi",
"user_id": "123"
} |
+| `modalities` | List[[components.OutputModalityEnum](../components/outputmodalityenum.mdx)] | :heavy_minus_sign: | Output modalities for the response. Supported values are "text" and "image". | [
"text",
"image"
] |
+| `model` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `models` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `parallel_tool_calls` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
+| `plugins` | List[[components.ResponsesRequestPlugin](../components/responsesrequestplugin.mdx)] | :heavy_minus_sign: | Plugins you want to enable for this request, including their settings. | |
+| `presence_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
+| `previous_response_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `prompt` | [OptionalNullable[components.StoredPromptTemplate]](../components/storedprompttemplate.mdx) | :heavy_minus_sign: | N/A | \{
"id": "prompt-abc123",
"variables": \{
"name": "John"
}
} |
+| `prompt_cache_key` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../components/providerpreferences.mdx) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | \{
"allow_fallbacks": true
} |
+| `reasoning` | [OptionalNullable[components.ReasoningConfig]](../components/reasoningconfig.mdx) | :heavy_minus_sign: | Configuration for reasoning mode in the response | \{
"enabled": true,
"summary": "auto"
} |
+| `safety_identifier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `service_tier` | [OptionalNullable[components.ResponsesRequestServiceTier]](../components/responsesrequestservicetier.mdx) | :heavy_minus_sign: | N/A | |
+| `session_id` | *Optional[str]* | :heavy_minus_sign: | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | |
+| `stop_server_tools_when` | List[[components.StopServerToolsWhenCondition](../components/stopservertoolswhencondition.mdx)] | :heavy_minus_sign: | Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`. | [
\{
"step_count": 5,
"type": "step_count_is"
},
\{
"max_cost_in_dollars": 0.5,
"type": "max_cost"
}
] |
+| `store` | *Optional[Literal[False]]* | :heavy_minus_sign: | N/A | |
+| `stream` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `temperature` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
+| `text` | [Optional[components.TextExtendedConfig]](../components/textextendedconfig.mdx) | :heavy_minus_sign: | Text output configuration including format and verbosity | \{
"format": \{
"type": "text"
}
} |
+| `tool_choice` | [Optional[components.OpenAIResponsesToolChoiceUnion]](../components/openairesponsestoolchoiceunion.mdx) | :heavy_minus_sign: | N/A | auto |
+| `tools` | List[[components.ResponsesRequestToolUnion](../components/responsesrequesttoolunion.mdx)] | :heavy_minus_sign: | N/A | |
+| `top_k` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `top_logprobs` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
+| `top_p` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
+| `trace` | [Optional[components.TraceConfig]](../components/traceconfig.mdx) | :heavy_minus_sign: | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
+| `truncation` | [OptionalNullable[components.OpenAIResponsesTruncation]](../components/openairesponsestruncation.mdx) | :heavy_minus_sign: | N/A | auto |
+| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 256 characters. | |
\ No newline at end of file
diff --git a/docs/components/responsesrequestplugin.mdx b/docs/components/responsesrequestplugin.mdx
new file mode 100644
index 0000000..7121cf5
--- /dev/null
+++ b/docs/components/responsesrequestplugin.mdx
@@ -0,0 +1,60 @@
+---
+title: "ResponsesRequestPlugin"
+---
+
+## Supported Types
+
+### `components.AutoRouterPlugin`
+
+```python
+value: components.AutoRouterPlugin = /* values here */
+```
+
+### `components.ContextCompressionPlugin`
+
+```python
+value: components.ContextCompressionPlugin = /* values here */
+```
+
+### `components.FileParserPlugin`
+
+```python
+value: components.FileParserPlugin = /* values here */
+```
+
+### `components.FusionPlugin`
+
+```python
+value: components.FusionPlugin = /* values here */
+```
+
+### `components.ModerationPlugin`
+
+```python
+value: components.ModerationPlugin = /* values here */
+```
+
+### `components.ParetoRouterPlugin`
+
+```python
+value: components.ParetoRouterPlugin = /* values here */
+```
+
+### `components.ResponseHealingPlugin`
+
+```python
+value: components.ResponseHealingPlugin = /* values here */
+```
+
+### `components.WebSearchPlugin`
+
+```python
+value: components.WebSearchPlugin = /* values here */
+```
+
+### `components.WebFetchPlugin`
+
+```python
+value: components.WebFetchPlugin = /* values here */
+```
+
diff --git a/docs/components/responsesrequestservicetier.mdx b/docs/components/responsesrequestservicetier.mdx
new file mode 100644
index 0000000..51f9b59
--- /dev/null
+++ b/docs/components/responsesrequestservicetier.mdx
@@ -0,0 +1,23 @@
+---
+title: "ResponsesRequestServiceTier"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ResponsesRequestServiceTier
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ResponsesRequestServiceTier = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"default"`
+- `"flex"`
+- `"priority"`
+- `"scale"`
diff --git a/docs/components/responsesrequesttoolfunction.mdx b/docs/components/responsesrequesttoolfunction.mdx
new file mode 100644
index 0000000..5f6cc60
--- /dev/null
+++ b/docs/components/responsesrequesttoolfunction.mdx
@@ -0,0 +1,16 @@
+---
+title: "ResponsesRequestToolFunction"
+---
+
+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, *Nullable[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
diff --git a/docs/components/responsesrequesttoolunion.mdx b/docs/components/responsesrequesttoolunion.mdx
new file mode 100644
index 0000000..bfec11b
--- /dev/null
+++ b/docs/components/responsesrequesttoolunion.mdx
@@ -0,0 +1,162 @@
+---
+title: "ResponsesRequestToolUnion"
+---
+
+## Supported Types
+
+### `components.ResponsesRequestToolFunction`
+
+```python
+value: components.ResponsesRequestToolFunction = /* values here */
+```
+
+### `components.PreviewWebSearchServerTool`
+
+```python
+value: components.PreviewWebSearchServerTool = /* values here */
+```
+
+### `components.Preview20250311WebSearchServerTool`
+
+```python
+value: components.Preview20250311WebSearchServerTool = /* values here */
+```
+
+### `components.LegacyWebSearchServerTool`
+
+```python
+value: components.LegacyWebSearchServerTool = /* values here */
+```
+
+### `components.WebSearchServerTool`
+
+```python
+value: components.WebSearchServerTool = /* values here */
+```
+
+### `components.FileSearchServerTool`
+
+```python
+value: components.FileSearchServerTool = /* values here */
+```
+
+### `components.ComputerUseServerTool`
+
+```python
+value: components.ComputerUseServerTool = /* values here */
+```
+
+### `components.CodeInterpreterServerTool`
+
+```python
+value: components.CodeInterpreterServerTool = /* values here */
+```
+
+### `components.McpServerTool`
+
+```python
+value: components.McpServerTool = /* values here */
+```
+
+### `components.ImageGenerationServerTool`
+
+```python
+value: components.ImageGenerationServerTool = /* values here */
+```
+
+### `components.CodexLocalShellTool`
+
+```python
+value: components.CodexLocalShellTool = /* values here */
+```
+
+### `components.ShellServerTool`
+
+```python
+value: components.ShellServerTool = /* values here */
+```
+
+### `components.ApplyPatchServerTool`
+
+```python
+value: components.ApplyPatchServerTool = /* values here */
+```
+
+### `components.CustomTool`
+
+```python
+value: components.CustomTool = /* values here */
+```
+
+### `components.AdvisorServerToolOpenRouter`
+
+```python
+value: components.AdvisorServerToolOpenRouter = /* values here */
+```
+
+### `components.SubagentServerToolOpenRouter`
+
+```python
+value: components.SubagentServerToolOpenRouter = /* values here */
+```
+
+### `components.DatetimeServerTool`
+
+```python
+value: components.DatetimeServerTool = /* values here */
+```
+
+### `components.FilesServerTool`
+
+```python
+value: components.FilesServerTool = /* values here */
+```
+
+### `components.FusionServerToolOpenRouter`
+
+```python
+value: components.FusionServerToolOpenRouter = /* values here */
+```
+
+### `components.ImageGenerationServerToolOpenRouter`
+
+```python
+value: components.ImageGenerationServerToolOpenRouter = /* values here */
+```
+
+### `components.ChatSearchModelsServerTool`
+
+```python
+value: components.ChatSearchModelsServerTool = /* values here */
+```
+
+### `components.WebFetchServerTool`
+
+```python
+value: components.WebFetchServerTool = /* values here */
+```
+
+### `components.WebSearchServerToolOpenRouter`
+
+```python
+value: components.WebSearchServerToolOpenRouter = /* values here */
+```
+
+### `components.ApplyPatchServerToolOpenRouter`
+
+```python
+value: components.ApplyPatchServerToolOpenRouter = /* values here */
+```
+
+### `components.BashServerTool`
+
+```python
+value: components.BashServerTool = /* values here */
+```
+
+### `components.ShellServerToolOpenRouter`
+
+```python
+value: components.ShellServerToolOpenRouter = /* values here */
+```
+
diff --git a/docs/components/responsesrequesttype.mdx b/docs/components/responsesrequesttype.mdx
new file mode 100644
index 0000000..bd4d080
--- /dev/null
+++ b/docs/components/responsesrequesttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ResponsesRequestType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ResponsesRequestType
+value: ResponsesRequestType = "function"
+```
+
+
+## Values
+
+- `"function"`
diff --git a/docs/components/responsesstreamingresponse.mdx b/docs/components/responsesstreamingresponse.mdx
new file mode 100644
index 0000000..a9e4e2a
--- /dev/null
+++ b/docs/components/responsesstreamingresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ResponsesStreamingResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.StreamEvents](../components/streamevents.mdx) | :heavy_check_mark: | Union of all possible event types emitted during response streaming | \{
"response": \{
"created_at": 1704067200,
"error": null,
"id": "resp-abc123",
"incomplete_details": null,
"instructions": null,
"max_output_tokens": null,
"metadata": null,
"model": "gpt-4",
"object": "response",
"output": [],
"parallel_tool_calls": true,
"status": "in_progress",
"temperature": null,
"tool_choice": "auto",
"tools": [],
"top_p": null
},
"sequence_number": 0,
"type": "response.created"
} |
\ No newline at end of file
diff --git a/docs/components/routerattempt.mdx b/docs/components/routerattempt.mdx
new file mode 100644
index 0000000..a082fd1
--- /dev/null
+++ b/docs/components/routerattempt.mdx
@@ -0,0 +1,11 @@
+---
+title: "RouterAttempt"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `model` | *str* | :heavy_check_mark: | N/A |
+| `provider` | *str* | :heavy_check_mark: | N/A |
+| `status` | *int* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/routerparams.mdx b/docs/components/routerparams.mdx
new file mode 100644
index 0000000..e5316d7
--- /dev/null
+++ b/docs/components/routerparams.mdx
@@ -0,0 +1,12 @@
+---
+title: "RouterParams"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `quality_floor` | *Optional[float]* | :heavy_minus_sign: | N/A | |
+| `throughput_floor` | *Optional[float]* | :heavy_minus_sign: | N/A | |
+| `version_group` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `__pydantic_extra__` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | \{
"version_group": "anthropic/claude-sonnet-4"
} |
\ No newline at end of file
diff --git a/docs/components/routingstrategy.mdx b/docs/components/routingstrategy.mdx
new file mode 100644
index 0000000..0285226
--- /dev/null
+++ b/docs/components/routingstrategy.mdx
@@ -0,0 +1,27 @@
+---
+title: "RoutingStrategy"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import RoutingStrategy
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: RoutingStrategy = "direct"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"direct"`
+- `"auto"`
+- `"free"`
+- `"latest"`
+- `"alias"`
+- `"fallback"`
+- `"pareto"`
+- `"bodybuilder"`
+- `"fusion"`
diff --git a/docs/components/rule.mdx b/docs/components/rule.mdx
new file mode 100644
index 0000000..d585c3b
--- /dev/null
+++ b/docs/components/rule.mdx
@@ -0,0 +1,11 @@
+---
+title: "Rule"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `field` | [components.FieldT](../components/fieldt.mdx) | :heavy_check_mark: | N/A |
+| `operator` | [components.Operator](../components/operator.mdx) | :heavy_check_mark: | N/A |
+| `value` | [Optional[components.ObservabilityFilterRulesConfigValue]](../components/observabilityfilterrulesconfigvalue.mdx) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/searchcontextsizeenum.mdx b/docs/components/searchcontextsizeenum.mdx
new file mode 100644
index 0000000..ba86ee3
--- /dev/null
+++ b/docs/components/searchcontextsizeenum.mdx
@@ -0,0 +1,23 @@
+---
+title: "SearchContextSizeEnum"
+---
+
+Size of the search context for web search tools
+
+## Example Usage
+
+```python
+from openrouter.components import SearchContextSizeEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: SearchContextSizeEnum = "low"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"low"`
+- `"medium"`
+- `"high"`
diff --git a/docs/components/searchmodelsservertoolconfig.mdx b/docs/components/searchmodelsservertoolconfig.mdx
new file mode 100644
index 0000000..fb2f7f7
--- /dev/null
+++ b/docs/components/searchmodelsservertoolconfig.mdx
@@ -0,0 +1,12 @@
+---
+title: "SearchModelsServerToolConfig"
+---
+
+Configuration for the openrouter:experimental__search_models server tool
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
+| `max_results` | *Optional[int]* | :heavy_minus_sign: | Maximum number of models to return. Defaults to 5, max 20. | 5 |
\ No newline at end of file
diff --git a/docs/components/searchqualitylevel.mdx b/docs/components/searchqualitylevel.mdx
new file mode 100644
index 0000000..09c6611
--- /dev/null
+++ b/docs/components/searchqualitylevel.mdx
@@ -0,0 +1,23 @@
+---
+title: "SearchQualityLevel"
+---
+
+How much context to retrieve per result. Applies to Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, pins a fixed per-result character cap (low=5,000, medium=15,000, high=30,000); when omitted, Exa picks an adaptive size per query and document (typically ~2,000–4,000 characters per result). For Parallel, controls the total characters across all results; when omitted, Parallel uses its own default size. For Perplexity, maps directly to the Search API's native search_context_size parameter. Overridden by `max_characters` when both are set.
+
+## Example Usage
+
+```python
+from openrouter.components import SearchQualityLevel
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: SearchQualityLevel = "low"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"low"`
+- `"medium"`
+- `"high"`
diff --git a/docs/components/security.md b/docs/components/security.mdx
similarity index 91%
rename from docs/components/security.md
rename to docs/components/security.mdx
index 2e0839d..185abbf 100644
--- a/docs/components/security.md
+++ b/docs/components/security.mdx
@@ -1,5 +1,6 @@
-# Security
-
+---
+title: "Security"
+---
## Fields
diff --git a/docs/components/servertooluse.mdx b/docs/components/servertooluse.mdx
new file mode 100644
index 0000000..a90fbbe
--- /dev/null
+++ b/docs/components/servertooluse.mdx
@@ -0,0 +1,14 @@
+---
+title: "ServerToolUse"
+---
+
+Usage for server-side tool execution (e.g., web search)
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `tool_calls_executed` | *OptionalNullable[int]* | :heavy_minus_sign: | Number of OpenRouter server tool calls that executed and produced a result. |
+| `tool_calls_requested` | *OptionalNullable[int]* | :heavy_minus_sign: | Total number of OpenRouter server-orchestrated tool calls the model requested, across all tool types. Provider-native tools (e.g. native web search) are not counted here. |
+| `web_search_requests` | *OptionalNullable[int]* | :heavy_minus_sign: | Number of web searches performed by server-side tools. For server-orchestrated tool calls a web search is also counted in tool_calls_requested; provider-native web search may report web_search_requests only. Do not sum the two. |
\ No newline at end of file
diff --git a/docs/components/servertoolusedetails.mdx b/docs/components/servertoolusedetails.mdx
new file mode 100644
index 0000000..a9f0d64
--- /dev/null
+++ b/docs/components/servertoolusedetails.mdx
@@ -0,0 +1,14 @@
+---
+title: "ServerToolUseDetails"
+---
+
+Usage for server-side tool execution (e.g., web search)
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `tool_calls_executed` | *OptionalNullable[int]* | :heavy_minus_sign: | Number of OpenRouter server tool calls that executed and produced a result |
+| `tool_calls_requested` | *OptionalNullable[int]* | :heavy_minus_sign: | Total number of OpenRouter server-orchestrated tool calls the model requested, across all tool types. Provider-native tools (e.g. native web search) are not counted here. |
+| `web_search_requests` | *OptionalNullable[int]* | :heavy_minus_sign: | Number of web searches performed by server-side tools. For server-orchestrated tool calls a web search is also counted in tool_calls_requested; provider-native web search may report web_search_requests only. Do not sum the two. |
\ No newline at end of file
diff --git a/docs/components/serviceunavailableresponseerrordata.md b/docs/components/serviceunavailableresponseerrordata.mdx
similarity index 92%
rename from docs/components/serviceunavailableresponseerrordata.md
rename to docs/components/serviceunavailableresponseerrordata.mdx
index 797c831..c4f8651 100644
--- a/docs/components/serviceunavailableresponseerrordata.md
+++ b/docs/components/serviceunavailableresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# ServiceUnavailableResponseErrorData
+---
+title: "ServiceUnavailableResponseErrorData"
+---
Error data for ServiceUnavailableResponse
diff --git a/docs/components/shellcallitem.mdx b/docs/components/shellcallitem.mdx
new file mode 100644
index 0000000..02c5c8a
--- /dev/null
+++ b/docs/components/shellcallitem.mdx
@@ -0,0 +1,17 @@
+---
+title: "ShellCallItem"
+---
+
+A shell command execution call (newer variant)
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `action` | [components.ShellCallItemAction](../components/shellcallitemaction.mdx) | :heavy_check_mark: | N/A | |
+| `call_id` | *str* | :heavy_check_mark: | N/A | |
+| `environment` | *OptionalNullable[Any]* | :heavy_minus_sign: | N/A | |
+| `id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `status` | [OptionalNullable[components.ShellCallItemStatus]](../components/shellcallitemstatus.mdx) | :heavy_minus_sign: | N/A | completed |
+| `type` | [components.ShellCallItemType](../components/shellcallitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/shellcallitemaction.mdx b/docs/components/shellcallitemaction.mdx
new file mode 100644
index 0000000..cca3bb6
--- /dev/null
+++ b/docs/components/shellcallitemaction.mdx
@@ -0,0 +1,11 @@
+---
+title: "ShellCallItemAction"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------------------- | ----------------------- | ----------------------- | ----------------------- |
+| `commands` | List[*str*] | :heavy_check_mark: | N/A |
+| `max_output_length` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A |
+| `timeout_ms` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/shellcallitemstatus.mdx b/docs/components/shellcallitemstatus.mdx
new file mode 100644
index 0000000..b6ec73c
--- /dev/null
+++ b/docs/components/shellcallitemstatus.mdx
@@ -0,0 +1,21 @@
+---
+title: "ShellCallItemStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ShellCallItemStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ShellCallItemStatus = "in_progress"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"in_progress"`
+- `"completed"`
+- `"incomplete"`
diff --git a/docs/components/shellcallitemtype.mdx b/docs/components/shellcallitemtype.mdx
new file mode 100644
index 0000000..fe8aa0d
--- /dev/null
+++ b/docs/components/shellcallitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ShellCallItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ShellCallItemType
+value: ShellCallItemType = "shell_call"
+```
+
+
+## Values
+
+- `"shell_call"`
diff --git a/docs/components/shellcalloutputitem.mdx b/docs/components/shellcalloutputitem.mdx
new file mode 100644
index 0000000..e4456b9
--- /dev/null
+++ b/docs/components/shellcalloutputitem.mdx
@@ -0,0 +1,17 @@
+---
+title: "ShellCallOutputItem"
+---
+
+Output from a shell command execution (newer variant)
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `call_id` | *str* | :heavy_check_mark: | N/A | |
+| `id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `max_output_length` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
+| `output` | List[[components.ShellCallOutputItemOutput](../components/shellcalloutputitemoutput.mdx)] | :heavy_check_mark: | N/A | |
+| `status` | [OptionalNullable[components.ShellCallOutputItemStatus]](../components/shellcalloutputitemstatus.mdx) | :heavy_minus_sign: | N/A | completed |
+| `type` | [components.ShellCallOutputItemType](../components/shellcalloutputitemtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/shellcalloutputitemoutput.mdx b/docs/components/shellcalloutputitemoutput.mdx
new file mode 100644
index 0000000..9d48557
--- /dev/null
+++ b/docs/components/shellcalloutputitemoutput.mdx
@@ -0,0 +1,12 @@
+---
+title: "ShellCallOutputItemOutput"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------- | -------------------------- | -------------------------- | -------------------------- |
+| `content` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `exit_code` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A |
+| `type` | *str* | :heavy_check_mark: | N/A |
+| `__pydantic_extra__` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/shellcalloutputitemstatus.mdx b/docs/components/shellcalloutputitemstatus.mdx
new file mode 100644
index 0000000..d1b61c6
--- /dev/null
+++ b/docs/components/shellcalloutputitemstatus.mdx
@@ -0,0 +1,21 @@
+---
+title: "ShellCallOutputItemStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ShellCallOutputItemStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ShellCallOutputItemStatus = "in_progress"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"in_progress"`
+- `"completed"`
+- `"incomplete"`
diff --git a/docs/components/shellcalloutputitemtype.mdx b/docs/components/shellcalloutputitemtype.mdx
new file mode 100644
index 0000000..90b5552
--- /dev/null
+++ b/docs/components/shellcalloutputitemtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ShellCallOutputItemType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ShellCallOutputItemType
+value: ShellCallOutputItemType = "shell_call_output"
+```
+
+
+## Values
+
+- `"shell_call_output"`
diff --git a/docs/components/shellcallstatus.mdx b/docs/components/shellcallstatus.mdx
new file mode 100644
index 0000000..27aa179
--- /dev/null
+++ b/docs/components/shellcallstatus.mdx
@@ -0,0 +1,23 @@
+---
+title: "ShellCallStatus"
+---
+
+Status of a shell call or its output.
+
+## Example Usage
+
+```python
+from openrouter.components import ShellCallStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ShellCallStatus = "in_progress"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"in_progress"`
+- `"completed"`
+- `"incomplete"`
diff --git a/docs/components/shellservertool.mdx b/docs/components/shellservertool.mdx
new file mode 100644
index 0000000..0f55c37
--- /dev/null
+++ b/docs/components/shellservertool.mdx
@@ -0,0 +1,12 @@
+---
+title: "ShellServerTool"
+---
+
+Shell tool configuration
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `type` | [components.ShellServerToolType](../components/shellservertooltype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/shellservertoolconfig.mdx b/docs/components/shellservertoolconfig.mdx
new file mode 100644
index 0000000..5f24f1a
--- /dev/null
+++ b/docs/components/shellservertoolconfig.mdx
@@ -0,0 +1,14 @@
+---
+title: "ShellServerToolConfig"
+---
+
+Configuration for the openrouter:shell server tool
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `engine` | [Optional[components.ShellServerToolEngine]](../components/shellservertoolengine.mdx) | :heavy_minus_sign: | Which shell engine to use. "openrouter" runs commands server-side in the OpenRouter sandbox. "auto" (default) keeps the provider's native hosted shell when available (OpenAI); on other providers the call is routed to the OpenRouter sandbox. | openrouter |
+| `environment` | [Optional[components.ShellServerToolEnvironment]](../components/shellservertoolenvironment.mdx) | :heavy_minus_sign: | Server-side execution environment for the shell tool. Only container-backed environments are supported; "local" shells are not. | \{
"type": "container_auto"
} |
+| `sleep_after_seconds` | *Optional[int]* | :heavy_minus_sign: | How long (in seconds) the container stays warm after its last command before sleeping, freeing its capacity slot. Idle-based: each command renews the timer. Defaults to 900 (15 minutes); capped at 2592000 (30 days). | 900 |
\ No newline at end of file
diff --git a/docs/components/shellservertoolengine.mdx b/docs/components/shellservertoolengine.mdx
new file mode 100644
index 0000000..e5a0911
--- /dev/null
+++ b/docs/components/shellservertoolengine.mdx
@@ -0,0 +1,22 @@
+---
+title: "ShellServerToolEngine"
+---
+
+Which shell engine to use. "openrouter" runs commands server-side in the OpenRouter sandbox. "auto" (default) keeps the provider's native hosted shell when available (OpenAI); on other providers the call is routed to the OpenRouter sandbox.
+
+## Example Usage
+
+```python
+from openrouter.components import ShellServerToolEngine
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ShellServerToolEngine = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"openrouter"`
diff --git a/docs/components/shellservertoolenvironment.mdx b/docs/components/shellservertoolenvironment.mdx
new file mode 100644
index 0000000..c61d188
--- /dev/null
+++ b/docs/components/shellservertoolenvironment.mdx
@@ -0,0 +1,21 @@
+---
+title: "ShellServerToolEnvironment"
+---
+
+Server-side execution environment for the shell tool. Only container-backed environments are supported; "local" shells are not.
+
+
+## Supported Types
+
+### `components.ContainerAutoEnvironment`
+
+```python
+value: components.ContainerAutoEnvironment = /* values here */
+```
+
+### `components.ContainerReferenceEnvironment`
+
+```python
+value: components.ContainerReferenceEnvironment = /* values here */
+```
+
diff --git a/docs/components/shellservertoolopenrouter.mdx b/docs/components/shellservertoolopenrouter.mdx
new file mode 100644
index 0000000..fa03148
--- /dev/null
+++ b/docs/components/shellservertoolopenrouter.mdx
@@ -0,0 +1,13 @@
+---
+title: "ShellServerToolOpenRouter"
+---
+
+OpenRouter built-in server tool: runs shell commands server-side in a sandboxed container (a sandbox-backed clone of OpenAI's hosted shell tool)
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `parameters` | [Optional[components.ShellServerToolConfig]](../components/shellservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for the openrouter:shell server tool | \{
"engine": "openrouter",
"environment": \{
"type": "container_auto"
}
} |
+| `type` | [components.ShellServerToolOpenRouterType](../components/shellservertoolopenroutertype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/shellservertoolopenroutertype.mdx b/docs/components/shellservertoolopenroutertype.mdx
new file mode 100644
index 0000000..9c46cc1
--- /dev/null
+++ b/docs/components/shellservertoolopenroutertype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ShellServerToolOpenRouterType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ShellServerToolOpenRouterType
+value: ShellServerToolOpenRouterType = "openrouter:shell"
+```
+
+
+## Values
+
+- `"openrouter:shell"`
diff --git a/docs/components/shellservertooltype.mdx b/docs/components/shellservertooltype.mdx
new file mode 100644
index 0000000..1c0dd3c
--- /dev/null
+++ b/docs/components/shellservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ShellServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ShellServerToolType
+value: ShellServerToolType = "shell"
+```
+
+
+## Values
+
+- `"shell"`
diff --git a/docs/components/size.mdx b/docs/components/size.mdx
new file mode 100644
index 0000000..707abe9
--- /dev/null
+++ b/docs/components/size.mdx
@@ -0,0 +1,22 @@
+---
+title: "Size"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Size
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Size = "1024x1024"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"1024x1024"`
+- `"1024x1536"`
+- `"1536x1024"`
+- `"auto"`
diff --git a/docs/components/sort.mdx b/docs/components/sort.mdx
new file mode 100644
index 0000000..b12340f
--- /dev/null
+++ b/docs/components/sort.mdx
@@ -0,0 +1,27 @@
+---
+title: "Sort"
+---
+
+The sorting strategy to use for this request, if "order" is not specified. When set, no load balancing is performed.
+
+
+## Supported Types
+
+### `components.ProviderSort`
+
+```python
+value: components.ProviderSort = /* values here */
+```
+
+### `components.ProviderSortConfig`
+
+```python
+value: components.ProviderSortConfig = /* values here */
+```
+
+### `Any`
+
+```python
+value: Any = /* values here */
+```
+
diff --git a/docs/components/sourcecontent.mdx b/docs/components/sourcecontent.mdx
new file mode 100644
index 0000000..792f405
--- /dev/null
+++ b/docs/components/sourcecontent.mdx
@@ -0,0 +1,10 @@
+---
+title: "SourceContent"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| `content` | [components.AnthropicDocumentBlockParamContent2](../components/anthropicdocumentblockparamcontent2.mdx) | :heavy_check_mark: | N/A |
+| `type` | [components.SourceType](../components/sourcetype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/sourcetype.mdx b/docs/components/sourcetype.mdx
new file mode 100644
index 0000000..5d617ca
--- /dev/null
+++ b/docs/components/sourcetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "SourceType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import SourceType
+value: SourceType = "content"
+```
+
+
+## Values
+
+- `"content"`
diff --git a/docs/components/speechrequest.mdx b/docs/components/speechrequest.mdx
new file mode 100644
index 0000000..e984d1f
--- /dev/null
+++ b/docs/components/speechrequest.mdx
@@ -0,0 +1,17 @@
+---
+title: "SpeechRequest"
+---
+
+Text-to-speech request input
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
+| `input` | *str* | :heavy_check_mark: | Text to synthesize | Hello world |
+| `model` | *str* | :heavy_check_mark: | TTS model identifier | elevenlabs/eleven-turbo-v2 |
+| `provider` | [Optional[components.SpeechRequestProvider]](../components/speechrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | |
+| `response_format` | [Optional[components.ResponseFormatEnum]](../components/responseformatenum.mdx) | :heavy_minus_sign: | Audio output format | pcm |
+| `speed` | *Optional[float]* | :heavy_minus_sign: | Playback speed multiplier. Only used by models that support it (e.g. OpenAI TTS). Ignored by other providers. | 1 |
+| `voice` | *str* | :heavy_check_mark: | Voice identifier (provider-specific). | alloy |
\ No newline at end of file
diff --git a/docs/components/speechrequestprovider.mdx b/docs/components/speechrequestprovider.mdx
new file mode 100644
index 0000000..3a95d19
--- /dev/null
+++ b/docs/components/speechrequestprovider.mdx
@@ -0,0 +1,12 @@
+---
+title: "SpeechRequestProvider"
+---
+
+Provider-specific passthrough configuration
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `options` | [Optional[components.ProviderOptions]](../components/provideroptions.mdx) | :heavy_minus_sign: | Provider-specific options keyed by provider slug. Only options for the matched provider are forwarded; the rest are ignored. Unrecognized keys are silently dropped. | \{
"openai": \{
"max_tokens": 1000
}
} |
\ No newline at end of file
diff --git a/docs/components/speed.mdx b/docs/components/speed.mdx
new file mode 100644
index 0000000..f120cfe
--- /dev/null
+++ b/docs/components/speed.mdx
@@ -0,0 +1,22 @@
+---
+title: "Speed"
+---
+
+Controls output generation speed. When set to `fast`, uses a higher-speed inference configuration at premium pricing. Defaults to `standard` when omitted.
+
+## Example Usage
+
+```python
+from openrouter.components import Speed
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Speed = "fast"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"fast"`
+- `"standard"`
diff --git a/docs/components/stance.mdx b/docs/components/stance.mdx
new file mode 100644
index 0000000..3a93298
--- /dev/null
+++ b/docs/components/stance.mdx
@@ -0,0 +1,10 @@
+---
+title: "Stance"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `model` | *str* | :heavy_check_mark: | N/A |
+| `stance` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/stop.md b/docs/components/stop.mdx
similarity index 91%
rename from docs/components/stop.md
rename to docs/components/stop.mdx
index c36d910..0f147f6 100644
--- a/docs/components/stop.md
+++ b/docs/components/stop.mdx
@@ -1,4 +1,6 @@
-# Stop
+---
+title: "Stop"
+---
Stop sequences (up to 4)
diff --git a/docs/components/stopservertoolswhencondition.mdx b/docs/components/stopservertoolswhencondition.mdx
new file mode 100644
index 0000000..34d7863
--- /dev/null
+++ b/docs/components/stopservertoolswhencondition.mdx
@@ -0,0 +1,39 @@
+---
+title: "StopServerToolsWhenCondition"
+---
+
+A single condition that, when met, halts the server-tool agent loop.
+
+
+## Supported Types
+
+### `components.StopServerToolsWhenFinishReasonIs`
+
+```python
+value: components.StopServerToolsWhenFinishReasonIs = /* values here */
+```
+
+### `components.StopServerToolsWhenHasToolCall`
+
+```python
+value: components.StopServerToolsWhenHasToolCall = /* values here */
+```
+
+### `components.StopServerToolsWhenMaxCost`
+
+```python
+value: components.StopServerToolsWhenMaxCost = /* values here */
+```
+
+### `components.StopServerToolsWhenMaxTokensUsed`
+
+```python
+value: components.StopServerToolsWhenMaxTokensUsed = /* values here */
+```
+
+### `components.StopServerToolsWhenStepCountIs`
+
+```python
+value: components.StopServerToolsWhenStepCountIs = /* values here */
+```
+
diff --git a/docs/components/stopservertoolswhenfinishreasonis.mdx b/docs/components/stopservertoolswhenfinishreasonis.mdx
new file mode 100644
index 0000000..ef2f143
--- /dev/null
+++ b/docs/components/stopservertoolswhenfinishreasonis.mdx
@@ -0,0 +1,13 @@
+---
+title: "StopServerToolsWhenFinishReasonIs"
+---
+
+Stop when the upstream model emits this finish reason (e.g. `length`).
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
+| `reason` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.StopServerToolsWhenFinishReasonIsType](../components/stopservertoolswhenfinishreasonistype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/stopservertoolswhenfinishreasonistype.mdx b/docs/components/stopservertoolswhenfinishreasonistype.mdx
new file mode 100644
index 0000000..e54b4fe
--- /dev/null
+++ b/docs/components/stopservertoolswhenfinishreasonistype.mdx
@@ -0,0 +1,15 @@
+---
+title: "StopServerToolsWhenFinishReasonIsType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import StopServerToolsWhenFinishReasonIsType
+value: StopServerToolsWhenFinishReasonIsType = "finish_reason_is"
+```
+
+
+## Values
+
+- `"finish_reason_is"`
diff --git a/docs/components/stopservertoolswhenhastoolcall.mdx b/docs/components/stopservertoolswhenhastoolcall.mdx
new file mode 100644
index 0000000..890af33
--- /dev/null
+++ b/docs/components/stopservertoolswhenhastoolcall.mdx
@@ -0,0 +1,13 @@
+---
+title: "StopServerToolsWhenHasToolCall"
+---
+
+Stop after a tool with this name has been called.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `tool_name` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.StopServerToolsWhenHasToolCallType](../components/stopservertoolswhenhastoolcalltype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/stopservertoolswhenhastoolcalltype.mdx b/docs/components/stopservertoolswhenhastoolcalltype.mdx
new file mode 100644
index 0000000..9b1a468
--- /dev/null
+++ b/docs/components/stopservertoolswhenhastoolcalltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "StopServerToolsWhenHasToolCallType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import StopServerToolsWhenHasToolCallType
+value: StopServerToolsWhenHasToolCallType = "has_tool_call"
+```
+
+
+## Values
+
+- `"has_tool_call"`
diff --git a/docs/components/stopservertoolswhenmaxcost.mdx b/docs/components/stopservertoolswhenmaxcost.mdx
new file mode 100644
index 0000000..11ec526
--- /dev/null
+++ b/docs/components/stopservertoolswhenmaxcost.mdx
@@ -0,0 +1,13 @@
+---
+title: "StopServerToolsWhenMaxCost"
+---
+
+Stop once cumulative cost across the loop exceeds this dollar threshold.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `max_cost_in_dollars` | *float* | :heavy_check_mark: | N/A |
+| `type` | [components.StopServerToolsWhenMaxCostType](../components/stopservertoolswhenmaxcosttype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/stopservertoolswhenmaxcosttype.mdx b/docs/components/stopservertoolswhenmaxcosttype.mdx
new file mode 100644
index 0000000..34953ab
--- /dev/null
+++ b/docs/components/stopservertoolswhenmaxcosttype.mdx
@@ -0,0 +1,15 @@
+---
+title: "StopServerToolsWhenMaxCostType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import StopServerToolsWhenMaxCostType
+value: StopServerToolsWhenMaxCostType = "max_cost"
+```
+
+
+## Values
+
+- `"max_cost"`
diff --git a/docs/components/stopservertoolswhenmaxtokensused.mdx b/docs/components/stopservertoolswhenmaxtokensused.mdx
new file mode 100644
index 0000000..33d4618
--- /dev/null
+++ b/docs/components/stopservertoolswhenmaxtokensused.mdx
@@ -0,0 +1,13 @@
+---
+title: "StopServerToolsWhenMaxTokensUsed"
+---
+
+Stop once cumulative token usage across the loop exceeds this threshold.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
+| `max_tokens` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.StopServerToolsWhenMaxTokensUsedType](../components/stopservertoolswhenmaxtokensusedtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/stopservertoolswhenmaxtokensusedtype.mdx b/docs/components/stopservertoolswhenmaxtokensusedtype.mdx
new file mode 100644
index 0000000..3818d9b
--- /dev/null
+++ b/docs/components/stopservertoolswhenmaxtokensusedtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "StopServerToolsWhenMaxTokensUsedType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import StopServerToolsWhenMaxTokensUsedType
+value: StopServerToolsWhenMaxTokensUsedType = "max_tokens_used"
+```
+
+
+## Values
+
+- `"max_tokens_used"`
diff --git a/docs/components/stopservertoolswhenstepcountis.mdx b/docs/components/stopservertoolswhenstepcountis.mdx
new file mode 100644
index 0000000..0544b66
--- /dev/null
+++ b/docs/components/stopservertoolswhenstepcountis.mdx
@@ -0,0 +1,13 @@
+---
+title: "StopServerToolsWhenStepCountIs"
+---
+
+Stop after the agent loop has executed this many steps.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `step_count` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.StopServerToolsWhenStepCountIsType](../components/stopservertoolswhenstepcountistype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/stopservertoolswhenstepcountistype.mdx b/docs/components/stopservertoolswhenstepcountistype.mdx
new file mode 100644
index 0000000..709393f
--- /dev/null
+++ b/docs/components/stopservertoolswhenstepcountistype.mdx
@@ -0,0 +1,15 @@
+---
+title: "StopServerToolsWhenStepCountIsType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import StopServerToolsWhenStepCountIsType
+value: StopServerToolsWhenStepCountIsType = "step_count_is"
+```
+
+
+## Values
+
+- `"step_count_is"`
diff --git a/docs/components/storedprompttemplate.mdx b/docs/components/storedprompttemplate.mdx
new file mode 100644
index 0000000..a9461bc
--- /dev/null
+++ b/docs/components/storedprompttemplate.mdx
@@ -0,0 +1,10 @@
+---
+title: "StoredPromptTemplate"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | N/A |
+| `variables` | Dict[str, [components.Variables](../components/variables.mdx)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/streamevents.mdx b/docs/components/streamevents.mdx
new file mode 100644
index 0000000..149400c
--- /dev/null
+++ b/docs/components/streamevents.mdx
@@ -0,0 +1,273 @@
+---
+title: "StreamEvents"
+---
+
+Union of all possible event types emitted during response streaming
+
+
+## Supported Types
+
+### `components.ErrorEvent`
+
+```python
+value: components.ErrorEvent = /* values here */
+```
+
+### `components.ApplyPatchCallOperationDiffDeltaEvent`
+
+```python
+value: components.ApplyPatchCallOperationDiffDeltaEvent = /* values here */
+```
+
+### `components.ApplyPatchCallOperationDiffDoneEvent`
+
+```python
+value: components.ApplyPatchCallOperationDiffDoneEvent = /* values here */
+```
+
+### `components.StreamEventsResponseCompleted`
+
+```python
+value: components.StreamEventsResponseCompleted = /* values here */
+```
+
+### `components.ContentPartAddedEvent`
+
+```python
+value: components.ContentPartAddedEvent = /* values here */
+```
+
+### `components.ContentPartDoneEvent`
+
+```python
+value: components.ContentPartDoneEvent = /* values here */
+```
+
+### `components.OpenResponsesCreatedEvent`
+
+```python
+value: components.OpenResponsesCreatedEvent = /* values here */
+```
+
+### `components.CustomToolCallInputDeltaEvent`
+
+```python
+value: components.CustomToolCallInputDeltaEvent = /* values here */
+```
+
+### `components.CustomToolCallInputDoneEvent`
+
+```python
+value: components.CustomToolCallInputDoneEvent = /* values here */
+```
+
+### `components.DebugEvent`
+
+```python
+value: components.DebugEvent = /* values here */
+```
+
+### `components.StreamEventsResponseFailed`
+
+```python
+value: components.StreamEventsResponseFailed = /* values here */
+```
+
+### `components.FunctionCallArgsDeltaEvent`
+
+```python
+value: components.FunctionCallArgsDeltaEvent = /* values here */
+```
+
+### `components.FunctionCallArgsDoneEvent`
+
+```python
+value: components.FunctionCallArgsDoneEvent = /* values here */
+```
+
+### `components.FusionCallAnalysisCompletedEvent`
+
+```python
+value: components.FusionCallAnalysisCompletedEvent = /* values here */
+```
+
+### `components.FusionCallAnalysisInProgressEvent`
+
+```python
+value: components.FusionCallAnalysisInProgressEvent = /* values here */
+```
+
+### `components.FusionCallCompletedEvent`
+
+```python
+value: components.FusionCallCompletedEvent = /* values here */
+```
+
+### `components.FusionCallInProgressEvent`
+
+```python
+value: components.FusionCallInProgressEvent = /* values here */
+```
+
+### `components.FusionCallPanelAddedEvent`
+
+```python
+value: components.FusionCallPanelAddedEvent = /* values here */
+```
+
+### `components.FusionCallPanelCompletedEvent`
+
+```python
+value: components.FusionCallPanelCompletedEvent = /* values here */
+```
+
+### `components.FusionCallPanelDeltaEvent`
+
+```python
+value: components.FusionCallPanelDeltaEvent = /* values here */
+```
+
+### `components.FusionCallPanelFailedEvent`
+
+```python
+value: components.FusionCallPanelFailedEvent = /* values here */
+```
+
+### `components.FusionCallPanelReasoningDeltaEvent`
+
+```python
+value: components.FusionCallPanelReasoningDeltaEvent = /* values here */
+```
+
+### `components.ImageGenCallCompletedEvent`
+
+```python
+value: components.ImageGenCallCompletedEvent = /* values here */
+```
+
+### `components.ImageGenCallGeneratingEvent`
+
+```python
+value: components.ImageGenCallGeneratingEvent = /* values here */
+```
+
+### `components.ImageGenCallInProgressEvent`
+
+```python
+value: components.ImageGenCallInProgressEvent = /* values here */
+```
+
+### `components.ImageGenCallPartialImageEvent`
+
+```python
+value: components.ImageGenCallPartialImageEvent = /* values here */
+```
+
+### `components.OpenResponsesInProgressEvent`
+
+```python
+value: components.OpenResponsesInProgressEvent = /* values here */
+```
+
+### `components.StreamEventsResponseIncomplete`
+
+```python
+value: components.StreamEventsResponseIncomplete = /* values here */
+```
+
+### `components.StreamEventsResponseOutputItemAdded`
+
+```python
+value: components.StreamEventsResponseOutputItemAdded = /* values here */
+```
+
+### `components.StreamEventsResponseOutputItemDone`
+
+```python
+value: components.StreamEventsResponseOutputItemDone = /* values here */
+```
+
+### `components.AnnotationAddedEvent`
+
+```python
+value: components.AnnotationAddedEvent = /* values here */
+```
+
+### `components.TextDeltaEvent`
+
+```python
+value: components.TextDeltaEvent = /* values here */
+```
+
+### `components.TextDoneEvent`
+
+```python
+value: components.TextDoneEvent = /* values here */
+```
+
+### `components.ReasoningSummaryPartAddedEvent`
+
+```python
+value: components.ReasoningSummaryPartAddedEvent = /* values here */
+```
+
+### `components.ReasoningSummaryPartDoneEvent`
+
+```python
+value: components.ReasoningSummaryPartDoneEvent = /* values here */
+```
+
+### `components.ReasoningSummaryTextDeltaEvent`
+
+```python
+value: components.ReasoningSummaryTextDeltaEvent = /* values here */
+```
+
+### `components.ReasoningSummaryTextDoneEvent`
+
+```python
+value: components.ReasoningSummaryTextDoneEvent = /* values here */
+```
+
+### `components.ReasoningDeltaEvent`
+
+```python
+value: components.ReasoningDeltaEvent = /* values here */
+```
+
+### `components.ReasoningDoneEvent`
+
+```python
+value: components.ReasoningDoneEvent = /* values here */
+```
+
+### `components.RefusalDeltaEvent`
+
+```python
+value: components.RefusalDeltaEvent = /* values here */
+```
+
+### `components.RefusalDoneEvent`
+
+```python
+value: components.RefusalDoneEvent = /* values here */
+```
+
+### `components.WebSearchCallCompletedEvent`
+
+```python
+value: components.WebSearchCallCompletedEvent = /* values here */
+```
+
+### `components.WebSearchCallInProgressEvent`
+
+```python
+value: components.WebSearchCallInProgressEvent = /* values here */
+```
+
+### `components.WebSearchCallSearchingEvent`
+
+```python
+value: components.WebSearchCallSearchingEvent = /* values here */
+```
+
diff --git a/docs/components/streameventsresponsecompleted.mdx b/docs/components/streameventsresponsecompleted.mdx
new file mode 100644
index 0000000..cd39951
--- /dev/null
+++ b/docs/components/streameventsresponsecompleted.mdx
@@ -0,0 +1,14 @@
+---
+title: "StreamEventsResponseCompleted"
+---
+
+Event emitted when a response has completed successfully
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `response` | [components.OpenResponsesResult](../components/openresponsesresult.mdx) | :heavy_check_mark: | Complete non-streaming response from the Responses API | \{
"created_at": 1704067200,
"error": null,
"id": "resp-abc123",
"incomplete_details": null,
"instructions": null,
"max_output_tokens": null,
"metadata": null,
"model": "gpt-4",
"object": "response",
"output": [
\{
"content": [
\{
"annotations": [],
"text": "Hello! How can I help you today?",
"type": "output_text"
}
],
"id": "msg-abc123",
"role": "assistant",
"status": "completed",
"type": "message"
}
],
"parallel_tool_calls": true,
"status": "completed",
"temperature": null,
"tool_choice": "auto",
"tools": [],
"top_p": null,
"usage": \{
"input_tokens": 10,
"input_tokens_details": \{
"cached_tokens": 0
},
"output_tokens": 25,
"output_tokens_details": \{
"reasoning_tokens": 0
},
"total_tokens": 35
}
} |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A | |
+| `type` | [components.StreamEventsResponseCompletedType](../components/streameventsresponsecompletedtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/streameventsresponsecompletedtype.mdx b/docs/components/streameventsresponsecompletedtype.mdx
new file mode 100644
index 0000000..1854d01
--- /dev/null
+++ b/docs/components/streameventsresponsecompletedtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "StreamEventsResponseCompletedType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import StreamEventsResponseCompletedType
+value: StreamEventsResponseCompletedType = "response.completed"
+```
+
+
+## Values
+
+- `"response.completed"`
diff --git a/docs/components/streameventsresponsefailed.mdx b/docs/components/streameventsresponsefailed.mdx
new file mode 100644
index 0000000..4c53cdc
--- /dev/null
+++ b/docs/components/streameventsresponsefailed.mdx
@@ -0,0 +1,14 @@
+---
+title: "StreamEventsResponseFailed"
+---
+
+Event emitted when a response has failed
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `response` | [components.OpenResponsesResult](../components/openresponsesresult.mdx) | :heavy_check_mark: | Complete non-streaming response from the Responses API | \{
"created_at": 1704067200,
"error": null,
"id": "resp-abc123",
"incomplete_details": null,
"instructions": null,
"max_output_tokens": null,
"metadata": null,
"model": "gpt-4",
"object": "response",
"output": [
\{
"content": [
\{
"annotations": [],
"text": "Hello! How can I help you today?",
"type": "output_text"
}
],
"id": "msg-abc123",
"role": "assistant",
"status": "completed",
"type": "message"
}
],
"parallel_tool_calls": true,
"status": "completed",
"temperature": null,
"tool_choice": "auto",
"tools": [],
"top_p": null,
"usage": \{
"input_tokens": 10,
"input_tokens_details": \{
"cached_tokens": 0
},
"output_tokens": 25,
"output_tokens_details": \{
"reasoning_tokens": 0
},
"total_tokens": 35
}
} |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A | |
+| `type` | [components.StreamEventsResponseFailedType](../components/streameventsresponsefailedtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/streameventsresponsefailedtype.mdx b/docs/components/streameventsresponsefailedtype.mdx
new file mode 100644
index 0000000..cbec95a
--- /dev/null
+++ b/docs/components/streameventsresponsefailedtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "StreamEventsResponseFailedType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import StreamEventsResponseFailedType
+value: StreamEventsResponseFailedType = "response.failed"
+```
+
+
+## Values
+
+- `"response.failed"`
diff --git a/docs/components/streameventsresponseincomplete.mdx b/docs/components/streameventsresponseincomplete.mdx
new file mode 100644
index 0000000..b493c3e
--- /dev/null
+++ b/docs/components/streameventsresponseincomplete.mdx
@@ -0,0 +1,14 @@
+---
+title: "StreamEventsResponseIncomplete"
+---
+
+Event emitted when a response is incomplete
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `response` | [components.OpenResponsesResult](../components/openresponsesresult.mdx) | :heavy_check_mark: | Complete non-streaming response from the Responses API | \{
"created_at": 1704067200,
"error": null,
"id": "resp-abc123",
"incomplete_details": null,
"instructions": null,
"max_output_tokens": null,
"metadata": null,
"model": "gpt-4",
"object": "response",
"output": [
\{
"content": [
\{
"annotations": [],
"text": "Hello! How can I help you today?",
"type": "output_text"
}
],
"id": "msg-abc123",
"role": "assistant",
"status": "completed",
"type": "message"
}
],
"parallel_tool_calls": true,
"status": "completed",
"temperature": null,
"tool_choice": "auto",
"tools": [],
"top_p": null,
"usage": \{
"input_tokens": 10,
"input_tokens_details": \{
"cached_tokens": 0
},
"output_tokens": 25,
"output_tokens_details": \{
"reasoning_tokens": 0
},
"total_tokens": 35
}
} |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A | |
+| `type` | [components.StreamEventsResponseIncompleteType](../components/streameventsresponseincompletetype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/streameventsresponseincompletetype.mdx b/docs/components/streameventsresponseincompletetype.mdx
new file mode 100644
index 0000000..1d886a3
--- /dev/null
+++ b/docs/components/streameventsresponseincompletetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "StreamEventsResponseIncompleteType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import StreamEventsResponseIncompleteType
+value: StreamEventsResponseIncompleteType = "response.incomplete"
+```
+
+
+## Values
+
+- `"response.incomplete"`
diff --git a/docs/components/streameventsresponseoutputitemadded.mdx b/docs/components/streameventsresponseoutputitemadded.mdx
new file mode 100644
index 0000000..8121198
--- /dev/null
+++ b/docs/components/streameventsresponseoutputitemadded.mdx
@@ -0,0 +1,15 @@
+---
+title: "StreamEventsResponseOutputItemAdded"
+---
+
+Event emitted when a new output item is added to the response
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `item` | [components.OutputItems](../components/outputitems.mdx) | :heavy_check_mark: | An output item from the response | \{
"content": [
\{
"text": "Hello! How can I help you today?",
"type": "output_text"
}
],
"id": "msg-abc123",
"role": "assistant",
"status": "completed",
"type": "message"
} |
+| `output_index` | *int* | :heavy_check_mark: | N/A | |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A | |
+| `type` | [components.StreamEventsResponseOutputItemAddedType](../components/streameventsresponseoutputitemaddedtype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/streameventsresponseoutputitemaddedtype.mdx b/docs/components/streameventsresponseoutputitemaddedtype.mdx
new file mode 100644
index 0000000..acf8df9
--- /dev/null
+++ b/docs/components/streameventsresponseoutputitemaddedtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "StreamEventsResponseOutputItemAddedType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import StreamEventsResponseOutputItemAddedType
+value: StreamEventsResponseOutputItemAddedType = "response.output_item.added"
+```
+
+
+## Values
+
+- `"response.output_item.added"`
diff --git a/docs/components/streameventsresponseoutputitemdone.mdx b/docs/components/streameventsresponseoutputitemdone.mdx
new file mode 100644
index 0000000..5d02fd8
--- /dev/null
+++ b/docs/components/streameventsresponseoutputitemdone.mdx
@@ -0,0 +1,15 @@
+---
+title: "StreamEventsResponseOutputItemDone"
+---
+
+Event emitted when an output item is complete
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `item` | [components.OutputItems](../components/outputitems.mdx) | :heavy_check_mark: | An output item from the response | \{
"content": [
\{
"text": "Hello! How can I help you today?",
"type": "output_text"
}
],
"id": "msg-abc123",
"role": "assistant",
"status": "completed",
"type": "message"
} |
+| `output_index` | *int* | :heavy_check_mark: | N/A | |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A | |
+| `type` | [components.StreamEventsResponseOutputItemDoneType](../components/streameventsresponseoutputitemdonetype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/streameventsresponseoutputitemdonetype.mdx b/docs/components/streameventsresponseoutputitemdonetype.mdx
new file mode 100644
index 0000000..7671de0
--- /dev/null
+++ b/docs/components/streameventsresponseoutputitemdonetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "StreamEventsResponseOutputItemDoneType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import StreamEventsResponseOutputItemDoneType
+value: StreamEventsResponseOutputItemDoneType = "response.output_item.done"
+```
+
+
+## Values
+
+- `"response.output_item.done"`
diff --git a/docs/components/streamlogprob.mdx b/docs/components/streamlogprob.mdx
new file mode 100644
index 0000000..3988246
--- /dev/null
+++ b/docs/components/streamlogprob.mdx
@@ -0,0 +1,15 @@
+---
+title: "StreamLogprob"
+---
+
+Log probability information for a token
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `bytes_` | List[*int*] | :heavy_minus_sign: | N/A |
+| `logprob` | *float* | :heavy_check_mark: | N/A |
+| `token` | *str* | :heavy_check_mark: | N/A |
+| `top_logprobs` | List[[components.StreamLogprobTopLogprob](../components/streamlogprobtoplogprob.mdx)] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/streamlogprobtoplogprob.mdx b/docs/components/streamlogprobtoplogprob.mdx
new file mode 100644
index 0000000..972fa7f
--- /dev/null
+++ b/docs/components/streamlogprobtoplogprob.mdx
@@ -0,0 +1,14 @@
+---
+title: "StreamLogprobTopLogprob"
+---
+
+Alternative token with its log probability
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `bytes_` | List[*int*] | :heavy_minus_sign: | N/A |
+| `logprob` | *Optional[float]* | :heavy_minus_sign: | N/A |
+| `token` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/sttinputaudio.mdx b/docs/components/sttinputaudio.mdx
new file mode 100644
index 0000000..70a2660
--- /dev/null
+++ b/docs/components/sttinputaudio.mdx
@@ -0,0 +1,13 @@
+---
+title: "STTInputAudio"
+---
+
+Base64-encoded audio to transcribe
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
+| `data` | *str* | :heavy_check_mark: | Base64-encoded audio data (raw bytes, not a data URI) |
+| `format_` | *str* | :heavy_check_mark: | Audio format (e.g., wav, mp3, flac, m4a, ogg, webm, aac). Supported formats vary by provider. |
\ No newline at end of file
diff --git a/docs/components/sttrequest.mdx b/docs/components/sttrequest.mdx
new file mode 100644
index 0000000..198ca47
--- /dev/null
+++ b/docs/components/sttrequest.mdx
@@ -0,0 +1,16 @@
+---
+title: "STTRequest"
+---
+
+Speech-to-text request input. Accepts a JSON body with input_audio containing base64-encoded audio.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
+| `input_audio` | [components.STTInputAudio](../components/sttinputaudio.mdx) | :heavy_check_mark: | Base64-encoded audio to transcribe | \{
"data": "UklGRiQA...",
"format": "wav"
} |
+| `language` | *Optional[str]* | :heavy_minus_sign: | ISO-639-1 language code (e.g., "en", "ja"). Auto-detected if omitted. | en |
+| `model` | *str* | :heavy_check_mark: | STT model identifier | openai/whisper-large-v3 |
+| `provider` | [Optional[components.STTRequestProvider]](../components/sttrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | |
+| `temperature` | *Optional[float]* | :heavy_minus_sign: | Sampling temperature for transcription | 0 |
\ No newline at end of file
diff --git a/docs/components/sttrequestprovider.mdx b/docs/components/sttrequestprovider.mdx
new file mode 100644
index 0000000..5eebff0
--- /dev/null
+++ b/docs/components/sttrequestprovider.mdx
@@ -0,0 +1,12 @@
+---
+title: "STTRequestProvider"
+---
+
+Provider-specific passthrough configuration
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `options` | [Optional[components.ProviderOptions]](../components/provideroptions.mdx) | :heavy_minus_sign: | Provider-specific options keyed by provider slug. Only options for the matched provider are forwarded; the rest are ignored. Unrecognized keys are silently dropped. | \{
"openai": \{
"max_tokens": 1000
}
} |
\ No newline at end of file
diff --git a/docs/components/sttresponse.mdx b/docs/components/sttresponse.mdx
new file mode 100644
index 0000000..9a61014
--- /dev/null
+++ b/docs/components/sttresponse.mdx
@@ -0,0 +1,13 @@
+---
+title: "STTResponse"
+---
+
+STT response containing transcribed text and optional usage statistics
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
+| `text` | *str* | :heavy_check_mark: | The transcribed text | Hello, this is a test of OpenAI speech-to-text transcription. The weather is sunny today and the temperature is around 72 degrees. |
+| `usage` | [Optional[components.STTUsage]](../components/sttusage.mdx) | :heavy_minus_sign: | Aggregated usage statistics for the request | \{
"cost": 0.000508,
"input_tokens": 83,
"output_tokens": 30,
"seconds": 9.2,
"total_tokens": 113
} |
\ No newline at end of file
diff --git a/docs/components/sttusage.mdx b/docs/components/sttusage.mdx
new file mode 100644
index 0000000..f0b5683
--- /dev/null
+++ b/docs/components/sttusage.mdx
@@ -0,0 +1,16 @@
+---
+title: "STTUsage"
+---
+
+Aggregated usage statistics for the request
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `cost` | *Optional[float]* | :heavy_minus_sign: | Total cost of the request in USD | 0.000508 |
+| `input_tokens` | *Optional[int]* | :heavy_minus_sign: | Number of input tokens billed for this request | 83 |
+| `output_tokens` | *Optional[int]* | :heavy_minus_sign: | Number of output tokens generated | 30 |
+| `seconds` | *Optional[float]* | :heavy_minus_sign: | Duration of the input audio in seconds | 9.2 |
+| `total_tokens` | *Optional[int]* | :heavy_minus_sign: | Total number of tokens used (input + output) | 113 |
\ No newline at end of file
diff --git a/docs/components/subagentnestedtool.mdx b/docs/components/subagentnestedtool.mdx
new file mode 100644
index 0000000..f8c149b
--- /dev/null
+++ b/docs/components/subagentnestedtool.mdx
@@ -0,0 +1,14 @@
+---
+title: "SubagentNestedTool"
+---
+
+A tool made available to the subagent. Only OpenRouter server tools (e.g. openrouter:web_search) are supported; function tools are rejected because the worker has no way to execute them. The subagent tool may not list itself.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| `parameters` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
+| `type` | *str* | :heavy_check_mark: | N/A | |
+| `__pydantic_extra__` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | \{
"type": "openrouter:web_search"
} |
\ No newline at end of file
diff --git a/docs/components/subagentreasoning.mdx b/docs/components/subagentreasoning.mdx
new file mode 100644
index 0000000..17ee212
--- /dev/null
+++ b/docs/components/subagentreasoning.mdx
@@ -0,0 +1,13 @@
+---
+title: "SubagentReasoning"
+---
+
+Reasoning configuration forwarded to the subagent call. Use this to control reasoning effort and token budget for models that support extended thinking.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
+| `effort` | [Optional[components.SubagentReasoningEffort]](../components/subagentreasoningeffort.mdx) | :heavy_minus_sign: | Reasoning effort level for the subagent call. |
+| `max_tokens` | *Optional[int]* | :heavy_minus_sign: | Maximum number of reasoning tokens the subagent may use. Accepted and validated but not yet forwarded to the subagent call. |
\ No newline at end of file
diff --git a/docs/components/subagentreasoningeffort.mdx b/docs/components/subagentreasoningeffort.mdx
new file mode 100644
index 0000000..6ff0d51
--- /dev/null
+++ b/docs/components/subagentreasoningeffort.mdx
@@ -0,0 +1,27 @@
+---
+title: "SubagentReasoningEffort"
+---
+
+Reasoning effort level for the subagent call.
+
+## Example Usage
+
+```python
+from openrouter.components import SubagentReasoningEffort
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: SubagentReasoningEffort = "max"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"max"`
+- `"xhigh"`
+- `"high"`
+- `"medium"`
+- `"low"`
+- `"minimal"`
+- `"none"`
diff --git a/docs/components/subagentservertoolconfig.mdx b/docs/components/subagentservertoolconfig.mdx
new file mode 100644
index 0000000..3ce20c0
--- /dev/null
+++ b/docs/components/subagentservertoolconfig.mdx
@@ -0,0 +1,18 @@
+---
+title: "SubagentServerToolConfig"
+---
+
+Configuration for the openrouter:subagent server tool.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `instructions` | *Optional[str]* | :heavy_minus_sign: | System instructions for the subagent. When omitted, the subagent responds with no system prompt of its own. | You are a fast, focused worker. Complete the task exactly as described. |
+| `max_completion_tokens` | *Optional[int]* | :heavy_minus_sign: | Maximum number of output tokens (including reasoning) the subagent may produce. When omitted, the provider's default applies. | 2048 |
+| `max_tool_calls` | *Optional[int]* | :heavy_minus_sign: | Maximum number of tool-calling steps the subagent may take during its agentic loop. Capped at 25. Only relevant when the subagent is given tools. Accepted and validated but not yet enforced on the subagent call. | 5 |
+| `model` | *Optional[str]* | :heavy_minus_sign: | Slug of the model that executes delegated tasks (any OpenRouter model). Typically a smaller, cheaper, faster model than the one delegating. When omitted, the model from the outer API request is used. The subagent tool itself cannot be the subagent model. | ~anthropic/claude-haiku-latest |
+| `reasoning` | [Optional[components.SubagentReasoning]](../components/subagentreasoning.mdx) | :heavy_minus_sign: | Reasoning configuration forwarded to the subagent call. Use this to control reasoning effort and token budget for models that support extended thinking. | \{
"effort": "low"
} |
+| `temperature` | *Optional[float]* | :heavy_minus_sign: | Sampling temperature forwarded to the subagent call. When omitted, the provider's default applies. | 0.7 |
+| `tools` | List[[components.SubagentNestedTool](../components/subagentnestedtool.mdx)] | :heavy_minus_sign: | Tools the subagent may use while executing a delegated task. The subagent runs as an agentic sub-agent over these tools, then returns its outcome. Only OpenRouter server tools are supported — function tools are rejected — and the list must not include the subagent tool itself. | |
\ No newline at end of file
diff --git a/docs/components/subagentservertoolopenrouter.mdx b/docs/components/subagentservertoolopenrouter.mdx
new file mode 100644
index 0000000..c50f5bf
--- /dev/null
+++ b/docs/components/subagentservertoolopenrouter.mdx
@@ -0,0 +1,13 @@
+---
+title: "SubagentServerToolOpenRouter"
+---
+
+OpenRouter built-in server tool: delegates self-contained tasks to a smaller, cheaper, faster worker model (any OpenRouter model) mid-generation and returns its outcome. The worker may run as a sub-agent with its own tools.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `parameters` | [Optional[components.SubagentServerToolConfig]](../components/subagentservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for the openrouter:subagent server tool. | \{
"model": "~anthropic/claude-haiku-latest"
} |
+| `type` | [components.SubagentServerToolOpenRouterType](../components/subagentservertoolopenroutertype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/subagentservertoolopenroutertype.mdx b/docs/components/subagentservertoolopenroutertype.mdx
new file mode 100644
index 0000000..a93cd73
--- /dev/null
+++ b/docs/components/subagentservertoolopenroutertype.mdx
@@ -0,0 +1,15 @@
+---
+title: "SubagentServerToolOpenRouterType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import SubagentServerToolOpenRouterType
+value: SubagentServerToolOpenRouterType = "openrouter:subagent"
+```
+
+
+## Values
+
+- `"openrouter:subagent"`
diff --git a/docs/components/supportedaspectratio.mdx b/docs/components/supportedaspectratio.mdx
new file mode 100644
index 0000000..ae925e4
--- /dev/null
+++ b/docs/components/supportedaspectratio.mdx
@@ -0,0 +1,27 @@
+---
+title: "SupportedAspectRatio"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import SupportedAspectRatio
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: SupportedAspectRatio = "16:9"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"16:9"`
+- `"9:16"`
+- `"1:1"`
+- `"4:3"`
+- `"3:4"`
+- `"3:2"`
+- `"2:3"`
+- `"21:9"`
+- `"9:21"`
diff --git a/docs/components/supportedframeimage.mdx b/docs/components/supportedframeimage.mdx
new file mode 100644
index 0000000..64a19c1
--- /dev/null
+++ b/docs/components/supportedframeimage.mdx
@@ -0,0 +1,20 @@
+---
+title: "SupportedFrameImage"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import SupportedFrameImage
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: SupportedFrameImage = "first_frame"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"first_frame"`
+- `"last_frame"`
diff --git a/docs/components/supportedresolution.mdx b/docs/components/supportedresolution.mdx
new file mode 100644
index 0000000..ea274d2
--- /dev/null
+++ b/docs/components/supportedresolution.mdx
@@ -0,0 +1,24 @@
+---
+title: "SupportedResolution"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import SupportedResolution
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: SupportedResolution = "480p"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"480p"`
+- `"720p"`
+- `"1080p"`
+- `"1K"`
+- `"2K"`
+- `"4K"`
diff --git a/docs/components/supportedsize.mdx b/docs/components/supportedsize.mdx
new file mode 100644
index 0000000..e221cb3
--- /dev/null
+++ b/docs/components/supportedsize.mdx
@@ -0,0 +1,54 @@
+---
+title: "SupportedSize"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import SupportedSize
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: SupportedSize = "480x480"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"480x480"`
+- `"480x640"`
+- `"480x720"`
+- `"480x854"`
+- `"480x1120"`
+- `"640x480"`
+- `"720x480"`
+- `"720x720"`
+- `"720x960"`
+- `"720x1080"`
+- `"720x1280"`
+- `"720x1680"`
+- `"854x480"`
+- `"960x720"`
+- `"1080x720"`
+- `"1080x1080"`
+- `"1080x1440"`
+- `"1080x1620"`
+- `"1080x1920"`
+- `"1080x2520"`
+- `"1120x480"`
+- `"1280x720"`
+- `"1440x1080"`
+- `"1620x1080"`
+- `"1680x720"`
+- `"1920x1080"`
+- `"2160x2160"`
+- `"2160x2880"`
+- `"2160x3240"`
+- `"2160x3840"`
+- `"2160x5040"`
+- `"2520x1080"`
+- `"2880x2160"`
+- `"3240x2160"`
+- `"3840x2160"`
+- `"5040x2160"`
diff --git a/docs/components/syntax.mdx b/docs/components/syntax.mdx
new file mode 100644
index 0000000..62827a8
--- /dev/null
+++ b/docs/components/syntax.mdx
@@ -0,0 +1,20 @@
+---
+title: "Syntax"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Syntax
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Syntax = "lark"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"lark"`
+- `"regex"`
diff --git a/docs/components/system.mdx b/docs/components/system.mdx
new file mode 100644
index 0000000..dbe433a
--- /dev/null
+++ b/docs/components/system.mdx
@@ -0,0 +1,18 @@
+---
+title: "System"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `List[components.AnthropicTextBlockParam]`
+
+```python
+value: List[components.AnthropicTextBlockParam] = /* values here */
+```
+
diff --git a/docs/components/taskbudget.mdx b/docs/components/taskbudget.mdx
new file mode 100644
index 0000000..c98814d
--- /dev/null
+++ b/docs/components/taskbudget.mdx
@@ -0,0 +1,14 @@
+---
+title: "TaskBudget"
+---
+
+Task budget for an agentic turn. The model sees a countdown of remaining tokens and uses it to prioritize work and wind down gracefully. Advisory — does not enforce a hard cap.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- |
+| `remaining` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A |
+| `total` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.TypeTokens](../components/typetokens.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/taskclassificationitem.mdx b/docs/components/taskclassificationitem.mdx
new file mode 100644
index 0000000..905d909
--- /dev/null
+++ b/docs/components/taskclassificationitem.mdx
@@ -0,0 +1,16 @@
+---
+title: "TaskClassificationItem"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `category_token_share` | *float* | :heavy_check_mark: | Fraction of this classification's token volume within its macro-category (0–1). Sums to 1 across all classifications sharing the same `macro_category`. | 0.48 |
+| `category_usage_share` | *float* | :heavy_check_mark: | Fraction of this classification's usage within its macro-category (0–1). Sums to 1 across all classifications sharing the same `macro_category`. | 0.51 |
+| `display_name` | *str* | :heavy_check_mark: | Human-readable label for the classification. | Code Generation |
+| `macro_category` | *str* | :heavy_check_mark: | Coarse grouping derived from the tag prefix: `code`, `data`, `agent`, or `general`. | code |
+| `models` | List[[components.TaskClassificationModel](../components/taskclassificationmodel.mdx)] | :heavy_check_mark: | Top models for this classification by request volume, sorted descending. Each entry reports the model's share of this classification's requests and tokens. | |
+| `tag` | *str* | :heavy_check_mark: | Classification tag identifier (e.g. `code:general_impl`, `agent:web_search`). | code:general_impl |
+| `token_share` | *float* | :heavy_check_mark: | Fraction of classified sampled token volume (prompt + completion) attributed to this classification (0–1). The unclassified `other` bucket is excluded from the denominator. | 0.31 |
+| `usage_share` | *float* | :heavy_check_mark: | Fraction of classified sampled requests attributed to this classification (0–1). The unclassified `other` bucket is excluded from the denominator. | 0.23 |
\ No newline at end of file
diff --git a/docs/components/taskclassificationmacrocategory.mdx b/docs/components/taskclassificationmacrocategory.mdx
new file mode 100644
index 0000000..1f45abf
--- /dev/null
+++ b/docs/components/taskclassificationmacrocategory.mdx
@@ -0,0 +1,12 @@
+---
+title: "TaskClassificationMacroCategory"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
+| `key` | *str* | :heavy_check_mark: | Macro-category identifier. | code |
+| `label` | *str* | :heavy_check_mark: | Human-readable label for the macro-category. | Code |
+| `token_share` | *float* | :heavy_check_mark: | Combined token share of all classifications in this macro-category (0–1). | 0.52 |
+| `usage_share` | *float* | :heavy_check_mark: | Combined usage share of all classifications in this macro-category (0–1). | 0.45 |
\ No newline at end of file
diff --git a/docs/components/taskclassificationmodel.mdx b/docs/components/taskclassificationmodel.mdx
new file mode 100644
index 0000000..137c9bc
--- /dev/null
+++ b/docs/components/taskclassificationmodel.mdx
@@ -0,0 +1,11 @@
+---
+title: "TaskClassificationModel"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | Model identifier (permaslug). | openai/gpt-4.1-mini |
+| `tag_token_share` | *float* | :heavy_check_mark: | Fraction of this classification's sampled token volume attributed to this model (0–1). Sums to ≤1 across the returned models (only top-N are included and unattributed requests are excluded). | 0.75 |
+| `tag_usage_share` | *float* | :heavy_check_mark: | Fraction of this classification's sampled requests attributed to this model (0–1). Sums to ≤1 across the returned models (only top-N are included and unattributed requests are excluded). | 0.55 |
\ No newline at end of file
diff --git a/docs/components/taskclassificationresponse.mdx b/docs/components/taskclassificationresponse.mdx
new file mode 100644
index 0000000..40e0bc7
--- /dev/null
+++ b/docs/components/taskclassificationresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "TaskClassificationResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `data` | [components.TaskClassificationResponseData](../components/taskclassificationresponsedata.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/taskclassificationresponsedata.mdx b/docs/components/taskclassificationresponsedata.mdx
new file mode 100644
index 0000000..a22f20a
--- /dev/null
+++ b/docs/components/taskclassificationresponsedata.mdx
@@ -0,0 +1,12 @@
+---
+title: "TaskClassificationResponseData"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `as_of` | *str* | :heavy_check_mark: | UTC date (YYYY-MM-DD) of the window upper bound (yesterday). Data is exclusive of the current incomplete UTC day. This is the expected latest date in the snapshot; it does not confirm data presence for that date. | 2026-06-17 |
+| `classifications` | List[[components.TaskClassificationItem](../components/taskclassificationitem.mdx)] | :heavy_check_mark: | Per-task classification market-share data, sorted by usage_share descending. | |
+| `macro_categories` | List[[components.TaskClassificationMacroCategory](../components/taskclassificationmacrocategory.mdx)] | :heavy_check_mark: | Aggregate market-share data per macro-category (code, data, agent, general). | |
+| `window_days` | *int* | :heavy_check_mark: | Number of trailing days covered by this snapshot. | 7 |
\ No newline at end of file
diff --git a/docs/components/textdeltaevent.mdx b/docs/components/textdeltaevent.mdx
new file mode 100644
index 0000000..8214536
--- /dev/null
+++ b/docs/components/textdeltaevent.mdx
@@ -0,0 +1,18 @@
+---
+title: "TextDeltaEvent"
+---
+
+Event emitted when a text delta is streamed
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `content_index` | *int* | :heavy_check_mark: | N/A |
+| `delta` | *str* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `logprobs` | List[[components.StreamLogprob](../components/streamlogprob.mdx)] | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.TextDeltaEventType](../components/textdeltaeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/textdeltaeventtype.mdx b/docs/components/textdeltaeventtype.mdx
new file mode 100644
index 0000000..13ece49
--- /dev/null
+++ b/docs/components/textdeltaeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "TextDeltaEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TextDeltaEventType
+value: TextDeltaEventType = "response.output_text.delta"
+```
+
+
+## Values
+
+- `"response.output_text.delta"`
diff --git a/docs/components/textdoneevent.mdx b/docs/components/textdoneevent.mdx
new file mode 100644
index 0000000..d2d1660
--- /dev/null
+++ b/docs/components/textdoneevent.mdx
@@ -0,0 +1,18 @@
+---
+title: "TextDoneEvent"
+---
+
+Event emitted when text streaming is complete
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `content_index` | *int* | :heavy_check_mark: | N/A |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `logprobs` | List[[components.StreamLogprob](../components/streamlogprob.mdx)] | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `text` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.TextDoneEventType](../components/textdoneeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/textdoneeventtype.mdx b/docs/components/textdoneeventtype.mdx
new file mode 100644
index 0000000..ce3ac0e
--- /dev/null
+++ b/docs/components/textdoneeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "TextDoneEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TextDoneEventType
+value: TextDoneEventType = "response.output_text.done"
+```
+
+
+## Values
+
+- `"response.output_text.done"`
diff --git a/docs/components/textextendedconfig.mdx b/docs/components/textextendedconfig.mdx
new file mode 100644
index 0000000..04c08c1
--- /dev/null
+++ b/docs/components/textextendedconfig.mdx
@@ -0,0 +1,13 @@
+---
+title: "TextExtendedConfig"
+---
+
+Text output configuration including format and verbosity
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `format_` | [Optional[components.Formats]](../components/formats.mdx) | :heavy_minus_sign: | Text response format configuration | \{
"type": "text"
} |
+| `verbosity` | [OptionalNullable[components.Verbosity]](../components/verbosity.mdx) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/components/thinking.mdx b/docs/components/thinking.mdx
new file mode 100644
index 0000000..2a631dc
--- /dev/null
+++ b/docs/components/thinking.mdx
@@ -0,0 +1,24 @@
+---
+title: "Thinking"
+---
+
+## Supported Types
+
+### `components.ThinkingEnabled`
+
+```python
+value: components.ThinkingEnabled = /* values here */
+```
+
+### `components.ThinkingDisabled`
+
+```python
+value: components.ThinkingDisabled = /* values here */
+```
+
+### `components.ThinkingAdaptive`
+
+```python
+value: components.ThinkingAdaptive = /* values here */
+```
+
diff --git a/docs/components/thinkingadaptive.mdx b/docs/components/thinkingadaptive.mdx
new file mode 100644
index 0000000..970ce43
--- /dev/null
+++ b/docs/components/thinkingadaptive.mdx
@@ -0,0 +1,10 @@
+---
+title: "ThinkingAdaptive"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `display` | [OptionalNullable[components.AnthropicThinkingDisplay]](../components/anthropicthinkingdisplay.mdx) | :heavy_minus_sign: | N/A | summarized |
+| `type` | [components.TypeAdaptive](../components/typeadaptive.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/thinkingdisabled.mdx b/docs/components/thinkingdisabled.mdx
new file mode 100644
index 0000000..ef2829f
--- /dev/null
+++ b/docs/components/thinkingdisabled.mdx
@@ -0,0 +1,9 @@
+---
+title: "ThinkingDisabled"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `type` | [components.TypeDisabled](../components/typedisabled.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/thinkingenabled.mdx b/docs/components/thinkingenabled.mdx
new file mode 100644
index 0000000..533ba7c
--- /dev/null
+++ b/docs/components/thinkingenabled.mdx
@@ -0,0 +1,11 @@
+---
+title: "ThinkingEnabled"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `budget_tokens` | *int* | :heavy_check_mark: | N/A | |
+| `display` | [OptionalNullable[components.AnthropicThinkingDisplay]](../components/anthropicthinkingdisplay.mdx) | :heavy_minus_sign: | N/A | summarized |
+| `type` | [components.TypeEnabled](../components/typeenabled.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/timings.mdx b/docs/components/timings.mdx
new file mode 100644
index 0000000..8d52bfa
--- /dev/null
+++ b/docs/components/timings.mdx
@@ -0,0 +1,11 @@
+---
+title: "Timings"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ |
+| `epoch_ms` | *int* | :heavy_check_mark: | N/A |
+| `event` | [components.Event](../components/event.mdx) | :heavy_check_mark: | N/A |
+| `start_ms` | *int* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/tokenizer.md b/docs/components/tokenizer.md
deleted file mode 100644
index 3811d6e..0000000
--- a/docs/components/tokenizer.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Tokenizer
-
-Tokenizer type used by the model
-
-
-## Values
-
-| Name | Value |
-| ----------- | ----------- |
-| `ROUTER` | Router |
-| `MEDIA` | Media |
-| `OTHER` | Other |
-| `GPT` | GPT |
-| `CLAUDE` | Claude |
-| `GEMINI` | Gemini |
-| `GEMMA` | Gemma |
-| `GROK` | Grok |
-| `COHERE` | Cohere |
-| `NOVA` | Nova |
-| `QWEN` | Qwen |
-| `YI` | Yi |
-| `DEEP_SEEK` | DeepSeek |
-| `MISTRAL` | Mistral |
-| `LLAMA2` | Llama2 |
-| `LLAMA3` | Llama3 |
-| `LLAMA4` | Llama4 |
-| `PA_LM` | PaLM |
-| `RWKV` | RWKV |
-| `QWEN3` | Qwen3 |
\ No newline at end of file
diff --git a/docs/components/tokenizer.mdx b/docs/components/tokenizer.mdx
new file mode 100644
index 0000000..54a7627
--- /dev/null
+++ b/docs/components/tokenizer.mdx
@@ -0,0 +1,40 @@
+---
+title: "Tokenizer"
+---
+
+Tokenizer type used by the model
+
+## Example Usage
+
+```python
+from openrouter.components import Tokenizer
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Tokenizer = "Router"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"Router"`
+- `"Media"`
+- `"Other"`
+- `"GPT"`
+- `"Claude"`
+- `"Gemini"`
+- `"Gemma"`
+- `"Grok"`
+- `"Cohere"`
+- `"Nova"`
+- `"Qwen"`
+- `"Yi"`
+- `"DeepSeek"`
+- `"Mistral"`
+- `"Llama2"`
+- `"Llama3"`
+- `"Llama4"`
+- `"PaLM"`
+- `"RWKV"`
+- `"Qwen3"`
diff --git a/docs/components/tooladvisor20260301.mdx b/docs/components/tooladvisor20260301.mdx
new file mode 100644
index 0000000..ee1f63b
--- /dev/null
+++ b/docs/components/tooladvisor20260301.mdx
@@ -0,0 +1,16 @@
+---
+title: "ToolAdvisor20260301"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_callers` | List[[components.AnthropicAllowedCallers](../components/anthropicallowedcallers.mdx)] | :heavy_minus_sign: | N/A | [
"direct"
] |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `caching` | [OptionalNullable[components.Caching]](../components/caching.mdx) | :heavy_minus_sign: | N/A | \{
"type": "ephemeral"
} |
+| `defer_loading` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `max_uses` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `model` | *str* | :heavy_check_mark: | N/A | |
+| `name` | [components.NameAdvisor](../components/nameadvisor.mdx) | :heavy_check_mark: | N/A | |
+| `type` | [components.TypeAdvisor20260301](../components/typeadvisor20260301.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/toolbash20250124.mdx b/docs/components/toolbash20250124.mdx
new file mode 100644
index 0000000..d9f17ef
--- /dev/null
+++ b/docs/components/toolbash20250124.mdx
@@ -0,0 +1,11 @@
+---
+title: "ToolBash20250124"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `name` | [components.NameBash](../components/namebash.mdx) | :heavy_check_mark: | N/A | |
+| `type` | [components.TypeBash20250124](../components/typebash20250124.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/toolcallstatus.mdx b/docs/components/toolcallstatus.mdx
new file mode 100644
index 0000000..71119be
--- /dev/null
+++ b/docs/components/toolcallstatus.mdx
@@ -0,0 +1,21 @@
+---
+title: "ToolCallStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ToolCallStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ToolCallStatus = "in_progress"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"in_progress"`
+- `"completed"`
+- `"incomplete"`
diff --git a/docs/components/toolchoice.mdx b/docs/components/toolchoice.mdx
new file mode 100644
index 0000000..4a4be40
--- /dev/null
+++ b/docs/components/toolchoice.mdx
@@ -0,0 +1,30 @@
+---
+title: "ToolChoice"
+---
+
+## Supported Types
+
+### `components.ToolChoiceAuto`
+
+```python
+value: components.ToolChoiceAuto = /* values here */
+```
+
+### `components.ToolChoiceAny`
+
+```python
+value: components.ToolChoiceAny = /* values here */
+```
+
+### `components.ToolChoiceNone`
+
+```python
+value: components.ToolChoiceNone = /* values here */
+```
+
+### `components.ToolChoiceTool`
+
+```python
+value: components.ToolChoiceTool = /* values here */
+```
+
diff --git a/docs/components/toolchoiceallowed.mdx b/docs/components/toolchoiceallowed.mdx
new file mode 100644
index 0000000..b33a149
--- /dev/null
+++ b/docs/components/toolchoiceallowed.mdx
@@ -0,0 +1,14 @@
+---
+title: "ToolChoiceAllowed"
+---
+
+Constrains the model to a pre-defined set of allowed tools
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `mode` | [components.Mode](../components/mode.mdx) | :heavy_check_mark: | N/A |
+| `tools` | List[Dict[str, *Nullable[Any]*]] | :heavy_check_mark: | N/A |
+| `type` | [components.ToolChoiceAllowedType](../components/toolchoiceallowedtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/toolchoiceallowedtype.mdx b/docs/components/toolchoiceallowedtype.mdx
new file mode 100644
index 0000000..898ee05
--- /dev/null
+++ b/docs/components/toolchoiceallowedtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "ToolChoiceAllowedType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ToolChoiceAllowedType
+value: ToolChoiceAllowedType = "allowed_tools"
+```
+
+
+## Values
+
+- `"allowed_tools"`
diff --git a/docs/components/toolchoiceany.mdx b/docs/components/toolchoiceany.mdx
new file mode 100644
index 0000000..444b701
--- /dev/null
+++ b/docs/components/toolchoiceany.mdx
@@ -0,0 +1,10 @@
+---
+title: "ToolChoiceAny"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `disable_parallel_tool_use` | *Optional[bool]* | :heavy_minus_sign: | N/A |
+| `type` | [components.TypeAny](../components/typeany.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/toolchoiceauto.mdx b/docs/components/toolchoiceauto.mdx
new file mode 100644
index 0000000..8759b2f
--- /dev/null
+++ b/docs/components/toolchoiceauto.mdx
@@ -0,0 +1,10 @@
+---
+title: "ToolChoiceAuto"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `disable_parallel_tool_use` | *Optional[bool]* | :heavy_minus_sign: | N/A |
+| `type` | [components.ToolChoiceTypeAuto](../components/toolchoicetypeauto.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/toolchoicenone.mdx b/docs/components/toolchoicenone.mdx
new file mode 100644
index 0000000..a042d89
--- /dev/null
+++ b/docs/components/toolchoicenone.mdx
@@ -0,0 +1,9 @@
+---
+title: "ToolChoiceNone"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `type` | [components.TypeNone](../components/typenone.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/toolchoicetool.mdx b/docs/components/toolchoicetool.mdx
new file mode 100644
index 0000000..08139fd
--- /dev/null
+++ b/docs/components/toolchoicetool.mdx
@@ -0,0 +1,11 @@
+---
+title: "ToolChoiceTool"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `disable_parallel_tool_use` | *Optional[bool]* | :heavy_minus_sign: | N/A |
+| `name` | *str* | :heavy_check_mark: | N/A |
+| `type` | [components.TypeTool](../components/typetool.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/toolchoicetypeauto.mdx b/docs/components/toolchoicetypeauto.mdx
new file mode 100644
index 0000000..6817216
--- /dev/null
+++ b/docs/components/toolchoicetypeauto.mdx
@@ -0,0 +1,15 @@
+---
+title: "ToolChoiceTypeAuto"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ToolChoiceTypeAuto
+value: ToolChoiceTypeAuto = "auto"
+```
+
+
+## Values
+
+- `"auto"`
diff --git a/docs/components/toolcustom.mdx b/docs/components/toolcustom.mdx
new file mode 100644
index 0000000..57073f6
--- /dev/null
+++ b/docs/components/toolcustom.mdx
@@ -0,0 +1,13 @@
+---
+title: "ToolCustom"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `description` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `input_schema` | [components.InputSchema](../components/inputschema.mdx) | :heavy_check_mark: | N/A | |
+| `name` | *str* | :heavy_check_mark: | N/A | |
+| `type` | [Optional[components.ToolTypeCustom]](../components/tooltypecustom.mdx) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/components/tooltexteditor20250124.mdx b/docs/components/tooltexteditor20250124.mdx
new file mode 100644
index 0000000..0fe06a9
--- /dev/null
+++ b/docs/components/tooltexteditor20250124.mdx
@@ -0,0 +1,11 @@
+---
+title: "ToolTextEditor20250124"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `name` | [components.NameStrReplaceEditor](../components/namestrreplaceeditor.mdx) | :heavy_check_mark: | N/A | |
+| `type` | [components.TypeTextEditor20250124](../components/typetexteditor20250124.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/tooltypecustom.mdx b/docs/components/tooltypecustom.mdx
new file mode 100644
index 0000000..f5ff9bf
--- /dev/null
+++ b/docs/components/tooltypecustom.mdx
@@ -0,0 +1,15 @@
+---
+title: "ToolTypeCustom"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ToolTypeCustom
+value: ToolTypeCustom = "custom"
+```
+
+
+## Values
+
+- `"custom"`
diff --git a/docs/components/tooltypeephemeral.mdx b/docs/components/tooltypeephemeral.mdx
new file mode 100644
index 0000000..48e6f8a
--- /dev/null
+++ b/docs/components/tooltypeephemeral.mdx
@@ -0,0 +1,15 @@
+---
+title: "ToolTypeEphemeral"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import ToolTypeEphemeral
+value: ToolTypeEphemeral = "ephemeral"
+```
+
+
+## Values
+
+- `"ephemeral"`
diff --git a/docs/components/toolwebsearch20250305.mdx b/docs/components/toolwebsearch20250305.mdx
new file mode 100644
index 0000000..3351013
--- /dev/null
+++ b/docs/components/toolwebsearch20250305.mdx
@@ -0,0 +1,15 @@
+---
+title: "ToolWebSearch20250305"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_domains` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `blocked_domains` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `max_uses` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
+| `name` | [components.NameWebSearch1](../components/namewebsearch1.mdx) | :heavy_check_mark: | N/A | |
+| `type` | [components.TypeWebSearch20250305](../components/typewebsearch20250305.mdx) | :heavy_check_mark: | N/A | |
+| `user_location` | [OptionalNullable[components.AnthropicWebSearchToolUserLocation]](../components/anthropicwebsearchtooluserlocation.mdx) | :heavy_minus_sign: | N/A | \{
"city": "San Francisco",
"country": "US",
"region": "California",
"timezone": "America/Los_Angeles",
"type": "approximate"
} |
\ No newline at end of file
diff --git a/docs/components/toolwebsearch20260209.mdx b/docs/components/toolwebsearch20260209.mdx
new file mode 100644
index 0000000..a70393e
--- /dev/null
+++ b/docs/components/toolwebsearch20260209.mdx
@@ -0,0 +1,16 @@
+---
+title: "ToolWebSearch20260209"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_callers` | List[[components.AnthropicAllowedCallers](../components/anthropicallowedcallers.mdx)] | :heavy_minus_sign: | N/A | [
"direct"
] |
+| `allowed_domains` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `blocked_domains` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `max_uses` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
+| `name` | [components.NameWebSearch2](../components/namewebsearch2.mdx) | :heavy_check_mark: | N/A | |
+| `type` | [components.TypeWebSearch20260209](../components/typewebsearch20260209.mdx) | :heavy_check_mark: | N/A | |
+| `user_location` | [OptionalNullable[components.AnthropicWebSearchToolUserLocation]](../components/anthropicwebsearchtooluserlocation.mdx) | :heavy_minus_sign: | N/A | \{
"city": "San Francisco",
"country": "US",
"region": "California",
"timezone": "America/Los_Angeles",
"type": "approximate"
} |
\ No newline at end of file
diff --git a/docs/components/toomanyrequestsresponseerrordata.md b/docs/components/toomanyrequestsresponseerrordata.mdx
similarity index 92%
rename from docs/components/toomanyrequestsresponseerrordata.md
rename to docs/components/toomanyrequestsresponseerrordata.mdx
index a957677..09697e3 100644
--- a/docs/components/toomanyrequestsresponseerrordata.md
+++ b/docs/components/toomanyrequestsresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# TooManyRequestsResponseErrorData
+---
+title: "TooManyRequestsResponseErrorData"
+---
Error data for TooManyRequestsResponse
diff --git a/docs/components/topproviderinfo.md b/docs/components/topproviderinfo.mdx
similarity index 97%
rename from docs/components/topproviderinfo.md
rename to docs/components/topproviderinfo.mdx
index e66d615..7632366 100644
--- a/docs/components/topproviderinfo.md
+++ b/docs/components/topproviderinfo.mdx
@@ -1,4 +1,6 @@
-# TopProviderInfo
+---
+title: "TopProviderInfo"
+---
Information about the top provider for this model
diff --git a/docs/components/tournamentstats.mdx b/docs/components/tournamentstats.mdx
new file mode 100644
index 0000000..bf6cd57
--- /dev/null
+++ b/docs/components/tournamentstats.mdx
@@ -0,0 +1,16 @@
+---
+title: "TournamentStats"
+---
+
+Placement distribution from tournament matches.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `first_place` | *Nullable[int]* | :heavy_check_mark: | N/A |
+| `fourth_place` | *Nullable[int]* | :heavy_check_mark: | N/A |
+| `second_place` | *Nullable[int]* | :heavy_check_mark: | N/A |
+| `third_place` | *Nullable[int]* | :heavy_check_mark: | N/A |
+| `total` | *Nullable[int]* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/traceconfig.mdx b/docs/components/traceconfig.mdx
new file mode 100644
index 0000000..faeac4d
--- /dev/null
+++ b/docs/components/traceconfig.mdx
@@ -0,0 +1,17 @@
+---
+title: "TraceConfig"
+---
+
+Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `generation_name` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `parent_span_id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `span_name` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `trace_id` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `trace_name` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `__pydantic_extra__` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
\ No newline at end of file
diff --git a/docs/components/trigger.mdx b/docs/components/trigger.mdx
new file mode 100644
index 0000000..2c9910c
--- /dev/null
+++ b/docs/components/trigger.mdx
@@ -0,0 +1,18 @@
+---
+title: "Trigger"
+---
+
+## Supported Types
+
+### `components.AnthropicInputTokensTrigger`
+
+```python
+value: components.AnthropicInputTokensTrigger = /* values here */
+```
+
+### `components.AnthropicToolUsesTrigger`
+
+```python
+value: components.AnthropicToolUsesTrigger = /* values here */
+```
+
diff --git a/docs/components/triggerinputtokens.mdx b/docs/components/triggerinputtokens.mdx
new file mode 100644
index 0000000..45784f0
--- /dev/null
+++ b/docs/components/triggerinputtokens.mdx
@@ -0,0 +1,10 @@
+---
+title: "TriggerInputTokens"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `type` | [components.EditTypeInputTokens](../components/edittypeinputtokens.mdx) | :heavy_check_mark: | N/A |
+| `value` | *int* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/truncation.mdx b/docs/components/truncation.mdx
new file mode 100644
index 0000000..6b46b4c
--- /dev/null
+++ b/docs/components/truncation.mdx
@@ -0,0 +1,20 @@
+---
+title: "Truncation"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Truncation
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Truncation = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"disabled"`
diff --git a/docs/components/type.md b/docs/components/type.mdx
similarity index 94%
rename from docs/components/type.md
rename to docs/components/type.mdx
index 6eaadff..496e8a8 100644
--- a/docs/components/type.md
+++ b/docs/components/type.mdx
@@ -1,5 +1,6 @@
-# Type
-
+---
+title: "Type"
+---
## Supported Types
diff --git a/docs/components/typeadaptive.mdx b/docs/components/typeadaptive.mdx
new file mode 100644
index 0000000..01eae6d
--- /dev/null
+++ b/docs/components/typeadaptive.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeAdaptive"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeAdaptive
+value: TypeAdaptive = "adaptive"
+```
+
+
+## Values
+
+- `"adaptive"`
diff --git a/docs/components/typeadvisor20260301.mdx b/docs/components/typeadvisor20260301.mdx
new file mode 100644
index 0000000..9222037
--- /dev/null
+++ b/docs/components/typeadvisor20260301.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeAdvisor20260301"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeAdvisor20260301
+value: TypeAdvisor20260301 = "advisor_20260301"
+```
+
+
+## Values
+
+- `"advisor_20260301"`
diff --git a/docs/components/typeany.mdx b/docs/components/typeany.mdx
new file mode 100644
index 0000000..658b179
--- /dev/null
+++ b/docs/components/typeany.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeAny"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeAny
+value: TypeAny = "any"
+```
+
+
+## Values
+
+- `"any"`
diff --git a/docs/components/typebash20250124.mdx b/docs/components/typebash20250124.mdx
new file mode 100644
index 0000000..02338a0
--- /dev/null
+++ b/docs/components/typebash20250124.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeBash20250124"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeBash20250124
+value: TypeBash20250124 = "bash_20250124"
+```
+
+
+## Values
+
+- `"bash_20250124"`
diff --git a/docs/components/typeclearthinking20251015.mdx b/docs/components/typeclearthinking20251015.mdx
new file mode 100644
index 0000000..1af8cc4
--- /dev/null
+++ b/docs/components/typeclearthinking20251015.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeClearThinking20251015"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeClearThinking20251015
+value: TypeClearThinking20251015 = "clear_thinking_20251015"
+```
+
+
+## Values
+
+- `"clear_thinking_20251015"`
diff --git a/docs/components/typecleartooluses20250919.mdx b/docs/components/typecleartooluses20250919.mdx
new file mode 100644
index 0000000..5be064a
--- /dev/null
+++ b/docs/components/typecleartooluses20250919.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeClearToolUses20250919"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeClearToolUses20250919
+value: TypeClearToolUses20250919 = "clear_tool_uses_20250919"
+```
+
+
+## Values
+
+- `"clear_tool_uses_20250919"`
diff --git a/docs/components/typecodeinterpreter.mdx b/docs/components/typecodeinterpreter.mdx
new file mode 100644
index 0000000..6af79ca
--- /dev/null
+++ b/docs/components/typecodeinterpreter.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeCodeInterpreter"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeCodeInterpreter
+value: TypeCodeInterpreter = "code_interpreter"
+```
+
+
+## Values
+
+- `"code_interpreter"`
diff --git a/docs/components/typecodeinterpretercall.mdx b/docs/components/typecodeinterpretercall.mdx
new file mode 100644
index 0000000..374132b
--- /dev/null
+++ b/docs/components/typecodeinterpretercall.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeCodeInterpreterCall"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeCodeInterpreterCall
+value: TypeCodeInterpreterCall = "code_interpreter_call"
+```
+
+
+## Values
+
+- `"code_interpreter_call"`
diff --git a/docs/components/typecompact20260112.mdx b/docs/components/typecompact20260112.mdx
new file mode 100644
index 0000000..8c90b7c
--- /dev/null
+++ b/docs/components/typecompact20260112.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeCompact20260112"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeCompact20260112
+value: TypeCompact20260112 = "compact_20260112"
+```
+
+
+## Values
+
+- `"compact_20260112"`
diff --git a/docs/components/typedisabled.mdx b/docs/components/typedisabled.mdx
new file mode 100644
index 0000000..65c2b6d
--- /dev/null
+++ b/docs/components/typedisabled.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeDisabled"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeDisabled
+value: TypeDisabled = "disabled"
+```
+
+
+## Values
+
+- `"disabled"`
diff --git a/docs/components/typedocument.mdx b/docs/components/typedocument.mdx
new file mode 100644
index 0000000..328ae7f
--- /dev/null
+++ b/docs/components/typedocument.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeDocument"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeDocument
+value: TypeDocument = "document"
+```
+
+
+## Values
+
+- `"document"`
diff --git a/docs/components/typeenabled.mdx b/docs/components/typeenabled.mdx
new file mode 100644
index 0000000..52ed7b1
--- /dev/null
+++ b/docs/components/typeenabled.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeEnabled"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeEnabled
+value: TypeEnabled = "enabled"
+```
+
+
+## Values
+
+- `"enabled"`
diff --git a/docs/components/typeexec.mdx b/docs/components/typeexec.mdx
new file mode 100644
index 0000000..f35d608
--- /dev/null
+++ b/docs/components/typeexec.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeExec"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeExec
+value: TypeExec = "exec"
+```
+
+
+## Values
+
+- `"exec"`
diff --git a/docs/components/typeexit.mdx b/docs/components/typeexit.mdx
new file mode 100644
index 0000000..a1b9dbb
--- /dev/null
+++ b/docs/components/typeexit.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeExit"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeExit
+value: TypeExit = "exit"
+```
+
+
+## Values
+
+- `"exit"`
diff --git a/docs/components/typefilesearch.mdx b/docs/components/typefilesearch.mdx
new file mode 100644
index 0000000..a3f18c8
--- /dev/null
+++ b/docs/components/typefilesearch.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeFileSearch"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeFileSearch
+value: TypeFileSearch = "file_search"
+```
+
+
+## Values
+
+- `"file_search"`
diff --git a/docs/components/typefindinpage.mdx b/docs/components/typefindinpage.mdx
new file mode 100644
index 0000000..e56d1f3
--- /dev/null
+++ b/docs/components/typefindinpage.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeFindInPage"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeFindInPage
+value: TypeFindInPage = "find_in_page"
+```
+
+
+## Values
+
+- `"find_in_page"`
diff --git a/docs/components/typelocalshellcall.mdx b/docs/components/typelocalshellcall.mdx
new file mode 100644
index 0000000..0af8acd
--- /dev/null
+++ b/docs/components/typelocalshellcall.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeLocalShellCall"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeLocalShellCall
+value: TypeLocalShellCall = "local_shell_call"
+```
+
+
+## Values
+
+- `"local_shell_call"`
diff --git a/docs/components/typelogs.mdx b/docs/components/typelogs.mdx
new file mode 100644
index 0000000..accf2ed
--- /dev/null
+++ b/docs/components/typelogs.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeLogs"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeLogs
+value: TypeLogs = "logs"
+```
+
+
+## Values
+
+- `"logs"`
diff --git a/docs/components/typenone.mdx b/docs/components/typenone.mdx
new file mode 100644
index 0000000..797eb17
--- /dev/null
+++ b/docs/components/typenone.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeNone"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeNone
+value: TypeNone = "none"
+```
+
+
+## Values
+
+- `"none"`
diff --git a/docs/components/typeopenpage.mdx b/docs/components/typeopenpage.mdx
new file mode 100644
index 0000000..e7e1d47
--- /dev/null
+++ b/docs/components/typeopenpage.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeOpenPage"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeOpenPage
+value: TypeOpenPage = "open_page"
+```
+
+
+## Values
+
+- `"open_page"`
diff --git a/docs/components/typeredactedthinking.mdx b/docs/components/typeredactedthinking.mdx
new file mode 100644
index 0000000..c02fa81
--- /dev/null
+++ b/docs/components/typeredactedthinking.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeRedactedThinking"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeRedactedThinking
+value: TypeRedactedThinking = "redacted_thinking"
+```
+
+
+## Values
+
+- `"redacted_thinking"`
diff --git a/docs/components/typeservertooluse.mdx b/docs/components/typeservertooluse.mdx
new file mode 100644
index 0000000..9c498fc
--- /dev/null
+++ b/docs/components/typeservertooluse.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeServerToolUse"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeServerToolUse
+value: TypeServerToolUse = "server_tool_use"
+```
+
+
+## Values
+
+- `"server_tool_use"`
diff --git a/docs/components/typetexteditor20250124.mdx b/docs/components/typetexteditor20250124.mdx
new file mode 100644
index 0000000..21cc14a
--- /dev/null
+++ b/docs/components/typetexteditor20250124.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeTextEditor20250124"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeTextEditor20250124
+value: TypeTextEditor20250124 = "text_editor_20250124"
+```
+
+
+## Values
+
+- `"text_editor_20250124"`
diff --git a/docs/components/typethinking.mdx b/docs/components/typethinking.mdx
new file mode 100644
index 0000000..d2a6903
--- /dev/null
+++ b/docs/components/typethinking.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeThinking"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeThinking
+value: TypeThinking = "thinking"
+```
+
+
+## Values
+
+- `"thinking"`
diff --git a/docs/components/typetimeout.mdx b/docs/components/typetimeout.mdx
new file mode 100644
index 0000000..8a9237d
--- /dev/null
+++ b/docs/components/typetimeout.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeTimeout"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeTimeout
+value: TypeTimeout = "timeout"
+```
+
+
+## Values
+
+- `"timeout"`
diff --git a/docs/components/typetokens.mdx b/docs/components/typetokens.mdx
new file mode 100644
index 0000000..b98ea9d
--- /dev/null
+++ b/docs/components/typetokens.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeTokens"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeTokens
+value: TypeTokens = "tokens"
+```
+
+
+## Values
+
+- `"tokens"`
diff --git a/docs/components/typetool.mdx b/docs/components/typetool.mdx
new file mode 100644
index 0000000..4cef3b7
--- /dev/null
+++ b/docs/components/typetool.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeTool"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeTool
+value: TypeTool = "tool"
+```
+
+
+## Values
+
+- `"tool"`
diff --git a/docs/components/typetoolreference.mdx b/docs/components/typetoolreference.mdx
new file mode 100644
index 0000000..ac0f247
--- /dev/null
+++ b/docs/components/typetoolreference.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeToolReference"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeToolReference
+value: TypeToolReference = "tool_reference"
+```
+
+
+## Values
+
+- `"tool_reference"`
diff --git a/docs/components/typetoolresult.mdx b/docs/components/typetoolresult.mdx
new file mode 100644
index 0000000..e7702ba
--- /dev/null
+++ b/docs/components/typetoolresult.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeToolResult"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeToolResult
+value: TypeToolResult = "tool_result"
+```
+
+
+## Values
+
+- `"tool_result"`
diff --git a/docs/components/typetooluse.mdx b/docs/components/typetooluse.mdx
new file mode 100644
index 0000000..6e4df39
--- /dev/null
+++ b/docs/components/typetooluse.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeToolUse"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeToolUse
+value: TypeToolUse = "tool_use"
+```
+
+
+## Values
+
+- `"tool_use"`
diff --git a/docs/components/typewebsearch20250305.mdx b/docs/components/typewebsearch20250305.mdx
new file mode 100644
index 0000000..0eb55d9
--- /dev/null
+++ b/docs/components/typewebsearch20250305.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeWebSearch20250305"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeWebSearch20250305
+value: TypeWebSearch20250305 = "web_search_20250305"
+```
+
+
+## Values
+
+- `"web_search_20250305"`
diff --git a/docs/components/typewebsearch20260209.mdx b/docs/components/typewebsearch20260209.mdx
new file mode 100644
index 0000000..f9c864e
--- /dev/null
+++ b/docs/components/typewebsearch20260209.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeWebSearch20260209"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeWebSearch20260209
+value: TypeWebSearch20260209 = "web_search_20260209"
+```
+
+
+## Values
+
+- `"web_search_20260209"`
diff --git a/docs/components/typewebsearchcall.mdx b/docs/components/typewebsearchcall.mdx
new file mode 100644
index 0000000..981349b
--- /dev/null
+++ b/docs/components/typewebsearchcall.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeWebSearchCall"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeWebSearchCall
+value: TypeWebSearchCall = "web_search_call"
+```
+
+
+## Values
+
+- `"web_search_call"`
diff --git a/docs/components/typewebsearchtoolresult.mdx b/docs/components/typewebsearchtoolresult.mdx
new file mode 100644
index 0000000..1d9df7e
--- /dev/null
+++ b/docs/components/typewebsearchtoolresult.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeWebSearchToolResult"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeWebSearchToolResult
+value: TypeWebSearchToolResult = "web_search_tool_result"
+```
+
+
+## Values
+
+- `"web_search_tool_result"`
diff --git a/docs/components/typewebsearchtoolresulterror.mdx b/docs/components/typewebsearchtoolresulterror.mdx
new file mode 100644
index 0000000..ff44734
--- /dev/null
+++ b/docs/components/typewebsearchtoolresulterror.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeWebSearchToolResultError"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import TypeWebSearchToolResultError
+value: TypeWebSearchToolResultError = "web_search_tool_result_error"
+```
+
+
+## Values
+
+- `"web_search_tool_result_error"`
diff --git a/docs/components/unauthorizedresponseerrordata.md b/docs/components/unauthorizedresponseerrordata.mdx
similarity index 93%
rename from docs/components/unauthorizedresponseerrordata.md
rename to docs/components/unauthorizedresponseerrordata.mdx
index 1db2a3a..2b412cd 100644
--- a/docs/components/unauthorizedresponseerrordata.md
+++ b/docs/components/unauthorizedresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# UnauthorizedResponseErrorData
+---
+title: "UnauthorizedResponseErrorData"
+---
Error data for UnauthorizedResponse
diff --git a/docs/components/unifiedbenchmarkpricing.mdx b/docs/components/unifiedbenchmarkpricing.mdx
new file mode 100644
index 0000000..322906a
--- /dev/null
+++ b/docs/components/unifiedbenchmarkpricing.mdx
@@ -0,0 +1,13 @@
+---
+title: "UnifiedBenchmarkPricing"
+---
+
+OpenRouter pricing per token for this model. Null if pricing is unavailable.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- |
+| `completion` | *str* | :heavy_check_mark: | Cost per output token (USD, decimal string). | 0.000015 |
+| `prompt` | *str* | :heavy_check_mark: | Cost per input token (USD, decimal string). | 0.000003 |
\ No newline at end of file
diff --git a/docs/components/unifiedbenchmarksaaitem.mdx b/docs/components/unifiedbenchmarksaaitem.mdx
new file mode 100644
index 0000000..0a22591
--- /dev/null
+++ b/docs/components/unifiedbenchmarksaaitem.mdx
@@ -0,0 +1,15 @@
+---
+title: "UnifiedBenchmarksAAItem"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `agentic_index` | *Nullable[float]* | :heavy_check_mark: | Artificial Analysis Agentic Index composite score. Higher is better. | 58.3 |
+| `coding_index` | *Nullable[float]* | :heavy_check_mark: | Artificial Analysis Coding Index composite score. Higher is better. | 65.8 |
+| `display_name` | *str* | :heavy_check_mark: | Model name as listed on Artificial Analysis. | GPT-4o |
+| `intelligence_index` | *Nullable[float]* | :heavy_check_mark: | Artificial Analysis Intelligence Index composite score. Higher is better. | 71.2 |
+| `model_permaslug` | *str* | :heavy_check_mark: | Stable OpenRouter model identifier. | openai/gpt-4o |
+| `pricing` | [Nullable[components.UnifiedBenchmarkPricing]](../components/unifiedbenchmarkpricing.mdx) | :heavy_check_mark: | OpenRouter pricing per token for this model. Null if pricing is unavailable. | \{
"completion": "0.000015",
"prompt": "0.000003"
} |
+| `source` | [components.UnifiedBenchmarksAAItemSource](../components/unifiedbenchmarksaaitemsource.mdx) | :heavy_check_mark: | Benchmark source discriminator. | |
\ No newline at end of file
diff --git a/docs/components/unifiedbenchmarksaaitemsource.mdx b/docs/components/unifiedbenchmarksaaitemsource.mdx
new file mode 100644
index 0000000..cf9d11c
--- /dev/null
+++ b/docs/components/unifiedbenchmarksaaitemsource.mdx
@@ -0,0 +1,17 @@
+---
+title: "UnifiedBenchmarksAAItemSource"
+---
+
+Benchmark source discriminator.
+
+## Example Usage
+
+```python
+from openrouter.components import UnifiedBenchmarksAAItemSource
+value: UnifiedBenchmarksAAItemSource = "artificial-analysis"
+```
+
+
+## Values
+
+- `"artificial-analysis"`
diff --git a/docs/components/unifiedbenchmarksdaitem.mdx b/docs/components/unifiedbenchmarksdaitem.mdx
new file mode 100644
index 0000000..95f6613
--- /dev/null
+++ b/docs/components/unifiedbenchmarksdaitem.mdx
@@ -0,0 +1,18 @@
+---
+title: "UnifiedBenchmarksDAItem"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
+| `arena` | *str* | :heavy_check_mark: | Arena this ranking belongs to. | models |
+| `avg_generation_time_ms` | *Nullable[float]* | :heavy_check_mark: | Average generation time in milliseconds. | 3200 |
+| `category` | *str* | :heavy_check_mark: | Category within the arena. | codecategories |
+| `display_name` | *str* | :heavy_check_mark: | Human-readable model name from Design Arena. | Claude Sonnet 4 |
+| `elo` | *float* | :heavy_check_mark: | ELO rating from head-to-head arena battles. | 1423 |
+| `model_permaslug` | *str* | :heavy_check_mark: | Stable OpenRouter model identifier when mapped; otherwise the upstream Design Arena model id. | anthropic/claude-sonnet-4 |
+| `pricing` | [Nullable[components.UnifiedBenchmarkPricing]](../components/unifiedbenchmarkpricing.mdx) | :heavy_check_mark: | OpenRouter pricing per token for this model. Null if pricing is unavailable. | \{
"completion": "0.000015",
"prompt": "0.000003"
} |
+| `source` | [components.UnifiedBenchmarksDAItemSource](../components/unifiedbenchmarksdaitemsource.mdx) | :heavy_check_mark: | Benchmark source discriminator. | |
+| `tournament_stats` | [components.TournamentStats](../components/tournamentstats.mdx) | :heavy_check_mark: | Placement distribution from tournament matches. | |
+| `win_rate` | *float* | :heavy_check_mark: | Win rate as a percentage (0–100). | 72 |
\ No newline at end of file
diff --git a/docs/components/unifiedbenchmarksdaitemsource.mdx b/docs/components/unifiedbenchmarksdaitemsource.mdx
new file mode 100644
index 0000000..a194185
--- /dev/null
+++ b/docs/components/unifiedbenchmarksdaitemsource.mdx
@@ -0,0 +1,17 @@
+---
+title: "UnifiedBenchmarksDAItemSource"
+---
+
+Benchmark source discriminator.
+
+## Example Usage
+
+```python
+from openrouter.components import UnifiedBenchmarksDAItemSource
+value: UnifiedBenchmarksDAItemSource = "design-arena"
+```
+
+
+## Values
+
+- `"design-arena"`
diff --git a/docs/components/unifiedbenchmarksmeta.mdx b/docs/components/unifiedbenchmarksmeta.mdx
new file mode 100644
index 0000000..ea52df6
--- /dev/null
+++ b/docs/components/unifiedbenchmarksmeta.mdx
@@ -0,0 +1,15 @@
+---
+title: "UnifiedBenchmarksMeta"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `as_of` | *str* | :heavy_check_mark: | ISO-8601 timestamp of when this data was last updated. | 2026-06-03T12:00:00Z |
+| `citation` | *Nullable[str]* | :heavy_check_mark: | Required attribution when republishing this data, or null when results span multiple sources (attribute each item individually by its `source` discriminator). | Source: Artificial Analysis (artificialanalysis.ai) via OpenRouter (openrouter.ai/rankings). |
+| `model_count` | *int* | :heavy_check_mark: | Number of unique models in the response. | |
+| `source` | [Nullable[components.UnifiedBenchmarksMetaSource]](../components/unifiedbenchmarksmetasource.mdx) | :heavy_check_mark: | The source filter applied, or null when all sources are returned. | artificial-analysis |
+| `source_url` | *Nullable[str]* | :heavy_check_mark: | URL of the upstream data source, or null when results span multiple sources. | https://artificialanalysis.ai |
+| `task_type` | *Nullable[str]* | :heavy_check_mark: | The task_type filter applied, or null if showing all. | |
+| `version` | [components.UnifiedBenchmarksMetaVersion](../components/unifiedbenchmarksmetaversion.mdx) | :heavy_check_mark: | Dataset version. | |
\ No newline at end of file
diff --git a/docs/components/unifiedbenchmarksmetasource.mdx b/docs/components/unifiedbenchmarksmetasource.mdx
new file mode 100644
index 0000000..1bcb8e0
--- /dev/null
+++ b/docs/components/unifiedbenchmarksmetasource.mdx
@@ -0,0 +1,22 @@
+---
+title: "UnifiedBenchmarksMetaSource"
+---
+
+The source filter applied, or null when all sources are returned.
+
+## Example Usage
+
+```python
+from openrouter.components import UnifiedBenchmarksMetaSource
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: UnifiedBenchmarksMetaSource = "artificial-analysis"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"artificial-analysis"`
+- `"design-arena"`
diff --git a/docs/components/unifiedbenchmarksmetaversion.mdx b/docs/components/unifiedbenchmarksmetaversion.mdx
new file mode 100644
index 0000000..23ef4c9
--- /dev/null
+++ b/docs/components/unifiedbenchmarksmetaversion.mdx
@@ -0,0 +1,17 @@
+---
+title: "UnifiedBenchmarksMetaVersion"
+---
+
+Dataset version.
+
+## Example Usage
+
+```python
+from openrouter.components import UnifiedBenchmarksMetaVersion
+value: UnifiedBenchmarksMetaVersion = "v1"
+```
+
+
+## Values
+
+- `"v1"`
diff --git a/docs/components/unifiedbenchmarksresponse.mdx b/docs/components/unifiedbenchmarksresponse.mdx
new file mode 100644
index 0000000..ee48e64
--- /dev/null
+++ b/docs/components/unifiedbenchmarksresponse.mdx
@@ -0,0 +1,10 @@
+---
+title: "UnifiedBenchmarksResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | List[[components.UnifiedBenchmarksResponseData](../components/unifiedbenchmarksresponsedata.mdx)] | :heavy_check_mark: | N/A | |
+| `meta` | [components.UnifiedBenchmarksMeta](../components/unifiedbenchmarksmeta.mdx) | :heavy_check_mark: | N/A | \{
"as_of": "2026-06-03T12:00:00Z",
"citation": "Source: Artificial Analysis (artificialanalysis.ai) via OpenRouter (openrouter.ai/rankings).",
"model_count": 50,
"source": "artificial-analysis",
"source_url": "https://artificialanalysis.ai",
"task_type": null,
"version": "v1"
} |
\ No newline at end of file
diff --git a/docs/components/unifiedbenchmarksresponsedata.mdx b/docs/components/unifiedbenchmarksresponsedata.mdx
new file mode 100644
index 0000000..eb8045d
--- /dev/null
+++ b/docs/components/unifiedbenchmarksresponsedata.mdx
@@ -0,0 +1,18 @@
+---
+title: "UnifiedBenchmarksResponseData"
+---
+
+## Supported Types
+
+### `components.UnifiedBenchmarksAAItem`
+
+```python
+value: components.UnifiedBenchmarksAAItem = /* values here */
+```
+
+### `components.UnifiedBenchmarksDAItem`
+
+```python
+value: components.UnifiedBenchmarksDAItem = /* values here */
+```
+
diff --git a/docs/components/uniqueinsight.mdx b/docs/components/uniqueinsight.mdx
new file mode 100644
index 0000000..2dd2e0e
--- /dev/null
+++ b/docs/components/uniqueinsight.mdx
@@ -0,0 +1,10 @@
+---
+title: "UniqueInsight"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `insight` | *str* | :heavy_check_mark: | N/A |
+| `model` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/unit.mdx b/docs/components/unit.mdx
new file mode 100644
index 0000000..83f68ad
--- /dev/null
+++ b/docs/components/unit.mdx
@@ -0,0 +1,21 @@
+---
+title: "Unit"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Unit
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Unit = "image"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"image"`
+- `"megapixel"`
+- `"token"`
diff --git a/docs/components/unprocessableentityresponseerrordata.md b/docs/components/unprocessableentityresponseerrordata.mdx
similarity index 92%
rename from docs/components/unprocessableentityresponseerrordata.md
rename to docs/components/unprocessableentityresponseerrordata.mdx
index 9ccd3c0..ef85de0 100644
--- a/docs/components/unprocessableentityresponseerrordata.md
+++ b/docs/components/unprocessableentityresponseerrordata.mdx
@@ -1,4 +1,6 @@
-# UnprocessableEntityResponseErrorData
+---
+title: "UnprocessableEntityResponseErrorData"
+---
Error data for UnprocessableEntityResponse
diff --git a/docs/components/updatebyokkeyrequest.mdx b/docs/components/updatebyokkeyrequest.mdx
new file mode 100644
index 0000000..fcdb0bb
--- /dev/null
+++ b/docs/components/updatebyokkeyrequest.mdx
@@ -0,0 +1,14 @@
+---
+title: "UpdateBYOKKeyRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_models` | List[*str*] | :heavy_minus_sign: | Optional allowlist of model slugs this credential may be used for. `null` means no restriction. | null |
+| `allowed_user_ids` | List[*str*] | :heavy_minus_sign: | Optional allowlist of user IDs that may use this credential. `null` means no restriction. | null |
+| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Whether this credential is disabled. | false |
+| `is_fallback` | *Optional[bool]* | :heavy_minus_sign: | Whether this credential is treated as a fallback — used only after non-fallback keys for the same provider have been tried. | false |
+| `key` | *Optional[str]* | :heavy_minus_sign: | A new raw provider API key to rotate the credential in-place. The previous key material is overwritten and the masked label is regenerated. Encrypted at rest and never returned in API responses. | sk-proj-newkey456... |
+| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | Optional human-readable name for the credential. | Updated OpenAI Key |
\ No newline at end of file
diff --git a/docs/components/updatebyokkeyresponse.mdx b/docs/components/updatebyokkeyresponse.mdx
new file mode 100644
index 0000000..335feb1
--- /dev/null
+++ b/docs/components/updatebyokkeyresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "UpdateBYOKKeyResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `data` | [components.BYOKKey](../components/byokkey.mdx) | :heavy_check_mark: | N/A | \{
"allowed_api_key_hashes": null,
"allowed_models": null,
"allowed_user_ids": null,
"created_at": "2025-08-24T10:30:00Z",
"disabled": false,
"id": "11111111-2222-3333-4444-555555555555",
"is_fallback": false,
"label": "sk-...AbCd",
"name": "Production OpenAI Key",
"provider": "openai",
"sort_order": 0,
"workspace_id": "550e8400-e29b-41d4-a716-446655440000"
} |
\ No newline at end of file
diff --git a/docs/components/updateguardrailrequest.mdx b/docs/components/updateguardrailrequest.mdx
new file mode 100644
index 0000000..6127914
--- /dev/null
+++ b/docs/components/updateguardrailrequest.mdx
@@ -0,0 +1,23 @@
+---
+title: "UpdateGuardrailRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_models` | List[*str*] | :heavy_minus_sign: | Array of model identifiers (slug or canonical_slug accepted) | [
"openai/gpt-5.2"
] |
+| `allowed_providers` | List[*str*] | :heavy_minus_sign: | New list of allowed provider IDs | [
"openai",
"anthropic",
"deepseek"
] |
+| `content_filter_builtins` | List[[components.ContentFilterBuiltinEntryInput](../components/contentfilterbuiltinentryinput.mdx)] | :heavy_minus_sign: | Builtin content filters to apply. Set to null to remove. The "flag" action is only supported for "regex-prompt-injection"; PII slugs (email, phone, ssn, credit-card, ip-address, person-name, address) accept "block" or "redact" only. | [
\{
"action": "block",
"slug": "regex-prompt-injection"
}
] |
+| `content_filters` | List[[components.ContentFilterEntry](../components/contentfilterentry.mdx)] | :heavy_minus_sign: | Custom regex content filters to apply. Set to null to remove. | null |
+| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | New description for the guardrail | Updated description |
+| ~~`enforce_zdr`~~ | *OptionalNullable[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Deprecated. Use enforce_zdr_anthropic, enforce_zdr_openai, enforce_zdr_google, and enforce_zdr_other instead. When provided, its value is copied into any of those per-provider fields that are not explicitly specified on the request. | true |
+| `enforce_zdr_anthropic` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for Anthropic models. Falls back to enforce_zdr when not provided. | true |
+| `enforce_zdr_google` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for Google models. Falls back to enforce_zdr when not provided. | true |
+| `enforce_zdr_openai` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for OpenAI models. Falls back to enforce_zdr when not provided. | true |
+| `enforce_zdr_other` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for models that are not from Anthropic, OpenAI, or Google. Falls back to enforce_zdr when not provided. | true |
+| `ignored_models` | List[*str*] | :heavy_minus_sign: | Array of model identifiers to exclude from routing (slug or canonical_slug accepted) | [
"openai/gpt-4o-mini"
] |
+| `ignored_providers` | List[*str*] | :heavy_minus_sign: | List of provider IDs to exclude from routing | [
"azure"
] |
+| `limit_usd` | *OptionalNullable[float]* | :heavy_minus_sign: | New spending limit in USD | 75 |
+| `name` | *Optional[str]* | :heavy_minus_sign: | New name for the guardrail | Updated Guardrail Name |
+| `reset_interval` | [OptionalNullable[components.GuardrailInterval]](../components/guardrailinterval.mdx) | :heavy_minus_sign: | Interval at which the limit resets (daily, weekly, monthly) | monthly |
\ No newline at end of file
diff --git a/docs/components/updateguardrailresponse.mdx b/docs/components/updateguardrailresponse.mdx
new file mode 100644
index 0000000..9c95861
--- /dev/null
+++ b/docs/components/updateguardrailresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "UpdateGuardrailResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.Guardrail](../components/guardrail.mdx) | :heavy_check_mark: | N/A | \{
"allowed_models": null,
"allowed_providers": [
"openai",
"anthropic",
"google"
],
"content_filter_builtins": [
\{
"action": "redact",
"label": "[EMAIL]",
"slug": "email"
}
],
"content_filters": null,
"created_at": "2025-08-24T10:30:00Z",
"description": "Guardrail for production environment",
"enforce_zdr": null,
"enforce_zdr_anthropic": true,
"enforce_zdr_google": false,
"enforce_zdr_openai": true,
"enforce_zdr_other": false,
"id": "550e8400-e29b-41d4-a716-446655440000",
"ignored_models": null,
"ignored_providers": null,
"limit_usd": 100,
"name": "Production Guardrail",
"reset_interval": "monthly",
"updated_at": "2025-08-24T15:45:00Z",
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
\ No newline at end of file
diff --git a/docs/components/updateobservabilitydestinationrequest.mdx b/docs/components/updateobservabilitydestinationrequest.mdx
new file mode 100644
index 0000000..1a6d041
--- /dev/null
+++ b/docs/components/updateobservabilitydestinationrequest.mdx
@@ -0,0 +1,15 @@
+---
+title: "UpdateObservabilityDestinationRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `api_key_hashes` | List[*str*] | :heavy_minus_sign: | Optional allowlist of OpenRouter API key hashes. `null` clears the filter (all keys). Omitting leaves the current value. Must contain at least one hash if provided. | null |
+| `config` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | Provider-specific configuration fields to update. Masked values are ignored; unset fields keep their current value. | \{
"baseUrl": "https://us.cloud.langfuse.com",
"publicKey": "pk-l...EfGh",
"secretKey": "sk-l...AbCd"
} |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether the destination is enabled. | true |
+| `filter_rules` | [OptionalNullable[components.ObservabilityFilterRulesConfig]](../components/observabilityfilterrulesconfig.mdx) | :heavy_minus_sign: | N/A | null |
+| `name` | *Optional[str]* | :heavy_minus_sign: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *Optional[bool]* | :heavy_minus_sign: | When true, request/response bodies are not forwarded — only metadata. | false |
+| `sampling_rate` | *Optional[float]* | :heavy_minus_sign: | Sampling rate between 0.0001 and 1 (1 = 100%). | 1 |
\ No newline at end of file
diff --git a/docs/components/updateobservabilitydestinationresponse.mdx b/docs/components/updateobservabilitydestinationresponse.mdx
new file mode 100644
index 0000000..c7aba43
--- /dev/null
+++ b/docs/components/updateobservabilitydestinationresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "UpdateObservabilityDestinationResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.ObservabilityDestination](../components/observabilitydestination.mdx) | :heavy_check_mark: | N/A | \{
"api_key_hashes": null,
"config": \{
"baseUrl": "https://us.cloud.langfuse.com",
"publicKey": "pk-l...EfGh",
"secretKey": "sk-l...AbCd"
},
"created_at": "2025-08-24T10:30:00Z",
"enabled": true,
"filter_rules": null,
"id": "99999999-aaaa-bbbb-cccc-dddddddddddd",
"name": "Production Langfuse",
"privacy_mode": false,
"sampling_rate": 1,
"type": "langfuse",
"updated_at": "2025-08-24T15:45:00Z",
"workspace_id": "550e8400-e29b-41d4-a716-446655440000"
} |
\ No newline at end of file
diff --git a/docs/components/updateworkspacerequest.mdx b/docs/components/updateworkspacerequest.mdx
new file mode 100644
index 0000000..f7e9591
--- /dev/null
+++ b/docs/components/updateworkspacerequest.mdx
@@ -0,0 +1,19 @@
+---
+title: "UpdateWorkspaceRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `default_image_model` | *OptionalNullable[str]* | :heavy_minus_sign: | Default image model for this workspace | openai/dall-e-3 |
+| `default_provider_sort` | *OptionalNullable[str]* | :heavy_minus_sign: | Default provider sort preference (price, throughput, latency, exacto) | price |
+| `default_text_model` | *OptionalNullable[str]* | :heavy_minus_sign: | Default text model for this workspace | openai/gpt-4o |
+| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | New description for the workspace | Updated description |
+| `io_logging_api_key_ids` | List[*int*] | :heavy_minus_sign: | Optional array of API key IDs to filter I/O logging | null |
+| `io_logging_sampling_rate` | *Optional[float]* | :heavy_minus_sign: | Sampling rate for I/O logging (0.0001-1) | 1 |
+| `is_data_discount_logging_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether data discount logging is enabled | true |
+| `is_observability_broadcast_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether broadcast is enabled | false |
+| `is_observability_io_logging_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether private logging is enabled | false |
+| `name` | *Optional[str]* | :heavy_minus_sign: | New name for the workspace | Updated Workspace |
+| `slug` | *Optional[str]* | :heavy_minus_sign: | New URL-friendly slug (lowercase alphanumeric segments separated by single hyphens, no leading/trailing hyphens) | updated-workspace |
\ No newline at end of file
diff --git a/docs/components/updateworkspaceresponse.mdx b/docs/components/updateworkspaceresponse.mdx
new file mode 100644
index 0000000..28f14c8
--- /dev/null
+++ b/docs/components/updateworkspaceresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "UpdateWorkspaceResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.Workspace](../components/workspace.mdx) | :heavy_check_mark: | N/A | \{
"created_at": "2025-08-24T10:30:00Z",
"created_by": "user_abc123",
"default_image_model": "openai/dall-e-3",
"default_provider_sort": "price",
"default_text_model": "openai/gpt-4o",
"description": "Production environment workspace",
"id": "550e8400-e29b-41d4-a716-446655440000",
"io_logging_api_key_ids": null,
"io_logging_sampling_rate": 1,
"is_data_discount_logging_enabled": true,
"is_observability_broadcast_enabled": false,
"is_observability_io_logging_enabled": false,
"name": "Production",
"slug": "production",
"updated_at": "2025-08-24T15:45:00Z"
} |
\ No newline at end of file
diff --git a/docs/components/upsertworkspacebudgetrequest.mdx b/docs/components/upsertworkspacebudgetrequest.mdx
new file mode 100644
index 0000000..ce9dd9f
--- /dev/null
+++ b/docs/components/upsertworkspacebudgetrequest.mdx
@@ -0,0 +1,9 @@
+---
+title: "UpsertWorkspaceBudgetRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
+| `limit_usd` | *float* | :heavy_check_mark: | Spending limit in USD. Must be greater than 0. | 100 |
\ No newline at end of file
diff --git a/docs/components/upsertworkspacebudgetresponse.mdx b/docs/components/upsertworkspacebudgetresponse.mdx
new file mode 100644
index 0000000..6c975bc
--- /dev/null
+++ b/docs/components/upsertworkspacebudgetresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "UpsertWorkspaceBudgetResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `data` | [components.WorkspaceBudget](../components/workspacebudget.mdx) | :heavy_check_mark: | N/A | \{
"created_at": "2025-08-24T10:30:00Z",
"id": "770e8400-e29b-41d4-a716-446655440000",
"limit_usd": 100,
"reset_interval": "monthly",
"updated_at": "2025-08-24T15:45:00Z",
"workspace_id": "550e8400-e29b-41d4-a716-446655440000"
} |
\ No newline at end of file
diff --git a/docs/components/urlcitation.md b/docs/components/urlcitation.mdx
similarity index 92%
rename from docs/components/urlcitation.md
rename to docs/components/urlcitation.mdx
index 385629f..0386b33 100644
--- a/docs/components/urlcitation.md
+++ b/docs/components/urlcitation.mdx
@@ -1,5 +1,6 @@
-# URLCitation
-
+---
+title: "URLCitation"
+---
## Fields
@@ -9,5 +10,5 @@
| `end_index` | *int* | :heavy_check_mark: | N/A |
| `start_index` | *int* | :heavy_check_mark: | N/A |
| `title` | *str* | :heavy_check_mark: | N/A |
-| `type` | [components.URLCitationType](../components/urlcitationtype.md) | :heavy_check_mark: | N/A |
+| `type` | [components.URLCitationType](../components/urlcitationtype.mdx) | :heavy_check_mark: | N/A |
| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/urlcitationtype.md b/docs/components/urlcitationtype.md
deleted file mode 100644
index 2b6e38f..0000000
--- a/docs/components/urlcitationtype.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# URLCitationType
-
-
-## Values
-
-| Name | Value |
-| -------------- | -------------- |
-| `URL_CITATION` | url_citation |
\ No newline at end of file
diff --git a/docs/components/urlcitationtype.mdx b/docs/components/urlcitationtype.mdx
new file mode 100644
index 0000000..c5fe94e
--- /dev/null
+++ b/docs/components/urlcitationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "URLCitationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import URLCitationType
+value: URLCitationType = "url_citation"
+```
+
+
+## Values
+
+- `"url_citation"`
diff --git a/docs/components/usage.mdx b/docs/components/usage.mdx
new file mode 100644
index 0000000..c400fc4
--- /dev/null
+++ b/docs/components/usage.mdx
@@ -0,0 +1,19 @@
+---
+title: "Usage"
+---
+
+Token usage information for the response
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| `input_tokens` | *int* | :heavy_check_mark: | N/A |
+| `input_tokens_details` | [components.InputTokensDetails](../components/inputtokensdetails.mdx) | :heavy_check_mark: | N/A |
+| `output_tokens` | *int* | :heavy_check_mark: | N/A |
+| `output_tokens_details` | [components.OutputTokensDetails](../components/outputtokensdetails.mdx) | :heavy_check_mark: | N/A |
+| `total_tokens` | *int* | :heavy_check_mark: | N/A |
+| `cost` | *OptionalNullable[float]* | :heavy_minus_sign: | Cost of the completion |
+| `cost_details` | [Optional[components.UsageCostDetails]](../components/usagecostdetails.mdx) | :heavy_minus_sign: | N/A |
+| `is_byok` | *Optional[bool]* | :heavy_minus_sign: | Whether a request was made using a Bring Your Own Key configuration |
\ No newline at end of file
diff --git a/docs/components/usagecostdetails.mdx b/docs/components/usagecostdetails.mdx
new file mode 100644
index 0000000..646988e
--- /dev/null
+++ b/docs/components/usagecostdetails.mdx
@@ -0,0 +1,11 @@
+---
+title: "UsageCostDetails"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- |
+| `upstream_inference_cost` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A |
+| `upstream_inference_input_cost` | *float* | :heavy_check_mark: | N/A |
+| `upstream_inference_output_cost` | *float* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/userlocation.mdx b/docs/components/userlocation.mdx
new file mode 100644
index 0000000..2b1814d
--- /dev/null
+++ b/docs/components/userlocation.mdx
@@ -0,0 +1,16 @@
+---
+title: "UserLocation"
+---
+
+Approximate user location for location-biased search results. Passed through to native providers that support it (e.g. Anthropic).
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `city` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `country` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `region` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `timezone` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `type` | [components.WebSearchPluginType](../components/websearchplugintype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/variables.md b/docs/components/variables.mdx
similarity index 92%
rename from docs/components/variables.md
rename to docs/components/variables.mdx
index 0698d06..cd3d46d 100644
--- a/docs/components/variables.md
+++ b/docs/components/variables.mdx
@@ -1,5 +1,6 @@
-# Variables
-
+---
+title: "Variables"
+---
## Supported Types
diff --git a/docs/components/verbosity.mdx b/docs/components/verbosity.mdx
new file mode 100644
index 0000000..7dedd74
--- /dev/null
+++ b/docs/components/verbosity.mdx
@@ -0,0 +1,23 @@
+---
+title: "Verbosity"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import Verbosity
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Verbosity = "low"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"low"`
+- `"medium"`
+- `"high"`
+- `"xhigh"`
+- `"max"`
diff --git a/docs/components/videogenerationrequest.mdx b/docs/components/videogenerationrequest.mdx
new file mode 100644
index 0000000..c624ac6
--- /dev/null
+++ b/docs/components/videogenerationrequest.mdx
@@ -0,0 +1,20 @@
+---
+title: "VideoGenerationRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `aspect_ratio` | [Optional[components.VideoGenerationRequestAspectRatio]](../components/videogenerationrequestaspectratio.mdx) | :heavy_minus_sign: | Aspect ratio of the generated video | 16:9 |
+| `callback_url` | *Optional[str]* | :heavy_minus_sign: | URL to receive a webhook notification when the video generation job completes. Overrides the workspace-level default callback URL if set. Must be HTTPS. | https://example.com/webhook |
+| `duration` | *Optional[int]* | :heavy_minus_sign: | Duration of the generated video in seconds | 8 |
+| `frame_images` | List[[components.FrameImage](../components/frameimage.mdx)] | :heavy_minus_sign: | Images to use as the first and/or last frame of the generated video. Each image must specify a frame_type of first_frame or last_frame. | |
+| `generate_audio` | *Optional[bool]* | :heavy_minus_sign: | Whether to generate audio alongside the video. Defaults to the endpoint's generate_audio capability flag, false if not set. | true |
+| `input_references` | List[[components.InputReference](../components/inputreference.mdx)] | :heavy_minus_sign: | Reference assets to guide video generation. Accepts image, audio, and video references. Audio and video references are only honored by providers that support them (currently BytePlus Seedance 2.0); other providers use image references and ignore the rest. | |
+| `model` | *str* | :heavy_check_mark: | N/A | |
+| `prompt` | *str* | :heavy_check_mark: | N/A | |
+| `provider` | [Optional[components.VideoGenerationRequestProvider]](../components/videogenerationrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | |
+| `resolution` | [Optional[components.VideoGenerationRequestResolution]](../components/videogenerationrequestresolution.mdx) | :heavy_minus_sign: | Resolution of the generated video | 720p |
+| `seed` | *Optional[int]* | :heavy_minus_sign: | If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers. | |
+| `size` | *Optional[str]* | :heavy_minus_sign: | Exact pixel dimensions of the generated video in "WIDTHxHEIGHT" format (e.g. "1280x720"). Interchangeable with resolution + aspect_ratio. | 1280x720 |
\ No newline at end of file
diff --git a/docs/components/videogenerationrequestaspectratio.mdx b/docs/components/videogenerationrequestaspectratio.mdx
new file mode 100644
index 0000000..67f5688
--- /dev/null
+++ b/docs/components/videogenerationrequestaspectratio.mdx
@@ -0,0 +1,29 @@
+---
+title: "VideoGenerationRequestAspectRatio"
+---
+
+Aspect ratio of the generated video
+
+## Example Usage
+
+```python
+from openrouter.components import VideoGenerationRequestAspectRatio
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: VideoGenerationRequestAspectRatio = "16:9"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"16:9"`
+- `"9:16"`
+- `"1:1"`
+- `"4:3"`
+- `"3:4"`
+- `"3:2"`
+- `"2:3"`
+- `"21:9"`
+- `"9:21"`
diff --git a/docs/components/videogenerationrequestoptions.mdx b/docs/components/videogenerationrequestoptions.mdx
new file mode 100644
index 0000000..f3d6474
--- /dev/null
+++ b/docs/components/videogenerationrequestoptions.mdx
@@ -0,0 +1,131 @@
+---
+title: "VideoGenerationRequestOptions"
+---
+
+Provider-specific options keyed by provider slug. Only options for the matched provider are forwarded; the rest are ignored. Unrecognized keys are silently dropped.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------- | -------------------------- | -------------------------- | -------------------------- |
+| `oneai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ai21` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `aion_labs` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `akashml` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `alibaba` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `amazon_bedrock` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `amazon_nova` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ambient` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `anthropic` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `anyscale` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `arcee_ai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `atlas_cloud` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `atoma` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `avian` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `azure` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `baidu` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `baseten` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `black_forest_labs` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `byteplus` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `centml` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `cerebras` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `chutes` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `cirrascale` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `clarifai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `cloudflare` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `cohere` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `crofai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `crucible` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `crusoe` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `darkbloom` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `decart` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `deepinfra` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `deepseek` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `dekallm` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `digitalocean` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `enfer` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `fake_provider` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `featherless` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `fireworks` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `friendli` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `gmicloud` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `google_ai_studio` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `google_vertex` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `gopomelo` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `groq` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `heygen` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `huggingface` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `hyperbolic` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `hyperbolic_quantized` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inception` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inceptron` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inferact_vllm` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inference_net` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `infermatic` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inflection` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `inocloud` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `io_net` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ionstream` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `klusterai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `lambda_` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `lepton` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `liquid` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `lynn` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `lynn_private` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `mancer` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `mancer_old` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `mara` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `meta` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `minimax` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `mistral` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `modal` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `modelrun` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `modular` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `moonshotai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `morph` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ncompass` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nebius` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nex_agi` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nextbit` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nineteen` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `novita` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `nvidia` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `octoai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `open_inference` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `openai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `parasail` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `perceptron` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `perplexity` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `phala` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `poolside` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `quiver` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `recraft` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `recursal` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `reflection` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `reka` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `relace` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `replicate` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sakana_ai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sambanova` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sambanova_cloaked` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `seed` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sf_compute` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `siliconflow` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `sourceful` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `stealth` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `stepfun` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `streamlake` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `switchpoint` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `targon` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `tenstorrent` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `together` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `together_lite` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `ubicloud` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `upstage` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `venice` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `wafer` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `wandb` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `xai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `xiaomi` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
+| `z_ai` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/videogenerationrequestprovider.mdx b/docs/components/videogenerationrequestprovider.mdx
new file mode 100644
index 0000000..63d0095
--- /dev/null
+++ b/docs/components/videogenerationrequestprovider.mdx
@@ -0,0 +1,12 @@
+---
+title: "VideoGenerationRequestProvider"
+---
+
+Provider-specific passthrough configuration
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
+| `options` | [Optional[components.VideoGenerationRequestOptions]](../components/videogenerationrequestoptions.mdx) | :heavy_minus_sign: | N/A | \{
"google-vertex": \{
"output_config": \{
"effort": "low"
}
}
} |
\ No newline at end of file
diff --git a/docs/components/videogenerationrequestresolution.mdx b/docs/components/videogenerationrequestresolution.mdx
new file mode 100644
index 0000000..0b860ff
--- /dev/null
+++ b/docs/components/videogenerationrequestresolution.mdx
@@ -0,0 +1,26 @@
+---
+title: "VideoGenerationRequestResolution"
+---
+
+Resolution of the generated video
+
+## Example Usage
+
+```python
+from openrouter.components import VideoGenerationRequestResolution
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: VideoGenerationRequestResolution = "480p"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"480p"`
+- `"720p"`
+- `"1080p"`
+- `"1K"`
+- `"2K"`
+- `"4K"`
diff --git a/docs/components/videogenerationresponse.mdx b/docs/components/videogenerationresponse.mdx
new file mode 100644
index 0000000..dd36594
--- /dev/null
+++ b/docs/components/videogenerationresponse.mdx
@@ -0,0 +1,15 @@
+---
+title: "VideoGenerationResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
+| `error` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `generation_id` | *Optional[str]* | :heavy_minus_sign: | The generation ID associated with this video generation job. Available once the job has been processed. | |
+| `id` | *str* | :heavy_check_mark: | N/A | |
+| `polling_url` | *str* | :heavy_check_mark: | N/A | |
+| `status` | [components.VideoGenerationResponseStatus](../components/videogenerationresponsestatus.mdx) | :heavy_check_mark: | N/A | |
+| `unsigned_urls` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `usage` | [Optional[components.VideoGenerationUsage]](../components/videogenerationusage.mdx) | :heavy_minus_sign: | Usage and cost information for the video generation. Available once the job has completed. | \{
"cost": 0.5,
"is_byok": false
} |
\ No newline at end of file
diff --git a/docs/components/videogenerationresponsestatus.mdx b/docs/components/videogenerationresponsestatus.mdx
new file mode 100644
index 0000000..5e612dc
--- /dev/null
+++ b/docs/components/videogenerationresponsestatus.mdx
@@ -0,0 +1,24 @@
+---
+title: "VideoGenerationResponseStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import VideoGenerationResponseStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: VideoGenerationResponseStatus = "pending"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"pending"`
+- `"in_progress"`
+- `"completed"`
+- `"failed"`
+- `"cancelled"`
+- `"expired"`
diff --git a/docs/components/videogenerationusage.mdx b/docs/components/videogenerationusage.mdx
new file mode 100644
index 0000000..1916659
--- /dev/null
+++ b/docs/components/videogenerationusage.mdx
@@ -0,0 +1,13 @@
+---
+title: "VideoGenerationUsage"
+---
+
+Usage and cost information for the video generation. Available once the job has completed.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `cost` | *OptionalNullable[float]* | :heavy_minus_sign: | The cost of the video generation in USD. |
+| `is_byok` | *Optional[bool]* | :heavy_minus_sign: | Whether the request was made using a Bring Your Own Key configuration. |
\ No newline at end of file
diff --git a/docs/components/videomodel.mdx b/docs/components/videomodel.mdx
new file mode 100644
index 0000000..ad8a6c3
--- /dev/null
+++ b/docs/components/videomodel.mdx
@@ -0,0 +1,23 @@
+---
+title: "VideoModel"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `allowed_passthrough_parameters` | List[*str*] | :heavy_check_mark: | List of parameters that are allowed to be passed through to the provider | |
+| `canonical_slug` | *str* | :heavy_check_mark: | Canonical slug for the model | openai/gpt-4 |
+| `created` | *int* | :heavy_check_mark: | Unix timestamp of when the model was created | 1692901234 |
+| `description` | *Optional[str]* | :heavy_minus_sign: | Description of the model | GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy. |
+| `generate_audio` | *Nullable[bool]* | :heavy_check_mark: | Whether the model supports generating audio alongside video | |
+| `hugging_face_id` | *OptionalNullable[str]* | :heavy_minus_sign: | Hugging Face model identifier, if applicable | microsoft/DialoGPT-medium |
+| `id` | *str* | :heavy_check_mark: | Unique identifier for the model | openai/gpt-4 |
+| `name` | *str* | :heavy_check_mark: | Display name of the model | GPT-4 |
+| `pricing_skus` | Dict[str, *str*] | :heavy_minus_sign: | Pricing SKUs with provider prefix stripped, values as strings | |
+| `seed` | *Nullable[bool]* | :heavy_check_mark: | Whether the model supports deterministic generation via seed parameter | |
+| `supported_aspect_ratios` | List[[components.SupportedAspectRatio](../components/supportedaspectratio.mdx)] | :heavy_check_mark: | Supported output aspect ratios | |
+| `supported_durations` | List[*int*] | :heavy_check_mark: | Supported video durations in seconds | |
+| `supported_frame_images` | List[[components.SupportedFrameImage](../components/supportedframeimage.mdx)] | :heavy_check_mark: | Supported frame image types (e.g. first_frame, last_frame) | |
+| `supported_resolutions` | List[[components.SupportedResolution](../components/supportedresolution.mdx)] | :heavy_check_mark: | Supported output resolutions | |
+| `supported_sizes` | List[[components.SupportedSize](../components/supportedsize.mdx)] | :heavy_check_mark: | Supported output sizes (width x height) | |
\ No newline at end of file
diff --git a/docs/components/videomodelslistresponse.mdx b/docs/components/videomodelslistresponse.mdx
new file mode 100644
index 0000000..9199c3b
--- /dev/null
+++ b/docs/components/videomodelslistresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "VideoModelsListResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- |
+| `data` | List[[components.VideoModel](../components/videomodel.mdx)] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/videourl.mdx b/docs/components/videourl.mdx
new file mode 100644
index 0000000..7cbbaea
--- /dev/null
+++ b/docs/components/videourl.mdx
@@ -0,0 +1,9 @@
+---
+title: "VideoURL"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/webfetchengineenum.mdx b/docs/components/webfetchengineenum.mdx
new file mode 100644
index 0000000..ee39578
--- /dev/null
+++ b/docs/components/webfetchengineenum.mdx
@@ -0,0 +1,26 @@
+---
+title: "WebFetchEngineEnum"
+---
+
+Which fetch engine to use. "auto" (default) uses native if the provider supports it, otherwise Exa. "native" forces the provider's built-in fetch. "exa" uses Exa Contents API. "openrouter" uses direct HTTP fetch. "firecrawl" uses Firecrawl scrape (requires BYOK). "parallel" uses the Parallel extract API.
+
+## Example Usage
+
+```python
+from openrouter.components import WebFetchEngineEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: WebFetchEngineEnum = "auto"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"auto"`
+- `"native"`
+- `"openrouter"`
+- `"exa"`
+- `"parallel"`
+- `"firecrawl"`
diff --git a/docs/components/webfetchplugin.mdx b/docs/components/webfetchplugin.mdx
new file mode 100644
index 0000000..f465128
--- /dev/null
+++ b/docs/components/webfetchplugin.mdx
@@ -0,0 +1,13 @@
+---
+title: "WebFetchPlugin"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
+| `allowed_domains` | List[*str*] | :heavy_minus_sign: | Only fetch from these domains. |
+| `blocked_domains` | List[*str*] | :heavy_minus_sign: | Never fetch from these domains. |
+| `id` | [components.WebFetchPluginID](../components/webfetchpluginid.mdx) | :heavy_check_mark: | N/A |
+| `max_content_tokens` | *Optional[int]* | :heavy_minus_sign: | Maximum content length in approximate tokens. Content exceeding this limit is truncated. |
+| `max_uses` | *Optional[int]* | :heavy_minus_sign: | Maximum number of web fetches per request. Once exceeded, the tool returns an error. |
\ No newline at end of file
diff --git a/docs/components/webfetchpluginid.mdx b/docs/components/webfetchpluginid.mdx
new file mode 100644
index 0000000..962475a
--- /dev/null
+++ b/docs/components/webfetchpluginid.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebFetchPluginID"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebFetchPluginID
+value: WebFetchPluginID = "web-fetch"
+```
+
+
+## Values
+
+- `"web-fetch"`
diff --git a/docs/components/webfetchservertool.mdx b/docs/components/webfetchservertool.mdx
new file mode 100644
index 0000000..fe93938
--- /dev/null
+++ b/docs/components/webfetchservertool.mdx
@@ -0,0 +1,13 @@
+---
+title: "WebFetchServerTool"
+---
+
+OpenRouter built-in server tool: fetches full content from a URL (web page or PDF)
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
+| `parameters` | [Optional[components.WebFetchServerToolConfig]](../components/webfetchservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for the openrouter:web_fetch server tool | \{
"max_content_tokens": 100000,
"max_uses": 10
} |
+| `type` | [components.WebFetchServerToolType](../components/webfetchservertooltype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/webfetchservertoolconfig.mdx b/docs/components/webfetchservertoolconfig.mdx
new file mode 100644
index 0000000..1d52d81
--- /dev/null
+++ b/docs/components/webfetchservertoolconfig.mdx
@@ -0,0 +1,16 @@
+---
+title: "WebFetchServerToolConfig"
+---
+
+Configuration for the openrouter:web_fetch server tool
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_domains` | List[*str*] | :heavy_minus_sign: | Only fetch from these domains. | |
+| `blocked_domains` | List[*str*] | :heavy_minus_sign: | Never fetch from these domains. | |
+| `engine` | [Optional[components.WebFetchEngineEnum]](../components/webfetchengineenum.mdx) | :heavy_minus_sign: | Which fetch engine to use. "auto" (default) uses native if the provider supports it, otherwise Exa. "native" forces the provider's built-in fetch. "exa" uses Exa Contents API. "openrouter" uses direct HTTP fetch. "firecrawl" uses Firecrawl scrape (requires BYOK). "parallel" uses the Parallel extract API. | auto |
+| `max_content_tokens` | *Optional[int]* | :heavy_minus_sign: | Maximum content length in approximate tokens. Content exceeding this limit is truncated. | 100000 |
+| `max_uses` | *Optional[int]* | :heavy_minus_sign: | Maximum number of web fetches per request. Once exceeded, the tool returns an error. | 10 |
\ No newline at end of file
diff --git a/docs/components/webfetchservertooltype.mdx b/docs/components/webfetchservertooltype.mdx
new file mode 100644
index 0000000..d507399
--- /dev/null
+++ b/docs/components/webfetchservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebFetchServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebFetchServerToolType
+value: WebFetchServerToolType = "openrouter:web_fetch"
+```
+
+
+## Values
+
+- `"openrouter:web_fetch"`
diff --git a/docs/components/websearchcallcompletedevent.mdx b/docs/components/websearchcallcompletedevent.mdx
new file mode 100644
index 0000000..34bcc1f
--- /dev/null
+++ b/docs/components/websearchcallcompletedevent.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchCallCompletedEvent"
+---
+
+Web search call completed
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.WebSearchCallCompletedEventType](../components/websearchcallcompletedeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/websearchcallcompletedeventtype.mdx b/docs/components/websearchcallcompletedeventtype.mdx
new file mode 100644
index 0000000..e1e9088
--- /dev/null
+++ b/docs/components/websearchcallcompletedeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchCallCompletedEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchCallCompletedEventType
+value: WebSearchCallCompletedEventType = "response.web_search_call.completed"
+```
+
+
+## Values
+
+- `"response.web_search_call.completed"`
diff --git a/docs/components/websearchcallinprogressevent.mdx b/docs/components/websearchcallinprogressevent.mdx
new file mode 100644
index 0000000..eaf3e60
--- /dev/null
+++ b/docs/components/websearchcallinprogressevent.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchCallInProgressEvent"
+---
+
+Web search call in progress
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.WebSearchCallInProgressEventType](../components/websearchcallinprogresseventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/websearchcallinprogresseventtype.mdx b/docs/components/websearchcallinprogresseventtype.mdx
new file mode 100644
index 0000000..04ef37c
--- /dev/null
+++ b/docs/components/websearchcallinprogresseventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchCallInProgressEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchCallInProgressEventType
+value: WebSearchCallInProgressEventType = "response.web_search_call.in_progress"
+```
+
+
+## Values
+
+- `"response.web_search_call.in_progress"`
diff --git a/docs/components/websearchcallsearchingevent.mdx b/docs/components/websearchcallsearchingevent.mdx
new file mode 100644
index 0000000..5cd2810
--- /dev/null
+++ b/docs/components/websearchcallsearchingevent.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchCallSearchingEvent"
+---
+
+Web search call is searching
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+| `item_id` | *str* | :heavy_check_mark: | N/A |
+| `output_index` | *int* | :heavy_check_mark: | N/A |
+| `sequence_number` | *int* | :heavy_check_mark: | N/A |
+| `type` | [components.WebSearchCallSearchingEventType](../components/websearchcallsearchingeventtype.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/websearchcallsearchingeventtype.mdx b/docs/components/websearchcallsearchingeventtype.mdx
new file mode 100644
index 0000000..6453f10
--- /dev/null
+++ b/docs/components/websearchcallsearchingeventtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchCallSearchingEventType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchCallSearchingEventType
+value: WebSearchCallSearchingEventType = "response.web_search_call.searching"
+```
+
+
+## Values
+
+- `"response.web_search_call.searching"`
diff --git a/docs/components/websearchconfig.mdx b/docs/components/websearchconfig.mdx
new file mode 100644
index 0000000..7fce2c5
--- /dev/null
+++ b/docs/components/websearchconfig.mdx
@@ -0,0 +1,16 @@
+---
+title: "WebSearchConfig"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_domains` | List[*str*] | :heavy_minus_sign: | Limit search results to these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, and most native providers (Anthropic, OpenAI, xAI). Cannot be used with excluded_domains. | |
+| `engine` | [Optional[components.WebSearchEngineEnum]](../components/websearchengineenum.mdx) | :heavy_minus_sign: | Which search engine to use. "auto" (default) uses native if the provider supports it, otherwise Exa. "native" forces the provider's built-in search. "exa" forces the Exa search API. "firecrawl" uses Firecrawl (requires BYOK). "parallel" uses the Parallel search API. "perplexity" uses the Perplexity Search API (raw ranked results). | auto |
+| `excluded_domains` | List[*str*] | :heavy_minus_sign: | Exclude search results from these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, Anthropic, and xAI. Not supported with OpenAI (silently ignored). Cannot be used with allowed_domains. | |
+| `max_characters` | *Optional[int]* | :heavy_minus_sign: | Exact maximum number of characters of content per search result. Applies to the Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, caps highlight content per result. For Parallel, caps excerpt content per result (default 1,500 when omitted). For Perplexity, maps to the native `max_tokens_per_page` parameter (converted from characters to tokens) and trims the response to the exact character cap. When both `max_characters` and `search_context_size` are set, `max_characters` takes precedence. When omitted, falls back to `search_context_size` mapping (Exa) or engine defaults (Parallel, Perplexity). | 2000 |
+| `max_results` | *Optional[int]* | :heavy_minus_sign: | Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped. | 5 |
+| `max_total_results` | *Optional[int]* | :heavy_minus_sign: | Maximum total number of search results across all search calls in a single request. Once this limit is reached, the tool will stop returning new results. Useful for controlling cost and context size in agentic loops. Defaults to 50 when not specified. | 50 |
+| `search_context_size` | [Optional[components.SearchQualityLevel]](../components/searchqualitylevel.mdx) | :heavy_minus_sign: | How much context to retrieve per result. Applies to Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, pins a fixed per-result character cap (low=5,000, medium=15,000, high=30,000); when omitted, Exa picks an adaptive size per query and document (typically ~2,000–4,000 characters per result). For Parallel, controls the total characters across all results; when omitted, Parallel uses its own default size. For Perplexity, maps directly to the Search API's native search_context_size parameter. Overridden by `max_characters` when both are set. | medium |
+| `user_location` | [Optional[components.WebSearchUserLocationServerTool]](../components/websearchuserlocationservertool.mdx) | :heavy_minus_sign: | Approximate user location for location-biased results. | \{
"city": "San Francisco",
"country": "US",
"region": "California",
"timezone": "America/Los_Angeles",
"type": "approximate"
} |
\ No newline at end of file
diff --git a/docs/components/websearchdomainfilter.mdx b/docs/components/websearchdomainfilter.mdx
new file mode 100644
index 0000000..7f963cd
--- /dev/null
+++ b/docs/components/websearchdomainfilter.mdx
@@ -0,0 +1,10 @@
+---
+title: "WebSearchDomainFilter"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `allowed_domains` | List[*str*] | :heavy_minus_sign: | N/A |
+| `excluded_domains` | List[*str*] | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/websearchengine.md b/docs/components/websearchengine.md
deleted file mode 100644
index 8772c8f..0000000
--- a/docs/components/websearchengine.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# WebSearchEngine
-
-The search engine to use for web search.
-
-
-## Values
-
-| Name | Value |
-| ------------ | ------------ |
-| `NATIVE` | native |
-| `EXA` | exa |
-| `FIRECRAWL` | firecrawl |
-| `PARALLEL` | parallel |
-| `PERPLEXITY` | perplexity |
\ No newline at end of file
diff --git a/docs/components/websearchengine.mdx b/docs/components/websearchengine.mdx
new file mode 100644
index 0000000..32467b8
--- /dev/null
+++ b/docs/components/websearchengine.mdx
@@ -0,0 +1,25 @@
+---
+title: "WebSearchEngine"
+---
+
+The search engine to use for web search.
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchEngine
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: WebSearchEngine = "native"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"native"`
+- `"exa"`
+- `"firecrawl"`
+- `"parallel"`
+- `"perplexity"`
diff --git a/docs/components/websearchengineenum.mdx b/docs/components/websearchengineenum.mdx
new file mode 100644
index 0000000..d0c7f83
--- /dev/null
+++ b/docs/components/websearchengineenum.mdx
@@ -0,0 +1,26 @@
+---
+title: "WebSearchEngineEnum"
+---
+
+Which search engine to use. "auto" (default) uses native if the provider supports it, otherwise Exa. "native" forces the provider's built-in search. "exa" forces the Exa search API. "firecrawl" uses Firecrawl (requires BYOK). "parallel" uses the Parallel search API. "perplexity" uses the Perplexity Search API (raw ranked results).
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchEngineEnum
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: WebSearchEngineEnum = "native"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"native"`
+- `"exa"`
+- `"parallel"`
+- `"firecrawl"`
+- `"perplexity"`
+- `"auto"`
diff --git a/docs/components/websearchplugin.mdx b/docs/components/websearchplugin.mdx
new file mode 100644
index 0000000..c4cbc7b
--- /dev/null
+++ b/docs/components/websearchplugin.mdx
@@ -0,0 +1,17 @@
+---
+title: "WebSearchPlugin"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Set to false to disable the web-search plugin for this request. Defaults to true. | |
+| `engine` | [Optional[components.WebSearchEngine]](../components/websearchengine.mdx) | :heavy_minus_sign: | The search engine to use for web search. | exa |
+| `exclude_domains` | List[*str*] | :heavy_minus_sign: | A list of domains to exclude from web search results. Supports wildcards (e.g. "*.substack.com") and path filtering (e.g. "openai.com/blog"). | [
"example.com",
"*.substack.com",
"openai.com/blog"
] |
+| `id` | [components.WebSearchPluginID](../components/websearchpluginid.mdx) | :heavy_check_mark: | N/A | |
+| `include_domains` | List[*str*] | :heavy_minus_sign: | A list of domains to restrict web search results to. Supports wildcards (e.g. "*.substack.com") and path filtering (e.g. "openai.com/blog"). | [
"example.com",
"*.substack.com",
"openai.com/blog"
] |
+| `max_results` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `max_uses` | *Optional[int]* | :heavy_minus_sign: | Maximum number of times the model can invoke web search in a single turn. Passed through to native providers that support it (e.g. Anthropic). | |
+| `search_prompt` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `user_location` | [OptionalNullable[components.UserLocation]](../components/userlocation.mdx) | :heavy_minus_sign: | N/A | \{
"city": "San Francisco",
"country": "US",
"region": "California",
"timezone": "America/Los_Angeles",
"type": "approximate"
} |
\ No newline at end of file
diff --git a/docs/components/websearchpluginid.mdx b/docs/components/websearchpluginid.mdx
new file mode 100644
index 0000000..4e2731f
--- /dev/null
+++ b/docs/components/websearchpluginid.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchPluginID"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchPluginID
+value: WebSearchPluginID = "web"
+```
+
+
+## Values
+
+- `"web"`
diff --git a/docs/components/websearchplugintype.mdx b/docs/components/websearchplugintype.mdx
new file mode 100644
index 0000000..35edaa6
--- /dev/null
+++ b/docs/components/websearchplugintype.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchPluginType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchPluginType
+value: WebSearchPluginType = "approximate"
+```
+
+
+## Values
+
+- `"approximate"`
diff --git a/docs/components/websearchservertool.mdx b/docs/components/websearchservertool.mdx
new file mode 100644
index 0000000..1250138
--- /dev/null
+++ b/docs/components/websearchservertool.mdx
@@ -0,0 +1,17 @@
+---
+title: "WebSearchServerTool"
+---
+
+Web search tool configuration (2025-08-26 version)
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `engine` | [Optional[components.WebSearchEngineEnum]](../components/websearchengineenum.mdx) | :heavy_minus_sign: | Which search engine to use. "auto" (default) uses native if the provider supports it, otherwise Exa. "native" forces the provider's built-in search. "exa" forces the Exa search API. "firecrawl" uses Firecrawl (requires BYOK). "parallel" uses the Parallel search API. "perplexity" uses the Perplexity Search API (raw ranked results). | auto |
+| `filters` | [OptionalNullable[components.WebSearchDomainFilter]](../components/websearchdomainfilter.mdx) | :heavy_minus_sign: | N/A | \{
"allowed_domains": [
"example.com"
],
"excluded_domains": [
"spam.com"
]
} |
+| `max_results` | *Optional[int]* | :heavy_minus_sign: | Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped. | 5 |
+| `search_context_size` | [Optional[components.SearchContextSizeEnum]](../components/searchcontextsizeenum.mdx) | :heavy_minus_sign: | Size of the search context for web search tools | medium |
+| `type` | [components.WebSearchServerToolType](../components/websearchservertooltype.mdx) | :heavy_check_mark: | N/A | |
+| `user_location` | [OptionalNullable[components.WebSearchUserLocation]](../components/websearchuserlocation.mdx) | :heavy_minus_sign: | User location information for web search | \{
"city": "San Francisco",
"country": "USA",
"region": "California",
"timezone": "America/Los_Angeles",
"type": "approximate"
} |
\ No newline at end of file
diff --git a/docs/components/websearchservertoolconfig.mdx b/docs/components/websearchservertoolconfig.mdx
new file mode 100644
index 0000000..f06444b
--- /dev/null
+++ b/docs/components/websearchservertoolconfig.mdx
@@ -0,0 +1,19 @@
+---
+title: "WebSearchServerToolConfig"
+---
+
+Configuration for the openrouter:web_search server tool
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `allowed_domains` | List[*str*] | :heavy_minus_sign: | Limit search results to these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, and most native providers (Anthropic, OpenAI, xAI). Cannot be used with excluded_domains. | |
+| `engine` | [Optional[components.WebSearchEngineEnum]](../components/websearchengineenum.mdx) | :heavy_minus_sign: | Which search engine to use. "auto" (default) uses native if the provider supports it, otherwise Exa. "native" forces the provider's built-in search. "exa" forces the Exa search API. "firecrawl" uses Firecrawl (requires BYOK). "parallel" uses the Parallel search API. "perplexity" uses the Perplexity Search API (raw ranked results). | auto |
+| `excluded_domains` | List[*str*] | :heavy_minus_sign: | Exclude search results from these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, Anthropic, and xAI. Not supported with OpenAI (silently ignored). Cannot be used with allowed_domains. | |
+| `max_characters` | *Optional[int]* | :heavy_minus_sign: | Exact maximum number of characters of content per search result. Applies to the Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, caps highlight content per result. For Parallel, caps excerpt content per result (default 1,500 when omitted). For Perplexity, maps to the native `max_tokens_per_page` parameter (converted from characters to tokens) and trims the response to the exact character cap. When both `max_characters` and `search_context_size` are set, `max_characters` takes precedence. When omitted, falls back to `search_context_size` mapping (Exa) or engine defaults (Parallel, Perplexity). | 2000 |
+| `max_results` | *Optional[int]* | :heavy_minus_sign: | Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped. | 5 |
+| `max_total_results` | *Optional[int]* | :heavy_minus_sign: | Maximum total number of search results across all search calls in a single request. Once this limit is reached, the tool will stop returning new results. Useful for controlling cost and context size in agentic loops. Defaults to 50 when not specified. | 50 |
+| `search_context_size` | [Optional[components.SearchQualityLevel]](../components/searchqualitylevel.mdx) | :heavy_minus_sign: | How much context to retrieve per result. Applies to Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, pins a fixed per-result character cap (low=5,000, medium=15,000, high=30,000); when omitted, Exa picks an adaptive size per query and document (typically ~2,000–4,000 characters per result). For Parallel, controls the total characters across all results; when omitted, Parallel uses its own default size. For Perplexity, maps directly to the Search API's native search_context_size parameter. Overridden by `max_characters` when both are set. | medium |
+| `user_location` | [Optional[components.WebSearchUserLocationServerTool]](../components/websearchuserlocationservertool.mdx) | :heavy_minus_sign: | Approximate user location for location-biased results. | \{
"city": "San Francisco",
"country": "US",
"region": "California",
"timezone": "America/Los_Angeles",
"type": "approximate"
} |
\ No newline at end of file
diff --git a/docs/components/websearchservertoolopenrouter.mdx b/docs/components/websearchservertoolopenrouter.mdx
new file mode 100644
index 0000000..1e3301d
--- /dev/null
+++ b/docs/components/websearchservertoolopenrouter.mdx
@@ -0,0 +1,13 @@
+---
+title: "WebSearchServerToolOpenRouter"
+---
+
+OpenRouter built-in server tool: searches the web for current information
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
+| `parameters` | [Optional[components.WebSearchServerToolConfig]](../components/websearchservertoolconfig.mdx) | :heavy_minus_sign: | Configuration for the openrouter:web_search server tool | \{
"max_results": 5,
"search_context_size": "medium"
} |
+| `type` | [components.WebSearchServerToolOpenRouterType](../components/websearchservertoolopenroutertype.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/components/websearchservertoolopenroutertype.mdx b/docs/components/websearchservertoolopenroutertype.mdx
new file mode 100644
index 0000000..4a6088e
--- /dev/null
+++ b/docs/components/websearchservertoolopenroutertype.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchServerToolOpenRouterType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchServerToolOpenRouterType
+value: WebSearchServerToolOpenRouterType = "openrouter:web_search"
+```
+
+
+## Values
+
+- `"openrouter:web_search"`
diff --git a/docs/components/websearchservertooltype.mdx b/docs/components/websearchservertooltype.mdx
new file mode 100644
index 0000000..0a2ba3d
--- /dev/null
+++ b/docs/components/websearchservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchServerToolType
+value: WebSearchServerToolType = "web_search_2025_08_26"
+```
+
+
+## Values
+
+- `"web_search_2025_08_26"`
diff --git a/docs/components/websearchsource.mdx b/docs/components/websearchsource.mdx
new file mode 100644
index 0000000..870075f
--- /dev/null
+++ b/docs/components/websearchsource.mdx
@@ -0,0 +1,10 @@
+---
+title: "WebSearchSource"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `type` | [components.WebSearchSourceType](../components/websearchsourcetype.mdx) | :heavy_check_mark: | N/A |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/components/websearchsourcetype.mdx b/docs/components/websearchsourcetype.mdx
new file mode 100644
index 0000000..a7be3b3
--- /dev/null
+++ b/docs/components/websearchsourcetype.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchSourceType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchSourceType
+value: WebSearchSourceType = "url"
+```
+
+
+## Values
+
+- `"url"`
diff --git a/docs/components/websearchstatus.md b/docs/components/websearchstatus.md
deleted file mode 100644
index 53303ec..0000000
--- a/docs/components/websearchstatus.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# WebSearchStatus
-
-
-## Values
-
-| Name | Value |
-| ------------- | ------------- |
-| `COMPLETED` | completed |
-| `SEARCHING` | searching |
-| `IN_PROGRESS` | in_progress |
-| `FAILED` | failed |
\ No newline at end of file
diff --git a/docs/components/websearchstatus.mdx b/docs/components/websearchstatus.mdx
new file mode 100644
index 0000000..d24fe5f
--- /dev/null
+++ b/docs/components/websearchstatus.mdx
@@ -0,0 +1,22 @@
+---
+title: "WebSearchStatus"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchStatus
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: WebSearchStatus = "completed"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"completed"`
+- `"searching"`
+- `"in_progress"`
+- `"failed"`
diff --git a/docs/components/websearchuserlocation.mdx b/docs/components/websearchuserlocation.mdx
new file mode 100644
index 0000000..dccb9d9
--- /dev/null
+++ b/docs/components/websearchuserlocation.mdx
@@ -0,0 +1,16 @@
+---
+title: "WebSearchUserLocation"
+---
+
+User location information for web search
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `city` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `country` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `region` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `timezone` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `type` | [Optional[components.WebSearchUserLocationType]](../components/websearchuserlocationtype.mdx) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/websearchuserlocationservertool.mdx b/docs/components/websearchuserlocationservertool.mdx
new file mode 100644
index 0000000..98a2e0b
--- /dev/null
+++ b/docs/components/websearchuserlocationservertool.mdx
@@ -0,0 +1,16 @@
+---
+title: "WebSearchUserLocationServerTool"
+---
+
+Approximate user location for location-biased results.
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
+| `city` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `country` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `region` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `timezone` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A |
+| `type` | [Optional[components.WebSearchUserLocationServerToolType]](../components/websearchuserlocationservertooltype.mdx) | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/components/websearchuserlocationservertooltype.mdx b/docs/components/websearchuserlocationservertooltype.mdx
new file mode 100644
index 0000000..e10fc7e
--- /dev/null
+++ b/docs/components/websearchuserlocationservertooltype.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchUserLocationServerToolType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchUserLocationServerToolType
+value: WebSearchUserLocationServerToolType = "approximate"
+```
+
+
+## Values
+
+- `"approximate"`
diff --git a/docs/components/websearchuserlocationtype.mdx b/docs/components/websearchuserlocationtype.mdx
new file mode 100644
index 0000000..e8a6890
--- /dev/null
+++ b/docs/components/websearchuserlocationtype.mdx
@@ -0,0 +1,15 @@
+---
+title: "WebSearchUserLocationType"
+---
+
+## Example Usage
+
+```python
+from openrouter.components import WebSearchUserLocationType
+value: WebSearchUserLocationType = "approximate"
+```
+
+
+## Values
+
+- `"approximate"`
diff --git a/docs/components/workspace.mdx b/docs/components/workspace.mdx
new file mode 100644
index 0000000..897afc9
--- /dev/null
+++ b/docs/components/workspace.mdx
@@ -0,0 +1,23 @@
+---
+title: "Workspace"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| `created_at` | *str* | :heavy_check_mark: | ISO 8601 timestamp of when the workspace was created | 2025-08-24T10:30:00Z |
+| `created_by` | *Nullable[str]* | :heavy_check_mark: | User ID of the workspace creator | user_abc123 |
+| `default_image_model` | *Nullable[str]* | :heavy_check_mark: | Default image model for this workspace | openai/dall-e-3 |
+| `default_provider_sort` | *Nullable[str]* | :heavy_check_mark: | Default provider sort preference (price, throughput, latency, exacto) | price |
+| `default_text_model` | *Nullable[str]* | :heavy_check_mark: | Default text model for this workspace | openai/gpt-4o |
+| `description` | *Nullable[str]* | :heavy_check_mark: | Description of the workspace | Production environment workspace |
+| `id` | *str* | :heavy_check_mark: | Unique identifier for the workspace | 550e8400-e29b-41d4-a716-446655440000 |
+| `io_logging_api_key_ids` | List[*int*] | :heavy_check_mark: | Optional array of API key IDs to filter I/O logging. Null means all keys are logged. | null |
+| `io_logging_sampling_rate` | *float* | :heavy_check_mark: | Sampling rate for I/O logging (0.0001-1). 1 means 100% of requests are logged. | 1 |
+| `is_data_discount_logging_enabled` | *bool* | :heavy_check_mark: | Whether data discount logging is enabled for this workspace | true |
+| `is_observability_broadcast_enabled` | *bool* | :heavy_check_mark: | Whether broadcast is enabled for this workspace | false |
+| `is_observability_io_logging_enabled` | *bool* | :heavy_check_mark: | Whether private logging is enabled for this workspace | false |
+| `name` | *str* | :heavy_check_mark: | Name of the workspace | Production |
+| `slug` | *str* | :heavy_check_mark: | URL-friendly slug for the workspace | production |
+| `updated_at` | *Nullable[str]* | :heavy_check_mark: | ISO 8601 timestamp of when the workspace was last updated | 2025-08-24T15:45:00Z |
\ No newline at end of file
diff --git a/docs/components/workspacebudget.mdx b/docs/components/workspacebudget.mdx
new file mode 100644
index 0000000..d9aa348
--- /dev/null
+++ b/docs/components/workspacebudget.mdx
@@ -0,0 +1,14 @@
+---
+title: "WorkspaceBudget"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `created_at` | *str* | :heavy_check_mark: | ISO 8601 timestamp of when the budget was created | 2025-08-24T10:30:00Z |
+| `id` | *str* | :heavy_check_mark: | Unique identifier for the budget | 770e8400-e29b-41d4-a716-446655440000 |
+| `limit_usd` | *float* | :heavy_check_mark: | Spending limit in USD for this interval | 100 |
+| `reset_interval` | [Nullable[components.ResetInterval]](../components/resetinterval.mdx) | :heavy_check_mark: | Interval at which spend resets. Null means a lifetime (one-time) budget. | monthly |
+| `updated_at` | *str* | :heavy_check_mark: | ISO 8601 timestamp of when the budget was last updated | 2025-08-24T15:45:00Z |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace the budget belongs to | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/workspacebudgetinterval.mdx b/docs/components/workspacebudgetinterval.mdx
new file mode 100644
index 0000000..d6b8881
--- /dev/null
+++ b/docs/components/workspacebudgetinterval.mdx
@@ -0,0 +1,24 @@
+---
+title: "WorkspaceBudgetInterval"
+---
+
+Budget reset interval. Use "lifetime" for a one-time budget that never resets.
+
+## Example Usage
+
+```python
+from openrouter.components import WorkspaceBudgetInterval
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: WorkspaceBudgetInterval = "daily"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"daily"`
+- `"weekly"`
+- `"monthly"`
+- `"lifetime"`
diff --git a/docs/components/workspacemember.mdx b/docs/components/workspacemember.mdx
new file mode 100644
index 0000000..3e77b3d
--- /dev/null
+++ b/docs/components/workspacemember.mdx
@@ -0,0 +1,13 @@
+---
+title: "WorkspaceMember"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `created_at` | *str* | :heavy_check_mark: | ISO 8601 timestamp of when the membership was created | 2025-08-24T10:30:00Z |
+| `id` | *str* | :heavy_check_mark: | Unique identifier for the workspace membership | 660e8400-e29b-41d4-a716-446655440000 |
+| `role` | [components.WorkspaceMemberRole](../components/workspacememberrole.mdx) | :heavy_check_mark: | Role of the member in the workspace | member |
+| `user_id` | *str* | :heavy_check_mark: | Clerk user ID of the member | user_abc123 |
+| `workspace_id` | *str* | :heavy_check_mark: | ID of the workspace | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/components/workspacememberrole.mdx b/docs/components/workspacememberrole.mdx
new file mode 100644
index 0000000..aa60a54
--- /dev/null
+++ b/docs/components/workspacememberrole.mdx
@@ -0,0 +1,22 @@
+---
+title: "WorkspaceMemberRole"
+---
+
+Role of the member in the workspace
+
+## Example Usage
+
+```python
+from openrouter.components import WorkspaceMemberRole
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: WorkspaceMemberRole = "admin"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"admin"`
+- `"member"`
diff --git a/docs/docs.json b/docs/docs.json
new file mode 100644
index 0000000..0b81ee5
--- /dev/null
+++ b/docs/docs.json
@@ -0,0 +1,42 @@
+{
+ "$schema": "https://mintlify.com/docs.json",
+ "theme": "mint",
+ "name": "Python SDK",
+ "colors": {
+ "primary": "#6467f2",
+ "light": "#6467f2",
+ "dark": "#6467f2"
+ },
+ "navigation": {
+ "pages": [
+ "overview",
+ "sdks/analytics/README",
+ "sdks/apikeys/README",
+ "sdks/benchmarks/README",
+ "sdks/betaanalytics/README",
+ "sdks/byok/README",
+ "sdks/chat/README",
+ "sdks/classifications/README",
+ "sdks/credits/README",
+ "sdks/datasets/README",
+ "sdks/embeddings/README",
+ "sdks/endpoints/README",
+ "sdks/files/README",
+ "sdks/generations/README",
+ "sdks/guardrails/README",
+ "sdks/images/README",
+ "sdks/models/README",
+ "sdks/oauth/README",
+ "sdks/observability/README",
+ "sdks/organization/README",
+ "sdks/presets/README",
+ "sdks/providers/README",
+ "sdks/rerank/README",
+ "sdks/responses/README",
+ "sdks/stt/README",
+ "sdks/tts/README",
+ "sdks/videogeneration/README",
+ "sdks/workspaces/README"
+ ]
+ }
+}
diff --git a/docs/errors/badgatewayresponseerror.md b/docs/errors/badgatewayresponseerror.mdx
similarity index 84%
rename from docs/errors/badgatewayresponseerror.md
rename to docs/errors/badgatewayresponseerror.mdx
index 5bd359e..62ce7a1 100644
--- a/docs/errors/badgatewayresponseerror.md
+++ b/docs/errors/badgatewayresponseerror.mdx
@@ -1,4 +1,6 @@
-# BadGatewayResponseError
+---
+title: "BadGatewayResponseError"
+---
Bad Gateway - Provider/upstream API failure
@@ -7,6 +9,6 @@ Bad Gateway - Provider/upstream API failure
| Field | Type | Required | Description | Example |
| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
-| `error` | [components.BadGatewayResponseErrorData](../components/badgatewayresponseerrordata.md) | :heavy_check_mark: | Error data for BadGatewayResponse | {
"code": 502,
"message": "Provider returned error"
} |
+| `error` | [components.BadGatewayResponseErrorData](../components/badgatewayresponseerrordata.mdx) | :heavy_check_mark: | Error data for BadGatewayResponse | \{
"code": 502,
"message": "Provider returned error"
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/badrequestresponseerror.md b/docs/errors/badrequestresponseerror.mdx
similarity index 84%
rename from docs/errors/badrequestresponseerror.md
rename to docs/errors/badrequestresponseerror.mdx
index 6bb5d84..5453987 100644
--- a/docs/errors/badrequestresponseerror.md
+++ b/docs/errors/badrequestresponseerror.mdx
@@ -1,4 +1,6 @@
-# BadRequestResponseError
+---
+title: "BadRequestResponseError"
+---
Bad Request - Invalid request parameters or malformed input
@@ -7,6 +9,6 @@ Bad Request - Invalid request parameters or malformed input
| Field | Type | Required | Description | Example |
| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
-| `error` | [components.BadRequestResponseErrorData](../components/badrequestresponseerrordata.md) | :heavy_check_mark: | Error data for BadRequestResponse | {
"code": 400,
"message": "Invalid request parameters"
} |
+| `error` | [components.BadRequestResponseErrorData](../components/badrequestresponseerrordata.mdx) | :heavy_check_mark: | Error data for BadRequestResponse | \{
"code": 400,
"message": "Invalid request parameters"
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/conflictresponseerror.mdx b/docs/errors/conflictresponseerror.mdx
new file mode 100644
index 0000000..e3a4847
--- /dev/null
+++ b/docs/errors/conflictresponseerror.mdx
@@ -0,0 +1,14 @@
+---
+title: "ConflictResponseError"
+---
+
+Conflict - Resource conflict or concurrent modification
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
+| `error` | [components.ConflictResponseErrorData](../components/conflictresponseerrordata.mdx) | :heavy_check_mark: | Error data for ConflictResponse | \{
"code": 409,
"message": "Resource conflict. Please try again later."
} |
+| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
+| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/edgenetworktimeoutresponseerror.md b/docs/errors/edgenetworktimeoutresponseerror.mdx
similarity index 86%
rename from docs/errors/edgenetworktimeoutresponseerror.md
rename to docs/errors/edgenetworktimeoutresponseerror.mdx
index 3720bcc..5e48d2e 100644
--- a/docs/errors/edgenetworktimeoutresponseerror.md
+++ b/docs/errors/edgenetworktimeoutresponseerror.mdx
@@ -1,4 +1,6 @@
-# EdgeNetworkTimeoutResponseError
+---
+title: "EdgeNetworkTimeoutResponseError"
+---
Infrastructure Timeout - Provider request timed out at edge network
@@ -7,6 +9,6 @@ Infrastructure Timeout - Provider request timed out at edge network
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
-| `error` | [components.EdgeNetworkTimeoutResponseErrorData](../components/edgenetworktimeoutresponseerrordata.md) | :heavy_check_mark: | Error data for EdgeNetworkTimeoutResponse | {
"code": 524,
"message": "Request timed out. Please try again later."
} |
+| `error` | [components.EdgeNetworkTimeoutResponseErrorData](../components/edgenetworktimeoutresponseerrordata.mdx) | :heavy_check_mark: | Error data for EdgeNetworkTimeoutResponse | \{
"code": 524,
"message": "Request timed out. Please try again later."
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/forbiddenresponseerror.md b/docs/errors/forbiddenresponseerror.mdx
similarity index 84%
rename from docs/errors/forbiddenresponseerror.md
rename to docs/errors/forbiddenresponseerror.mdx
index 8015439..c520471 100644
--- a/docs/errors/forbiddenresponseerror.md
+++ b/docs/errors/forbiddenresponseerror.mdx
@@ -1,4 +1,6 @@
-# ForbiddenResponseError
+---
+title: "ForbiddenResponseError"
+---
Forbidden - Authentication successful but insufficient permissions
@@ -7,6 +9,6 @@ Forbidden - Authentication successful but insufficient permissions
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
-| `error` | [components.ForbiddenResponseErrorData](../components/forbiddenresponseerrordata.md) | :heavy_check_mark: | Error data for ForbiddenResponse | {
"code": 403,
"message": "Only management keys can perform this operation"
} |
+| `error` | [components.ForbiddenResponseErrorData](../components/forbiddenresponseerrordata.mdx) | :heavy_check_mark: | Error data for ForbiddenResponse | \{
"code": 403,
"message": "Only management keys can perform this operation"
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/internalserverresponseerror.md b/docs/errors/internalserverresponseerror.mdx
similarity index 86%
rename from docs/errors/internalserverresponseerror.md
rename to docs/errors/internalserverresponseerror.mdx
index 5db18a9..c4a95bf 100644
--- a/docs/errors/internalserverresponseerror.md
+++ b/docs/errors/internalserverresponseerror.mdx
@@ -1,4 +1,6 @@
-# InternalServerResponseError
+---
+title: "InternalServerResponseError"
+---
Internal Server Error - Unexpected server error
@@ -7,6 +9,6 @@ Internal Server Error - Unexpected server error
| Field | Type | Required | Description | Example |
| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
-| `error` | [components.InternalServerResponseErrorData](../components/internalserverresponseerrordata.md) | :heavy_check_mark: | Error data for InternalServerResponse | {
"code": 500,
"message": "Internal Server Error"
} |
+| `error` | [components.InternalServerResponseErrorData](../components/internalserverresponseerrordata.mdx) | :heavy_check_mark: | Error data for InternalServerResponse | \{
"code": 500,
"message": "Internal Server Error"
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/notfoundresponseerror.md b/docs/errors/notfoundresponseerror.mdx
similarity index 84%
rename from docs/errors/notfoundresponseerror.md
rename to docs/errors/notfoundresponseerror.mdx
index 3f37747..c9c23ff 100644
--- a/docs/errors/notfoundresponseerror.md
+++ b/docs/errors/notfoundresponseerror.mdx
@@ -1,4 +1,6 @@
-# NotFoundResponseError
+---
+title: "NotFoundResponseError"
+---
Not Found - Resource does not exist
@@ -7,6 +9,6 @@ Not Found - Resource does not exist
| Field | Type | Required | Description | Example |
| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
-| `error` | [components.NotFoundResponseErrorData](../components/notfoundresponseerrordata.md) | :heavy_check_mark: | Error data for NotFoundResponse | {
"code": 404,
"message": "Resource not found"
} |
+| `error` | [components.NotFoundResponseErrorData](../components/notfoundresponseerrordata.mdx) | :heavy_check_mark: | Error data for NotFoundResponse | \{
"code": 404,
"message": "Resource not found"
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/payloadtoolargeresponseerror.md b/docs/errors/payloadtoolargeresponseerror.mdx
similarity index 86%
rename from docs/errors/payloadtoolargeresponseerror.md
rename to docs/errors/payloadtoolargeresponseerror.mdx
index 5027338..06c96f0 100644
--- a/docs/errors/payloadtoolargeresponseerror.md
+++ b/docs/errors/payloadtoolargeresponseerror.mdx
@@ -1,4 +1,6 @@
-# PayloadTooLargeResponseError
+---
+title: "PayloadTooLargeResponseError"
+---
Payload Too Large - Request payload exceeds size limits
@@ -7,6 +9,6 @@ Payload Too Large - Request payload exceeds size limits
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
-| `error` | [components.PayloadTooLargeResponseErrorData](../components/payloadtoolargeresponseerrordata.md) | :heavy_check_mark: | Error data for PayloadTooLargeResponse | {
"code": 413,
"message": "Request payload too large"
} |
+| `error` | [components.PayloadTooLargeResponseErrorData](../components/payloadtoolargeresponseerrordata.mdx) | :heavy_check_mark: | Error data for PayloadTooLargeResponse | \{
"code": 413,
"message": "Request payload too large"
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/paymentrequiredresponseerror.md b/docs/errors/paymentrequiredresponseerror.mdx
similarity index 86%
rename from docs/errors/paymentrequiredresponseerror.md
rename to docs/errors/paymentrequiredresponseerror.mdx
index 9743189..959733d 100644
--- a/docs/errors/paymentrequiredresponseerror.md
+++ b/docs/errors/paymentrequiredresponseerror.mdx
@@ -1,4 +1,6 @@
-# PaymentRequiredResponseError
+---
+title: "PaymentRequiredResponseError"
+---
Payment Required - Insufficient credits or quota to complete request
@@ -7,6 +9,6 @@ Payment Required - Insufficient credits or quota to complete request
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
-| `error` | [components.PaymentRequiredResponseErrorData](../components/paymentrequiredresponseerrordata.md) | :heavy_check_mark: | Error data for PaymentRequiredResponse | {
"code": 402,
"message": "Insufficient credits. Add more using https://openrouter.ai/credits"
} |
+| `error` | [components.PaymentRequiredResponseErrorData](../components/paymentrequiredresponseerrordata.mdx) | :heavy_check_mark: | Error data for PaymentRequiredResponse | \{
"code": 402,
"message": "Insufficient credits. Add more using https://openrouter.ai/credits"
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/provideroverloadedresponseerror.md b/docs/errors/provideroverloadedresponseerror.mdx
similarity index 85%
rename from docs/errors/provideroverloadedresponseerror.md
rename to docs/errors/provideroverloadedresponseerror.mdx
index 7a2e578..44e71a2 100644
--- a/docs/errors/provideroverloadedresponseerror.md
+++ b/docs/errors/provideroverloadedresponseerror.mdx
@@ -1,4 +1,6 @@
-# ProviderOverloadedResponseError
+---
+title: "ProviderOverloadedResponseError"
+---
Provider Overloaded - Provider is temporarily overloaded
@@ -7,6 +9,6 @@ Provider Overloaded - Provider is temporarily overloaded
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
-| `error` | [components.ProviderOverloadedResponseErrorData](../components/provideroverloadedresponseerrordata.md) | :heavy_check_mark: | Error data for ProviderOverloadedResponse | {
"code": 529,
"message": "Provider returned error"
} |
+| `error` | [components.ProviderOverloadedResponseErrorData](../components/provideroverloadedresponseerrordata.mdx) | :heavy_check_mark: | Error data for ProviderOverloadedResponse | \{
"code": 529,
"message": "Provider returned error"
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/requesttimeoutresponseerror.md b/docs/errors/requesttimeoutresponseerror.mdx
similarity index 86%
rename from docs/errors/requesttimeoutresponseerror.md
rename to docs/errors/requesttimeoutresponseerror.mdx
index 4029799..c7bdd74 100644
--- a/docs/errors/requesttimeoutresponseerror.md
+++ b/docs/errors/requesttimeoutresponseerror.mdx
@@ -1,4 +1,6 @@
-# RequestTimeoutResponseError
+---
+title: "RequestTimeoutResponseError"
+---
Request Timeout - Operation exceeded time limit
@@ -7,6 +9,6 @@ Request Timeout - Operation exceeded time limit
| Field | Type | Required | Description | Example |
| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
-| `error` | [components.RequestTimeoutResponseErrorData](../components/requesttimeoutresponseerrordata.md) | :heavy_check_mark: | Error data for RequestTimeoutResponse | {
"code": 408,
"message": "Operation timed out. Please try again later."
} |
+| `error` | [components.RequestTimeoutResponseErrorData](../components/requesttimeoutresponseerrordata.mdx) | :heavy_check_mark: | Error data for RequestTimeoutResponse | \{
"code": 408,
"message": "Operation timed out. Please try again later."
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/serviceunavailableresponseerror.md b/docs/errors/serviceunavailableresponseerror.mdx
similarity index 85%
rename from docs/errors/serviceunavailableresponseerror.md
rename to docs/errors/serviceunavailableresponseerror.mdx
index ac2fed9..978785d 100644
--- a/docs/errors/serviceunavailableresponseerror.md
+++ b/docs/errors/serviceunavailableresponseerror.mdx
@@ -1,4 +1,6 @@
-# ServiceUnavailableResponseError
+---
+title: "ServiceUnavailableResponseError"
+---
Service Unavailable - Service temporarily unavailable
@@ -7,6 +9,6 @@ Service Unavailable - Service temporarily unavailable
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
-| `error` | [components.ServiceUnavailableResponseErrorData](../components/serviceunavailableresponseerrordata.md) | :heavy_check_mark: | Error data for ServiceUnavailableResponse | {
"code": 503,
"message": "Service temporarily unavailable"
} |
+| `error` | [components.ServiceUnavailableResponseErrorData](../components/serviceunavailableresponseerrordata.mdx) | :heavy_check_mark: | Error data for ServiceUnavailableResponse | \{
"code": 503,
"message": "Service temporarily unavailable"
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/toomanyrequestsresponseerror.md b/docs/errors/toomanyrequestsresponseerror.mdx
similarity index 86%
rename from docs/errors/toomanyrequestsresponseerror.md
rename to docs/errors/toomanyrequestsresponseerror.mdx
index 294f695..dae39da 100644
--- a/docs/errors/toomanyrequestsresponseerror.md
+++ b/docs/errors/toomanyrequestsresponseerror.mdx
@@ -1,4 +1,6 @@
-# TooManyRequestsResponseError
+---
+title: "TooManyRequestsResponseError"
+---
Too Many Requests - Rate limit exceeded
@@ -7,6 +9,6 @@ Too Many Requests - Rate limit exceeded
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ |
-| `error` | [components.TooManyRequestsResponseErrorData](../components/toomanyrequestsresponseerrordata.md) | :heavy_check_mark: | Error data for TooManyRequestsResponse | {
"code": 429,
"message": "Rate limit exceeded"
} |
+| `error` | [components.TooManyRequestsResponseErrorData](../components/toomanyrequestsresponseerrordata.mdx) | :heavy_check_mark: | Error data for TooManyRequestsResponse | \{
"code": 429,
"message": "Rate limit exceeded"
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/unauthorizedresponseerror.md b/docs/errors/unauthorizedresponseerror.mdx
similarity index 84%
rename from docs/errors/unauthorizedresponseerror.md
rename to docs/errors/unauthorizedresponseerror.mdx
index 50d78da..5a1e49f 100644
--- a/docs/errors/unauthorizedresponseerror.md
+++ b/docs/errors/unauthorizedresponseerror.mdx
@@ -1,4 +1,6 @@
-# UnauthorizedResponseError
+---
+title: "UnauthorizedResponseError"
+---
Unauthorized - Authentication required or invalid credentials
@@ -7,6 +9,6 @@ Unauthorized - Authentication required or invalid credentials
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
-| `error` | [components.UnauthorizedResponseErrorData](../components/unauthorizedresponseerrordata.md) | :heavy_check_mark: | Error data for UnauthorizedResponse | {
"code": 401,
"message": "Missing Authentication header"
} |
+| `error` | [components.UnauthorizedResponseErrorData](../components/unauthorizedresponseerrordata.mdx) | :heavy_check_mark: | Error data for UnauthorizedResponse | \{
"code": 401,
"message": "Missing Authentication header"
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/errors/unprocessableentityresponseerror.md b/docs/errors/unprocessableentityresponseerror.mdx
similarity index 88%
rename from docs/errors/unprocessableentityresponseerror.md
rename to docs/errors/unprocessableentityresponseerror.mdx
index 77b5572..f8c3a25 100644
--- a/docs/errors/unprocessableentityresponseerror.md
+++ b/docs/errors/unprocessableentityresponseerror.mdx
@@ -1,4 +1,6 @@
-# UnprocessableEntityResponseError
+---
+title: "UnprocessableEntityResponseError"
+---
Unprocessable Entity - Semantic validation failure
@@ -7,6 +9,6 @@ Unprocessable Entity - Semantic validation failure
| Field | Type | Required | Description | Example |
| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
-| `error` | [components.UnprocessableEntityResponseErrorData](../components/unprocessableentityresponseerrordata.md) | :heavy_check_mark: | Error data for UnprocessableEntityResponse | {
"code": 422,
"message": "Invalid argument"
} |
+| `error` | [components.UnprocessableEntityResponseErrorData](../components/unprocessableentityresponseerrordata.mdx) | :heavy_check_mark: | Error data for UnprocessableEntityResponse | \{
"code": 422,
"message": "Invalid argument"
} |
| `openrouter_metadata` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | N/A | |
| `user_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/operations/createkeysglobals.md b/docs/models/internal/globals.mdx
similarity index 99%
rename from docs/operations/createkeysglobals.md
rename to docs/models/internal/globals.mdx
index 6fea461..905f480 100644
--- a/docs/operations/createkeysglobals.md
+++ b/docs/models/internal/globals.mdx
@@ -1,5 +1,6 @@
-# CreateKeysGlobals
-
+---
+title: "Globals"
+---
## Fields
diff --git a/docs/models/utils/retryconfig.md b/docs/models/utils/retryconfig.mdx
similarity index 97%
rename from docs/models/utils/retryconfig.md
rename to docs/models/utils/retryconfig.mdx
index 69dd549..5342a8f 100644
--- a/docs/models/utils/retryconfig.md
+++ b/docs/models/utils/retryconfig.mdx
@@ -1,4 +1,6 @@
-# RetryConfig
+---
+title: "RetryConfig"
+---
Allows customizing the default retry configuration. Only usable with methods that mention they support retries.
diff --git a/docs/operations/arena.mdx b/docs/operations/arena.mdx
new file mode 100644
index 0000000..455ab60
--- /dev/null
+++ b/docs/operations/arena.mdx
@@ -0,0 +1,23 @@
+---
+title: "Arena"
+---
+
+Design Arena only: arena to query. Defaults to `models` when source is `design-arena`.
+
+## Example Usage
+
+```python
+from openrouter.operations import Arena
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Arena = "models"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"models"`
+- `"builders"`
+- `"agents"`
diff --git a/docs/operations/bulkaddworkspacemembersglobals.mdx b/docs/operations/bulkaddworkspacemembersglobals.mdx
new file mode 100644
index 0000000..a53ed36
--- /dev/null
+++ b/docs/operations/bulkaddworkspacemembersglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "BulkAddWorkspaceMembersGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/bulkaddworkspacemembersrequest.mdx b/docs/operations/bulkaddworkspacemembersrequest.mdx
new file mode 100644
index 0000000..5b61022
--- /dev/null
+++ b/docs/operations/bulkaddworkspacemembersrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "BulkAddWorkspaceMembersRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `bulk_add_workspace_members_request` | [components.BulkAddWorkspaceMembersRequest](../components/bulkaddworkspacemembersrequest.mdx) | :heavy_check_mark: | N/A | \{
"user_ids": [
"user_abc123",
"user_def456"
]
} |
\ No newline at end of file
diff --git a/docs/operations/bulkassignkeystoguardrailglobals.mdx b/docs/operations/bulkassignkeystoguardrailglobals.mdx
new file mode 100644
index 0000000..c5e78a4
--- /dev/null
+++ b/docs/operations/bulkassignkeystoguardrailglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "BulkAssignKeysToGuardrailGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/bulkassignkeystoguardrailrequest.md b/docs/operations/bulkassignkeystoguardrailrequest.mdx
similarity index 91%
rename from docs/operations/bulkassignkeystoguardrailrequest.md
rename to docs/operations/bulkassignkeystoguardrailrequest.mdx
index b179068..47d8a38 100644
--- a/docs/operations/bulkassignkeystoguardrailrequest.md
+++ b/docs/operations/bulkassignkeystoguardrailrequest.mdx
@@ -1,5 +1,6 @@
-# BulkAssignKeysToGuardrailRequest
-
+---
+title: "BulkAssignKeysToGuardrailRequest"
+---
## Fields
@@ -9,4 +10,4 @@
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `id` | *str* | :heavy_check_mark: | The unique identifier of the guardrail | 550e8400-e29b-41d4-a716-446655440000 |
-| `bulk_assign_keys_request` | [components.BulkAssignKeysRequest](../components/bulkassignkeysrequest.md) | :heavy_check_mark: | N/A | {
"key_hashes": [
"c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93"
]
} |
\ No newline at end of file
+| `bulk_assign_keys_request` | [components.BulkAssignKeysRequest](../components/bulkassignkeysrequest.mdx) | :heavy_check_mark: | N/A | \{
"key_hashes": [
"c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93"
]
} |
\ No newline at end of file
diff --git a/docs/operations/bulkassignmemberstoguardrailglobals.mdx b/docs/operations/bulkassignmemberstoguardrailglobals.mdx
new file mode 100644
index 0000000..4b04ca8
--- /dev/null
+++ b/docs/operations/bulkassignmemberstoguardrailglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "BulkAssignMembersToGuardrailGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/bulkassignmemberstoguardrailrequest.md b/docs/operations/bulkassignmemberstoguardrailrequest.mdx
similarity index 90%
rename from docs/operations/bulkassignmemberstoguardrailrequest.md
rename to docs/operations/bulkassignmemberstoguardrailrequest.mdx
index f15474f..ede199d 100644
--- a/docs/operations/bulkassignmemberstoguardrailrequest.md
+++ b/docs/operations/bulkassignmemberstoguardrailrequest.mdx
@@ -1,5 +1,6 @@
-# BulkAssignMembersToGuardrailRequest
-
+---
+title: "BulkAssignMembersToGuardrailRequest"
+---
## Fields
@@ -9,4 +10,4 @@
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `id` | *str* | :heavy_check_mark: | The unique identifier of the guardrail | 550e8400-e29b-41d4-a716-446655440000 |
-| `bulk_assign_members_request` | [components.BulkAssignMembersRequest](../components/bulkassignmembersrequest.md) | :heavy_check_mark: | N/A | {
"member_user_ids": [
"user_abc123",
"user_def456"
]
} |
\ No newline at end of file
+| `bulk_assign_members_request` | [components.BulkAssignMembersRequest](../components/bulkassignmembersrequest.mdx) | :heavy_check_mark: | N/A | \{
"member_user_ids": [
"user_abc123",
"user_def456"
]
} |
\ No newline at end of file
diff --git a/docs/operations/bulkremoveworkspacemembersglobals.mdx b/docs/operations/bulkremoveworkspacemembersglobals.mdx
new file mode 100644
index 0000000..9b483f8
--- /dev/null
+++ b/docs/operations/bulkremoveworkspacemembersglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "BulkRemoveWorkspaceMembersGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/bulkremoveworkspacemembersrequest.mdx b/docs/operations/bulkremoveworkspacemembersrequest.mdx
new file mode 100644
index 0000000..40b3488
--- /dev/null
+++ b/docs/operations/bulkremoveworkspacemembersrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "BulkRemoveWorkspaceMembersRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `bulk_remove_workspace_members_request` | [components.BulkRemoveWorkspaceMembersRequest](../components/bulkremoveworkspacemembersrequest.mdx) | :heavy_check_mark: | N/A | \{
"user_ids": [
"user_abc123",
"user_def456"
]
} |
\ No newline at end of file
diff --git a/docs/operations/bulkunassignkeysfromguardrailglobals.mdx b/docs/operations/bulkunassignkeysfromguardrailglobals.mdx
new file mode 100644
index 0000000..0fee944
--- /dev/null
+++ b/docs/operations/bulkunassignkeysfromguardrailglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "BulkUnassignKeysFromGuardrailGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/bulkunassignkeysfromguardrailrequest.md b/docs/operations/bulkunassignkeysfromguardrailrequest.mdx
similarity index 90%
rename from docs/operations/bulkunassignkeysfromguardrailrequest.md
rename to docs/operations/bulkunassignkeysfromguardrailrequest.mdx
index eb2cae6..fba4dbe 100644
--- a/docs/operations/bulkunassignkeysfromguardrailrequest.md
+++ b/docs/operations/bulkunassignkeysfromguardrailrequest.mdx
@@ -1,5 +1,6 @@
-# BulkUnassignKeysFromGuardrailRequest
-
+---
+title: "BulkUnassignKeysFromGuardrailRequest"
+---
## Fields
@@ -9,4 +10,4 @@
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `id` | *str* | :heavy_check_mark: | The unique identifier of the guardrail | 550e8400-e29b-41d4-a716-446655440000 |
-| `bulk_unassign_keys_request` | [components.BulkUnassignKeysRequest](../components/bulkunassignkeysrequest.md) | :heavy_check_mark: | N/A | {
"key_hashes": [
"c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93"
]
} |
\ No newline at end of file
+| `bulk_unassign_keys_request` | [components.BulkUnassignKeysRequest](../components/bulkunassignkeysrequest.mdx) | :heavy_check_mark: | N/A | \{
"key_hashes": [
"c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93"
]
} |
\ No newline at end of file
diff --git a/docs/operations/bulkunassignmembersfromguardrailglobals.md b/docs/operations/bulkunassignmembersfromguardrailglobals.md
deleted file mode 100644
index 5df6bb6..0000000
--- a/docs/operations/bulkunassignmembersfromguardrailglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# BulkUnassignMembersFromGuardrailGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/bulkunassignmembersfromguardrailglobals.mdx b/docs/operations/bulkunassignmembersfromguardrailglobals.mdx
new file mode 100644
index 0000000..e21cf59
--- /dev/null
+++ b/docs/operations/bulkunassignmembersfromguardrailglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "BulkUnassignMembersFromGuardrailGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/bulkunassignmembersfromguardrailrequest.md b/docs/operations/bulkunassignmembersfromguardrailrequest.mdx
similarity index 90%
rename from docs/operations/bulkunassignmembersfromguardrailrequest.md
rename to docs/operations/bulkunassignmembersfromguardrailrequest.mdx
index 31832c5..de22a4c 100644
--- a/docs/operations/bulkunassignmembersfromguardrailrequest.md
+++ b/docs/operations/bulkunassignmembersfromguardrailrequest.mdx
@@ -1,5 +1,6 @@
-# BulkUnassignMembersFromGuardrailRequest
-
+---
+title: "BulkUnassignMembersFromGuardrailRequest"
+---
## Fields
@@ -9,4 +10,4 @@
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `id` | *str* | :heavy_check_mark: | The unique identifier of the guardrail | 550e8400-e29b-41d4-a716-446655440000 |
-| `bulk_unassign_members_request` | [components.BulkUnassignMembersRequest](../components/bulkunassignmembersrequest.md) | :heavy_check_mark: | N/A | {
"member_user_ids": [
"user_abc123",
"user_def456"
]
} |
\ No newline at end of file
+| `bulk_unassign_members_request` | [components.BulkUnassignMembersRequest](../components/bulkunassignmembersrequest.mdx) | :heavy_check_mark: | N/A | \{
"member_user_ids": [
"user_abc123",
"user_def456"
]
} |
\ No newline at end of file
diff --git a/docs/operations/content.md b/docs/operations/content.mdx
similarity index 95%
rename from docs/operations/content.md
rename to docs/operations/content.mdx
index 22aef15..1df0aac 100644
--- a/docs/operations/content.md
+++ b/docs/operations/content.mdx
@@ -1,5 +1,6 @@
-# Content
-
+---
+title: "Content"
+---
## Supported Types
diff --git a/docs/operations/contentimageurl.md b/docs/operations/contentimageurl.mdx
similarity index 61%
rename from docs/operations/contentimageurl.md
rename to docs/operations/contentimageurl.mdx
index 7fedfe3..d0e186a 100644
--- a/docs/operations/contentimageurl.md
+++ b/docs/operations/contentimageurl.mdx
@@ -1,9 +1,10 @@
-# ContentImageURL
-
+---
+title: "ContentImageURL"
+---
## Fields
| Field | Type | Required | Description |
| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
-| `image_url` | [operations.ImageURL](../operations/imageurl.md) | :heavy_check_mark: | N/A |
-| `type` | [operations.TypeImageURL](../operations/typeimageurl.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `image_url` | [operations.ImageURL](../operations/imageurl.mdx) | :heavy_check_mark: | N/A |
+| `type` | [operations.TypeImageURL](../operations/typeimageurl.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/contenttext.md b/docs/operations/contenttext.mdx
similarity index 80%
rename from docs/operations/contenttext.md
rename to docs/operations/contenttext.mdx
index 522f497..08e418f 100644
--- a/docs/operations/contenttext.md
+++ b/docs/operations/contenttext.mdx
@@ -1,9 +1,10 @@
-# ContentText
-
+---
+title: "ContentText"
+---
## Fields
| Field | Type | Required | Description |
| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
| `text` | *str* | :heavy_check_mark: | N/A |
-| `type` | [operations.TypeText](../operations/typetext.md) | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `type` | [operations.TypeText](../operations/typetext.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/costdetails.mdx b/docs/operations/costdetails.mdx
new file mode 100644
index 0000000..753493b
--- /dev/null
+++ b/docs/operations/costdetails.mdx
@@ -0,0 +1,14 @@
+---
+title: "CostDetails"
+---
+
+Breakdown of upstream inference costs
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------- | ------------------------------------- | ------------------------------------- | ------------------------------------- |
+| `upstream_inference_completions_cost` | *float* | :heavy_check_mark: | N/A |
+| `upstream_inference_cost` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A |
+| `upstream_inference_prompt_cost` | *float* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/createaudiospeechglobals.mdx b/docs/operations/createaudiospeechglobals.mdx
new file mode 100644
index 0000000..78fe3a3
--- /dev/null
+++ b/docs/operations/createaudiospeechglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreateAudioSpeechGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createaudiospeechrequest.mdx b/docs/operations/createaudiospeechrequest.mdx
new file mode 100644
index 0000000..176fe25
--- /dev/null
+++ b/docs/operations/createaudiospeechrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "CreateAudioSpeechRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `speech_request` | [components.SpeechRequest](../components/speechrequest.mdx) | :heavy_check_mark: | N/A | \{
"input": "Hello world",
"model": "elevenlabs/eleven-turbo-v2",
"response_format": "pcm",
"speed": 1,
"voice": "alloy"
} |
\ No newline at end of file
diff --git a/docs/operations/createaudiotranscriptionsglobals.mdx b/docs/operations/createaudiotranscriptionsglobals.mdx
new file mode 100644
index 0000000..2427dca
--- /dev/null
+++ b/docs/operations/createaudiotranscriptionsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreateAudioTranscriptionsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createaudiotranscriptionsrequest.mdx b/docs/operations/createaudiotranscriptionsrequest.mdx
new file mode 100644
index 0000000..63faa86
--- /dev/null
+++ b/docs/operations/createaudiotranscriptionsrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "CreateAudioTranscriptionsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `stt_request` | [components.STTRequest](../components/sttrequest.mdx) | :heavy_check_mark: | N/A | \{
"input_audio": \{
"data": "UklGRiQA...",
"format": "wav"
},
"language": "en",
"model": "openai/whisper-large-v3"
} |
\ No newline at end of file
diff --git a/docs/operations/createauthkeyscodecodechallengemethod.md b/docs/operations/createauthkeyscodecodechallengemethod.md
deleted file mode 100644
index cd496b7..0000000
--- a/docs/operations/createauthkeyscodecodechallengemethod.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# CreateAuthKeysCodeCodeChallengeMethod
-
-The method used to generate the code challenge
-
-
-## Values
-
-| Name | Value |
-| ------- | ------- |
-| `S256` | S256 |
-| `PLAIN` | plain |
\ No newline at end of file
diff --git a/docs/operations/createauthkeyscodecodechallengemethod.mdx b/docs/operations/createauthkeyscodecodechallengemethod.mdx
new file mode 100644
index 0000000..a3c062d
--- /dev/null
+++ b/docs/operations/createauthkeyscodecodechallengemethod.mdx
@@ -0,0 +1,22 @@
+---
+title: "CreateAuthKeysCodeCodeChallengeMethod"
+---
+
+The method used to generate the code challenge
+
+## Example Usage
+
+```python
+from openrouter.operations import CreateAuthKeysCodeCodeChallengeMethod
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: CreateAuthKeysCodeCodeChallengeMethod = "S256"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"S256"`
+- `"plain"`
diff --git a/docs/operations/createauthkeyscodedata.md b/docs/operations/createauthkeyscodedata.mdx
similarity index 97%
rename from docs/operations/createauthkeyscodedata.md
rename to docs/operations/createauthkeyscodedata.mdx
index 23309c7..7089ba1 100644
--- a/docs/operations/createauthkeyscodedata.md
+++ b/docs/operations/createauthkeyscodedata.mdx
@@ -1,4 +1,6 @@
-# CreateAuthKeysCodeData
+---
+title: "CreateAuthKeysCodeData"
+---
Auth code data
diff --git a/docs/operations/createauthkeyscodeglobals.mdx b/docs/operations/createauthkeyscodeglobals.mdx
new file mode 100644
index 0000000..4332a24
--- /dev/null
+++ b/docs/operations/createauthkeyscodeglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreateAuthKeysCodeGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createauthkeyscoderequest.md b/docs/operations/createauthkeyscoderequest.mdx
similarity index 91%
rename from docs/operations/createauthkeyscoderequest.md
rename to docs/operations/createauthkeyscoderequest.mdx
index 6dc0617..cdafce6 100644
--- a/docs/operations/createauthkeyscoderequest.md
+++ b/docs/operations/createauthkeyscoderequest.mdx
@@ -1,5 +1,6 @@
-# CreateAuthKeysCodeRequest
-
+---
+title: "CreateAuthKeysCodeRequest"
+---
## Fields
@@ -8,4 +9,4 @@
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `request_body` | [operations.CreateAuthKeysCodeRequestBody](../operations/createauthkeyscoderequestbody.md) | :heavy_check_mark: | N/A | {
"callback_url": "https://myapp.com/auth/callback",
"code_challenge": "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM",
"code_challenge_method": "S256",
"limit": 100
} |
\ No newline at end of file
+| `request_body` | [operations.CreateAuthKeysCodeRequestBody](../operations/createauthkeyscoderequestbody.mdx) | :heavy_check_mark: | N/A | \{
"callback_url": "https://myapp.com/auth/callback",
"code_challenge": "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM",
"code_challenge_method": "S256",
"limit": 100
} |
\ No newline at end of file
diff --git a/docs/operations/createauthkeyscoderequestbody.md b/docs/operations/createauthkeyscoderequestbody.mdx
similarity index 88%
rename from docs/operations/createauthkeyscoderequestbody.md
rename to docs/operations/createauthkeyscoderequestbody.mdx
index d37c219..2b4c4db 100644
--- a/docs/operations/createauthkeyscoderequestbody.md
+++ b/docs/operations/createauthkeyscoderequestbody.mdx
@@ -1,5 +1,6 @@
-# CreateAuthKeysCodeRequestBody
-
+---
+title: "CreateAuthKeysCodeRequestBody"
+---
## Fields
@@ -7,9 +8,9 @@
| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `callback_url` | *str* | :heavy_check_mark: | The callback URL to redirect to after authorization. Supports https URLs and localhost/127.0.0.1 URLs on any port for local CLI tools. | https://myapp.com/auth/callback |
| `code_challenge` | *Optional[str]* | :heavy_minus_sign: | PKCE code challenge for enhanced security | E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM |
-| `code_challenge_method` | [Optional[operations.CreateAuthKeysCodeCodeChallengeMethod]](../operations/createauthkeyscodecodechallengemethod.md) | :heavy_minus_sign: | The method used to generate the code challenge | S256 |
+| `code_challenge_method` | [Optional[operations.CreateAuthKeysCodeCodeChallengeMethod]](../operations/createauthkeyscodecodechallengemethod.mdx) | :heavy_minus_sign: | The method used to generate the code challenge | S256 |
| `expires_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | Optional expiration time for the API key to be created | 2027-12-31T23:59:59Z |
| `key_label` | *Optional[str]* | :heavy_minus_sign: | Optional custom label for the API key. Defaults to the app name if not provided. | My Custom Key |
| `limit` | *Optional[float]* | :heavy_minus_sign: | Credit limit for the API key to be created | 100 |
-| `usage_limit_type` | [Optional[operations.UsageLimitType]](../operations/usagelimittype.md) | :heavy_minus_sign: | Optional credit limit reset interval. When set, the credit limit resets on this interval. | monthly |
+| `usage_limit_type` | [Optional[operations.UsageLimitType]](../operations/usagelimittype.mdx) | :heavy_minus_sign: | Optional credit limit reset interval. When set, the credit limit resets on this interval. | monthly |
| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Optional workspace ID to associate the API key with | |
\ No newline at end of file
diff --git a/docs/operations/createauthkeyscoderesponse.md b/docs/operations/createauthkeyscoderesponse.mdx
similarity index 74%
rename from docs/operations/createauthkeyscoderesponse.md
rename to docs/operations/createauthkeyscoderesponse.mdx
index 8951a7a..5044f57 100644
--- a/docs/operations/createauthkeyscoderesponse.md
+++ b/docs/operations/createauthkeyscoderesponse.mdx
@@ -1,4 +1,6 @@
-# CreateAuthKeysCodeResponse
+---
+title: "CreateAuthKeysCodeResponse"
+---
Successfully created authorization code
@@ -7,4 +9,4 @@ Successfully created authorization code
| Field | Type | Required | Description | Example |
| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
-| `data` | [operations.CreateAuthKeysCodeData](../operations/createauthkeyscodedata.md) | :heavy_check_mark: | Auth code data | {
"app_id": 12345,
"created_at": "2025-08-24T10:30:00Z",
"id": "auth_code_xyz789"
} |
\ No newline at end of file
+| `data` | [operations.CreateAuthKeysCodeData](../operations/createauthkeyscodedata.mdx) | :heavy_check_mark: | Auth code data | \{
"app_id": 12345,
"created_at": "2025-08-24T10:30:00Z",
"id": "auth_code_xyz789"
} |
\ No newline at end of file
diff --git a/docs/operations/createbyokkeyglobals.mdx b/docs/operations/createbyokkeyglobals.mdx
new file mode 100644
index 0000000..7a4e3e7
--- /dev/null
+++ b/docs/operations/createbyokkeyglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreateBYOKKeyGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createbyokkeyrequest.mdx b/docs/operations/createbyokkeyrequest.mdx
new file mode 100644
index 0000000..f8b09da
--- /dev/null
+++ b/docs/operations/createbyokkeyrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "CreateBYOKKeyRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `create_byok_key_request` | [components.CreateBYOKKeyRequest](../components/createbyokkeyrequest.mdx) | :heavy_check_mark: | N/A | \{
"key": "sk-proj-abc123...",
"name": "Production OpenAI Key",
"provider": "openai"
} |
\ No newline at end of file
diff --git a/docs/operations/createembeddingsdata.md b/docs/operations/createembeddingsdata.mdx
similarity index 70%
rename from docs/operations/createembeddingsdata.md
rename to docs/operations/createembeddingsdata.mdx
index c473e71..07670e0 100644
--- a/docs/operations/createembeddingsdata.md
+++ b/docs/operations/createembeddingsdata.mdx
@@ -1,4 +1,6 @@
-# CreateEmbeddingsData
+---
+title: "CreateEmbeddingsData"
+---
A single embedding object
@@ -7,6 +9,6 @@ A single embedding object
| Field | Type | Required | Description | Example |
| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
-| `embedding` | [operations.Embedding](../operations/embedding.md) | :heavy_check_mark: | Embedding vector as an array of floats or a base64 string | [
0.0023064255,
-0.009327292,
0.015797347
] |
+| `embedding` | [operations.Embedding](../operations/embedding.mdx) | :heavy_check_mark: | Embedding vector as an array of floats or a base64 string | [
0.0023064255,
-0.009327292,
0.015797347
] |
| `index` | *Optional[int]* | :heavy_minus_sign: | Index of the embedding in the input list | 0 |
-| `object` | [operations.ObjectEmbedding](../operations/objectembedding.md) | :heavy_check_mark: | N/A | |
\ No newline at end of file
+| `object` | [operations.ObjectEmbedding](../operations/objectembedding.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/operations/createembeddingsglobals.mdx b/docs/operations/createembeddingsglobals.mdx
new file mode 100644
index 0000000..2325d62
--- /dev/null
+++ b/docs/operations/createembeddingsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreateEmbeddingsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createembeddingsrequest.md b/docs/operations/createembeddingsrequest.mdx
similarity index 89%
rename from docs/operations/createembeddingsrequest.md
rename to docs/operations/createembeddingsrequest.mdx
index 9b7a73a..6d20f01 100644
--- a/docs/operations/createembeddingsrequest.md
+++ b/docs/operations/createembeddingsrequest.mdx
@@ -1,5 +1,6 @@
-# CreateEmbeddingsRequest
-
+---
+title: "CreateEmbeddingsRequest"
+---
## Fields
@@ -8,4 +9,4 @@
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `request_body` | [operations.CreateEmbeddingsRequestBody](../operations/createembeddingsrequestbody.md) | :heavy_check_mark: | N/A | {
"dimensions": 1536,
"input": "The quick brown fox jumps over the lazy dog",
"model": "openai/text-embedding-3-small"
} |
\ No newline at end of file
+| `request_body` | [operations.CreateEmbeddingsRequestBody](../operations/createembeddingsrequestbody.mdx) | :heavy_check_mark: | N/A | \{
"dimensions": 1536,
"input": "The quick brown fox jumps over the lazy dog",
"model": "openai/text-embedding-3-small"
} |
\ No newline at end of file
diff --git a/docs/operations/createembeddingsrequestbody.md b/docs/operations/createembeddingsrequestbody.mdx
similarity index 76%
rename from docs/operations/createembeddingsrequestbody.md
rename to docs/operations/createembeddingsrequestbody.mdx
index 9ea8938..a669d4e 100644
--- a/docs/operations/createembeddingsrequestbody.md
+++ b/docs/operations/createembeddingsrequestbody.mdx
@@ -1,4 +1,6 @@
-# CreateEmbeddingsRequestBody
+---
+title: "CreateEmbeddingsRequestBody"
+---
Embeddings request input
@@ -8,9 +10,9 @@ Embeddings request input
| Field | Type | Required | Description | Example |
| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| `dimensions` | *Optional[int]* | :heavy_minus_sign: | The number of dimensions for the output embeddings | 1536 |
-| `encoding_format` | [Optional[operations.EncodingFormat]](../operations/encodingformat.md) | :heavy_minus_sign: | The format of the output embeddings | float |
-| `input` | [operations.InputUnion](../operations/inputunion.md) | :heavy_check_mark: | Text, token, or multimodal input(s) to embed | The quick brown fox jumps over the lazy dog |
+| `encoding_format` | [Optional[operations.EncodingFormat]](../operations/encodingformat.mdx) | :heavy_minus_sign: | The format of the output embeddings | float |
+| `input` | [operations.InputUnion](../operations/inputunion.mdx) | :heavy_check_mark: | Text, token, or multimodal input(s) to embed | The quick brown fox jumps over the lazy dog |
| `input_type` | *Optional[str]* | :heavy_minus_sign: | The type of input (e.g. search_query, search_document) | search_query |
| `model` | *str* | :heavy_check_mark: | The model to use for embeddings | openai/text-embedding-3-small |
-| `provider` | [OptionalNullable[components.ProviderPreferences]](../components/providerpreferences.md) | :heavy_minus_sign: | N/A | {
"allow_fallbacks": true
} |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../components/providerpreferences.mdx) | :heavy_minus_sign: | N/A | \{
"allow_fallbacks": true
} |
| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier for the end-user | user-1234 |
\ No newline at end of file
diff --git a/docs/operations/createembeddingsresponse.md b/docs/operations/createembeddingsresponse.mdx
similarity index 83%
rename from docs/operations/createembeddingsresponse.md
rename to docs/operations/createembeddingsresponse.mdx
index 4c379be..b845fd2 100644
--- a/docs/operations/createembeddingsresponse.md
+++ b/docs/operations/createembeddingsresponse.mdx
@@ -1,5 +1,6 @@
-# CreateEmbeddingsResponse
-
+---
+title: "CreateEmbeddingsResponse"
+---
## Supported Types
diff --git a/docs/operations/createembeddingsresponsebody.md b/docs/operations/createembeddingsresponsebody.mdx
similarity index 68%
rename from docs/operations/createembeddingsresponsebody.md
rename to docs/operations/createembeddingsresponsebody.mdx
index 1ff75cb..4efeda7 100644
--- a/docs/operations/createembeddingsresponsebody.md
+++ b/docs/operations/createembeddingsresponsebody.mdx
@@ -1,4 +1,6 @@
-# CreateEmbeddingsResponseBody
+---
+title: "CreateEmbeddingsResponseBody"
+---
Embeddings response containing embedding vectors
@@ -7,8 +9,8 @@ Embeddings response containing embedding vectors
| Field | Type | Required | Description | Example |
| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
-| `data` | List[[operations.CreateEmbeddingsData](../operations/createembeddingsdata.md)] | :heavy_check_mark: | List of embedding objects | [
{
"embedding": [
0.0023064255,
-0.009327292,
0.015797347
],
"index": 0,
"object": "embedding"
}
] |
+| `data` | List[[operations.CreateEmbeddingsData](../operations/createembeddingsdata.mdx)] | :heavy_check_mark: | List of embedding objects | [
\{
"embedding": [
0.0023064255,
-0.009327292,
0.015797347
],
"index": 0,
"object": "embedding"
}
] |
| `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the embeddings response | embd-1234567890 |
| `model` | *str* | :heavy_check_mark: | The model used for embeddings | openai/text-embedding-3-small |
-| `object` | [operations.Object](../operations/object.md) | :heavy_check_mark: | N/A | |
-| `usage` | [Optional[operations.CreateEmbeddingsUsage]](../operations/createembeddingsusage.md) | :heavy_minus_sign: | Token usage statistics | {
"prompt_tokens": 8,
"total_tokens": 8
} |
\ No newline at end of file
+| `object` | [operations.Object](../operations/object.mdx) | :heavy_check_mark: | N/A | |
+| `usage` | [Optional[operations.CreateEmbeddingsUsage]](../operations/createembeddingsusage.mdx) | :heavy_minus_sign: | Token usage statistics | \{
"prompt_tokens": 8,
"total_tokens": 8
} |
\ No newline at end of file
diff --git a/docs/operations/createembeddingsusage.mdx b/docs/operations/createembeddingsusage.mdx
new file mode 100644
index 0000000..1050293
--- /dev/null
+++ b/docs/operations/createembeddingsusage.mdx
@@ -0,0 +1,17 @@
+---
+title: "CreateEmbeddingsUsage"
+---
+
+Token usage statistics
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `cost` | *Optional[float]* | :heavy_minus_sign: | Cost of the request in credits | 0.0001 |
+| `cost_details` | [OptionalNullable[operations.CostDetails]](../operations/costdetails.mdx) | :heavy_minus_sign: | Breakdown of upstream inference costs | \{
"upstream_inference_completions_cost": 0.0004,
"upstream_inference_cost": null,
"upstream_inference_prompt_cost": 0.0008
} |
+| `is_byok` | *Optional[bool]* | :heavy_minus_sign: | Whether a request was made using a Bring Your Own Key configuration | |
+| `prompt_tokens` | *int* | :heavy_check_mark: | Number of tokens in the input | 8 |
+| `prompt_tokens_details` | [Optional[operations.PromptTokensDetails]](../operations/prompttokensdetails.mdx) | :heavy_minus_sign: | Per-modality token breakdown. Only present when the input contains 2+ modalities (e.g. text + image) and the upstream provider returns modality-level usage data. Only non-zero modality counts are included. | |
+| `total_tokens` | *int* | :heavy_check_mark: | Total number of tokens used | 8 |
\ No newline at end of file
diff --git a/docs/operations/bulkunassignkeysfromguardrailglobals.md b/docs/operations/createguardrailglobals.mdx
similarity index 98%
rename from docs/operations/bulkunassignkeysfromguardrailglobals.md
rename to docs/operations/createguardrailglobals.mdx
index 8472ab4..89d6df0 100644
--- a/docs/operations/bulkunassignkeysfromguardrailglobals.md
+++ b/docs/operations/createguardrailglobals.mdx
@@ -1,5 +1,6 @@
-# BulkUnassignKeysFromGuardrailGlobals
-
+---
+title: "CreateGuardrailGlobals"
+---
## Fields
diff --git a/docs/operations/createguardrailrequest.md b/docs/operations/createguardrailrequest.mdx
similarity index 94%
rename from docs/operations/createguardrailrequest.md
rename to docs/operations/createguardrailrequest.mdx
index 74958a2..906c993 100644
--- a/docs/operations/createguardrailrequest.md
+++ b/docs/operations/createguardrailrequest.mdx
@@ -1,5 +1,6 @@
-# CreateGuardrailRequest
-
+---
+title: "CreateGuardrailRequest"
+---
## Fields
@@ -8,4 +9,4 @@
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `create_guardrail_request` | [components.CreateGuardrailRequest](../components/createguardrailrequest.md) | :heavy_check_mark: | N/A | {
"allowed_models": null,
"allowed_providers": [
"openai",
"anthropic",
"deepseek"
],
"content_filter_builtins": [
{
"action": "block",
"slug": "regex-prompt-injection"
}
],
"content_filters": null,
"description": "A guardrail for limiting API usage",
"enforce_zdr_anthropic": true,
"enforce_zdr_google": false,
"enforce_zdr_openai": true,
"enforce_zdr_other": false,
"ignored_models": null,
"ignored_providers": null,
"limit_usd": 50,
"name": "My New Guardrail",
"reset_interval": "monthly"
} |
\ No newline at end of file
+| `create_guardrail_request` | [components.CreateGuardrailRequest](../components/createguardrailrequest.mdx) | :heavy_check_mark: | N/A | \{
"allowed_models": null,
"allowed_providers": [
"openai",
"anthropic",
"deepseek"
],
"content_filter_builtins": [
\{
"action": "block",
"slug": "regex-prompt-injection"
}
],
"content_filters": null,
"description": "A guardrail for limiting API usage",
"enforce_zdr_anthropic": true,
"enforce_zdr_google": false,
"enforce_zdr_openai": true,
"enforce_zdr_other": false,
"ignored_models": null,
"ignored_providers": null,
"limit_usd": 50,
"name": "My New Guardrail",
"reset_interval": "monthly"
} |
\ No newline at end of file
diff --git a/docs/operations/createimagesglobals.mdx b/docs/operations/createimagesglobals.mdx
new file mode 100644
index 0000000..98b5f6f
--- /dev/null
+++ b/docs/operations/createimagesglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreateImagesGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createimagesrequest.mdx b/docs/operations/createimagesrequest.mdx
new file mode 100644
index 0000000..5e9a2d7
--- /dev/null
+++ b/docs/operations/createimagesrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "CreateImagesRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `image_generation_request` | [components.ImageGenerationRequest](../components/imagegenerationrequest.mdx) | :heavy_check_mark: | N/A | \{
"model": "bytedance-seed/seedream-4.5",
"prompt": "a red panda astronaut floating in space, studio lighting"
} |
\ No newline at end of file
diff --git a/docs/operations/createimagesresponse.mdx b/docs/operations/createimagesresponse.mdx
new file mode 100644
index 0000000..7763605
--- /dev/null
+++ b/docs/operations/createimagesresponse.mdx
@@ -0,0 +1,18 @@
+---
+title: "CreateImagesResponse"
+---
+
+## Supported Types
+
+### `components.ImageGenerationResponse`
+
+```python
+value: components.ImageGenerationResponse = /* values here */
+```
+
+### `Union[eventstreaming.EventStream[components.ImageStreamingResponseData], eventstreaming.EventStreamAsync[components.ImageStreamingResponseData]]`
+
+```python
+value: Union[eventstreaming.EventStream[components.ImageStreamingResponseData], eventstreaming.EventStreamAsync[components.ImageStreamingResponseData]] = /* values here */
+```
+
diff --git a/docs/operations/createkeysdata.md b/docs/operations/createkeysdata.mdx
similarity index 99%
rename from docs/operations/createkeysdata.md
rename to docs/operations/createkeysdata.mdx
index e60eaf9..61f267f 100644
--- a/docs/operations/createkeysdata.md
+++ b/docs/operations/createkeysdata.mdx
@@ -1,4 +1,6 @@
-# CreateKeysData
+---
+title: "CreateKeysData"
+---
The created API key information
diff --git a/docs/operations/createkeysglobals.mdx b/docs/operations/createkeysglobals.mdx
new file mode 100644
index 0000000..976d57a
--- /dev/null
+++ b/docs/operations/createkeysglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreateKeysGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createkeyslimitreset.md b/docs/operations/createkeyslimitreset.md
deleted file mode 100644
index 5d1659c..0000000
--- a/docs/operations/createkeyslimitreset.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# CreateKeysLimitReset
-
-Type of limit reset for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday.
-
-
-## Values
-
-| Name | Value |
-| --------- | --------- |
-| `DAILY` | daily |
-| `WEEKLY` | weekly |
-| `MONTHLY` | monthly |
\ No newline at end of file
diff --git a/docs/operations/createkeyslimitreset.mdx b/docs/operations/createkeyslimitreset.mdx
new file mode 100644
index 0000000..89738fb
--- /dev/null
+++ b/docs/operations/createkeyslimitreset.mdx
@@ -0,0 +1,23 @@
+---
+title: "CreateKeysLimitReset"
+---
+
+Type of limit reset for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday.
+
+## Example Usage
+
+```python
+from openrouter.operations import CreateKeysLimitReset
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: CreateKeysLimitReset = "daily"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"daily"`
+- `"weekly"`
+- `"monthly"`
diff --git a/docs/operations/createkeysrequest.md b/docs/operations/createkeysrequest.mdx
similarity index 89%
rename from docs/operations/createkeysrequest.md
rename to docs/operations/createkeysrequest.mdx
index f587de7..9ec01bf 100644
--- a/docs/operations/createkeysrequest.md
+++ b/docs/operations/createkeysrequest.mdx
@@ -1,5 +1,6 @@
-# CreateKeysRequest
-
+---
+title: "CreateKeysRequest"
+---
## Fields
@@ -8,4 +9,4 @@
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `request_body` | [operations.CreateKeysRequestBody](../operations/createkeysrequestbody.md) | :heavy_check_mark: | N/A | {
"expires_at": "2027-12-31T23:59:59Z",
"include_byok_in_limit": true,
"limit": 50,
"limit_reset": "monthly",
"name": "My New API Key"
} |
\ No newline at end of file
+| `request_body` | [operations.CreateKeysRequestBody](../operations/createkeysrequestbody.mdx) | :heavy_check_mark: | N/A | \{
"expires_at": "2027-12-31T23:59:59Z",
"include_byok_in_limit": true,
"limit": 50,
"limit_reset": "monthly",
"name": "My New API Key"
} |
\ No newline at end of file
diff --git a/docs/operations/createkeysrequestbody.md b/docs/operations/createkeysrequestbody.mdx
similarity index 94%
rename from docs/operations/createkeysrequestbody.md
rename to docs/operations/createkeysrequestbody.mdx
index e63e997..37ca00a 100644
--- a/docs/operations/createkeysrequestbody.md
+++ b/docs/operations/createkeysrequestbody.mdx
@@ -1,5 +1,6 @@
-# CreateKeysRequestBody
-
+---
+title: "CreateKeysRequestBody"
+---
## Fields
@@ -9,6 +10,6 @@
| `expires_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | Optional ISO 8601 UTC timestamp when the API key should expire. Must be UTC, other timezones will be rejected | 2027-12-31T23:59:59Z |
| `include_byok_in_limit` | *Optional[bool]* | :heavy_minus_sign: | Whether to include BYOK usage in the limit | true |
| `limit` | *OptionalNullable[float]* | :heavy_minus_sign: | Optional spending limit for the API key in USD | 50 |
-| `limit_reset` | [OptionalNullable[operations.CreateKeysLimitReset]](../operations/createkeyslimitreset.md) | :heavy_minus_sign: | Type of limit reset for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday. | monthly |
+| `limit_reset` | [OptionalNullable[operations.CreateKeysLimitReset]](../operations/createkeyslimitreset.mdx) | :heavy_minus_sign: | Type of limit reset for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday. | monthly |
| `name` | *str* | :heavy_check_mark: | Name for the new API key | My New API Key |
| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | The workspace to create the API key in. Defaults to the default workspace if not provided. | 0df9e665-d932-5740-b2c7-b52af166bc11 |
\ No newline at end of file
diff --git a/docs/operations/createkeysresponse.md b/docs/operations/createkeysresponse.mdx
similarity index 91%
rename from docs/operations/createkeysresponse.md
rename to docs/operations/createkeysresponse.mdx
index 91744f3..f5caa2c 100644
--- a/docs/operations/createkeysresponse.md
+++ b/docs/operations/createkeysresponse.mdx
@@ -1,4 +1,6 @@
-# CreateKeysResponse
+---
+title: "CreateKeysResponse"
+---
API key created successfully
@@ -7,5 +9,5 @@ API key created successfully
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `data` | [operations.CreateKeysData](../operations/createkeysdata.md) | :heavy_check_mark: | The created API key information | {
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"created_at": "2025-08-24T10:30:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"disabled": false,
"expires_at": "2027-12-31T23:59:59Z",
"hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943",
"include_byok_in_limit": false,
"label": "sk-or-v1-0e6...1c96",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"name": "My Production Key",
"updated_at": "2025-08-24T15:45:00Z",
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5,
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
+| `data` | [operations.CreateKeysData](../operations/createkeysdata.mdx) | :heavy_check_mark: | The created API key information | \{
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"created_at": "2025-08-24T10:30:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"disabled": false,
"expires_at": "2027-12-31T23:59:59Z",
"hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943",
"include_byok_in_limit": false,
"label": "sk-or-v1-0e6...1c96",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"name": "My Production Key",
"updated_at": "2025-08-24T15:45:00Z",
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5,
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
| `key` | *str* | :heavy_check_mark: | The actual API key string (only shown once) | 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 |
\ No newline at end of file
diff --git a/docs/operations/createobservabilitydestinationglobals.mdx b/docs/operations/createobservabilitydestinationglobals.mdx
new file mode 100644
index 0000000..778aba1
--- /dev/null
+++ b/docs/operations/createobservabilitydestinationglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreateObservabilityDestinationGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createobservabilitydestinationrequest.mdx b/docs/operations/createobservabilitydestinationrequest.mdx
new file mode 100644
index 0000000..3c62d6c
--- /dev/null
+++ b/docs/operations/createobservabilitydestinationrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "CreateObservabilityDestinationRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `create_observability_destination_request` | [components.CreateObservabilityDestinationRequest](../components/createobservabilitydestinationrequest.mdx) | :heavy_check_mark: | N/A | \{
"config": \{
"baseUrl": "https://us.cloud.langfuse.com",
"publicKey": "pk-l...EfGh",
"secretKey": "sk-l...AbCd"
},
"name": "Production Langfuse",
"type": "langfuse"
} |
\ No newline at end of file
diff --git a/docs/operations/createpresetschatcompletionsglobals.mdx b/docs/operations/createpresetschatcompletionsglobals.mdx
new file mode 100644
index 0000000..47f3111
--- /dev/null
+++ b/docs/operations/createpresetschatcompletionsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreatePresetsChatCompletionsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/sendchatcompletionrequestrequest.md b/docs/operations/createpresetschatcompletionsrequest.mdx
similarity index 86%
rename from docs/operations/sendchatcompletionrequestrequest.md
rename to docs/operations/createpresetschatcompletionsrequest.mdx
index bcb4bc4..c6bd780 100644
--- a/docs/operations/sendchatcompletionrequestrequest.md
+++ b/docs/operations/createpresetschatcompletionsrequest.mdx
@@ -1,5 +1,6 @@
-# SendChatCompletionRequestRequest
-
+---
+title: "CreatePresetsChatCompletionsRequest"
+---
## Fields
@@ -8,5 +9,5 @@
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `x_open_router_metadata` | [Optional[components.MetadataLevel]](../components/metadatalevel.md) | :heavy_minus_sign: | Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility. | enabled |
-| `chat_request` | [components.ChatRequest](../components/chatrequest.md) | :heavy_check_mark: | N/A | {
"max_tokens": 150,
"messages": [
{
"content": "You are a helpful assistant.",
"role": "system"
},
{
"content": "What is the capital of France?",
"role": "user"
}
],
"model": "openai/gpt-4",
"temperature": 0.7
} |
\ No newline at end of file
+| `slug` | *str* | :heavy_check_mark: | URL-safe slug identifying the preset. Created if it does not exist. | my-preset |
+| `chat_request` | [components.ChatRequest](../components/chatrequest.mdx) | :heavy_check_mark: | N/A | \{
"max_tokens": 150,
"messages": [
\{
"content": "You are a helpful assistant.",
"role": "system"
},
\{
"content": "What is the capital of France?",
"role": "user"
}
],
"model": "openai/gpt-4",
"temperature": 0.7
} |
\ No newline at end of file
diff --git a/docs/operations/createpresetsmessagesglobals.mdx b/docs/operations/createpresetsmessagesglobals.mdx
new file mode 100644
index 0000000..278c5d1
--- /dev/null
+++ b/docs/operations/createpresetsmessagesglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreatePresetsMessagesGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createpresetsmessagesrequest.mdx b/docs/operations/createpresetsmessagesrequest.mdx
new file mode 100644
index 0000000..71d6249
--- /dev/null
+++ b/docs/operations/createpresetsmessagesrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "CreatePresetsMessagesRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `slug` | *str* | :heavy_check_mark: | URL-safe slug identifying the preset. Created if it does not exist. | my-preset |
+| `messages_request` | [components.MessagesRequest](../components/messagesrequest.mdx) | :heavy_check_mark: | N/A | \{
"max_tokens": 1024,
"messages": [
\{
"content": "Hello, how are you?",
"role": "user"
}
],
"model": "anthropic/claude-4.5-sonnet-20250929",
"temperature": 0.7
} |
\ No newline at end of file
diff --git a/docs/operations/createpresetsresponsesglobals.mdx b/docs/operations/createpresetsresponsesglobals.mdx
new file mode 100644
index 0000000..9d4fce8
--- /dev/null
+++ b/docs/operations/createpresetsresponsesglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreatePresetsResponsesGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createpresetsresponsesrequest.mdx b/docs/operations/createpresetsresponsesrequest.mdx
new file mode 100644
index 0000000..54dde0e
--- /dev/null
+++ b/docs/operations/createpresetsresponsesrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "CreatePresetsResponsesRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `slug` | *str* | :heavy_check_mark: | URL-safe slug identifying the preset. Created if it does not exist. | my-preset |
+| `responses_request` | [components.ResponsesRequest](../components/responsesrequest.mdx) | :heavy_check_mark: | N/A | \{
"input": [
\{
"content": "Hello, how are you?",
"role": "user",
"type": "message"
}
],
"model": "anthropic/claude-4.5-sonnet-20250929",
"temperature": 0.7,
"tools": [
\{
"description": "Get the current weather in a given location",
"name": "get_current_weather",
"parameters": \{
"properties": \{
"location": \{
"type": "string"
}
},
"type": "object"
},
"type": "function"
}
],
"top_p": 0.9
} |
\ No newline at end of file
diff --git a/docs/operations/creatererankglobals.mdx b/docs/operations/creatererankglobals.mdx
new file mode 100644
index 0000000..e0e136f
--- /dev/null
+++ b/docs/operations/creatererankglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreateRerankGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/creatererankrequest.mdx b/docs/operations/creatererankrequest.mdx
new file mode 100644
index 0000000..f0d351f
--- /dev/null
+++ b/docs/operations/creatererankrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "CreateRerankRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `request_body` | [operations.CreateRerankRequestBody](../operations/creatererankrequestbody.mdx) | :heavy_check_mark: | N/A | \{
"documents": [
"Paris is the capital of France.",
"Berlin is the capital of Germany."
],
"model": "cohere/rerank-v3.5",
"query": "What is the capital of France?",
"top_n": 3
} |
\ No newline at end of file
diff --git a/docs/operations/creatererankrequestbody.mdx b/docs/operations/creatererankrequestbody.mdx
new file mode 100644
index 0000000..b564065
--- /dev/null
+++ b/docs/operations/creatererankrequestbody.mdx
@@ -0,0 +1,16 @@
+---
+title: "CreateRerankRequestBody"
+---
+
+Rerank request input
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| `documents` | List[[operations.Document](../operations/document.mdx)] | :heavy_check_mark: | The list of documents to rerank. Documents may be plain strings, or structured objects with `text` and/or `image` for multimodal models. | [
"Paris is the capital of France.",
"Berlin is the capital of Germany."
] |
+| `model` | *str* | :heavy_check_mark: | The rerank model to use | cohere/rerank-v3.5 |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../components/providerpreferences.mdx) | :heavy_minus_sign: | N/A | \{
"allow_fallbacks": true
} |
+| `query` | *str* | :heavy_check_mark: | The search query to rerank documents against | What is the capital of France? |
+| `top_n` | *Optional[int]* | :heavy_minus_sign: | Number of most relevant documents to return | 3 |
\ No newline at end of file
diff --git a/docs/operations/creatererankresponse.mdx b/docs/operations/creatererankresponse.mdx
new file mode 100644
index 0000000..2d6beaa
--- /dev/null
+++ b/docs/operations/creatererankresponse.mdx
@@ -0,0 +1,18 @@
+---
+title: "CreateRerankResponse"
+---
+
+## Supported Types
+
+### `operations.CreateRerankResponseBody`
+
+```python
+value: operations.CreateRerankResponseBody = /* values here */
+```
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
diff --git a/docs/operations/creatererankresponsebody.mdx b/docs/operations/creatererankresponsebody.mdx
new file mode 100644
index 0000000..9dc8753
--- /dev/null
+++ b/docs/operations/creatererankresponsebody.mdx
@@ -0,0 +1,16 @@
+---
+title: "CreateRerankResponseBody"
+---
+
+Rerank response containing ranked results
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rerank response (ORID format) | gen-rerank-1234567890-abc |
+| `model` | *str* | :heavy_check_mark: | The model used for reranking | cohere/rerank-v3.5 |
+| `provider` | *Optional[str]* | :heavy_minus_sign: | The provider that served the rerank request | Cohere |
+| `results` | List[[operations.Result](../operations/result.mdx)] | :heavy_check_mark: | List of rerank results sorted by relevance | [
\{
"document": \{
"text": "Paris is the capital of France."
},
"index": 0,
"relevance_score": 0.98
}
] |
+| `usage` | [Optional[operations.CreateRerankUsage]](../operations/creatererankusage.mdx) | :heavy_minus_sign: | Usage statistics | \{
"search_units": 1,
"total_tokens": 150
} |
\ No newline at end of file
diff --git a/docs/operations/creatererankusage.mdx b/docs/operations/creatererankusage.mdx
new file mode 100644
index 0000000..66beef7
--- /dev/null
+++ b/docs/operations/creatererankusage.mdx
@@ -0,0 +1,14 @@
+---
+title: "CreateRerankUsage"
+---
+
+Usage statistics
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ |
+| `cost` | *Optional[float]* | :heavy_minus_sign: | Cost of the request in credits | 0.001 |
+| `search_units` | *Optional[int]* | :heavy_minus_sign: | Number of search units consumed (Cohere billing) | 1 |
+| `total_tokens` | *Optional[int]* | :heavy_minus_sign: | Total number of tokens used | 150 |
\ No newline at end of file
diff --git a/docs/operations/createresponsesglobals.md b/docs/operations/createresponsesglobals.md
deleted file mode 100644
index 265872c..0000000
--- a/docs/operations/createresponsesglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# CreateResponsesGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createresponsesglobals.mdx b/docs/operations/createresponsesglobals.mdx
new file mode 100644
index 0000000..60b3ee5
--- /dev/null
+++ b/docs/operations/createresponsesglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreateResponsesGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createresponsesrequest.md b/docs/operations/createresponsesrequest.mdx
similarity index 90%
rename from docs/operations/createresponsesrequest.md
rename to docs/operations/createresponsesrequest.mdx
index 87238b0..bd72e62 100644
--- a/docs/operations/createresponsesrequest.md
+++ b/docs/operations/createresponsesrequest.mdx
@@ -1,5 +1,6 @@
-# CreateResponsesRequest
-
+---
+title: "CreateResponsesRequest"
+---
## Fields
@@ -8,5 +9,5 @@
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `x_open_router_metadata` | [Optional[components.MetadataLevel]](../components/metadatalevel.md) | :heavy_minus_sign: | Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility. | enabled |
-| `responses_request` | [components.ResponsesRequest](../components/responsesrequest.md) | :heavy_check_mark: | N/A | {
"input": [
{
"content": "Hello, how are you?",
"role": "user",
"type": "message"
}
],
"model": "anthropic/claude-4.5-sonnet-20250929",
"temperature": 0.7,
"tools": [
{
"description": "Get the current weather in a given location",
"name": "get_current_weather",
"parameters": {
"properties": {
"location": {
"type": "string"
}
},
"type": "object"
},
"type": "function"
}
],
"top_p": 0.9
} |
\ No newline at end of file
+| `x_open_router_metadata` | [Optional[components.MetadataLevel]](../components/metadatalevel.mdx) | :heavy_minus_sign: | Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility. | enabled |
+| `responses_request` | [components.ResponsesRequest](../components/responsesrequest.mdx) | :heavy_check_mark: | N/A | \{
"input": [
\{
"content": "Hello, how are you?",
"role": "user",
"type": "message"
}
],
"model": "anthropic/claude-4.5-sonnet-20250929",
"temperature": 0.7,
"tools": [
\{
"description": "Get the current weather in a given location",
"name": "get_current_weather",
"parameters": \{
"properties": \{
"location": \{
"type": "string"
}
},
"type": "object"
},
"type": "function"
}
],
"top_p": 0.9
} |
\ No newline at end of file
diff --git a/docs/operations/createresponsesresponse.md b/docs/operations/createresponsesresponse.mdx
similarity index 91%
rename from docs/operations/createresponsesresponse.md
rename to docs/operations/createresponsesresponse.mdx
index 5c515b1..a51a1e3 100644
--- a/docs/operations/createresponsesresponse.md
+++ b/docs/operations/createresponsesresponse.mdx
@@ -1,5 +1,6 @@
-# CreateResponsesResponse
-
+---
+title: "CreateResponsesResponse"
+---
## Supported Types
diff --git a/docs/operations/createvideosglobals.mdx b/docs/operations/createvideosglobals.mdx
new file mode 100644
index 0000000..be83bca
--- /dev/null
+++ b/docs/operations/createvideosglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreateVideosGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createvideosrequest.mdx b/docs/operations/createvideosrequest.mdx
new file mode 100644
index 0000000..2bb242f
--- /dev/null
+++ b/docs/operations/createvideosrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "CreateVideosRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `video_generation_request` | [components.VideoGenerationRequest](../components/videogenerationrequest.mdx) | :heavy_check_mark: | N/A | \{
"aspect_ratio": "16:9",
"duration": 8,
"model": "google/veo-3.1",
"prompt": "A serene mountain landscape at sunset",
"resolution": "720p"
} |
\ No newline at end of file
diff --git a/docs/operations/createworkspaceglobals.mdx b/docs/operations/createworkspaceglobals.mdx
new file mode 100644
index 0000000..c85655e
--- /dev/null
+++ b/docs/operations/createworkspaceglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "CreateWorkspaceGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createworkspacerequest.mdx b/docs/operations/createworkspacerequest.mdx
new file mode 100644
index 0000000..c4c5d7a
--- /dev/null
+++ b/docs/operations/createworkspacerequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "CreateWorkspaceRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `create_workspace_request` | [components.CreateWorkspaceRequest](../components/createworkspacerequest.mdx) | :heavy_check_mark: | N/A | \{
"default_image_model": "openai/dall-e-3",
"default_provider_sort": "price",
"default_text_model": "openai/gpt-4o",
"description": "Production environment workspace",
"name": "Production",
"slug": "production"
} |
\ No newline at end of file
diff --git a/docs/operations/datacenter.mdx b/docs/operations/datacenter.mdx
new file mode 100644
index 0000000..03cecfd
--- /dev/null
+++ b/docs/operations/datacenter.mdx
@@ -0,0 +1,267 @@
+---
+title: "Datacenter"
+---
+
+## Example Usage
+
+```python
+from openrouter.operations import Datacenter
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Datacenter = "AD"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"AD"`
+- `"AE"`
+- `"AF"`
+- `"AG"`
+- `"AI"`
+- `"AL"`
+- `"AM"`
+- `"AO"`
+- `"AQ"`
+- `"AR"`
+- `"AS"`
+- `"AT"`
+- `"AU"`
+- `"AW"`
+- `"AX"`
+- `"AZ"`
+- `"BA"`
+- `"BB"`
+- `"BD"`
+- `"BE"`
+- `"BF"`
+- `"BG"`
+- `"BH"`
+- `"BI"`
+- `"BJ"`
+- `"BL"`
+- `"BM"`
+- `"BN"`
+- `"BO"`
+- `"BQ"`
+- `"BR"`
+- `"BS"`
+- `"BT"`
+- `"BV"`
+- `"BW"`
+- `"BY"`
+- `"BZ"`
+- `"CA"`
+- `"CC"`
+- `"CD"`
+- `"CF"`
+- `"CG"`
+- `"CH"`
+- `"CI"`
+- `"CK"`
+- `"CL"`
+- `"CM"`
+- `"CN"`
+- `"CO"`
+- `"CR"`
+- `"CU"`
+- `"CV"`
+- `"CW"`
+- `"CX"`
+- `"CY"`
+- `"CZ"`
+- `"DE"`
+- `"DJ"`
+- `"DK"`
+- `"DM"`
+- `"DO"`
+- `"DZ"`
+- `"EC"`
+- `"EE"`
+- `"EG"`
+- `"EH"`
+- `"ER"`
+- `"ES"`
+- `"ET"`
+- `"FI"`
+- `"FJ"`
+- `"FK"`
+- `"FM"`
+- `"FO"`
+- `"FR"`
+- `"GA"`
+- `"GB"`
+- `"GD"`
+- `"GE"`
+- `"GF"`
+- `"GG"`
+- `"GH"`
+- `"GI"`
+- `"GL"`
+- `"GM"`
+- `"GN"`
+- `"GP"`
+- `"GQ"`
+- `"GR"`
+- `"GS"`
+- `"GT"`
+- `"GU"`
+- `"GW"`
+- `"GY"`
+- `"HK"`
+- `"HM"`
+- `"HN"`
+- `"HR"`
+- `"HT"`
+- `"HU"`
+- `"ID"`
+- `"IE"`
+- `"IL"`
+- `"IM"`
+- `"IN"`
+- `"IO"`
+- `"IQ"`
+- `"IR"`
+- `"IS"`
+- `"IT"`
+- `"JE"`
+- `"JM"`
+- `"JO"`
+- `"JP"`
+- `"KE"`
+- `"KG"`
+- `"KH"`
+- `"KI"`
+- `"KM"`
+- `"KN"`
+- `"KP"`
+- `"KR"`
+- `"KW"`
+- `"KY"`
+- `"KZ"`
+- `"LA"`
+- `"LB"`
+- `"LC"`
+- `"LI"`
+- `"LK"`
+- `"LR"`
+- `"LS"`
+- `"LT"`
+- `"LU"`
+- `"LV"`
+- `"LY"`
+- `"MA"`
+- `"MC"`
+- `"MD"`
+- `"ME"`
+- `"MF"`
+- `"MG"`
+- `"MH"`
+- `"MK"`
+- `"ML"`
+- `"MM"`
+- `"MN"`
+- `"MO"`
+- `"MP"`
+- `"MQ"`
+- `"MR"`
+- `"MS"`
+- `"MT"`
+- `"MU"`
+- `"MV"`
+- `"MW"`
+- `"MX"`
+- `"MY"`
+- `"MZ"`
+- `"NA"`
+- `"NC"`
+- `"NE"`
+- `"NF"`
+- `"NG"`
+- `"NI"`
+- `"NL"`
+- `"NO"`
+- `"NP"`
+- `"NR"`
+- `"NU"`
+- `"NZ"`
+- `"OM"`
+- `"PA"`
+- `"PE"`
+- `"PF"`
+- `"PG"`
+- `"PH"`
+- `"PK"`
+- `"PL"`
+- `"PM"`
+- `"PN"`
+- `"PR"`
+- `"PS"`
+- `"PT"`
+- `"PW"`
+- `"PY"`
+- `"QA"`
+- `"RE"`
+- `"RO"`
+- `"RS"`
+- `"RU"`
+- `"RW"`
+- `"SA"`
+- `"SB"`
+- `"SC"`
+- `"SD"`
+- `"SE"`
+- `"SG"`
+- `"SH"`
+- `"SI"`
+- `"SJ"`
+- `"SK"`
+- `"SL"`
+- `"SM"`
+- `"SN"`
+- `"SO"`
+- `"SR"`
+- `"SS"`
+- `"ST"`
+- `"SV"`
+- `"SX"`
+- `"SY"`
+- `"SZ"`
+- `"TC"`
+- `"TD"`
+- `"TF"`
+- `"TG"`
+- `"TH"`
+- `"TJ"`
+- `"TK"`
+- `"TL"`
+- `"TM"`
+- `"TN"`
+- `"TO"`
+- `"TR"`
+- `"TT"`
+- `"TV"`
+- `"TW"`
+- `"TZ"`
+- `"UA"`
+- `"UG"`
+- `"UM"`
+- `"US"`
+- `"UY"`
+- `"UZ"`
+- `"VA"`
+- `"VC"`
+- `"VE"`
+- `"VG"`
+- `"VI"`
+- `"VN"`
+- `"VU"`
+- `"WF"`
+- `"WS"`
+- `"YE"`
+- `"YT"`
+- `"ZA"`
+- `"ZM"`
+- `"ZW"`
diff --git a/docs/operations/deletebyokkeyglobals.mdx b/docs/operations/deletebyokkeyglobals.mdx
new file mode 100644
index 0000000..fa05fb4
--- /dev/null
+++ b/docs/operations/deletebyokkeyglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "DeleteBYOKKeyGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/deletebyokkeyrequest.mdx b/docs/operations/deletebyokkeyrequest.mdx
new file mode 100644
index 0000000..7fdac95
--- /dev/null
+++ b/docs/operations/deletebyokkeyrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "DeleteBYOKKeyRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The BYOK credential ID (UUID). | 11111111-2222-3333-4444-555555555555 |
\ No newline at end of file
diff --git a/docs/operations/deletefileglobals.mdx b/docs/operations/deletefileglobals.mdx
new file mode 100644
index 0000000..7cab840
--- /dev/null
+++ b/docs/operations/deletefileglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "DeleteFileGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/deletefilerequest.mdx b/docs/operations/deletefilerequest.mdx
new file mode 100644
index 0000000..3202a43
--- /dev/null
+++ b/docs/operations/deletefilerequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "DeleteFileRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `file_id` | *str* | :heavy_check_mark: | N/A | file_011CNha8iCJcU1wXNR6q4V8w |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace. | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
\ No newline at end of file
diff --git a/docs/operations/deleteguardrailglobals.md b/docs/operations/deleteguardrailglobals.md
deleted file mode 100644
index 8b3caa0..0000000
--- a/docs/operations/deleteguardrailglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# DeleteGuardrailGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/deleteguardrailglobals.mdx b/docs/operations/deleteguardrailglobals.mdx
new file mode 100644
index 0000000..0c506f5
--- /dev/null
+++ b/docs/operations/deleteguardrailglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "DeleteGuardrailGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/deleteguardrailrequest.md b/docs/operations/deleteguardrailrequest.mdx
similarity index 99%
rename from docs/operations/deleteguardrailrequest.md
rename to docs/operations/deleteguardrailrequest.mdx
index 14aa025..ba80054 100644
--- a/docs/operations/deleteguardrailrequest.md
+++ b/docs/operations/deleteguardrailrequest.mdx
@@ -1,5 +1,6 @@
-# DeleteGuardrailRequest
-
+---
+title: "DeleteGuardrailRequest"
+---
## Fields
diff --git a/docs/operations/deletekeysglobals.md b/docs/operations/deletekeysglobals.md
deleted file mode 100644
index 0bbd498..0000000
--- a/docs/operations/deletekeysglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# DeleteKeysGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/deletekeysglobals.mdx b/docs/operations/deletekeysglobals.mdx
new file mode 100644
index 0000000..e89ca07
--- /dev/null
+++ b/docs/operations/deletekeysglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "DeleteKeysGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/deletekeysrequest.md b/docs/operations/deletekeysrequest.mdx
similarity index 99%
rename from docs/operations/deletekeysrequest.md
rename to docs/operations/deletekeysrequest.mdx
index 61b9714..f7ef7a9 100644
--- a/docs/operations/deletekeysrequest.md
+++ b/docs/operations/deletekeysrequest.mdx
@@ -1,5 +1,6 @@
-# DeleteKeysRequest
-
+---
+title: "DeleteKeysRequest"
+---
## Fields
diff --git a/docs/operations/deletekeysresponse.md b/docs/operations/deletekeysresponse.mdx
similarity index 95%
rename from docs/operations/deletekeysresponse.md
rename to docs/operations/deletekeysresponse.mdx
index cc7cddb..5e83f26 100644
--- a/docs/operations/deletekeysresponse.md
+++ b/docs/operations/deletekeysresponse.mdx
@@ -1,4 +1,6 @@
-# DeleteKeysResponse
+---
+title: "DeleteKeysResponse"
+---
API key deleted successfully
diff --git a/docs/operations/deleteobservabilitydestinationglobals.mdx b/docs/operations/deleteobservabilitydestinationglobals.mdx
new file mode 100644
index 0000000..14ee5de
--- /dev/null
+++ b/docs/operations/deleteobservabilitydestinationglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "DeleteObservabilityDestinationGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/deleteobservabilitydestinationrequest.mdx b/docs/operations/deleteobservabilitydestinationrequest.mdx
new file mode 100644
index 0000000..6dee392
--- /dev/null
+++ b/docs/operations/deleteobservabilitydestinationrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "DeleteObservabilityDestinationRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The destination ID (UUID). | 99999999-aaaa-bbbb-cccc-dddddddddddd |
\ No newline at end of file
diff --git a/docs/operations/deleteworkspacebudgetglobals.mdx b/docs/operations/deleteworkspacebudgetglobals.mdx
new file mode 100644
index 0000000..f0aff81
--- /dev/null
+++ b/docs/operations/deleteworkspacebudgetglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "DeleteWorkspaceBudgetGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/deleteworkspacebudgetrequest.mdx b/docs/operations/deleteworkspacebudgetrequest.mdx
new file mode 100644
index 0000000..1073b36
--- /dev/null
+++ b/docs/operations/deleteworkspacebudgetrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "DeleteWorkspaceBudgetRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `interval` | [components.WorkspaceBudgetInterval](../components/workspacebudgetinterval.mdx) | :heavy_check_mark: | Budget reset interval. Use "lifetime" for a one-time budget that never resets. | monthly |
\ No newline at end of file
diff --git a/docs/operations/deleteworkspaceglobals.mdx b/docs/operations/deleteworkspaceglobals.mdx
new file mode 100644
index 0000000..c7f6f46
--- /dev/null
+++ b/docs/operations/deleteworkspaceglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "DeleteWorkspaceGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/deleteworkspacerequest.mdx b/docs/operations/deleteworkspacerequest.mdx
new file mode 100644
index 0000000..ba1a616
--- /dev/null
+++ b/docs/operations/deleteworkspacerequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "DeleteWorkspaceRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
\ No newline at end of file
diff --git a/docs/operations/dimension.mdx b/docs/operations/dimension.mdx
new file mode 100644
index 0000000..3659423
--- /dev/null
+++ b/docs/operations/dimension.mdx
@@ -0,0 +1,10 @@
+---
+title: "Dimension"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- |
+| `display_label` | *str* | :heavy_check_mark: | Human-readable label | Model |
+| `name` | *str* | :heavy_check_mark: | Dimension identifier used in query requests | model |
\ No newline at end of file
diff --git a/docs/operations/direction.mdx b/docs/operations/direction.mdx
new file mode 100644
index 0000000..0f57411
--- /dev/null
+++ b/docs/operations/direction.mdx
@@ -0,0 +1,20 @@
+---
+title: "Direction"
+---
+
+## Example Usage
+
+```python
+from openrouter.operations import Direction
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Direction = "asc"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"asc"`
+- `"desc"`
diff --git a/docs/operations/displayformat.mdx b/docs/operations/displayformat.mdx
new file mode 100644
index 0000000..a444dfd
--- /dev/null
+++ b/docs/operations/displayformat.mdx
@@ -0,0 +1,25 @@
+---
+title: "DisplayFormat"
+---
+
+How this metric value should be formatted for display (e.g. percent → multiply by 100 and append %, currency → prefix with $)
+
+## Example Usage
+
+```python
+from openrouter.operations import DisplayFormat
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: DisplayFormat = "number"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"number"`
+- `"currency"`
+- `"percent"`
+- `"latency"`
+- `"throughput"`
diff --git a/docs/operations/distillable.mdx b/docs/operations/distillable.mdx
new file mode 100644
index 0000000..9347787
--- /dev/null
+++ b/docs/operations/distillable.mdx
@@ -0,0 +1,22 @@
+---
+title: "Distillable"
+---
+
+Filter by distillation capability. "true" returns only distillable models, "false" excludes them.
+
+## Example Usage
+
+```python
+from openrouter.operations import Distillable
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Distillable = "true"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"true"`
+- `"false"`
diff --git a/docs/operations/document.mdx b/docs/operations/document.mdx
new file mode 100644
index 0000000..89efca1
--- /dev/null
+++ b/docs/operations/document.mdx
@@ -0,0 +1,21 @@
+---
+title: "Document"
+---
+
+A document to rerank. Either a plain string, or a structured object with optional `text` and/or `image`.
+
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `operations.DocumentRequest`
+
+```python
+value: operations.DocumentRequest = /* values here */
+```
+
diff --git a/docs/operations/documentrequest.mdx b/docs/operations/documentrequest.mdx
new file mode 100644
index 0000000..4c0dd9f
--- /dev/null
+++ b/docs/operations/documentrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "DocumentRequest"
+---
+
+A structured document with optional text and/or image content. At least one of `text` or `image` must be provided.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
+| `image` | *Optional[str]* | :heavy_minus_sign: | An image associated with the document, as a remote URL (http/https) or a base64-encoded data URI (data:image/...). | https://upload.wikimedia.org/wikipedia/commons/thumb/8/8b/Phytogenic.png |
+| `text` | *Optional[str]* | :heavy_minus_sign: | The document text | AI enables robots to perceive, plan, and act autonomously. |
\ No newline at end of file
diff --git a/docs/operations/documentresponse.mdx b/docs/operations/documentresponse.mdx
new file mode 100644
index 0000000..5dc0d7b
--- /dev/null
+++ b/docs/operations/documentresponse.mdx
@@ -0,0 +1,13 @@
+---
+title: "DocumentResponse"
+---
+
+The document object echoing the original input (text and/or image)
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
+| `image` | *Optional[str]* | :heavy_minus_sign: | The image (URL or data URI) from the original document | https://example.com/image.png |
+| `text` | *Optional[str]* | :heavy_minus_sign: | The document text | Paris is the capital of France. |
\ No newline at end of file
diff --git a/docs/operations/downloadfilecontentglobals.mdx b/docs/operations/downloadfilecontentglobals.mdx
new file mode 100644
index 0000000..8415a66
--- /dev/null
+++ b/docs/operations/downloadfilecontentglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "DownloadFileContentGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/downloadfilecontentrequest.mdx b/docs/operations/downloadfilecontentrequest.mdx
new file mode 100644
index 0000000..dcb0cb3
--- /dev/null
+++ b/docs/operations/downloadfilecontentrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "DownloadFileContentRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `file_id` | *str* | :heavy_check_mark: | N/A | file_011CNha8iCJcU1wXNR6q4V8w |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace. | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
\ No newline at end of file
diff --git a/docs/operations/embedding.md b/docs/operations/embedding.mdx
similarity index 88%
rename from docs/operations/embedding.md
rename to docs/operations/embedding.mdx
index f6344ca..166a8bd 100644
--- a/docs/operations/embedding.md
+++ b/docs/operations/embedding.mdx
@@ -1,4 +1,6 @@
-# Embedding
+---
+title: "Embedding"
+---
Embedding vector as an array of floats or a base64 string
diff --git a/docs/operations/encodingformat.md b/docs/operations/encodingformat.md
deleted file mode 100644
index 7f532c1..0000000
--- a/docs/operations/encodingformat.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# EncodingFormat
-
-The format of the output embeddings
-
-
-## Values
-
-| Name | Value |
-| -------- | -------- |
-| `FLOAT` | float |
-| `BASE64` | base64 |
\ No newline at end of file
diff --git a/docs/operations/encodingformat.mdx b/docs/operations/encodingformat.mdx
new file mode 100644
index 0000000..6da2037
--- /dev/null
+++ b/docs/operations/encodingformat.mdx
@@ -0,0 +1,22 @@
+---
+title: "EncodingFormat"
+---
+
+The format of the output embeddings
+
+## Example Usage
+
+```python
+from openrouter.operations import EncodingFormat
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: EncodingFormat = "float"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"float"`
+- `"base64"`
diff --git a/docs/operations/exchangeauthcodeforapikeycodechallengemethod.md b/docs/operations/exchangeauthcodeforapikeycodechallengemethod.md
deleted file mode 100644
index eec31e8..0000000
--- a/docs/operations/exchangeauthcodeforapikeycodechallengemethod.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# ExchangeAuthCodeForAPIKeyCodeChallengeMethod
-
-The method used to generate the code challenge
-
-
-## Values
-
-| Name | Value |
-| ------- | ------- |
-| `S256` | S256 |
-| `PLAIN` | plain |
\ No newline at end of file
diff --git a/docs/operations/exchangeauthcodeforapikeycodechallengemethod.mdx b/docs/operations/exchangeauthcodeforapikeycodechallengemethod.mdx
new file mode 100644
index 0000000..3886242
--- /dev/null
+++ b/docs/operations/exchangeauthcodeforapikeycodechallengemethod.mdx
@@ -0,0 +1,22 @@
+---
+title: "ExchangeAuthCodeForAPIKeyCodeChallengeMethod"
+---
+
+The method used to generate the code challenge
+
+## Example Usage
+
+```python
+from openrouter.operations import ExchangeAuthCodeForAPIKeyCodeChallengeMethod
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ExchangeAuthCodeForAPIKeyCodeChallengeMethod = "S256"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"S256"`
+- `"plain"`
diff --git a/docs/operations/exchangeauthcodeforapikeyglobals.md b/docs/operations/exchangeauthcodeforapikeyglobals.md
deleted file mode 100644
index 91c8773..0000000
--- a/docs/operations/exchangeauthcodeforapikeyglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ExchangeAuthCodeForAPIKeyGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/exchangeauthcodeforapikeyglobals.mdx b/docs/operations/exchangeauthcodeforapikeyglobals.mdx
new file mode 100644
index 0000000..3e9fa32
--- /dev/null
+++ b/docs/operations/exchangeauthcodeforapikeyglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ExchangeAuthCodeForAPIKeyGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/exchangeauthcodeforapikeyrequest.md b/docs/operations/exchangeauthcodeforapikeyrequest.mdx
similarity index 89%
rename from docs/operations/exchangeauthcodeforapikeyrequest.md
rename to docs/operations/exchangeauthcodeforapikeyrequest.mdx
index 05bbc42..a52648c 100644
--- a/docs/operations/exchangeauthcodeforapikeyrequest.md
+++ b/docs/operations/exchangeauthcodeforapikeyrequest.mdx
@@ -1,5 +1,6 @@
-# ExchangeAuthCodeForAPIKeyRequest
-
+---
+title: "ExchangeAuthCodeForAPIKeyRequest"
+---
## Fields
@@ -8,4 +9,4 @@
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `request_body` | [operations.ExchangeAuthCodeForAPIKeyRequestBody](../operations/exchangeauthcodeforapikeyrequestbody.md) | :heavy_check_mark: | N/A | {
"code": "auth_code_abc123def456",
"code_challenge_method": "S256",
"code_verifier": "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"
} |
\ No newline at end of file
+| `request_body` | [operations.ExchangeAuthCodeForAPIKeyRequestBody](../operations/exchangeauthcodeforapikeyrequestbody.mdx) | :heavy_check_mark: | N/A | \{
"code": "auth_code_abc123def456",
"code_challenge_method": "S256",
"code_verifier": "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"
} |
\ No newline at end of file
diff --git a/docs/operations/exchangeauthcodeforapikeyrequestbody.md b/docs/operations/exchangeauthcodeforapikeyrequestbody.mdx
similarity index 91%
rename from docs/operations/exchangeauthcodeforapikeyrequestbody.md
rename to docs/operations/exchangeauthcodeforapikeyrequestbody.mdx
index 6361a13..27265f4 100644
--- a/docs/operations/exchangeauthcodeforapikeyrequestbody.md
+++ b/docs/operations/exchangeauthcodeforapikeyrequestbody.mdx
@@ -1,10 +1,11 @@
-# ExchangeAuthCodeForAPIKeyRequestBody
-
+---
+title: "ExchangeAuthCodeForAPIKeyRequestBody"
+---
## Fields
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `code` | *str* | :heavy_check_mark: | The authorization code received from the OAuth redirect | auth_code_abc123def456 |
-| `code_challenge_method` | [OptionalNullable[operations.ExchangeAuthCodeForAPIKeyCodeChallengeMethod]](../operations/exchangeauthcodeforapikeycodechallengemethod.md) | :heavy_minus_sign: | The method used to generate the code challenge | S256 |
+| `code_challenge_method` | [OptionalNullable[operations.ExchangeAuthCodeForAPIKeyCodeChallengeMethod]](../operations/exchangeauthcodeforapikeycodechallengemethod.mdx) | :heavy_minus_sign: | The method used to generate the code challenge | S256 |
| `code_verifier` | *Optional[str]* | :heavy_minus_sign: | The code verifier if code_challenge was used in the authorization request | dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk |
\ No newline at end of file
diff --git a/docs/operations/exchangeauthcodeforapikeyresponse.md b/docs/operations/exchangeauthcodeforapikeyresponse.mdx
similarity index 96%
rename from docs/operations/exchangeauthcodeforapikeyresponse.md
rename to docs/operations/exchangeauthcodeforapikeyresponse.mdx
index 11975e0..2642f99 100644
--- a/docs/operations/exchangeauthcodeforapikeyresponse.md
+++ b/docs/operations/exchangeauthcodeforapikeyresponse.mdx
@@ -1,4 +1,6 @@
-# ExchangeAuthCodeForAPIKeyResponse
+---
+title: "ExchangeAuthCodeForAPIKeyResponse"
+---
Successfully exchanged code for an API key
diff --git a/docs/operations/file.mdx b/docs/operations/file.mdx
new file mode 100644
index 0000000..0c3c666
--- /dev/null
+++ b/docs/operations/file.mdx
@@ -0,0 +1,11 @@
+---
+title: "File"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ |
+| `file_name` | *str* | :heavy_check_mark: | N/A |
+| `content` | *Union[bytes, IO[bytes], io.IOBase]* | :heavy_check_mark: | N/A |
+| `content_type` | *Optional[str]* | :heavy_minus_sign: | N/A |
\ No newline at end of file
diff --git a/docs/operations/filter_.mdx b/docs/operations/filter_.mdx
new file mode 100644
index 0000000..3dbded7
--- /dev/null
+++ b/docs/operations/filter_.mdx
@@ -0,0 +1,11 @@
+---
+title: "Filter"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `field` | *str* | :heavy_check_mark: | Dimension to filter on. Use the /meta endpoint for available dimensions. | model |
+| `operator` | *str* | :heavy_check_mark: | Filter operator | eq |
+| `value` | [operations.Value1](../operations/value1.mdx) | :heavy_check_mark: | Filter value (scalar or array depending on operator). Several dimensions are enriched in responses (returned as human-readable labels), but filters must use the underlying ID: `api_key_id` — numeric ID (from generation metadata) or key hash (64-char hex from GET /api/v1/keys, resolved server-side); `user` — Clerk user ID (e.g. "user_abc123"), not the display name; `workspace` — workspace UUID, not the workspace name; `app` — numeric app ID, not the app title; `model` — permaslug (e.g. "openai/gpt-4o"), not the display name. Other dimensions (provider, origin, country, etc.) are not enriched and accept the value as returned. | |
\ No newline at end of file
diff --git a/docs/operations/getanalyticsmetadata.mdx b/docs/operations/getanalyticsmetadata.mdx
new file mode 100644
index 0000000..6eacfe5
--- /dev/null
+++ b/docs/operations/getanalyticsmetadata.mdx
@@ -0,0 +1,12 @@
+---
+title: "GetAnalyticsMetaData"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
+| `dimensions` | List[[operations.Dimension](../operations/dimension.mdx)] | :heavy_check_mark: | N/A |
+| `granularities` | List[[operations.Granularity](../operations/granularity.mdx)] | :heavy_check_mark: | N/A |
+| `metrics` | List[[operations.Metric](../operations/metric.mdx)] | :heavy_check_mark: | N/A |
+| `operators` | List[[operations.Operator](../operations/operator.mdx)] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/getanalyticsmetaglobals.mdx b/docs/operations/getanalyticsmetaglobals.mdx
new file mode 100644
index 0000000..a44950e
--- /dev/null
+++ b/docs/operations/getanalyticsmetaglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetAnalyticsMetaGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getanalyticsmetarequest.mdx b/docs/operations/getanalyticsmetarequest.mdx
new file mode 100644
index 0000000..9ca0cb3
--- /dev/null
+++ b/docs/operations/getanalyticsmetarequest.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetAnalyticsMetaRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getanalyticsmetaresponse.mdx b/docs/operations/getanalyticsmetaresponse.mdx
new file mode 100644
index 0000000..f2a6915
--- /dev/null
+++ b/docs/operations/getanalyticsmetaresponse.mdx
@@ -0,0 +1,12 @@
+---
+title: "GetAnalyticsMetaResponse"
+---
+
+Returns analytics query metadata
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
+| `data` | [operations.GetAnalyticsMetaData](../operations/getanalyticsmetadata.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/getapprankingscategory.mdx b/docs/operations/getapprankingscategory.mdx
new file mode 100644
index 0000000..a40dd4f
--- /dev/null
+++ b/docs/operations/getapprankingscategory.mdx
@@ -0,0 +1,24 @@
+---
+title: "GetAppRankingsCategory"
+---
+
+Marketplace category group to filter by (e.g. `coding`). Only apps tagged with a subcategory inside this group are returned. Mutually combinable with `subcategory` — when both are supplied the `subcategory` must belong to the `category` group.
+
+## Example Usage
+
+```python
+from openrouter.operations import GetAppRankingsCategory
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: GetAppRankingsCategory = "coding"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"coding"`
+- `"creative"`
+- `"productivity"`
+- `"entertainment"`
diff --git a/docs/operations/bulkassignmemberstoguardrailglobals.md b/docs/operations/getapprankingsglobals.mdx
similarity index 98%
rename from docs/operations/bulkassignmemberstoguardrailglobals.md
rename to docs/operations/getapprankingsglobals.mdx
index b970409..0dd87c3 100644
--- a/docs/operations/bulkassignmemberstoguardrailglobals.md
+++ b/docs/operations/getapprankingsglobals.mdx
@@ -1,5 +1,6 @@
-# BulkAssignMembersToGuardrailGlobals
-
+---
+title: "GetAppRankingsGlobals"
+---
## Fields
diff --git a/docs/operations/getapprankingsrequest.mdx b/docs/operations/getapprankingsrequest.mdx
new file mode 100644
index 0000000..4898060
--- /dev/null
+++ b/docs/operations/getapprankingsrequest.mdx
@@ -0,0 +1,18 @@
+---
+title: "GetAppRankingsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `category` | [Optional[operations.GetAppRankingsCategory]](../operations/getapprankingscategory.mdx) | :heavy_minus_sign: | Marketplace category group to filter by (e.g. `coding`). Only apps tagged with a subcategory inside this group are returned. Mutually combinable with `subcategory` — when both are supplied the `subcategory` must belong to the `category` group. | coding |
+| `subcategory` | [Optional[operations.Subcategory]](../operations/subcategory.mdx) | :heavy_minus_sign: | Marketplace subcategory to filter by (e.g. `cli-agent`). Takes precedence over `category` for the actual filter; when `category` is also supplied the pair must be consistent. | cli-agent |
+| `sort` | [Optional[operations.GetAppRankingsSort]](../operations/getapprankingssort.mdx) | :heavy_minus_sign: | `popular` ranks apps by total token volume inside the date window. `trending` ranks apps by absolute excess token growth: window volume minus the average volume of the three equal-length periods immediately preceding the window. Apps with no excess growth are omitted from `trending` results. | popular |
+| `start_date` | *Optional[str]* | :heavy_minus_sign: | Start of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to 30 days before `end_date`. The dataset begins at 2025-01-01; earlier values are clamped forward to that floor and the resolved value is echoed in `meta.start_date`. | 2026-04-12 |
+| `end_date` | *Optional[str]* | :heavy_minus_sign: | End of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to the most recent completed UTC day. Must be on or after 2025-01-01; earlier values are rejected with a 400. | 2026-05-11 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of apps to return (1-100). Defaults to 50. | 50 |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of ranked apps to skip before the first returned row (0-100). Defaults to 0. `rank` stays absolute, so the first row of `offset=50` is `rank: 51`. | 0 |
\ No newline at end of file
diff --git a/docs/operations/getapprankingsresponse.mdx b/docs/operations/getapprankingsresponse.mdx
new file mode 100644
index 0000000..8353352
--- /dev/null
+++ b/docs/operations/getapprankingsresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "GetAppRankingsResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `result` | [components.AppRankingsResponse](../components/apprankingsresponse.mdx) | :heavy_check_mark: | N/A | \{
"data": [
\{
"app_id": 12345,
"app_name": "Cline",
"rank": 1,
"total_requests": 4321,
"total_tokens": "12345678"
},
\{
"app_id": 67890,
"app_name": "Roo Code",
"rank": 2,
"total_requests": 2109,
"total_tokens": "9876543"
}
],
"meta": \{
"as_of": "2026-05-12T02:00:00Z",
"end_date": "2026-05-11",
"start_date": "2026-04-12",
"version": "v1"
}
} |
\ No newline at end of file
diff --git a/docs/operations/getapprankingssort.mdx b/docs/operations/getapprankingssort.mdx
new file mode 100644
index 0000000..a9d72a3
--- /dev/null
+++ b/docs/operations/getapprankingssort.mdx
@@ -0,0 +1,22 @@
+---
+title: "GetAppRankingsSort"
+---
+
+`popular` ranks apps by total token volume inside the date window. `trending` ranks apps by absolute excess token growth: window volume minus the average volume of the three equal-length periods immediately preceding the window. Apps with no excess growth are omitted from `trending` results.
+
+## Example Usage
+
+```python
+from openrouter.operations import GetAppRankingsSort
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: GetAppRankingsSort = "popular"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"popular"`
+- `"trending"`
diff --git a/docs/operations/getbenchmarksglobals.mdx b/docs/operations/getbenchmarksglobals.mdx
new file mode 100644
index 0000000..679923b
--- /dev/null
+++ b/docs/operations/getbenchmarksglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetBenchmarksGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getbenchmarksrequest.mdx b/docs/operations/getbenchmarksrequest.mdx
new file mode 100644
index 0000000..c5acba5
--- /dev/null
+++ b/docs/operations/getbenchmarksrequest.mdx
@@ -0,0 +1,16 @@
+---
+title: "GetBenchmarksRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `source` | [Optional[operations.Source]](../operations/source.mdx) | :heavy_minus_sign: | Benchmark source to query. Determines the shape of the returned items. When omitted, returns results from all sources. | artificial-analysis |
+| `task_type` | [Optional[operations.TaskType]](../operations/tasktype.mdx) | :heavy_minus_sign: | Filter results by task type. For Artificial Analysis, maps to the corresponding index. For Design Arena, maps to the matching category. | coding |
+| `arena` | [Optional[operations.Arena]](../operations/arena.mdx) | :heavy_minus_sign: | Design Arena only: arena to query. Defaults to `models` when source is `design-arena`. | models |
+| `category` | *Optional[str]* | :heavy_minus_sign: | Design Arena only: category within the arena (e.g. `codecategories`, `uicomponent`, `gamedev`, `3d`, `dataviz`, `image`, `video`, `svg`). When omitted, returns all categories. | codecategories |
+| `max_results` | *Optional[int]* | :heavy_minus_sign: | Maximum number of items to return. When omitted, all matching results are returned. | 50 |
\ No newline at end of file
diff --git a/docs/operations/getbyokkeyglobals.mdx b/docs/operations/getbyokkeyglobals.mdx
new file mode 100644
index 0000000..02962c3
--- /dev/null
+++ b/docs/operations/getbyokkeyglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetBYOKKeyGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getbyokkeyrequest.mdx b/docs/operations/getbyokkeyrequest.mdx
new file mode 100644
index 0000000..7c25821
--- /dev/null
+++ b/docs/operations/getbyokkeyrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "GetBYOKKeyRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The BYOK credential ID (UUID). | 11111111-2222-3333-4444-555555555555 |
\ No newline at end of file
diff --git a/docs/operations/getcreditsdata.md b/docs/operations/getcreditsdata.mdx
similarity index 94%
rename from docs/operations/getcreditsdata.md
rename to docs/operations/getcreditsdata.mdx
index 9ba4582..b0a60e0 100644
--- a/docs/operations/getcreditsdata.md
+++ b/docs/operations/getcreditsdata.mdx
@@ -1,5 +1,6 @@
-# GetCreditsData
-
+---
+title: "GetCreditsData"
+---
## Fields
diff --git a/docs/operations/getcreditsglobals.md b/docs/operations/getcreditsglobals.md
deleted file mode 100644
index bb29d2d..0000000
--- a/docs/operations/getcreditsglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# GetCreditsGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getcreditsglobals.mdx b/docs/operations/getcreditsglobals.mdx
new file mode 100644
index 0000000..e31d986
--- /dev/null
+++ b/docs/operations/getcreditsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetCreditsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getcreditsrequest.md b/docs/operations/getcreditsrequest.md
deleted file mode 100644
index f86e975..0000000
--- a/docs/operations/getcreditsrequest.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# GetCreditsRequest
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getcreditsrequest.mdx b/docs/operations/getcreditsrequest.mdx
new file mode 100644
index 0000000..6e73894
--- /dev/null
+++ b/docs/operations/getcreditsrequest.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetCreditsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getcreditsresponse.md b/docs/operations/getcreditsresponse.mdx
similarity index 71%
rename from docs/operations/getcreditsresponse.md
rename to docs/operations/getcreditsresponse.mdx
index a58a336..1f584bb 100644
--- a/docs/operations/getcreditsresponse.md
+++ b/docs/operations/getcreditsresponse.mdx
@@ -1,4 +1,6 @@
-# GetCreditsResponse
+---
+title: "GetCreditsResponse"
+---
Total credits purchased and used
@@ -7,4 +9,4 @@ Total credits purchased and used
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
-| `data` | [operations.GetCreditsData](../operations/getcreditsdata.md) | :heavy_check_mark: | N/A | {
"total_credits": 100.5,
"total_usage": 25.75
} |
\ No newline at end of file
+| `data` | [operations.GetCreditsData](../operations/getcreditsdata.mdx) | :heavy_check_mark: | N/A | \{
"total_credits": 100.5,
"total_usage": 25.75
} |
\ No newline at end of file
diff --git a/docs/operations/getcurrentkeydata.md b/docs/operations/getcurrentkeydata.mdx
similarity index 96%
rename from docs/operations/getcurrentkeydata.md
rename to docs/operations/getcurrentkeydata.mdx
index dc97980..a73217d 100644
--- a/docs/operations/getcurrentkeydata.md
+++ b/docs/operations/getcurrentkeydata.mdx
@@ -1,4 +1,6 @@
-# GetCurrentKeyData
+---
+title: "GetCurrentKeyData"
+---
Current API key information
@@ -21,7 +23,7 @@ Current API key information
| `limit` | *Nullable[float]* | :heavy_check_mark: | Spending limit for the API key in USD | 100 |
| `limit_remaining` | *Nullable[float]* | :heavy_check_mark: | Remaining spending limit in USD | 74.5 |
| `limit_reset` | *Nullable[str]* | :heavy_check_mark: | Type of limit reset for the API key | monthly |
-| ~~`rate_limit`~~ | [operations.RateLimit](../operations/ratelimit.md) | :heavy_check_mark: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Legacy rate limit information about a key. Will always return -1. | {
"interval": "1h",
"note": "This field is deprecated and safe to ignore.",
"requests": 1000
} |
+| ~~`rate_limit`~~ | [operations.RateLimit](../operations/ratelimit.mdx) | :heavy_check_mark: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Legacy rate limit information about a key. Will always return -1. | \{
"interval": "1h",
"note": "This field is deprecated and safe to ignore.",
"requests": 1000
} |
| `usage` | *float* | :heavy_check_mark: | Total OpenRouter credit usage (in USD) for the API key | 25.5 |
| `usage_daily` | *float* | :heavy_check_mark: | OpenRouter credit usage (in USD) for the current UTC day | 25.5 |
| `usage_monthly` | *float* | :heavy_check_mark: | OpenRouter credit usage (in USD) for the current UTC month | 25.5 |
diff --git a/docs/operations/getcurrentkeyglobals.md b/docs/operations/getcurrentkeyglobals.md
deleted file mode 100644
index 905f7d1..0000000
--- a/docs/operations/getcurrentkeyglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# GetCurrentKeyGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getcurrentkeyglobals.mdx b/docs/operations/getcurrentkeyglobals.mdx
new file mode 100644
index 0000000..784c3ac
--- /dev/null
+++ b/docs/operations/getcurrentkeyglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetCurrentKeyGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getcurrentkeyrequest.md b/docs/operations/getcurrentkeyrequest.md
deleted file mode 100644
index e209746..0000000
--- a/docs/operations/getcurrentkeyrequest.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# GetCurrentKeyRequest
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getcurrentkeyrequest.mdx b/docs/operations/getcurrentkeyrequest.mdx
new file mode 100644
index 0000000..720e0e0
--- /dev/null
+++ b/docs/operations/getcurrentkeyrequest.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetCurrentKeyRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getcurrentkeyresponse.md b/docs/operations/getcurrentkeyresponse.mdx
similarity index 88%
rename from docs/operations/getcurrentkeyresponse.md
rename to docs/operations/getcurrentkeyresponse.mdx
index 2855d5b..9b358b3 100644
--- a/docs/operations/getcurrentkeyresponse.md
+++ b/docs/operations/getcurrentkeyresponse.mdx
@@ -1,4 +1,6 @@
-# GetCurrentKeyResponse
+---
+title: "GetCurrentKeyResponse"
+---
API key details
@@ -7,4 +9,4 @@ API key details
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `data` | [operations.GetCurrentKeyData](../operations/getcurrentkeydata.md) | :heavy_check_mark: | Current API key information | {
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"expires_at": "2027-12-31T23:59:59Z",
"include_byok_in_limit": false,
"is_free_tier": false,
"is_management_key": false,
"is_provisioning_key": false,
"label": "sk-or-v1-au7...890",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"rate_limit": {
"interval": "1h",
"note": "This field is deprecated and safe to ignore.",
"requests": 1000
},
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5
} |
\ No newline at end of file
+| `data` | [operations.GetCurrentKeyData](../operations/getcurrentkeydata.mdx) | :heavy_check_mark: | Current API key information | \{
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"expires_at": "2027-12-31T23:59:59Z",
"include_byok_in_limit": false,
"is_free_tier": false,
"is_management_key": false,
"is_provisioning_key": false,
"label": "sk-or-v1-au7...890",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"rate_limit": \{
"interval": "1h",
"note": "This field is deprecated and safe to ignore.",
"requests": 1000
},
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5
} |
\ No newline at end of file
diff --git a/docs/operations/getfilemetadataglobals.mdx b/docs/operations/getfilemetadataglobals.mdx
new file mode 100644
index 0000000..4b9270d
--- /dev/null
+++ b/docs/operations/getfilemetadataglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetFileMetadataGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getfilemetadatarequest.mdx b/docs/operations/getfilemetadatarequest.mdx
new file mode 100644
index 0000000..eee1395
--- /dev/null
+++ b/docs/operations/getfilemetadatarequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "GetFileMetadataRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `file_id` | *str* | :heavy_check_mark: | N/A | file_011CNha8iCJcU1wXNR6q4V8w |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace. | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
\ No newline at end of file
diff --git a/docs/operations/getgenerationglobals.md b/docs/operations/getgenerationglobals.md
deleted file mode 100644
index 8420035..0000000
--- a/docs/operations/getgenerationglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# GetGenerationGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getgenerationglobals.mdx b/docs/operations/getgenerationglobals.mdx
new file mode 100644
index 0000000..450a95a
--- /dev/null
+++ b/docs/operations/getgenerationglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetGenerationGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getgenerationrequest.md b/docs/operations/getgenerationrequest.mdx
similarity index 99%
rename from docs/operations/getgenerationrequest.md
rename to docs/operations/getgenerationrequest.mdx
index 8c54a7a..318c980 100644
--- a/docs/operations/getgenerationrequest.md
+++ b/docs/operations/getgenerationrequest.mdx
@@ -1,5 +1,6 @@
-# GetGenerationRequest
-
+---
+title: "GetGenerationRequest"
+---
## Fields
diff --git a/docs/operations/getguardrailglobals.md b/docs/operations/getguardrailglobals.md
deleted file mode 100644
index 63bf9d6..0000000
--- a/docs/operations/getguardrailglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# GetGuardrailGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getguardrailglobals.mdx b/docs/operations/getguardrailglobals.mdx
new file mode 100644
index 0000000..3cd6713
--- /dev/null
+++ b/docs/operations/getguardrailglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetGuardrailGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getguardrailrequest.md b/docs/operations/getguardrailrequest.mdx
similarity index 99%
rename from docs/operations/getguardrailrequest.md
rename to docs/operations/getguardrailrequest.mdx
index ad49c82..15bebf6 100644
--- a/docs/operations/getguardrailrequest.md
+++ b/docs/operations/getguardrailrequest.mdx
@@ -1,5 +1,6 @@
-# GetGuardrailRequest
-
+---
+title: "GetGuardrailRequest"
+---
## Fields
diff --git a/docs/operations/getkeydata.md b/docs/operations/getkeydata.mdx
similarity index 99%
rename from docs/operations/getkeydata.md
rename to docs/operations/getkeydata.mdx
index c5a3db6..b41432d 100644
--- a/docs/operations/getkeydata.md
+++ b/docs/operations/getkeydata.mdx
@@ -1,4 +1,6 @@
-# GetKeyData
+---
+title: "GetKeyData"
+---
The API key information
diff --git a/docs/operations/getkeyglobals.md b/docs/operations/getkeyglobals.md
deleted file mode 100644
index 585d2a3..0000000
--- a/docs/operations/getkeyglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# GetKeyGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/models/internal/globals.md b/docs/operations/getkeyglobals.mdx
similarity index 98%
rename from docs/models/internal/globals.md
rename to docs/operations/getkeyglobals.mdx
index 5b30448..59d0a56 100644
--- a/docs/models/internal/globals.md
+++ b/docs/operations/getkeyglobals.mdx
@@ -1,5 +1,6 @@
-# Globals
-
+---
+title: "GetKeyGlobals"
+---
## Fields
diff --git a/docs/operations/getkeyrequest.md b/docs/operations/getkeyrequest.mdx
similarity index 99%
rename from docs/operations/getkeyrequest.md
rename to docs/operations/getkeyrequest.mdx
index b7b0a30..917f407 100644
--- a/docs/operations/getkeyrequest.md
+++ b/docs/operations/getkeyrequest.mdx
@@ -1,5 +1,6 @@
-# GetKeyRequest
-
+---
+title: "GetKeyRequest"
+---
## Fields
diff --git a/docs/operations/getkeyresponse.md b/docs/operations/getkeyresponse.mdx
similarity index 89%
rename from docs/operations/getkeyresponse.md
rename to docs/operations/getkeyresponse.mdx
index 72e8055..52562a4 100644
--- a/docs/operations/getkeyresponse.md
+++ b/docs/operations/getkeyresponse.mdx
@@ -1,4 +1,6 @@
-# GetKeyResponse
+---
+title: "GetKeyResponse"
+---
API key details
@@ -7,4 +9,4 @@ API key details
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `data` | [operations.GetKeyData](../operations/getkeydata.md) | :heavy_check_mark: | The API key information | {
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"created_at": "2025-08-24T10:30:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"disabled": false,
"expires_at": "2027-12-31T23:59:59Z",
"hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943",
"include_byok_in_limit": false,
"label": "sk-or-v1-0e6...1c96",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"name": "My Production Key",
"updated_at": "2025-08-24T15:45:00Z",
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5,
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
\ No newline at end of file
+| `data` | [operations.GetKeyData](../operations/getkeydata.mdx) | :heavy_check_mark: | The API key information | \{
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"created_at": "2025-08-24T10:30:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"disabled": false,
"expires_at": "2027-12-31T23:59:59Z",
"hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943",
"include_byok_in_limit": false,
"label": "sk-or-v1-0e6...1c96",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"name": "My Production Key",
"updated_at": "2025-08-24T15:45:00Z",
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5,
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
\ No newline at end of file
diff --git a/docs/operations/createembeddingsglobals.md b/docs/operations/getmodelglobals.mdx
similarity index 98%
rename from docs/operations/createembeddingsglobals.md
rename to docs/operations/getmodelglobals.mdx
index 13b9e13..e253e02 100644
--- a/docs/operations/createembeddingsglobals.md
+++ b/docs/operations/getmodelglobals.mdx
@@ -1,5 +1,6 @@
-# CreateEmbeddingsGlobals
-
+---
+title: "GetModelGlobals"
+---
## Fields
diff --git a/docs/operations/getmodelrequest.mdx b/docs/operations/getmodelrequest.mdx
new file mode 100644
index 0000000..860150a
--- /dev/null
+++ b/docs/operations/getmodelrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "GetModelRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `author` | *str* | :heavy_check_mark: | The author/organization of the model | openai |
+| `slug` | *str* | :heavy_check_mark: | The model slug, optionally including a variant suffix (e.g. gpt-4 or gpt-4:free) | gpt-4 |
\ No newline at end of file
diff --git a/docs/operations/getmodelscategory.mdx b/docs/operations/getmodelscategory.mdx
new file mode 100644
index 0000000..80c967a
--- /dev/null
+++ b/docs/operations/getmodelscategory.mdx
@@ -0,0 +1,32 @@
+---
+title: "GetModelsCategory"
+---
+
+Filter models by use case category
+
+## Example Usage
+
+```python
+from openrouter.operations import GetModelsCategory
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: GetModelsCategory = "programming"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"programming"`
+- `"roleplay"`
+- `"marketing"`
+- `"marketing/seo"`
+- `"technology"`
+- `"science"`
+- `"translation"`
+- `"legal"`
+- `"finance"`
+- `"health"`
+- `"trivia"`
+- `"academia"`
diff --git a/docs/operations/getmodelsglobals.md b/docs/operations/getmodelsglobals.md
deleted file mode 100644
index 9533d03..0000000
--- a/docs/operations/getmodelsglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# GetModelsGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createguardrailglobals.md b/docs/operations/getmodelsglobals.mdx
similarity index 98%
rename from docs/operations/createguardrailglobals.md
rename to docs/operations/getmodelsglobals.mdx
index 862c364..e6beafc 100644
--- a/docs/operations/createguardrailglobals.md
+++ b/docs/operations/getmodelsglobals.mdx
@@ -1,5 +1,6 @@
-# CreateGuardrailGlobals
-
+---
+title: "GetModelsGlobals"
+---
## Fields
diff --git a/docs/operations/getmodelsrequest.md b/docs/operations/getmodelsrequest.mdx
similarity index 96%
rename from docs/operations/getmodelsrequest.md
rename to docs/operations/getmodelsrequest.mdx
index 57de7f7..272e144 100644
--- a/docs/operations/getmodelsrequest.md
+++ b/docs/operations/getmodelsrequest.mdx
@@ -1,5 +1,6 @@
-# GetModelsRequest
-
+---
+title: "GetModelsRequest"
+---
## Fields
@@ -8,10 +9,10 @@
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `category` | [Optional[operations.GetModelsCategory]](../operations/getmodelscategory.md) | :heavy_minus_sign: | Filter models by use case category | programming |
+| `category` | [Optional[operations.GetModelsCategory]](../operations/getmodelscategory.mdx) | :heavy_minus_sign: | Filter models by use case category | programming |
| `supported_parameters` | *Optional[str]* | :heavy_minus_sign: | Filter models by supported parameter (comma-separated) | temperature |
| `output_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or "all" to include all models. Defaults to "text". | text |
-| `sort` | [Optional[operations.GetModelsSort]](../operations/getmodelssort.md) | :heavy_minus_sign: | Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved. | newest |
+| `sort` | [Optional[operations.GetModelsSort]](../operations/getmodelssort.mdx) | :heavy_minus_sign: | Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved. | newest |
| `q` | *Optional[str]* | :heavy_minus_sign: | Free-text search by model name or slug. | gpt-4 |
| `input_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by input modality. Comma-separated list of: text, image, audio, file. | text,image |
| `context` | *Optional[int]* | :heavy_minus_sign: | Minimum context length (tokens). Models with smaller context are excluded. | 128000 |
@@ -20,6 +21,6 @@
| `arch` | *Optional[str]* | :heavy_minus_sign: | Filter models by architecture/model family (e.g. GPT, Claude, Gemini, Llama). | GPT |
| `model_authors` | *Optional[str]* | :heavy_minus_sign: | Filter models by the organization that created the model. Comma-separated list of author slugs. | openai,anthropic |
| `providers` | *Optional[str]* | :heavy_minus_sign: | Filter models by hosting provider. Comma-separated list of provider names. | OpenAI,Anthropic |
-| `distillable` | [Optional[operations.Distillable]](../operations/distillable.md) | :heavy_minus_sign: | Filter by distillation capability. "true" returns only distillable models, "false" excludes them. | true |
-| `zdr` | [Optional[operations.Zdr]](../operations/zdr.md) | :heavy_minus_sign: | When set to "true", return only models with zero data retention endpoints. | true |
-| `region` | [Optional[operations.Region]](../operations/region.md) | :heavy_minus_sign: | Filter to models with endpoints in the given data region. Currently only "eu" is supported. | eu |
\ No newline at end of file
+| `distillable` | [Optional[operations.Distillable]](../operations/distillable.mdx) | :heavy_minus_sign: | Filter by distillation capability. "true" returns only distillable models, "false" excludes them. | true |
+| `zdr` | [Optional[operations.Zdr]](../operations/zdr.mdx) | :heavy_minus_sign: | When set to "true", return only models with zero data retention endpoints. | true |
+| `region` | [Optional[operations.Region]](../operations/region.mdx) | :heavy_minus_sign: | Filter to models with endpoints in the given data region. Currently only "eu" is supported. | eu |
\ No newline at end of file
diff --git a/docs/operations/getmodelssort.mdx b/docs/operations/getmodelssort.mdx
new file mode 100644
index 0000000..9a5681e
--- /dev/null
+++ b/docs/operations/getmodelssort.mdx
@@ -0,0 +1,30 @@
+---
+title: "GetModelsSort"
+---
+
+Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved.
+
+## Example Usage
+
+```python
+from openrouter.operations import GetModelsSort
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: GetModelsSort = "most-popular"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"most-popular"`
+- `"newest"`
+- `"top-weekly"`
+- `"pricing-low-to-high"`
+- `"pricing-high-to-low"`
+- `"context-high-to-low"`
+- `"throughput-high-to-low"`
+- `"latency-low-to-high"`
+- `"intelligence-high-to-low"`
+- `"design-arena-elo-high-to-low"`
diff --git a/docs/operations/getobservabilitydestinationglobals.mdx b/docs/operations/getobservabilitydestinationglobals.mdx
new file mode 100644
index 0000000..aeec24b
--- /dev/null
+++ b/docs/operations/getobservabilitydestinationglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetObservabilityDestinationGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getobservabilitydestinationrequest.mdx b/docs/operations/getobservabilitydestinationrequest.mdx
new file mode 100644
index 0000000..39b2655
--- /dev/null
+++ b/docs/operations/getobservabilitydestinationrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "GetObservabilityDestinationRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The destination ID (UUID). | 99999999-aaaa-bbbb-cccc-dddddddddddd |
\ No newline at end of file
diff --git a/docs/operations/getpresetglobals.mdx b/docs/operations/getpresetglobals.mdx
new file mode 100644
index 0000000..b3e3cb5
--- /dev/null
+++ b/docs/operations/getpresetglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetPresetGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getpresetrequest.mdx b/docs/operations/getpresetrequest.mdx
new file mode 100644
index 0000000..3738398
--- /dev/null
+++ b/docs/operations/getpresetrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "GetPresetRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `slug` | *str* | :heavy_check_mark: | URL-safe slug identifying the preset. | my-preset |
\ No newline at end of file
diff --git a/docs/operations/getpresetversionglobals.mdx b/docs/operations/getpresetversionglobals.mdx
new file mode 100644
index 0000000..55879e9
--- /dev/null
+++ b/docs/operations/getpresetversionglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetPresetVersionGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getpresetversionrequest.mdx b/docs/operations/getpresetversionrequest.mdx
new file mode 100644
index 0000000..c7cf401
--- /dev/null
+++ b/docs/operations/getpresetversionrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "GetPresetVersionRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `slug` | *str* | :heavy_check_mark: | URL-safe slug identifying the preset. | my-preset |
+| `version` | *str* | :heavy_check_mark: | Version number of the preset. | 1 |
\ No newline at end of file
diff --git a/docs/operations/getrankingsdailyglobals.mdx b/docs/operations/getrankingsdailyglobals.mdx
new file mode 100644
index 0000000..4bc1a2b
--- /dev/null
+++ b/docs/operations/getrankingsdailyglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetRankingsDailyGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getrankingsdailyrequest.mdx b/docs/operations/getrankingsdailyrequest.mdx
new file mode 100644
index 0000000..1788b94
--- /dev/null
+++ b/docs/operations/getrankingsdailyrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "GetRankingsDailyRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `start_date` | *Optional[str]* | :heavy_minus_sign: | Start of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to 30 days before `end_date`. The dataset begins at 2025-01-01; earlier values are clamped forward to that floor and the resolved value is echoed in `meta.start_date`. | 2026-04-12 |
+| `end_date` | *Optional[str]* | :heavy_minus_sign: | End of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to the most recent completed UTC day. Must be on or after 2025-01-01; earlier values are rejected with a 400. | 2026-05-11 |
\ No newline at end of file
diff --git a/docs/operations/gettaskclassificationsglobals.mdx b/docs/operations/gettaskclassificationsglobals.mdx
new file mode 100644
index 0000000..34e94c3
--- /dev/null
+++ b/docs/operations/gettaskclassificationsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetTaskClassificationsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/gettaskclassificationsrequest.mdx b/docs/operations/gettaskclassificationsrequest.mdx
new file mode 100644
index 0000000..acb6b48
--- /dev/null
+++ b/docs/operations/gettaskclassificationsrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "GetTaskClassificationsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `window` | [Optional[operations.Window]](../operations/window.mdx) | :heavy_minus_sign: | Trailing time window for the classification data. Currently only `7d` (trailing 7 days) is supported. | 7d |
\ No newline at end of file
diff --git a/docs/operations/getuseractivityglobals.md b/docs/operations/getuseractivityglobals.md
deleted file mode 100644
index a67a41d..0000000
--- a/docs/operations/getuseractivityglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# GetUserActivityGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getuseractivityglobals.mdx b/docs/operations/getuseractivityglobals.mdx
new file mode 100644
index 0000000..f31e131
--- /dev/null
+++ b/docs/operations/getuseractivityglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetUserActivityGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getuseractivityrequest.md b/docs/operations/getuseractivityrequest.mdx
similarity index 99%
rename from docs/operations/getuseractivityrequest.md
rename to docs/operations/getuseractivityrequest.mdx
index 302da8d..6ff32ec 100644
--- a/docs/operations/getuseractivityrequest.md
+++ b/docs/operations/getuseractivityrequest.mdx
@@ -1,5 +1,6 @@
-# GetUserActivityRequest
-
+---
+title: "GetUserActivityRequest"
+---
## Fields
diff --git a/docs/operations/getvideosglobals.mdx b/docs/operations/getvideosglobals.mdx
new file mode 100644
index 0000000..7dfb462
--- /dev/null
+++ b/docs/operations/getvideosglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetVideosGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getvideosrequest.mdx b/docs/operations/getvideosrequest.mdx
new file mode 100644
index 0000000..1b1c087
--- /dev/null
+++ b/docs/operations/getvideosrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "GetVideosRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `job_id` | *str* | :heavy_check_mark: | N/A | job-abc123 |
\ No newline at end of file
diff --git a/docs/operations/getworkspaceglobals.mdx b/docs/operations/getworkspaceglobals.mdx
new file mode 100644
index 0000000..b3d863a
--- /dev/null
+++ b/docs/operations/getworkspaceglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "GetWorkspaceGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/getworkspacerequest.mdx b/docs/operations/getworkspacerequest.mdx
new file mode 100644
index 0000000..b9ee3b7
--- /dev/null
+++ b/docs/operations/getworkspacerequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "GetWorkspaceRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
\ No newline at end of file
diff --git a/docs/operations/granularity.mdx b/docs/operations/granularity.mdx
new file mode 100644
index 0000000..8aa00fc
--- /dev/null
+++ b/docs/operations/granularity.mdx
@@ -0,0 +1,10 @@
+---
+title: "Granularity"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- |
+| `display_label` | *str* | :heavy_check_mark: | Human-readable label | Day |
+| `name` | [operations.GranularityName](../operations/granularityname.mdx) | :heavy_check_mark: | Granularity identifier | day |
\ No newline at end of file
diff --git a/docs/operations/granularityname.mdx b/docs/operations/granularityname.mdx
new file mode 100644
index 0000000..9d6dfd5
--- /dev/null
+++ b/docs/operations/granularityname.mdx
@@ -0,0 +1,25 @@
+---
+title: "GranularityName"
+---
+
+Granularity identifier
+
+## Example Usage
+
+```python
+from openrouter.operations import GranularityName
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: GranularityName = "minute"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"minute"`
+- `"hour"`
+- `"day"`
+- `"week"`
+- `"month"`
diff --git a/docs/operations/headquarters.mdx b/docs/operations/headquarters.mdx
new file mode 100644
index 0000000..383ef28
--- /dev/null
+++ b/docs/operations/headquarters.mdx
@@ -0,0 +1,269 @@
+---
+title: "Headquarters"
+---
+
+ISO 3166-1 Alpha-2 country code of the provider headquarters
+
+## Example Usage
+
+```python
+from openrouter.operations import Headquarters
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Headquarters = "AD"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"AD"`
+- `"AE"`
+- `"AF"`
+- `"AG"`
+- `"AI"`
+- `"AL"`
+- `"AM"`
+- `"AO"`
+- `"AQ"`
+- `"AR"`
+- `"AS"`
+- `"AT"`
+- `"AU"`
+- `"AW"`
+- `"AX"`
+- `"AZ"`
+- `"BA"`
+- `"BB"`
+- `"BD"`
+- `"BE"`
+- `"BF"`
+- `"BG"`
+- `"BH"`
+- `"BI"`
+- `"BJ"`
+- `"BL"`
+- `"BM"`
+- `"BN"`
+- `"BO"`
+- `"BQ"`
+- `"BR"`
+- `"BS"`
+- `"BT"`
+- `"BV"`
+- `"BW"`
+- `"BY"`
+- `"BZ"`
+- `"CA"`
+- `"CC"`
+- `"CD"`
+- `"CF"`
+- `"CG"`
+- `"CH"`
+- `"CI"`
+- `"CK"`
+- `"CL"`
+- `"CM"`
+- `"CN"`
+- `"CO"`
+- `"CR"`
+- `"CU"`
+- `"CV"`
+- `"CW"`
+- `"CX"`
+- `"CY"`
+- `"CZ"`
+- `"DE"`
+- `"DJ"`
+- `"DK"`
+- `"DM"`
+- `"DO"`
+- `"DZ"`
+- `"EC"`
+- `"EE"`
+- `"EG"`
+- `"EH"`
+- `"ER"`
+- `"ES"`
+- `"ET"`
+- `"FI"`
+- `"FJ"`
+- `"FK"`
+- `"FM"`
+- `"FO"`
+- `"FR"`
+- `"GA"`
+- `"GB"`
+- `"GD"`
+- `"GE"`
+- `"GF"`
+- `"GG"`
+- `"GH"`
+- `"GI"`
+- `"GL"`
+- `"GM"`
+- `"GN"`
+- `"GP"`
+- `"GQ"`
+- `"GR"`
+- `"GS"`
+- `"GT"`
+- `"GU"`
+- `"GW"`
+- `"GY"`
+- `"HK"`
+- `"HM"`
+- `"HN"`
+- `"HR"`
+- `"HT"`
+- `"HU"`
+- `"ID"`
+- `"IE"`
+- `"IL"`
+- `"IM"`
+- `"IN"`
+- `"IO"`
+- `"IQ"`
+- `"IR"`
+- `"IS"`
+- `"IT"`
+- `"JE"`
+- `"JM"`
+- `"JO"`
+- `"JP"`
+- `"KE"`
+- `"KG"`
+- `"KH"`
+- `"KI"`
+- `"KM"`
+- `"KN"`
+- `"KP"`
+- `"KR"`
+- `"KW"`
+- `"KY"`
+- `"KZ"`
+- `"LA"`
+- `"LB"`
+- `"LC"`
+- `"LI"`
+- `"LK"`
+- `"LR"`
+- `"LS"`
+- `"LT"`
+- `"LU"`
+- `"LV"`
+- `"LY"`
+- `"MA"`
+- `"MC"`
+- `"MD"`
+- `"ME"`
+- `"MF"`
+- `"MG"`
+- `"MH"`
+- `"MK"`
+- `"ML"`
+- `"MM"`
+- `"MN"`
+- `"MO"`
+- `"MP"`
+- `"MQ"`
+- `"MR"`
+- `"MS"`
+- `"MT"`
+- `"MU"`
+- `"MV"`
+- `"MW"`
+- `"MX"`
+- `"MY"`
+- `"MZ"`
+- `"NA"`
+- `"NC"`
+- `"NE"`
+- `"NF"`
+- `"NG"`
+- `"NI"`
+- `"NL"`
+- `"NO"`
+- `"NP"`
+- `"NR"`
+- `"NU"`
+- `"NZ"`
+- `"OM"`
+- `"PA"`
+- `"PE"`
+- `"PF"`
+- `"PG"`
+- `"PH"`
+- `"PK"`
+- `"PL"`
+- `"PM"`
+- `"PN"`
+- `"PR"`
+- `"PS"`
+- `"PT"`
+- `"PW"`
+- `"PY"`
+- `"QA"`
+- `"RE"`
+- `"RO"`
+- `"RS"`
+- `"RU"`
+- `"RW"`
+- `"SA"`
+- `"SB"`
+- `"SC"`
+- `"SD"`
+- `"SE"`
+- `"SG"`
+- `"SH"`
+- `"SI"`
+- `"SJ"`
+- `"SK"`
+- `"SL"`
+- `"SM"`
+- `"SN"`
+- `"SO"`
+- `"SR"`
+- `"SS"`
+- `"ST"`
+- `"SV"`
+- `"SX"`
+- `"SY"`
+- `"SZ"`
+- `"TC"`
+- `"TD"`
+- `"TF"`
+- `"TG"`
+- `"TH"`
+- `"TJ"`
+- `"TK"`
+- `"TL"`
+- `"TM"`
+- `"TN"`
+- `"TO"`
+- `"TR"`
+- `"TT"`
+- `"TV"`
+- `"TW"`
+- `"TZ"`
+- `"UA"`
+- `"UG"`
+- `"UM"`
+- `"US"`
+- `"UY"`
+- `"UZ"`
+- `"VA"`
+- `"VC"`
+- `"VE"`
+- `"VG"`
+- `"VI"`
+- `"VN"`
+- `"VU"`
+- `"WF"`
+- `"WS"`
+- `"YE"`
+- `"YT"`
+- `"ZA"`
+- `"ZM"`
+- `"ZW"`
diff --git a/docs/operations/imageurl.mdx b/docs/operations/imageurl.mdx
new file mode 100644
index 0000000..693064d
--- /dev/null
+++ b/docs/operations/imageurl.mdx
@@ -0,0 +1,9 @@
+---
+title: "ImageURL"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `url` | *str* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/input.md b/docs/operations/input.mdx
similarity index 74%
rename from docs/operations/input.md
rename to docs/operations/input.mdx
index 4559859..deecee2 100644
--- a/docs/operations/input.md
+++ b/docs/operations/input.mdx
@@ -1,8 +1,9 @@
-# Input
-
+---
+title: "Input"
+---
## Fields
| Field | Type | Required | Description |
| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- |
-| `content` | List[[operations.Content](../operations/content.md)] | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `content` | List[[operations.Content](../operations/content.mdx)] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/inputunion.md b/docs/operations/inputunion.mdx
similarity index 94%
rename from docs/operations/inputunion.md
rename to docs/operations/inputunion.mdx
index 655cca3..2394952 100644
--- a/docs/operations/inputunion.md
+++ b/docs/operations/inputunion.mdx
@@ -1,4 +1,6 @@
-# InputUnion
+---
+title: "InputUnion"
+---
Text, token, or multimodal input(s) to embed
diff --git a/docs/operations/listbyokkeysglobals.mdx b/docs/operations/listbyokkeysglobals.mdx
new file mode 100644
index 0000000..67a37d5
--- /dev/null
+++ b/docs/operations/listbyokkeysglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListBYOKKeysGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listbyokkeysrequest.mdx b/docs/operations/listbyokkeysrequest.mdx
new file mode 100644
index 0000000..ed0a657
--- /dev/null
+++ b/docs/operations/listbyokkeysrequest.mdx
@@ -0,0 +1,15 @@
+---
+title: "ListBYOKKeysRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Optional workspace ID to filter by. Defaults to the authenticated entity's default workspace. | 550e8400-e29b-41d4-a716-446655440000 |
+| `provider` | [Optional[operations.Provider]](../operations/provider.mdx) | :heavy_minus_sign: | Optional provider slug to filter by (e.g. `openai`, `anthropic`, `amazon-bedrock`). | openai |
\ No newline at end of file
diff --git a/docs/operations/listbyokkeysresponse.mdx b/docs/operations/listbyokkeysresponse.mdx
new file mode 100644
index 0000000..213ea97
--- /dev/null
+++ b/docs/operations/listbyokkeysresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ListBYOKKeysResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `result` | [components.ListBYOKKeysResponse](../components/listbyokkeysresponse.mdx) | :heavy_check_mark: | N/A | \{
"data": [
\{
"allowed_api_key_hashes": null,
"allowed_models": null,
"allowed_user_ids": null,
"created_at": "2025-08-24T10:30:00Z",
"disabled": false,
"id": "11111111-2222-3333-4444-555555555555",
"is_fallback": false,
"label": "sk-...AbCd",
"name": "Production OpenAI Key",
"provider": "openai",
"sort_order": 0,
"workspace_id": "550e8400-e29b-41d4-a716-446655440000"
}
],
"total_count": 1
} |
\ No newline at end of file
diff --git a/docs/operations/listdata.md b/docs/operations/listdata.mdx
similarity index 99%
rename from docs/operations/listdata.md
rename to docs/operations/listdata.mdx
index d2a0b36..a35a3a3 100644
--- a/docs/operations/listdata.md
+++ b/docs/operations/listdata.mdx
@@ -1,5 +1,6 @@
-# ListData
-
+---
+title: "ListData"
+---
## Fields
diff --git a/docs/operations/listembeddingsmodelsglobals.md b/docs/operations/listembeddingsmodelsglobals.md
deleted file mode 100644
index 20150d7..0000000
--- a/docs/operations/listembeddingsmodelsglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListEmbeddingsModelsGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listembeddingsmodelsglobals.mdx b/docs/operations/listembeddingsmodelsglobals.mdx
new file mode 100644
index 0000000..fad7772
--- /dev/null
+++ b/docs/operations/listembeddingsmodelsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListEmbeddingsModelsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listembeddingsmodelsrequest.md b/docs/operations/listembeddingsmodelsrequest.md
deleted file mode 100644
index d3628eb..0000000
--- a/docs/operations/listembeddingsmodelsrequest.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListEmbeddingsModelsRequest
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listembeddingsmodelsrequest.mdx b/docs/operations/listembeddingsmodelsrequest.mdx
new file mode 100644
index 0000000..76c365b
--- /dev/null
+++ b/docs/operations/listembeddingsmodelsrequest.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListEmbeddingsModelsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listendpointsglobals.md b/docs/operations/listendpointsglobals.md
deleted file mode 100644
index 5a81187..0000000
--- a/docs/operations/listendpointsglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListEndpointsGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listendpointsglobals.mdx b/docs/operations/listendpointsglobals.mdx
new file mode 100644
index 0000000..3e37c97
--- /dev/null
+++ b/docs/operations/listendpointsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListEndpointsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listendpointsrequest.md b/docs/operations/listendpointsrequest.mdx
similarity index 99%
rename from docs/operations/listendpointsrequest.md
rename to docs/operations/listendpointsrequest.mdx
index 49dea4f..ae60c36 100644
--- a/docs/operations/listendpointsrequest.md
+++ b/docs/operations/listendpointsrequest.mdx
@@ -1,5 +1,6 @@
-# ListEndpointsRequest
-
+---
+title: "ListEndpointsRequest"
+---
## Fields
diff --git a/docs/operations/listendpointsresponse.md b/docs/operations/listendpointsresponse.mdx
similarity index 89%
rename from docs/operations/listendpointsresponse.md
rename to docs/operations/listendpointsresponse.mdx
index 130c768..b3861b8 100644
--- a/docs/operations/listendpointsresponse.md
+++ b/docs/operations/listendpointsresponse.mdx
@@ -1,4 +1,6 @@
-# ListEndpointsResponse
+---
+title: "ListEndpointsResponse"
+---
Returns a list of endpoints
@@ -7,4 +9,4 @@ Returns a list of endpoints
| Field | Type | Required | Description | Example |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `data` | [components.ListEndpointsResponse](../components/listendpointsresponse.md) | :heavy_check_mark: | List of available endpoints for a model | {
"architecture": {
"input_modalities": [
"text"
],
"instruct_type": "chatml",
"modality": "text-\u003etext",
"output_modalities": [
"text"
],
"tokenizer": "GPT"
},
"created": 1692901234,
"description": "GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.",
"endpoints": [
{
"context_length": 8192,
"latency_last_30m": {
"p50": 0.25,
"p75": 0.35,
"p90": 0.48,
"p99": 0.85
},
"max_completion_tokens": 4096,
"max_prompt_tokens": 8192,
"model_name": "GPT-4",
"name": "OpenAI: GPT-4",
"pricing": {
"completion": "0.00006",
"image": "0",
"prompt": "0.00003",
"request": "0"
},
"provider_name": "OpenAI",
"quantization": "fp16",
"status": "default",
"supported_parameters": [
"temperature",
"top_p",
"max_tokens",
"frequency_penalty",
"presence_penalty"
],
"supports_implicit_caching": true,
"tag": "openai",
"throughput_last_30m": {
"p50": 45.2,
"p75": 38.5,
"p90": 28.3,
"p99": 15.1
},
"uptime_last_1d": 99.8,
"uptime_last_30m": 99.5,
"uptime_last_5m": 100
}
],
"id": "openai/gpt-4",
"name": "GPT-4"
} |
\ No newline at end of file
+| `data` | [components.ListEndpointsResponse](../components/listendpointsresponse.mdx) | :heavy_check_mark: | List of available endpoints for a model | \{
"architecture": \{
"input_modalities": [
"text"
],
"instruct_type": "chatml",
"modality": "text-\u003etext",
"output_modalities": [
"text"
],
"tokenizer": "GPT"
},
"created": 1692901234,
"description": "GPT-4 is a large multimodal model that can solve difficult problems with greater accuracy.",
"endpoints": [
\{
"context_length": 8192,
"latency_last_30m": \{
"p50": 0.25,
"p75": 0.35,
"p90": 0.48,
"p99": 0.85
},
"max_completion_tokens": 4096,
"max_prompt_tokens": 8192,
"model_name": "GPT-4",
"name": "OpenAI: GPT-4",
"pricing": \{
"completion": "0.00006",
"image": "0",
"prompt": "0.00003",
"request": "0"
},
"provider_name": "OpenAI",
"quantization": "fp16",
"status": "default",
"supported_parameters": [
"temperature",
"top_p",
"max_tokens",
"frequency_penalty",
"presence_penalty"
],
"supports_implicit_caching": true,
"tag": "openai",
"throughput_last_30m": \{
"p50": 45.2,
"p75": 38.5,
"p90": 28.3,
"p99": 15.1
},
"uptime_last_1d": 99.8,
"uptime_last_30m": 99.5,
"uptime_last_5m": 100
}
],
"id": "openai/gpt-4",
"name": "GPT-4"
} |
\ No newline at end of file
diff --git a/docs/operations/listendpointszdrglobals.md b/docs/operations/listendpointszdrglobals.md
deleted file mode 100644
index 6abb940..0000000
--- a/docs/operations/listendpointszdrglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListEndpointsZdrGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listendpointszdrglobals.mdx b/docs/operations/listendpointszdrglobals.mdx
new file mode 100644
index 0000000..8f47131
--- /dev/null
+++ b/docs/operations/listendpointszdrglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListEndpointsZdrGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listendpointszdrrequest.md b/docs/operations/listendpointszdrrequest.md
deleted file mode 100644
index 727be2c..0000000
--- a/docs/operations/listendpointszdrrequest.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListEndpointsZdrRequest
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listendpointszdrrequest.mdx b/docs/operations/listendpointszdrrequest.mdx
new file mode 100644
index 0000000..70f27d8
--- /dev/null
+++ b/docs/operations/listendpointszdrrequest.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListEndpointsZdrRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listendpointszdrresponse.md b/docs/operations/listendpointszdrresponse.mdx
similarity index 79%
rename from docs/operations/listendpointszdrresponse.md
rename to docs/operations/listendpointszdrresponse.mdx
index 54cf662..31012e2 100644
--- a/docs/operations/listendpointszdrresponse.md
+++ b/docs/operations/listendpointszdrresponse.mdx
@@ -1,4 +1,6 @@
-# ListEndpointsZdrResponse
+---
+title: "ListEndpointsZdrResponse"
+---
Returns a list of endpoints
@@ -7,4 +9,4 @@ Returns a list of endpoints
| Field | Type | Required | Description |
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
-| `data` | List[[components.PublicEndpoint](../components/publicendpoint.md)] | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `data` | List[[components.PublicEndpoint](../components/publicendpoint.mdx)] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/listfilesglobals.mdx b/docs/operations/listfilesglobals.mdx
new file mode 100644
index 0000000..5e86176
--- /dev/null
+++ b/docs/operations/listfilesglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListFilesGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listfilesrequest.mdx b/docs/operations/listfilesrequest.mdx
new file mode 100644
index 0000000..567c8a2
--- /dev/null
+++ b/docs/operations/listfilesrequest.mdx
@@ -0,0 +1,14 @@
+---
+title: "ListFilesRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of files to return (1–1000). | 100 |
+| `cursor` | *Optional[str]* | :heavy_minus_sign: | Opaque pagination cursor from a previous response. | eyJjdXJzb3IiOiJmaWxlXzAxMUNOaGE4aUNKY1Uxd1hOUjZxNFY4dyJ9 |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace. | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
\ No newline at end of file
diff --git a/docs/operations/listfilesresponse.mdx b/docs/operations/listfilesresponse.mdx
new file mode 100644
index 0000000..ba3f4b5
--- /dev/null
+++ b/docs/operations/listfilesresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ListFilesResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `result` | [components.FileListResponse](../components/filelistresponse.mdx) | :heavy_check_mark: | N/A | \{
"cursor": null,
"data": [
\{
"created_at": "2025-01-01T00:00:00Z",
"downloadable": false,
"filename": "document.pdf",
"id": "file_011CNha8iCJcU1wXNR6q4V8w",
"mime_type": "application/pdf",
"size_bytes": 1024000,
"type": "file"
}
],
"first_id": "file_011CNha8iCJcU1wXNR6q4V8w",
"has_more": false,
"last_id": "file_011CNha8iCJcU1wXNR6q4V8w"
} |
\ No newline at end of file
diff --git a/docs/operations/listgenerationcontentglobals.mdx b/docs/operations/listgenerationcontentglobals.mdx
new file mode 100644
index 0000000..8096c17
--- /dev/null
+++ b/docs/operations/listgenerationcontentglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListGenerationContentGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listgenerationcontentrequest.mdx b/docs/operations/listgenerationcontentrequest.mdx
new file mode 100644
index 0000000..d1caecb
--- /dev/null
+++ b/docs/operations/listgenerationcontentrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "ListGenerationContentRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The generation ID | gen-1234567890 |
\ No newline at end of file
diff --git a/docs/operations/listglobals.md b/docs/operations/listglobals.md
deleted file mode 100644
index 53064e4..0000000
--- a/docs/operations/listglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/createauthkeyscodeglobals.md b/docs/operations/listglobals.mdx
similarity index 99%
rename from docs/operations/createauthkeyscodeglobals.md
rename to docs/operations/listglobals.mdx
index ab7e4e5..b13c7ab 100644
--- a/docs/operations/createauthkeyscodeglobals.md
+++ b/docs/operations/listglobals.mdx
@@ -1,5 +1,6 @@
-# CreateAuthKeysCodeGlobals
-
+---
+title: "ListGlobals"
+---
## Fields
diff --git a/docs/operations/listguardrailkeyassignmentsglobals.md b/docs/operations/listguardrailkeyassignmentsglobals.md
deleted file mode 100644
index a9cc4a3..0000000
--- a/docs/operations/listguardrailkeyassignmentsglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListGuardrailKeyAssignmentsGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listguardrailkeyassignmentsglobals.mdx b/docs/operations/listguardrailkeyassignmentsglobals.mdx
new file mode 100644
index 0000000..8b06bf7
--- /dev/null
+++ b/docs/operations/listguardrailkeyassignmentsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListGuardrailKeyAssignmentsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listguardrailkeyassignmentsrequest.md b/docs/operations/listguardrailkeyassignmentsrequest.mdx
similarity index 99%
rename from docs/operations/listguardrailkeyassignmentsrequest.md
rename to docs/operations/listguardrailkeyassignmentsrequest.mdx
index 1873ab9..92b4303 100644
--- a/docs/operations/listguardrailkeyassignmentsrequest.md
+++ b/docs/operations/listguardrailkeyassignmentsrequest.mdx
@@ -1,5 +1,6 @@
-# ListGuardrailKeyAssignmentsRequest
-
+---
+title: "ListGuardrailKeyAssignmentsRequest"
+---
## Fields
diff --git a/docs/operations/listguardrailkeyassignmentsresponse.md b/docs/operations/listguardrailkeyassignmentsresponse.mdx
similarity index 85%
rename from docs/operations/listguardrailkeyassignmentsresponse.md
rename to docs/operations/listguardrailkeyassignmentsresponse.mdx
index 3ce3be7..8684758 100644
--- a/docs/operations/listguardrailkeyassignmentsresponse.md
+++ b/docs/operations/listguardrailkeyassignmentsresponse.mdx
@@ -1,8 +1,9 @@
-# ListGuardrailKeyAssignmentsResponse
-
+---
+title: "ListGuardrailKeyAssignmentsResponse"
+---
## Fields
| Field | Type | Required | Description | Example |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `result` | [components.ListKeyAssignmentsResponse](../components/listkeyassignmentsresponse.md) | :heavy_check_mark: | N/A | {
"data": [
{
"assigned_by": "user_abc123",
"created_at": "2025-08-24T10:30:00Z",
"guardrail_id": "550e8400-e29b-41d4-a716-446655440001",
"id": "550e8400-e29b-41d4-a716-446655440000",
"key_hash": "c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93",
"key_label": "prod-key",
"key_name": "Production Key"
}
],
"total_count": 1
} |
\ No newline at end of file
+| `result` | [components.ListKeyAssignmentsResponse](../components/listkeyassignmentsresponse.mdx) | :heavy_check_mark: | N/A | \{
"data": [
\{
"assigned_by": "user_abc123",
"created_at": "2025-08-24T10:30:00Z",
"guardrail_id": "550e8400-e29b-41d4-a716-446655440001",
"id": "550e8400-e29b-41d4-a716-446655440000",
"key_hash": "c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93",
"key_label": "prod-key",
"key_name": "Production Key"
}
],
"total_count": 1
} |
\ No newline at end of file
diff --git a/docs/operations/listguardrailmemberassignmentsglobals.md b/docs/operations/listguardrailmemberassignmentsglobals.md
deleted file mode 100644
index 58ce40e..0000000
--- a/docs/operations/listguardrailmemberassignmentsglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListGuardrailMemberAssignmentsGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listguardrailmemberassignmentsglobals.mdx b/docs/operations/listguardrailmemberassignmentsglobals.mdx
new file mode 100644
index 0000000..98c69e7
--- /dev/null
+++ b/docs/operations/listguardrailmemberassignmentsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListGuardrailMemberAssignmentsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listguardrailmemberassignmentsrequest.md b/docs/operations/listguardrailmemberassignmentsrequest.mdx
similarity index 99%
rename from docs/operations/listguardrailmemberassignmentsrequest.md
rename to docs/operations/listguardrailmemberassignmentsrequest.mdx
index 962eb0c..740af2e 100644
--- a/docs/operations/listguardrailmemberassignmentsrequest.md
+++ b/docs/operations/listguardrailmemberassignmentsrequest.mdx
@@ -1,5 +1,6 @@
-# ListGuardrailMemberAssignmentsRequest
-
+---
+title: "ListGuardrailMemberAssignmentsRequest"
+---
## Fields
diff --git a/docs/operations/listguardrailmemberassignmentsresponse.md b/docs/operations/listguardrailmemberassignmentsresponse.mdx
similarity index 85%
rename from docs/operations/listguardrailmemberassignmentsresponse.md
rename to docs/operations/listguardrailmemberassignmentsresponse.mdx
index 766effb..3c19a6f 100644
--- a/docs/operations/listguardrailmemberassignmentsresponse.md
+++ b/docs/operations/listguardrailmemberassignmentsresponse.mdx
@@ -1,8 +1,9 @@
-# ListGuardrailMemberAssignmentsResponse
-
+---
+title: "ListGuardrailMemberAssignmentsResponse"
+---
## Fields
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `result` | [components.ListMemberAssignmentsResponse](../components/listmemberassignmentsresponse.md) | :heavy_check_mark: | N/A | {
"data": [
{
"assigned_by": "user_abc123",
"created_at": "2025-08-24T10:30:00Z",
"guardrail_id": "550e8400-e29b-41d4-a716-446655440001",
"id": "550e8400-e29b-41d4-a716-446655440000",
"organization_id": "org_xyz789",
"user_id": "user_abc123"
}
],
"total_count": 1
} |
\ No newline at end of file
+| `result` | [components.ListMemberAssignmentsResponse](../components/listmemberassignmentsresponse.mdx) | :heavy_check_mark: | N/A | \{
"data": [
\{
"assigned_by": "user_abc123",
"created_at": "2025-08-24T10:30:00Z",
"guardrail_id": "550e8400-e29b-41d4-a716-446655440001",
"id": "550e8400-e29b-41d4-a716-446655440000",
"organization_id": "org_xyz789",
"user_id": "user_abc123"
}
],
"total_count": 1
} |
\ No newline at end of file
diff --git a/docs/operations/listguardrailsglobals.md b/docs/operations/listguardrailsglobals.md
deleted file mode 100644
index 4a623f2..0000000
--- a/docs/operations/listguardrailsglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListGuardrailsGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listguardrailsglobals.mdx b/docs/operations/listguardrailsglobals.mdx
new file mode 100644
index 0000000..60d11df
--- /dev/null
+++ b/docs/operations/listguardrailsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListGuardrailsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listguardrailsrequest.md b/docs/operations/listguardrailsrequest.mdx
similarity index 99%
rename from docs/operations/listguardrailsrequest.md
rename to docs/operations/listguardrailsrequest.mdx
index e6f8126..285cb55 100644
--- a/docs/operations/listguardrailsrequest.md
+++ b/docs/operations/listguardrailsrequest.mdx
@@ -1,5 +1,6 @@
-# ListGuardrailsRequest
-
+---
+title: "ListGuardrailsRequest"
+---
## Fields
diff --git a/docs/operations/listguardrailsresponse.md b/docs/operations/listguardrailsresponse.mdx
similarity index 90%
rename from docs/operations/listguardrailsresponse.md
rename to docs/operations/listguardrailsresponse.mdx
index c2e3510..519808b 100644
--- a/docs/operations/listguardrailsresponse.md
+++ b/docs/operations/listguardrailsresponse.mdx
@@ -1,8 +1,9 @@
-# ListGuardrailsResponse
-
+---
+title: "ListGuardrailsResponse"
+---
## Fields
| Field | Type | Required | Description | Example |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `result` | [components.ListGuardrailsResponse](../components/listguardrailsresponse.md) | :heavy_check_mark: | N/A | {
"data": [
{
"allowed_models": null,
"allowed_providers": [
"openai",
"anthropic",
"google"
],
"content_filter_builtins": [
{
"action": "redact",
"label": "[EMAIL]",
"slug": "email"
}
],
"content_filters": null,
"created_at": "2025-08-24T10:30:00Z",
"description": "Guardrail for production environment",
"enforce_zdr": null,
"enforce_zdr_anthropic": true,
"enforce_zdr_google": false,
"enforce_zdr_openai": true,
"enforce_zdr_other": false,
"id": "550e8400-e29b-41d4-a716-446655440000",
"ignored_models": null,
"ignored_providers": null,
"limit_usd": 100,
"name": "Production Guardrail",
"reset_interval": "monthly",
"updated_at": "2025-08-24T15:45:00Z",
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
}
],
"total_count": 1
} |
\ No newline at end of file
+| `result` | [components.ListGuardrailsResponse](../components/listguardrailsresponse.mdx) | :heavy_check_mark: | N/A | \{
"data": [
\{
"allowed_models": null,
"allowed_providers": [
"openai",
"anthropic",
"google"
],
"content_filter_builtins": [
\{
"action": "redact",
"label": "[EMAIL]",
"slug": "email"
}
],
"content_filters": null,
"created_at": "2025-08-24T10:30:00Z",
"description": "Guardrail for production environment",
"enforce_zdr": null,
"enforce_zdr_anthropic": true,
"enforce_zdr_google": false,
"enforce_zdr_openai": true,
"enforce_zdr_other": false,
"id": "550e8400-e29b-41d4-a716-446655440000",
"ignored_models": null,
"ignored_providers": null,
"limit_usd": 100,
"name": "Production Guardrail",
"reset_interval": "monthly",
"updated_at": "2025-08-24T15:45:00Z",
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
}
],
"total_count": 1
} |
\ No newline at end of file
diff --git a/docs/operations/listimagemodelendpointsglobals.mdx b/docs/operations/listimagemodelendpointsglobals.mdx
new file mode 100644
index 0000000..ffac4de
--- /dev/null
+++ b/docs/operations/listimagemodelendpointsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListImageModelEndpointsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listimagemodelendpointsrequest.mdx b/docs/operations/listimagemodelendpointsrequest.mdx
new file mode 100644
index 0000000..871687a
--- /dev/null
+++ b/docs/operations/listimagemodelendpointsrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "ListImageModelEndpointsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `author` | *str* | :heavy_check_mark: | Model author/organization | bytedance-seed |
+| `slug` | *str* | :heavy_check_mark: | Model slug | seedream-4.5 |
\ No newline at end of file
diff --git a/docs/operations/listimagemodelsglobals.mdx b/docs/operations/listimagemodelsglobals.mdx
new file mode 100644
index 0000000..e3ad125
--- /dev/null
+++ b/docs/operations/listimagemodelsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListImageModelsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listimagemodelsrequest.mdx b/docs/operations/listimagemodelsrequest.mdx
new file mode 100644
index 0000000..590e46d
--- /dev/null
+++ b/docs/operations/listimagemodelsrequest.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListImageModelsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listkeyassignmentsglobals.md b/docs/operations/listkeyassignmentsglobals.md
deleted file mode 100644
index 6c0713d..0000000
--- a/docs/operations/listkeyassignmentsglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListKeyAssignmentsGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listkeyassignmentsglobals.mdx b/docs/operations/listkeyassignmentsglobals.mdx
new file mode 100644
index 0000000..a93efae
--- /dev/null
+++ b/docs/operations/listkeyassignmentsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListKeyAssignmentsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listkeyassignmentsrequest.mdx b/docs/operations/listkeyassignmentsrequest.mdx
new file mode 100644
index 0000000..449ce29
--- /dev/null
+++ b/docs/operations/listkeyassignmentsrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "ListKeyAssignmentsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
\ No newline at end of file
diff --git a/docs/operations/listkeyassignmentsresponse.md b/docs/operations/listkeyassignmentsresponse.mdx
similarity index 86%
rename from docs/operations/listkeyassignmentsresponse.md
rename to docs/operations/listkeyassignmentsresponse.mdx
index a083a11..b26f687 100644
--- a/docs/operations/listkeyassignmentsresponse.md
+++ b/docs/operations/listkeyassignmentsresponse.mdx
@@ -1,8 +1,9 @@
-# ListKeyAssignmentsResponse
-
+---
+title: "ListKeyAssignmentsResponse"
+---
## Fields
| Field | Type | Required | Description | Example |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `result` | [components.ListKeyAssignmentsResponse](../components/listkeyassignmentsresponse.md) | :heavy_check_mark: | N/A | {
"data": [
{
"assigned_by": "user_abc123",
"created_at": "2025-08-24T10:30:00Z",
"guardrail_id": "550e8400-e29b-41d4-a716-446655440001",
"id": "550e8400-e29b-41d4-a716-446655440000",
"key_hash": "c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93",
"key_label": "prod-key",
"key_name": "Production Key"
}
],
"total_count": 1
} |
\ No newline at end of file
+| `result` | [components.ListKeyAssignmentsResponse](../components/listkeyassignmentsresponse.mdx) | :heavy_check_mark: | N/A | \{
"data": [
\{
"assigned_by": "user_abc123",
"created_at": "2025-08-24T10:30:00Z",
"guardrail_id": "550e8400-e29b-41d4-a716-446655440001",
"id": "550e8400-e29b-41d4-a716-446655440000",
"key_hash": "c56454edb818d6b14bc0d61c46025f1450b0f4012d12304ab40aacb519fcbc93",
"key_label": "prod-key",
"key_name": "Production Key"
}
],
"total_count": 1
} |
\ No newline at end of file
diff --git a/docs/operations/listmemberassignmentsglobals.md b/docs/operations/listmemberassignmentsglobals.md
deleted file mode 100644
index 7d4eb65..0000000
--- a/docs/operations/listmemberassignmentsglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListMemberAssignmentsGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listmemberassignmentsglobals.mdx b/docs/operations/listmemberassignmentsglobals.mdx
new file mode 100644
index 0000000..e5d123a
--- /dev/null
+++ b/docs/operations/listmemberassignmentsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListMemberAssignmentsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listmemberassignmentsrequest.mdx b/docs/operations/listmemberassignmentsrequest.mdx
new file mode 100644
index 0000000..c49bcf3
--- /dev/null
+++ b/docs/operations/listmemberassignmentsrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "ListMemberAssignmentsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
\ No newline at end of file
diff --git a/docs/operations/listmemberassignmentsresponse.md b/docs/operations/listmemberassignmentsresponse.mdx
similarity index 85%
rename from docs/operations/listmemberassignmentsresponse.md
rename to docs/operations/listmemberassignmentsresponse.mdx
index 6ee5e60..0206ec0 100644
--- a/docs/operations/listmemberassignmentsresponse.md
+++ b/docs/operations/listmemberassignmentsresponse.mdx
@@ -1,8 +1,9 @@
-# ListMemberAssignmentsResponse
-
+---
+title: "ListMemberAssignmentsResponse"
+---
## Fields
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `result` | [components.ListMemberAssignmentsResponse](../components/listmemberassignmentsresponse.md) | :heavy_check_mark: | N/A | {
"data": [
{
"assigned_by": "user_abc123",
"created_at": "2025-08-24T10:30:00Z",
"guardrail_id": "550e8400-e29b-41d4-a716-446655440001",
"id": "550e8400-e29b-41d4-a716-446655440000",
"organization_id": "org_xyz789",
"user_id": "user_abc123"
}
],
"total_count": 1
} |
\ No newline at end of file
+| `result` | [components.ListMemberAssignmentsResponse](../components/listmemberassignmentsresponse.mdx) | :heavy_check_mark: | N/A | \{
"data": [
\{
"assigned_by": "user_abc123",
"created_at": "2025-08-24T10:30:00Z",
"guardrail_id": "550e8400-e29b-41d4-a716-446655440001",
"id": "550e8400-e29b-41d4-a716-446655440000",
"organization_id": "org_xyz789",
"user_id": "user_abc123"
}
],
"total_count": 1
} |
\ No newline at end of file
diff --git a/docs/operations/listmodelscountglobals.md b/docs/operations/listmodelscountglobals.md
deleted file mode 100644
index 1c3931a..0000000
--- a/docs/operations/listmodelscountglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListModelsCountGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listmodelscountglobals.mdx b/docs/operations/listmodelscountglobals.mdx
new file mode 100644
index 0000000..0daab75
--- /dev/null
+++ b/docs/operations/listmodelscountglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListModelsCountGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listmodelscountrequest.md b/docs/operations/listmodelscountrequest.mdx
similarity index 99%
rename from docs/operations/listmodelscountrequest.md
rename to docs/operations/listmodelscountrequest.mdx
index 02da5e2..7791b12 100644
--- a/docs/operations/listmodelscountrequest.md
+++ b/docs/operations/listmodelscountrequest.mdx
@@ -1,5 +1,6 @@
-# ListModelsCountRequest
-
+---
+title: "ListModelsCountRequest"
+---
## Fields
diff --git a/docs/operations/listmodelsuserglobals.md b/docs/operations/listmodelsuserglobals.md
deleted file mode 100644
index b8ca3d3..0000000
--- a/docs/operations/listmodelsuserglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListModelsUserGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listmodelsuserglobals.mdx b/docs/operations/listmodelsuserglobals.mdx
new file mode 100644
index 0000000..f0a8001
--- /dev/null
+++ b/docs/operations/listmodelsuserglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListModelsUserGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listmodelsuserrequest.md b/docs/operations/listmodelsuserrequest.md
deleted file mode 100644
index 68b87e3..0000000
--- a/docs/operations/listmodelsuserrequest.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListModelsUserRequest
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listmodelsuserrequest.mdx b/docs/operations/listmodelsuserrequest.mdx
new file mode 100644
index 0000000..3b65b53
--- /dev/null
+++ b/docs/operations/listmodelsuserrequest.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListModelsUserRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listmodelsusersecurity.md b/docs/operations/listmodelsusersecurity.mdx
similarity index 87%
rename from docs/operations/listmodelsusersecurity.md
rename to docs/operations/listmodelsusersecurity.mdx
index 3d42e13..c7dbff3 100644
--- a/docs/operations/listmodelsusersecurity.md
+++ b/docs/operations/listmodelsusersecurity.mdx
@@ -1,5 +1,6 @@
-# ListModelsUserSecurity
-
+---
+title: "ListModelsUserSecurity"
+---
## Fields
diff --git a/docs/operations/listobservabilitydestinationsglobals.mdx b/docs/operations/listobservabilitydestinationsglobals.mdx
new file mode 100644
index 0000000..40271fe
--- /dev/null
+++ b/docs/operations/listobservabilitydestinationsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListObservabilityDestinationsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listobservabilitydestinationsrequest.mdx b/docs/operations/listobservabilitydestinationsrequest.mdx
new file mode 100644
index 0000000..c9f43ab
--- /dev/null
+++ b/docs/operations/listobservabilitydestinationsrequest.mdx
@@ -0,0 +1,14 @@
+---
+title: "ListObservabilityDestinationsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Optional workspace ID to filter by. Defaults to the authenticated entity's default workspace. | 550e8400-e29b-41d4-a716-446655440000 |
\ No newline at end of file
diff --git a/docs/operations/listobservabilitydestinationsresponse.mdx b/docs/operations/listobservabilitydestinationsresponse.mdx
new file mode 100644
index 0000000..da49e5f
--- /dev/null
+++ b/docs/operations/listobservabilitydestinationsresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ListObservabilityDestinationsResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `result` | [components.ListObservabilityDestinationsResponse](../components/listobservabilitydestinationsresponse.mdx) | :heavy_check_mark: | N/A | \{
"data": [
\{
"api_key_hashes": null,
"config": \{
"baseUrl": "https://us.cloud.langfuse.com",
"publicKey": "pk-l...EfGh",
"secretKey": "sk-l...AbCd"
},
"created_at": "2025-08-24T10:30:00Z",
"enabled": true,
"filter_rules": null,
"id": "99999999-aaaa-bbbb-cccc-dddddddddddd",
"name": "Production Langfuse",
"privacy_mode": false,
"sampling_rate": 1,
"type": "langfuse",
"updated_at": "2025-08-24T15:45:00Z",
"workspace_id": "550e8400-e29b-41d4-a716-446655440000"
}
],
"total_count": 1
} |
\ No newline at end of file
diff --git a/docs/operations/listorganizationmembersdata.mdx b/docs/operations/listorganizationmembersdata.mdx
new file mode 100644
index 0000000..2469c6a
--- /dev/null
+++ b/docs/operations/listorganizationmembersdata.mdx
@@ -0,0 +1,13 @@
+---
+title: "ListOrganizationMembersData"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
+| `email` | *str* | :heavy_check_mark: | Email address of the member | jane.doe@example.com |
+| `first_name` | *Nullable[str]* | :heavy_check_mark: | First name of the member | Jane |
+| `id` | *str* | :heavy_check_mark: | User ID of the organization member | user_2dHFtVWx2n56w6HkM0000000000 |
+| `last_name` | *Nullable[str]* | :heavy_check_mark: | Last name of the member | Doe |
+| `role` | [operations.Role](../operations/role.mdx) | :heavy_check_mark: | Role of the member in the organization | org:member |
\ No newline at end of file
diff --git a/docs/operations/listorganizationmembersglobals.mdx b/docs/operations/listorganizationmembersglobals.mdx
new file mode 100644
index 0000000..de31dc7
--- /dev/null
+++ b/docs/operations/listorganizationmembersglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListOrganizationMembersGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listorganizationmembersrequest.mdx b/docs/operations/listorganizationmembersrequest.mdx
new file mode 100644
index 0000000..8e2a8b9
--- /dev/null
+++ b/docs/operations/listorganizationmembersrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "ListOrganizationMembersRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
\ No newline at end of file
diff --git a/docs/operations/listorganizationmembersresponse.mdx b/docs/operations/listorganizationmembersresponse.mdx
new file mode 100644
index 0000000..5de5520
--- /dev/null
+++ b/docs/operations/listorganizationmembersresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ListOrganizationMembersResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
+| `result` | [operations.ListOrganizationMembersResponseBody](../operations/listorganizationmembersresponsebody.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/listorganizationmembersresponsebody.mdx b/docs/operations/listorganizationmembersresponsebody.mdx
new file mode 100644
index 0000000..56cd9c5
--- /dev/null
+++ b/docs/operations/listorganizationmembersresponsebody.mdx
@@ -0,0 +1,13 @@
+---
+title: "ListOrganizationMembersResponseBody"
+---
+
+List of organization members
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
+| `data` | List[[operations.ListOrganizationMembersData](../operations/listorganizationmembersdata.mdx)] | :heavy_check_mark: | List of organization members | |
+| `total_count` | *int* | :heavy_check_mark: | Total number of members in the organization | 25 |
\ No newline at end of file
diff --git a/docs/operations/bulkassignkeystoguardrailglobals.md b/docs/operations/listpresetsglobals.mdx
similarity index 98%
rename from docs/operations/bulkassignkeystoguardrailglobals.md
rename to docs/operations/listpresetsglobals.mdx
index 1b45a85..73d9835 100644
--- a/docs/operations/bulkassignkeystoguardrailglobals.md
+++ b/docs/operations/listpresetsglobals.mdx
@@ -1,5 +1,6 @@
-# BulkAssignKeysToGuardrailGlobals
-
+---
+title: "ListPresetsGlobals"
+---
## Fields
diff --git a/docs/operations/listmemberassignmentsrequest.md b/docs/operations/listpresetsrequest.mdx
similarity index 99%
rename from docs/operations/listmemberassignmentsrequest.md
rename to docs/operations/listpresetsrequest.mdx
index e58ec65..165dbf2 100644
--- a/docs/operations/listmemberassignmentsrequest.md
+++ b/docs/operations/listpresetsrequest.mdx
@@ -1,5 +1,6 @@
-# ListMemberAssignmentsRequest
-
+---
+title: "ListPresetsRequest"
+---
## Fields
diff --git a/docs/operations/listpresetsresponse.mdx b/docs/operations/listpresetsresponse.mdx
new file mode 100644
index 0000000..0bd7386
--- /dev/null
+++ b/docs/operations/listpresetsresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ListPresetsResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `result` | [components.ListPresetsResponse](../components/listpresetsresponse.mdx) | :heavy_check_mark: | N/A | \{
"data": [
\{
"created_at": "2026-04-20T10:00:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"description": null,
"designated_version_id": "550e8400-e29b-41d4-a716-446655440000",
"id": "650e8400-e29b-41d4-a716-446655440001",
"name": "my-preset",
"slug": "my-preset",
"status": "active",
"status_updated_at": null,
"updated_at": "2026-04-20T10:00:00Z",
"workspace_id": "750e8400-e29b-41d4-a716-446655440002"
}
],
"total_count": 1
} |
\ No newline at end of file
diff --git a/docs/operations/listpresetversionsglobals.mdx b/docs/operations/listpresetversionsglobals.mdx
new file mode 100644
index 0000000..f97938e
--- /dev/null
+++ b/docs/operations/listpresetversionsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListPresetVersionsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listpresetversionsrequest.mdx b/docs/operations/listpresetversionsrequest.mdx
new file mode 100644
index 0000000..268fd9a
--- /dev/null
+++ b/docs/operations/listpresetversionsrequest.mdx
@@ -0,0 +1,14 @@
+---
+title: "ListPresetVersionsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `slug` | *str* | :heavy_check_mark: | URL-safe slug identifying the preset. | my-preset |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
\ No newline at end of file
diff --git a/docs/operations/listpresetversionsresponse.mdx b/docs/operations/listpresetversionsresponse.mdx
new file mode 100644
index 0000000..794d77e
--- /dev/null
+++ b/docs/operations/listpresetversionsresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ListPresetVersionsResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `result` | [components.ListPresetVersionsResponse](../components/listpresetversionsresponse.mdx) | :heavy_check_mark: | N/A | \{
"data": [
\{
"config": \{
"model": "openai/gpt-4o",
"temperature": 0.7
},
"created_at": "2026-04-20T10:00:00Z",
"creator_id": "user_2dHFtVWx2n56w6HkM0000000000",
"id": "550e8400-e29b-41d4-a716-446655440000",
"preset_id": "650e8400-e29b-41d4-a716-446655440001",
"system_prompt": "You are a helpful assistant.",
"updated_at": "2026-04-20T10:00:00Z",
"version": 1
}
],
"total_count": 1
} |
\ No newline at end of file
diff --git a/docs/operations/listprovidersdata.md b/docs/operations/listprovidersdata.mdx
similarity index 86%
rename from docs/operations/listprovidersdata.md
rename to docs/operations/listprovidersdata.mdx
index 5179c87..10580e9 100644
--- a/docs/operations/listprovidersdata.md
+++ b/docs/operations/listprovidersdata.mdx
@@ -1,12 +1,13 @@
-# ListProvidersData
-
+---
+title: "ListProvidersData"
+---
## Fields
| Field | Type | Required | Description | Example |
| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
-| `datacenters` | List[[operations.Datacenter](../operations/datacenter.md)] | :heavy_minus_sign: | ISO 3166-1 Alpha-2 country codes of the provider datacenter locations | [
"US",
"IE"
] |
-| `headquarters` | [OptionalNullable[operations.Headquarters]](../operations/headquarters.md) | :heavy_minus_sign: | ISO 3166-1 Alpha-2 country code of the provider headquarters | US |
+| `datacenters` | List[[operations.Datacenter](../operations/datacenter.mdx)] | :heavy_minus_sign: | ISO 3166-1 Alpha-2 country codes of the provider datacenter locations | [
"US",
"IE"
] |
+| `headquarters` | [OptionalNullable[operations.Headquarters]](../operations/headquarters.mdx) | :heavy_minus_sign: | ISO 3166-1 Alpha-2 country code of the provider headquarters | US |
| `name` | *str* | :heavy_check_mark: | Display name of the provider | OpenAI |
| `privacy_policy_url` | *Nullable[str]* | :heavy_check_mark: | URL to the provider's privacy policy | https://openai.com/privacy |
| `slug` | *str* | :heavy_check_mark: | URL-friendly identifier for the provider | openai |
diff --git a/docs/operations/listprovidersglobals.md b/docs/operations/listprovidersglobals.md
deleted file mode 100644
index 6aacb32..0000000
--- a/docs/operations/listprovidersglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListProvidersGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listprovidersglobals.mdx b/docs/operations/listprovidersglobals.mdx
new file mode 100644
index 0000000..2ad08ac
--- /dev/null
+++ b/docs/operations/listprovidersglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListProvidersGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listprovidersrequest.md b/docs/operations/listprovidersrequest.md
deleted file mode 100644
index 9e96cc6..0000000
--- a/docs/operations/listprovidersrequest.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# ListProvidersRequest
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listprovidersrequest.mdx b/docs/operations/listprovidersrequest.mdx
new file mode 100644
index 0000000..5514d81
--- /dev/null
+++ b/docs/operations/listprovidersrequest.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListProvidersRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listprovidersresponse.md b/docs/operations/listprovidersresponse.mdx
similarity index 78%
rename from docs/operations/listprovidersresponse.md
rename to docs/operations/listprovidersresponse.mdx
index 922cc65..81b20bf 100644
--- a/docs/operations/listprovidersresponse.md
+++ b/docs/operations/listprovidersresponse.mdx
@@ -1,4 +1,6 @@
-# ListProvidersResponse
+---
+title: "ListProvidersResponse"
+---
Returns a list of providers
@@ -7,4 +9,4 @@ Returns a list of providers
| Field | Type | Required | Description |
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ |
-| `data` | List[[operations.ListProvidersData](../operations/listprovidersdata.md)] | :heavy_check_mark: | N/A |
\ No newline at end of file
+| `data` | List[[operations.ListProvidersData](../operations/listprovidersdata.mdx)] | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/listrequest.md b/docs/operations/listrequest.mdx
similarity index 99%
rename from docs/operations/listrequest.md
rename to docs/operations/listrequest.mdx
index a5646bd..a48f695 100644
--- a/docs/operations/listrequest.md
+++ b/docs/operations/listrequest.mdx
@@ -1,5 +1,6 @@
-# ListRequest
-
+---
+title: "ListRequest"
+---
## Fields
diff --git a/docs/operations/listresponse.md b/docs/operations/listresponse.mdx
similarity index 73%
rename from docs/operations/listresponse.md
rename to docs/operations/listresponse.mdx
index 255d266..ffadcfc 100644
--- a/docs/operations/listresponse.md
+++ b/docs/operations/listresponse.mdx
@@ -1,4 +1,6 @@
-# ListResponse
+---
+title: "ListResponse"
+---
List of API keys
@@ -7,4 +9,4 @@ List of API keys
| Field | Type | Required | Description |
| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ |
-| `data` | List[[operations.ListData](../operations/listdata.md)] | :heavy_check_mark: | List of API keys |
\ No newline at end of file
+| `data` | List[[operations.ListData](../operations/listdata.mdx)] | :heavy_check_mark: | List of API keys |
\ No newline at end of file
diff --git a/docs/operations/listvideoscontentglobals.mdx b/docs/operations/listvideoscontentglobals.mdx
new file mode 100644
index 0000000..4a27d35
--- /dev/null
+++ b/docs/operations/listvideoscontentglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListVideosContentGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listvideoscontentrequest.mdx b/docs/operations/listvideoscontentrequest.mdx
new file mode 100644
index 0000000..0ecef07
--- /dev/null
+++ b/docs/operations/listvideoscontentrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "ListVideosContentRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `job_id` | *str* | :heavy_check_mark: | N/A | job-abc123 |
+| `index` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | 0 |
\ No newline at end of file
diff --git a/docs/operations/listvideosmodelsglobals.mdx b/docs/operations/listvideosmodelsglobals.mdx
new file mode 100644
index 0000000..a7fc9b7
--- /dev/null
+++ b/docs/operations/listvideosmodelsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListVideosModelsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listvideosmodelsrequest.mdx b/docs/operations/listvideosmodelsrequest.mdx
new file mode 100644
index 0000000..5bd866f
--- /dev/null
+++ b/docs/operations/listvideosmodelsrequest.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListVideosModelsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listworkspacebudgetsglobals.mdx b/docs/operations/listworkspacebudgetsglobals.mdx
new file mode 100644
index 0000000..88549db
--- /dev/null
+++ b/docs/operations/listworkspacebudgetsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListWorkspaceBudgetsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listworkspacebudgetsrequest.mdx b/docs/operations/listworkspacebudgetsrequest.mdx
new file mode 100644
index 0000000..f610188
--- /dev/null
+++ b/docs/operations/listworkspacebudgetsrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "ListWorkspaceBudgetsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
\ No newline at end of file
diff --git a/docs/operations/listworkspacemembersglobals.mdx b/docs/operations/listworkspacemembersglobals.mdx
new file mode 100644
index 0000000..c8f845c
--- /dev/null
+++ b/docs/operations/listworkspacemembersglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListWorkspaceMembersGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listworkspacemembersrequest.mdx b/docs/operations/listworkspacemembersrequest.mdx
new file mode 100644
index 0000000..fe553b3
--- /dev/null
+++ b/docs/operations/listworkspacemembersrequest.mdx
@@ -0,0 +1,14 @@
+---
+title: "ListWorkspaceMembersRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
\ No newline at end of file
diff --git a/docs/operations/listworkspacemembersresponse.mdx b/docs/operations/listworkspacemembersresponse.mdx
new file mode 100644
index 0000000..9455801
--- /dev/null
+++ b/docs/operations/listworkspacemembersresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ListWorkspaceMembersResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `result` | [components.ListWorkspaceMembersResponse](../components/listworkspacemembersresponse.mdx) | :heavy_check_mark: | N/A | \{
"data": [
\{
"created_at": "2025-08-24T10:30:00Z",
"id": "660e8400-e29b-41d4-a716-446655440000",
"role": "member",
"user_id": "user_abc123",
"workspace_id": "550e8400-e29b-41d4-a716-446655440000"
}
],
"total_count": 1
} |
\ No newline at end of file
diff --git a/docs/operations/listworkspacesglobals.mdx b/docs/operations/listworkspacesglobals.mdx
new file mode 100644
index 0000000..2a6be98
--- /dev/null
+++ b/docs/operations/listworkspacesglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "ListWorkspacesGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/listkeyassignmentsrequest.md b/docs/operations/listworkspacesrequest.mdx
similarity index 99%
rename from docs/operations/listkeyassignmentsrequest.md
rename to docs/operations/listworkspacesrequest.mdx
index 4902d03..b188a1a 100644
--- a/docs/operations/listkeyassignmentsrequest.md
+++ b/docs/operations/listworkspacesrequest.mdx
@@ -1,5 +1,6 @@
-# ListKeyAssignmentsRequest
-
+---
+title: "ListWorkspacesRequest"
+---
## Fields
diff --git a/docs/operations/listworkspacesresponse.mdx b/docs/operations/listworkspacesresponse.mdx
new file mode 100644
index 0000000..d59e254
--- /dev/null
+++ b/docs/operations/listworkspacesresponse.mdx
@@ -0,0 +1,9 @@
+---
+title: "ListWorkspacesResponse"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `result` | [components.ListWorkspacesResponse](../components/listworkspacesresponse.mdx) | :heavy_check_mark: | N/A | \{
"data": [
\{
"created_at": "2025-08-24T10:30:00Z",
"created_by": "user_abc123",
"default_image_model": "openai/dall-e-3",
"default_provider_sort": "price",
"default_text_model": "openai/gpt-4o",
"description": "Production environment workspace",
"id": "550e8400-e29b-41d4-a716-446655440000",
"io_logging_api_key_ids": null,
"io_logging_sampling_rate": 1,
"is_data_discount_logging_enabled": true,
"is_observability_broadcast_enabled": false,
"is_observability_io_logging_enabled": false,
"name": "Production",
"slug": "production",
"updated_at": "2025-08-24T15:45:00Z"
}
],
"total_count": 1
} |
\ No newline at end of file
diff --git a/docs/operations/metadata.mdx b/docs/operations/metadata.mdx
new file mode 100644
index 0000000..33c6b11
--- /dev/null
+++ b/docs/operations/metadata.mdx
@@ -0,0 +1,11 @@
+---
+title: "Metadata"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------ | ------------------ | ------------------ | ------------------ |
+| `query_time_ms` | *float* | :heavy_check_mark: | N/A |
+| `row_count` | *int* | :heavy_check_mark: | N/A |
+| `truncated` | *bool* | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/metric.mdx b/docs/operations/metric.mdx
new file mode 100644
index 0000000..a1b3a3e
--- /dev/null
+++ b/docs/operations/metric.mdx
@@ -0,0 +1,12 @@
+---
+title: "Metric"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| `display_format` | [operations.DisplayFormat](../operations/displayformat.mdx) | :heavy_check_mark: | How this metric value should be formatted for display (e.g. percent → multiply by 100 and append %, currency → prefix with $) | number |
+| `display_label` | *str* | :heavy_check_mark: | Human-readable label | Request Count |
+| `is_rate` | *bool* | :heavy_check_mark: | Whether this metric is a rate/ratio (averaged, not summed) | |
+| `name` | *str* | :heavy_check_mark: | Metric identifier used in query requests | request_count |
\ No newline at end of file
diff --git a/docs/operations/object.md b/docs/operations/object.md
deleted file mode 100644
index 39e8c0b..0000000
--- a/docs/operations/object.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Object
-
-
-## Values
-
-| Name | Value |
-| ------ | ------ |
-| `LIST` | list |
\ No newline at end of file
diff --git a/docs/operations/object.mdx b/docs/operations/object.mdx
new file mode 100644
index 0000000..1bfe944
--- /dev/null
+++ b/docs/operations/object.mdx
@@ -0,0 +1,15 @@
+---
+title: "Object"
+---
+
+## Example Usage
+
+```python
+from openrouter.operations import Object
+value: Object = "list"
+```
+
+
+## Values
+
+- `"list"`
diff --git a/docs/operations/objectembedding.md b/docs/operations/objectembedding.md
deleted file mode 100644
index 4f8c20d..0000000
--- a/docs/operations/objectembedding.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# ObjectEmbedding
-
-
-## Values
-
-| Name | Value |
-| ----------- | ----------- |
-| `EMBEDDING` | embedding |
\ No newline at end of file
diff --git a/docs/operations/objectembedding.mdx b/docs/operations/objectembedding.mdx
new file mode 100644
index 0000000..cd96e8c
--- /dev/null
+++ b/docs/operations/objectembedding.mdx
@@ -0,0 +1,15 @@
+---
+title: "ObjectEmbedding"
+---
+
+## Example Usage
+
+```python
+from openrouter.operations import ObjectEmbedding
+value: ObjectEmbedding = "embedding"
+```
+
+
+## Values
+
+- `"embedding"`
diff --git a/docs/operations/operator.mdx b/docs/operations/operator.mdx
new file mode 100644
index 0000000..f14d7d1
--- /dev/null
+++ b/docs/operations/operator.mdx
@@ -0,0 +1,10 @@
+---
+title: "Operator"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- |
+| `name` | [operations.OperatorName](../operations/operatorname.mdx) | :heavy_check_mark: | Operator identifier used in filter definitions | eq |
+| `value_type` | [operations.ValueType](../operations/valuetype.mdx) | :heavy_check_mark: | Whether the operator expects a single value or an array | |
\ No newline at end of file
diff --git a/docs/operations/operatorname.mdx b/docs/operations/operatorname.mdx
new file mode 100644
index 0000000..8acee54
--- /dev/null
+++ b/docs/operations/operatorname.mdx
@@ -0,0 +1,28 @@
+---
+title: "OperatorName"
+---
+
+Operator identifier used in filter definitions
+
+## Example Usage
+
+```python
+from openrouter.operations import OperatorName
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: OperatorName = "eq"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"eq"`
+- `"neq"`
+- `"in"`
+- `"not_in"`
+- `"gt"`
+- `"gte"`
+- `"lt"`
+- `"lte"`
diff --git a/docs/operations/orderby.mdx b/docs/operations/orderby.mdx
new file mode 100644
index 0000000..91c6769
--- /dev/null
+++ b/docs/operations/orderby.mdx
@@ -0,0 +1,10 @@
+---
+title: "OrderBy"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- |
+| `direction` | [operations.Direction](../operations/direction.mdx) | :heavy_check_mark: | N/A | |
+| `field` | *str* | :heavy_check_mark: | Field to order by | request_count |
\ No newline at end of file
diff --git a/docs/operations/prompttokensdetails.mdx b/docs/operations/prompttokensdetails.mdx
new file mode 100644
index 0000000..0f0b54e
--- /dev/null
+++ b/docs/operations/prompttokensdetails.mdx
@@ -0,0 +1,16 @@
+---
+title: "PromptTokensDetails"
+---
+
+Per-modality token breakdown. Only present when the input contains 2+ modalities (e.g. text + image) and the upstream provider returns modality-level usage data. Only non-zero modality counts are included.
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- |
+| `audio_tokens` | *Optional[int]* | :heavy_minus_sign: | Number of audio tokens in the input | |
+| `file_tokens` | *Optional[int]* | :heavy_minus_sign: | Number of file/document tokens in the input | |
+| `image_tokens` | *Optional[int]* | :heavy_minus_sign: | Number of image tokens in the input | 258 |
+| `text_tokens` | *Optional[int]* | :heavy_minus_sign: | Number of text tokens in the input | 8 |
+| `video_tokens` | *Optional[int]* | :heavy_minus_sign: | Number of video tokens in the input | |
\ No newline at end of file
diff --git a/docs/operations/provider.mdx b/docs/operations/provider.mdx
new file mode 100644
index 0000000..1b6b620
--- /dev/null
+++ b/docs/operations/provider.mdx
@@ -0,0 +1,108 @@
+---
+title: "Provider"
+---
+
+Optional provider slug to filter by (e.g. `openai`, `anthropic`, `amazon-bedrock`).
+
+## Example Usage
+
+```python
+from openrouter.operations import Provider
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Provider = "ai21"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"ai21"`
+- `"aion-labs"`
+- `"akashml"`
+- `"alibaba"`
+- `"amazon-bedrock"`
+- `"amazon-nova"`
+- `"ambient"`
+- `"anthropic"`
+- `"arcee-ai"`
+- `"atlas-cloud"`
+- `"avian"`
+- `"azure"`
+- `"baidu"`
+- `"baseten"`
+- `"black-forest-labs"`
+- `"byteplus"`
+- `"cerebras"`
+- `"chutes"`
+- `"cirrascale"`
+- `"clarifai"`
+- `"cloudflare"`
+- `"cohere"`
+- `"crusoe"`
+- `"darkbloom"`
+- `"decart"`
+- `"deepinfra"`
+- `"deepseek"`
+- `"dekallm"`
+- `"digitalocean"`
+- `"featherless"`
+- `"fireworks"`
+- `"friendli"`
+- `"gmicloud"`
+- `"google-ai-studio"`
+- `"google-vertex"`
+- `"groq"`
+- `"heygen"`
+- `"inception"`
+- `"inceptron"`
+- `"inferact-vllm"`
+- `"inference-net"`
+- `"infermatic"`
+- `"inflection"`
+- `"io-net"`
+- `"ionstream"`
+- `"liquid"`
+- `"mancer"`
+- `"mara"`
+- `"minimax"`
+- `"mistral"`
+- `"modelrun"`
+- `"modular"`
+- `"moonshotai"`
+- `"morph"`
+- `"ncompass"`
+- `"nebius"`
+- `"nex-agi"`
+- `"nextbit"`
+- `"novita"`
+- `"nvidia"`
+- `"open-inference"`
+- `"openai"`
+- `"parasail"`
+- `"perceptron"`
+- `"perplexity"`
+- `"phala"`
+- `"poolside"`
+- `"quiver"`
+- `"recraft"`
+- `"reka"`
+- `"relace"`
+- `"sakana-ai"`
+- `"sambanova"`
+- `"seed"`
+- `"siliconflow"`
+- `"sourceful"`
+- `"stepfun"`
+- `"streamlake"`
+- `"switchpoint"`
+- `"tenstorrent"`
+- `"together"`
+- `"upstage"`
+- `"venice"`
+- `"wafer"`
+- `"wandb"`
+- `"xai"`
+- `"xiaomi"`
+- `"z-ai"`
diff --git a/docs/operations/queryanalyticsdata1.mdx b/docs/operations/queryanalyticsdata1.mdx
new file mode 100644
index 0000000..474b724
--- /dev/null
+++ b/docs/operations/queryanalyticsdata1.mdx
@@ -0,0 +1,11 @@
+---
+title: "QueryAnalyticsData1"
+---
+
+A row of analytics data with metric/dimension values
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ----------- | ----------- | ----------- | ----------- |
\ No newline at end of file
diff --git a/docs/operations/queryanalyticsdata2.mdx b/docs/operations/queryanalyticsdata2.mdx
new file mode 100644
index 0000000..669a089
--- /dev/null
+++ b/docs/operations/queryanalyticsdata2.mdx
@@ -0,0 +1,12 @@
+---
+title: "QueryAnalyticsData2"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `cached_at` | *Optional[float]* | :heavy_minus_sign: | N/A |
+| `data` | List[[operations.QueryAnalyticsData1](../operations/queryanalyticsdata1.mdx)] | :heavy_check_mark: | N/A |
+| `metadata` | [operations.Metadata](../operations/metadata.mdx) | :heavy_check_mark: | N/A |
+| `warnings` | List[*str*] | :heavy_minus_sign: | Warnings about filter resolution issues (e.g. unresolvable api_key_id hashes). The query still runs normally; these inform the caller that some filter values could not be resolved. |
\ No newline at end of file
diff --git a/docs/operations/queryanalyticsglobals.mdx b/docs/operations/queryanalyticsglobals.mdx
new file mode 100644
index 0000000..d808bb3
--- /dev/null
+++ b/docs/operations/queryanalyticsglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "QueryAnalyticsGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/queryanalyticsrequest.mdx b/docs/operations/queryanalyticsrequest.mdx
new file mode 100644
index 0000000..5b3c7c9
--- /dev/null
+++ b/docs/operations/queryanalyticsrequest.mdx
@@ -0,0 +1,12 @@
+---
+title: "QueryAnalyticsRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
+| `request_body` | [operations.QueryAnalyticsRequestBody](../operations/queryanalyticsrequestbody.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/queryanalyticsrequestbody.mdx b/docs/operations/queryanalyticsrequestbody.mdx
new file mode 100644
index 0000000..79876b7
--- /dev/null
+++ b/docs/operations/queryanalyticsrequestbody.mdx
@@ -0,0 +1,16 @@
+---
+title: "QueryAnalyticsRequestBody"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `dimensions` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `filters` | List[[operations.Filter](../operations/filter_.mdx)] | :heavy_minus_sign: | N/A | |
+| `granularity` | *Optional[str]* | :heavy_minus_sign: | Time granularity | day |
+| `group_limit` | *Optional[int]* | :heavy_minus_sign: | Maximum rows per distinct combination of dimensions. When omitted on time-series queries (granularity + dimensions), auto-computed to avoid truncating time windows. Explicit values override the default and may truncate time buckets if set lower than the number of buckets in the range. Ignored when no dimensions are specified. | 100 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum total rows returned. Defaults to 1000. On time-series queries with dimensions and no explicit group_limit, the server may raise this to accommodate the expected number of unique time-bucket/dimension combinations. | |
+| `metrics` | List[*str*] | :heavy_check_mark: | N/A | |
+| `order_by` | [Optional[operations.OrderBy]](../operations/orderby.mdx) | :heavy_minus_sign: | N/A | |
+| `time_range` | [Optional[operations.TimeRange]](../operations/timerange.mdx) | :heavy_minus_sign: | N/A | |
\ No newline at end of file
diff --git a/docs/operations/queryanalyticsresponse.mdx b/docs/operations/queryanalyticsresponse.mdx
new file mode 100644
index 0000000..6c45e21
--- /dev/null
+++ b/docs/operations/queryanalyticsresponse.mdx
@@ -0,0 +1,12 @@
+---
+title: "QueryAnalyticsResponse"
+---
+
+Analytics query results
+
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- |
+| `data` | [operations.QueryAnalyticsData2](../operations/queryanalyticsdata2.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/ratelimit.md b/docs/operations/ratelimit.mdx
similarity index 97%
rename from docs/operations/ratelimit.md
rename to docs/operations/ratelimit.mdx
index eeed372..f1aa527 100644
--- a/docs/operations/ratelimit.md
+++ b/docs/operations/ratelimit.mdx
@@ -1,4 +1,6 @@
-# ~~RateLimit~~
+---
+title: "~~RateLimit~~"
+---
Legacy rate limit information about a key. Will always return -1.
diff --git a/docs/operations/region.mdx b/docs/operations/region.mdx
new file mode 100644
index 0000000..051bb4d
--- /dev/null
+++ b/docs/operations/region.mdx
@@ -0,0 +1,17 @@
+---
+title: "Region"
+---
+
+Filter to models with endpoints in the given data region. Currently only "eu" is supported.
+
+## Example Usage
+
+```python
+from openrouter.operations import Region
+value: Region = "eu"
+```
+
+
+## Values
+
+- `"eu"`
diff --git a/docs/operations/result.mdx b/docs/operations/result.mdx
new file mode 100644
index 0000000..510072b
--- /dev/null
+++ b/docs/operations/result.mdx
@@ -0,0 +1,14 @@
+---
+title: "Result"
+---
+
+A single rerank result
+
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| `document` | [operations.DocumentResponse](../operations/documentresponse.mdx) | :heavy_check_mark: | The document object echoing the original input (text and/or image) | |
+| `index` | *int* | :heavy_check_mark: | Index of the document in the original input list | 0 |
+| `relevance_score` | *float* | :heavy_check_mark: | Relevance score of the document to the query | 0.98 |
\ No newline at end of file
diff --git a/docs/operations/role.mdx b/docs/operations/role.mdx
new file mode 100644
index 0000000..9e1219b
--- /dev/null
+++ b/docs/operations/role.mdx
@@ -0,0 +1,22 @@
+---
+title: "Role"
+---
+
+Role of the member in the organization
+
+## Example Usage
+
+```python
+from openrouter.operations import Role
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Role = "org:admin"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"org:admin"`
+- `"org:member"`
diff --git a/docs/operations/sendchatcompletionrequestglobals.md b/docs/operations/sendchatcompletionrequestglobals.md
deleted file mode 100644
index 3256c02..0000000
--- a/docs/operations/sendchatcompletionrequestglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# SendChatCompletionRequestGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/sendchatcompletionrequestglobals.mdx b/docs/operations/sendchatcompletionrequestglobals.mdx
new file mode 100644
index 0000000..290c954
--- /dev/null
+++ b/docs/operations/sendchatcompletionrequestglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "SendChatCompletionRequestGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/sendchatcompletionrequestrequest.mdx b/docs/operations/sendchatcompletionrequestrequest.mdx
new file mode 100644
index 0000000..bd3e6d5
--- /dev/null
+++ b/docs/operations/sendchatcompletionrequestrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "SendChatCompletionRequestRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `x_open_router_metadata` | [Optional[components.MetadataLevel]](../components/metadatalevel.mdx) | :heavy_minus_sign: | Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility. | enabled |
+| `chat_request` | [components.ChatRequest](../components/chatrequest.mdx) | :heavy_check_mark: | N/A | \{
"max_tokens": 150,
"messages": [
\{
"content": "You are a helpful assistant.",
"role": "system"
},
\{
"content": "What is the capital of France?",
"role": "user"
}
],
"model": "openai/gpt-4",
"temperature": 0.7
} |
\ No newline at end of file
diff --git a/docs/operations/sendchatcompletionrequestresponse.md b/docs/operations/sendchatcompletionrequestresponse.mdx
similarity index 88%
rename from docs/operations/sendchatcompletionrequestresponse.md
rename to docs/operations/sendchatcompletionrequestresponse.mdx
index c4ba8c7..ed3d7a9 100644
--- a/docs/operations/sendchatcompletionrequestresponse.md
+++ b/docs/operations/sendchatcompletionrequestresponse.mdx
@@ -1,5 +1,6 @@
-# SendChatCompletionRequestResponse
-
+---
+title: "SendChatCompletionRequestResponse"
+---
## Supported Types
diff --git a/docs/operations/source.mdx b/docs/operations/source.mdx
new file mode 100644
index 0000000..20b67f6
--- /dev/null
+++ b/docs/operations/source.mdx
@@ -0,0 +1,22 @@
+---
+title: "Source"
+---
+
+Benchmark source to query. Determines the shape of the returned items. When omitted, returns results from all sources.
+
+## Example Usage
+
+```python
+from openrouter.operations import Source
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Source = "artificial-analysis"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"artificial-analysis"`
+- `"design-arena"`
diff --git a/docs/operations/subcategory.mdx b/docs/operations/subcategory.mdx
new file mode 100644
index 0000000..af1d9e9
--- /dev/null
+++ b/docs/operations/subcategory.mdx
@@ -0,0 +1,35 @@
+---
+title: "Subcategory"
+---
+
+Marketplace subcategory to filter by (e.g. `cli-agent`). Takes precedence over `category` for the actual filter; when `category` is also supplied the pair must be consistent.
+
+## Example Usage
+
+```python
+from openrouter.operations import Subcategory
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: Subcategory = "cli-agent"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"cli-agent"`
+- `"ide-extension"`
+- `"cloud-agent"`
+- `"programming-app"`
+- `"native-app-builder"`
+- `"creative-writing"`
+- `"video-gen"`
+- `"image-gen"`
+- `"audio-gen"`
+- `"roleplay"`
+- `"game"`
+- `"writing-assistant"`
+- `"general-chat"`
+- `"personal-agent"`
+- `"legal"`
diff --git a/docs/operations/tasktype.mdx b/docs/operations/tasktype.mdx
new file mode 100644
index 0000000..7cdaa5d
--- /dev/null
+++ b/docs/operations/tasktype.mdx
@@ -0,0 +1,23 @@
+---
+title: "TaskType"
+---
+
+Filter results by task type. For Artificial Analysis, maps to the corresponding index. For Design Arena, maps to the matching category.
+
+## Example Usage
+
+```python
+from openrouter.operations import TaskType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: TaskType = "coding"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"coding"`
+- `"intelligence"`
+- `"agentic"`
diff --git a/docs/operations/timerange.mdx b/docs/operations/timerange.mdx
new file mode 100644
index 0000000..dc194ba
--- /dev/null
+++ b/docs/operations/timerange.mdx
@@ -0,0 +1,10 @@
+---
+title: "TimeRange"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- |
+| `end` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | N/A |
+| `start` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/typeimageurl.md b/docs/operations/typeimageurl.md
deleted file mode 100644
index addee7e..0000000
--- a/docs/operations/typeimageurl.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# TypeImageURL
-
-
-## Values
-
-| Name | Value |
-| ----------- | ----------- |
-| `IMAGE_URL` | image_url |
\ No newline at end of file
diff --git a/docs/operations/typeimageurl.mdx b/docs/operations/typeimageurl.mdx
new file mode 100644
index 0000000..655e672
--- /dev/null
+++ b/docs/operations/typeimageurl.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeImageURL"
+---
+
+## Example Usage
+
+```python
+from openrouter.operations import TypeImageURL
+value: TypeImageURL = "image_url"
+```
+
+
+## Values
+
+- `"image_url"`
diff --git a/docs/operations/typetext.md b/docs/operations/typetext.md
deleted file mode 100644
index fb9c2cf..0000000
--- a/docs/operations/typetext.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# TypeText
-
-
-## Values
-
-| Name | Value |
-| ------ | ------ |
-| `TEXT` | text |
\ No newline at end of file
diff --git a/docs/operations/typetext.mdx b/docs/operations/typetext.mdx
new file mode 100644
index 0000000..7f15191
--- /dev/null
+++ b/docs/operations/typetext.mdx
@@ -0,0 +1,15 @@
+---
+title: "TypeText"
+---
+
+## Example Usage
+
+```python
+from openrouter.operations import TypeText
+value: TypeText = "text"
+```
+
+
+## Values
+
+- `"text"`
diff --git a/docs/operations/updatebyokkeyglobals.mdx b/docs/operations/updatebyokkeyglobals.mdx
new file mode 100644
index 0000000..905abf7
--- /dev/null
+++ b/docs/operations/updatebyokkeyglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "UpdateBYOKKeyGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/updatebyokkeyrequest.mdx b/docs/operations/updatebyokkeyrequest.mdx
new file mode 100644
index 0000000..546e001
--- /dev/null
+++ b/docs/operations/updatebyokkeyrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "UpdateBYOKKeyRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The BYOK credential ID (UUID). | 11111111-2222-3333-4444-555555555555 |
+| `update_byok_key_request` | [components.UpdateBYOKKeyRequest](../components/updatebyokkeyrequest.mdx) | :heavy_check_mark: | N/A | \{
"disabled": false,
"name": "Updated OpenAI Key"
} |
\ No newline at end of file
diff --git a/docs/operations/updateguardrailglobals.md b/docs/operations/updateguardrailglobals.md
deleted file mode 100644
index d72ffed..0000000
--- a/docs/operations/updateguardrailglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# UpdateGuardrailGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/updateguardrailglobals.mdx b/docs/operations/updateguardrailglobals.mdx
new file mode 100644
index 0000000..0cd4bcb
--- /dev/null
+++ b/docs/operations/updateguardrailglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "UpdateGuardrailGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/updateguardrailrequest.md b/docs/operations/updateguardrailrequest.mdx
similarity index 91%
rename from docs/operations/updateguardrailrequest.md
rename to docs/operations/updateguardrailrequest.mdx
index 58ac81b..b89a607 100644
--- a/docs/operations/updateguardrailrequest.md
+++ b/docs/operations/updateguardrailrequest.mdx
@@ -1,5 +1,6 @@
-# UpdateGuardrailRequest
-
+---
+title: "UpdateGuardrailRequest"
+---
## Fields
@@ -9,4 +10,4 @@
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `id` | *str* | :heavy_check_mark: | The unique identifier of the guardrail to update | 550e8400-e29b-41d4-a716-446655440000 |
-| `update_guardrail_request` | [components.UpdateGuardrailRequest](../components/updateguardrailrequest.md) | :heavy_check_mark: | N/A | {
"description": "Updated description",
"limit_usd": 75,
"name": "Updated Guardrail Name",
"reset_interval": "weekly"
} |
\ No newline at end of file
+| `update_guardrail_request` | [components.UpdateGuardrailRequest](../components/updateguardrailrequest.mdx) | :heavy_check_mark: | N/A | \{
"description": "Updated description",
"limit_usd": 75,
"name": "Updated Guardrail Name",
"reset_interval": "weekly"
} |
\ No newline at end of file
diff --git a/docs/operations/updatekeysdata.md b/docs/operations/updatekeysdata.mdx
similarity index 99%
rename from docs/operations/updatekeysdata.md
rename to docs/operations/updatekeysdata.mdx
index f1ef382..abc5d41 100644
--- a/docs/operations/updatekeysdata.md
+++ b/docs/operations/updatekeysdata.mdx
@@ -1,4 +1,6 @@
-# UpdateKeysData
+---
+title: "UpdateKeysData"
+---
The updated API key information
diff --git a/docs/operations/updatekeysglobals.md b/docs/operations/updatekeysglobals.md
deleted file mode 100644
index 4588f44..0000000
--- a/docs/operations/updatekeysglobals.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# UpdateKeysGlobals
-
-
-## Fields
-
-| Field | Type | Required | Description |
-| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
-| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/updatekeysglobals.mdx b/docs/operations/updatekeysglobals.mdx
new file mode 100644
index 0000000..2b4abc3
--- /dev/null
+++ b/docs/operations/updatekeysglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "UpdateKeysGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/updatekeyslimitreset.md b/docs/operations/updatekeyslimitreset.md
deleted file mode 100644
index 7a91c14..0000000
--- a/docs/operations/updatekeyslimitreset.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# UpdateKeysLimitReset
-
-New limit reset type for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday.
-
-
-## Values
-
-| Name | Value |
-| --------- | --------- |
-| `DAILY` | daily |
-| `WEEKLY` | weekly |
-| `MONTHLY` | monthly |
\ No newline at end of file
diff --git a/docs/operations/updatekeyslimitreset.mdx b/docs/operations/updatekeyslimitreset.mdx
new file mode 100644
index 0000000..d128ade
--- /dev/null
+++ b/docs/operations/updatekeyslimitreset.mdx
@@ -0,0 +1,23 @@
+---
+title: "UpdateKeysLimitReset"
+---
+
+New limit reset type for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday.
+
+## Example Usage
+
+```python
+from openrouter.operations import UpdateKeysLimitReset
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: UpdateKeysLimitReset = "daily"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"daily"`
+- `"weekly"`
+- `"monthly"`
diff --git a/docs/operations/updatekeysrequest.md b/docs/operations/updatekeysrequest.mdx
similarity index 91%
rename from docs/operations/updatekeysrequest.md
rename to docs/operations/updatekeysrequest.mdx
index 1e35e33..e6d3d7f 100644
--- a/docs/operations/updatekeysrequest.md
+++ b/docs/operations/updatekeysrequest.mdx
@@ -1,5 +1,6 @@
-# UpdateKeysRequest
-
+---
+title: "UpdateKeysRequest"
+---
## Fields
@@ -9,4 +10,4 @@
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `hash` | *str* | :heavy_check_mark: | The hash identifier of the API key to update | f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943 |
-| `request_body` | [operations.UpdateKeysRequestBody](../operations/updatekeysrequestbody.md) | :heavy_check_mark: | N/A | {
"disabled": false,
"include_byok_in_limit": true,
"limit": 75,
"limit_reset": "daily",
"name": "Updated API Key Name"
} |
\ No newline at end of file
+| `request_body` | [operations.UpdateKeysRequestBody](../operations/updatekeysrequestbody.mdx) | :heavy_check_mark: | N/A | \{
"disabled": false,
"include_byok_in_limit": true,
"limit": 75,
"limit_reset": "daily",
"name": "Updated API Key Name"
} |
\ No newline at end of file
diff --git a/docs/operations/updatekeysrequestbody.md b/docs/operations/updatekeysrequestbody.mdx
similarity index 92%
rename from docs/operations/updatekeysrequestbody.md
rename to docs/operations/updatekeysrequestbody.mdx
index a6130fd..b293f36 100644
--- a/docs/operations/updatekeysrequestbody.md
+++ b/docs/operations/updatekeysrequestbody.mdx
@@ -1,5 +1,6 @@
-# UpdateKeysRequestBody
-
+---
+title: "UpdateKeysRequestBody"
+---
## Fields
@@ -8,5 +9,5 @@
| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Whether to disable the API key | false |
| `include_byok_in_limit` | *Optional[bool]* | :heavy_minus_sign: | Whether to include BYOK usage in the limit | true |
| `limit` | *OptionalNullable[float]* | :heavy_minus_sign: | New spending limit for the API key in USD | 75 |
-| `limit_reset` | [OptionalNullable[operations.UpdateKeysLimitReset]](../operations/updatekeyslimitreset.md) | :heavy_minus_sign: | New limit reset type for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday. | daily |
+| `limit_reset` | [OptionalNullable[operations.UpdateKeysLimitReset]](../operations/updatekeyslimitreset.mdx) | :heavy_minus_sign: | New limit reset type for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday. | daily |
| `name` | *Optional[str]* | :heavy_minus_sign: | New name for the API key | Updated API Key Name |
\ No newline at end of file
diff --git a/docs/operations/updatekeysresponse.md b/docs/operations/updatekeysresponse.mdx
similarity index 89%
rename from docs/operations/updatekeysresponse.md
rename to docs/operations/updatekeysresponse.mdx
index 8b5ef1f..942a8bf 100644
--- a/docs/operations/updatekeysresponse.md
+++ b/docs/operations/updatekeysresponse.mdx
@@ -1,4 +1,6 @@
-# UpdateKeysResponse
+---
+title: "UpdateKeysResponse"
+---
API key updated successfully
@@ -7,4 +9,4 @@ API key updated successfully
| Field | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `data` | [operations.UpdateKeysData](../operations/updatekeysdata.md) | :heavy_check_mark: | The updated API key information | {
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"created_at": "2025-08-24T10:30:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"disabled": false,
"expires_at": "2027-12-31T23:59:59Z",
"hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943",
"include_byok_in_limit": false,
"label": "sk-or-v1-0e6...1c96",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"name": "My Production Key",
"updated_at": "2025-08-24T15:45:00Z",
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5,
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
\ No newline at end of file
+| `data` | [operations.UpdateKeysData](../operations/updatekeysdata.mdx) | :heavy_check_mark: | The updated API key information | \{
"byok_usage": 17.38,
"byok_usage_daily": 17.38,
"byok_usage_monthly": 17.38,
"byok_usage_weekly": 17.38,
"created_at": "2025-08-24T10:30:00Z",
"creator_user_id": "user_2dHFtVWx2n56w6HkM0000000000",
"disabled": false,
"expires_at": "2027-12-31T23:59:59Z",
"hash": "f01d52606dc8f0a8303a7b5cc3fa07109c2e346cec7c0a16b40de462992ce943",
"include_byok_in_limit": false,
"label": "sk-or-v1-0e6...1c96",
"limit": 100,
"limit_remaining": 74.5,
"limit_reset": "monthly",
"name": "My Production Key",
"updated_at": "2025-08-24T15:45:00Z",
"usage": 25.5,
"usage_daily": 25.5,
"usage_monthly": 25.5,
"usage_weekly": 25.5,
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
} |
\ No newline at end of file
diff --git a/docs/operations/updateobservabilitydestinationglobals.mdx b/docs/operations/updateobservabilitydestinationglobals.mdx
new file mode 100644
index 0000000..f5a0ba0
--- /dev/null
+++ b/docs/operations/updateobservabilitydestinationglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "UpdateObservabilityDestinationGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/updateobservabilitydestinationrequest.mdx b/docs/operations/updateobservabilitydestinationrequest.mdx
new file mode 100644
index 0000000..1692638
--- /dev/null
+++ b/docs/operations/updateobservabilitydestinationrequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "UpdateObservabilityDestinationRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The destination ID (UUID). | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `update_observability_destination_request` | [components.UpdateObservabilityDestinationRequest](../components/updateobservabilitydestinationrequest.mdx) | :heavy_check_mark: | N/A | \{
"enabled": false,
"name": "Updated Langfuse"
} |
\ No newline at end of file
diff --git a/docs/operations/updateworkspaceglobals.mdx b/docs/operations/updateworkspaceglobals.mdx
new file mode 100644
index 0000000..34ddab9
--- /dev/null
+++ b/docs/operations/updateworkspaceglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "UpdateWorkspaceGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/updateworkspacerequest.mdx b/docs/operations/updateworkspacerequest.mdx
new file mode 100644
index 0000000..086cdf6
--- /dev/null
+++ b/docs/operations/updateworkspacerequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "UpdateWorkspaceRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `update_workspace_request` | [components.UpdateWorkspaceRequest](../components/updateworkspacerequest.mdx) | :heavy_check_mark: | N/A | \{
"name": "Updated Workspace",
"slug": "updated-workspace"
} |
\ No newline at end of file
diff --git a/docs/operations/uploadfileglobals.mdx b/docs/operations/uploadfileglobals.mdx
new file mode 100644
index 0000000..41aa595
--- /dev/null
+++ b/docs/operations/uploadfileglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "UploadFileGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/uploadfilerequest.mdx b/docs/operations/uploadfilerequest.mdx
new file mode 100644
index 0000000..7018812
--- /dev/null
+++ b/docs/operations/uploadfilerequest.mdx
@@ -0,0 +1,13 @@
+---
+title: "UploadFileRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace. | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
+| `request_body` | [operations.UploadFileRequestBody](../operations/uploadfilerequestbody.mdx) | :heavy_check_mark: | N/A | |
\ No newline at end of file
diff --git a/docs/operations/uploadfilerequestbody.mdx b/docs/operations/uploadfilerequestbody.mdx
new file mode 100644
index 0000000..4a9975f
--- /dev/null
+++ b/docs/operations/uploadfilerequestbody.mdx
@@ -0,0 +1,9 @@
+---
+title: "UploadFileRequestBody"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- |
+| `file` | [operations.File](../operations/file.mdx) | :heavy_check_mark: | N/A |
\ No newline at end of file
diff --git a/docs/operations/upsertworkspacebudgetglobals.mdx b/docs/operations/upsertworkspacebudgetglobals.mdx
new file mode 100644
index 0000000..67a0d7d
--- /dev/null
+++ b/docs/operations/upsertworkspacebudgetglobals.mdx
@@ -0,0 +1,11 @@
+---
+title: "UpsertWorkspaceBudgetGlobals"
+---
+
+## Fields
+
+| Field | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
\ No newline at end of file
diff --git a/docs/operations/upsertworkspacebudgetrequest.mdx b/docs/operations/upsertworkspacebudgetrequest.mdx
new file mode 100644
index 0000000..47fed58
--- /dev/null
+++ b/docs/operations/upsertworkspacebudgetrequest.mdx
@@ -0,0 +1,14 @@
+---
+title: "UpsertWorkspaceBudgetRequest"
+---
+
+## Fields
+
+| Field | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `interval` | [components.WorkspaceBudgetInterval](../components/workspacebudgetinterval.mdx) | :heavy_check_mark: | Budget reset interval. Use "lifetime" for a one-time budget that never resets. | monthly |
+| `upsert_workspace_budget_request` | [components.UpsertWorkspaceBudgetRequest](../components/upsertworkspacebudgetrequest.mdx) | :heavy_check_mark: | N/A | \{
"limit_usd": 100
} |
\ No newline at end of file
diff --git a/docs/operations/usagelimittype.md b/docs/operations/usagelimittype.md
deleted file mode 100644
index 0d9e7c8..0000000
--- a/docs/operations/usagelimittype.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# UsageLimitType
-
-Optional credit limit reset interval. When set, the credit limit resets on this interval.
-
-
-## Values
-
-| Name | Value |
-| --------- | --------- |
-| `DAILY` | daily |
-| `WEEKLY` | weekly |
-| `MONTHLY` | monthly |
\ No newline at end of file
diff --git a/docs/operations/usagelimittype.mdx b/docs/operations/usagelimittype.mdx
new file mode 100644
index 0000000..8541eef
--- /dev/null
+++ b/docs/operations/usagelimittype.mdx
@@ -0,0 +1,23 @@
+---
+title: "UsageLimitType"
+---
+
+Optional credit limit reset interval. When set, the credit limit resets on this interval.
+
+## Example Usage
+
+```python
+from openrouter.operations import UsageLimitType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: UsageLimitType = "daily"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"daily"`
+- `"weekly"`
+- `"monthly"`
diff --git a/docs/operations/value1.mdx b/docs/operations/value1.mdx
new file mode 100644
index 0000000..4d269a4
--- /dev/null
+++ b/docs/operations/value1.mdx
@@ -0,0 +1,27 @@
+---
+title: "Value1"
+---
+
+Filter value (scalar or array depending on operator). Several dimensions are enriched in responses (returned as human-readable labels), but filters must use the underlying ID: `api_key_id` — numeric ID (from generation metadata) or key hash (64-char hex from GET /api/v1/keys, resolved server-side); `user` — Clerk user ID (e.g. "user_abc123"), not the display name; `workspace` — workspace UUID, not the workspace name; `app` — numeric app ID, not the app title; `model` — permaslug (e.g. "openai/gpt-4o"), not the display name. Other dimensions (provider, origin, country, etc.) are not enriched and accept the value as returned.
+
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `float`
+
+```python
+value: float = /* values here */
+```
+
+### `List[operations.Value2]`
+
+```python
+value: List[operations.Value2] = /* values here */
+```
+
diff --git a/docs/operations/value2.mdx b/docs/operations/value2.mdx
new file mode 100644
index 0000000..f72dd54
--- /dev/null
+++ b/docs/operations/value2.mdx
@@ -0,0 +1,18 @@
+---
+title: "Value2"
+---
+
+## Supported Types
+
+### `str`
+
+```python
+value: str = /* values here */
+```
+
+### `float`
+
+```python
+value: float = /* values here */
+```
+
diff --git a/docs/operations/valuetype.mdx b/docs/operations/valuetype.mdx
new file mode 100644
index 0000000..87a439a
--- /dev/null
+++ b/docs/operations/valuetype.mdx
@@ -0,0 +1,22 @@
+---
+title: "ValueType"
+---
+
+Whether the operator expects a single value or an array
+
+## Example Usage
+
+```python
+from openrouter.operations import ValueType
+
+# Open enum: unrecognized values are captured as UnrecognizedStr
+value: ValueType = "scalar"
+```
+
+
+## Values
+
+This is an open enum. Unrecognized values will not fail type checks.
+
+- `"scalar"`
+- `"array"`
diff --git a/docs/operations/window.mdx b/docs/operations/window.mdx
new file mode 100644
index 0000000..5216840
--- /dev/null
+++ b/docs/operations/window.mdx
@@ -0,0 +1,17 @@
+---
+title: "Window"
+---
+
+Trailing time window for the classification data. Currently only `7d` (trailing 7 days) is supported.
+
+## Example Usage
+
+```python
+from openrouter.operations import Window
+value: Window = "7d"
+```
+
+
+## Values
+
+- `"7d"`
diff --git a/docs/operations/zdr.mdx b/docs/operations/zdr.mdx
new file mode 100644
index 0000000..f265978
--- /dev/null
+++ b/docs/operations/zdr.mdx
@@ -0,0 +1,17 @@
+---
+title: "Zdr"
+---
+
+When set to "true", return only models with zero data retention endpoints.
+
+## Example Usage
+
+```python
+from openrouter.operations import Zdr
+value: Zdr = "true"
+```
+
+
+## Values
+
+- `"true"`
diff --git a/docs/overview.mdx b/docs/overview.mdx
new file mode 100644
index 0000000..3980c0b
--- /dev/null
+++ b/docs/overview.mdx
@@ -0,0 +1,37 @@
+---
+title: "OpenRouter Python SDK"
+sidebarTitle: "Overview"
+description: "Python SDK for building AI features against 400+ models through OpenRouter."
+---
+
+The OpenRouter Python SDK gives you type-safe access to 400+ models across
+providers through a single unified API, with both sync and async clients.
+
+## Installation
+
+```bash
+pip install openrouter
+```
+
+## Quickstart
+
+```python
+from openrouter import OpenRouter
+import os
+
+with OpenRouter(
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+ res = open_router.chat.send(
+ messages=[
+ {"content": "What is the capital of France?", "role": "user"},
+ ],
+ stream=False,
+ )
+ print(res)
+```
+
+## API reference
+
+Browse the API reference for each resource in the sidebar. Type definitions for
+every request, response, and model are linked inline from each resource page.
diff --git a/docs/sdks/analytics/README.md b/docs/sdks/analytics/README.mdx
similarity index 93%
rename from docs/sdks/analytics/README.md
rename to docs/sdks/analytics/README.mdx
index 44f7812..4e5df61 100644
--- a/docs/sdks/analytics/README.md
+++ b/docs/sdks/analytics/README.mdx
@@ -1,4 +1,7 @@
-# Analytics
+---
+title: "Analytics"
+description: "Analytics and usage endpoints"
+---
## Overview
@@ -14,7 +17,6 @@ Returns user activity data grouped by endpoint for the last 30 (completed) UTC d
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -44,11 +46,11 @@ with OpenRouter(
| `date_` | *Optional[str]* | :heavy_minus_sign: | Filter by a single UTC date in the last 30 days (YYYY-MM-DD format). | 2025-08-24 |
| `api_key_hash` | *Optional[str]* | :heavy_minus_sign: | Filter by API key hash (SHA-256 hex string, as returned by the keys API). | abc123def456... |
| `user_id` | *Optional[str]* | :heavy_minus_sign: | Filter by org member user ID. Only applicable for organization accounts. | user_abc123 |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.ActivityResponse](../../components/activityresponse.md)**
+**[components.ActivityResponse](../../components/activityresponse.mdx)**
### Errors
diff --git a/docs/sdks/apikeys/README.md b/docs/sdks/apikeys/README.mdx
similarity index 92%
rename from docs/sdks/apikeys/README.md
rename to docs/sdks/apikeys/README.mdx
index d3fbe9d..e5b775c 100644
--- a/docs/sdks/apikeys/README.md
+++ b/docs/sdks/apikeys/README.mdx
@@ -1,4 +1,7 @@
-# APIKeys
+---
+title: "APIKeys"
+description: "API key management endpoints"
+---
## Overview
@@ -19,7 +22,6 @@ Get information on the API key associated with the current authentication sessio
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -46,11 +48,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
### Response
-**[operations.GetCurrentKeyResponse](../../operations/getcurrentkeyresponse.md)**
+**[operations.GetCurrentKeyResponse](../../operations/getcurrentkeyresponse.mdx)**
### Errors
@@ -66,7 +68,6 @@ List all API keys for the authenticated user. [Management key](/docs/guides/over
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -96,11 +97,11 @@ with OpenRouter(
| `include_disabled` | *Optional[bool]* | :heavy_minus_sign: | Whether to include disabled API keys in the response | false |
| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of API keys to skip for pagination | 0 |
| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Filter API keys by workspace ID. By default, keys in the default workspace are returned. | 0df9e665-d932-5740-b2c7-b52af166bc11 |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.ListResponse](../../operations/listresponse.md)**
+**[operations.ListResponse](../../operations/listresponse.mdx)**
### Errors
@@ -117,7 +118,6 @@ Create a new API key for the authenticated user. The plaintext `key` is returned
### Example Usage
-
```python
from openrouter import OpenRouter
from openrouter.utils import parse_datetime
@@ -150,13 +150,13 @@ with OpenRouter(
| `expires_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | Optional ISO 8601 UTC timestamp when the API key should expire. Must be UTC, other timezones will be rejected | 2027-12-31T23:59:59Z |
| `include_byok_in_limit` | *Optional[bool]* | :heavy_minus_sign: | Whether to include BYOK usage in the limit | true |
| `limit` | *OptionalNullable[float]* | :heavy_minus_sign: | Optional spending limit for the API key in USD | 50 |
-| `limit_reset` | [OptionalNullable[operations.CreateKeysLimitReset]](../../operations/createkeyslimitreset.md) | :heavy_minus_sign: | Type of limit reset for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday. | monthly |
+| `limit_reset` | [OptionalNullable[operations.CreateKeysLimitReset]](../../operations/createkeyslimitreset.mdx) | :heavy_minus_sign: | Type of limit reset for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday. | monthly |
| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | The workspace to create the API key in. Defaults to the default workspace if not provided. | 0df9e665-d932-5740-b2c7-b52af166bc11 |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.CreateKeysResponse](../../operations/createkeysresponse.md)**
+**[operations.CreateKeysResponse](../../operations/createkeysresponse.mdx)**
### Errors
@@ -175,7 +175,6 @@ Delete an existing API key. [Management key](/docs/guides/overview/auth/manageme
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -203,11 +202,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.DeleteKeysResponse](../../operations/deletekeysresponse.md)**
+**[operations.DeleteKeysResponse](../../operations/deletekeysresponse.mdx)**
### Errors
@@ -225,7 +224,6 @@ Get a single API key by hash. [Management key](/docs/guides/overview/auth/manage
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -253,11 +251,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.GetKeyResponse](../../operations/getkeyresponse.md)**
+**[operations.GetKeyResponse](../../operations/getkeyresponse.mdx)**
### Errors
@@ -275,7 +273,6 @@ Update an existing API key. [Management key](/docs/guides/overview/auth/manageme
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -306,13 +303,13 @@ with OpenRouter(
| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Whether to disable the API key | false |
| `include_byok_in_limit` | *Optional[bool]* | :heavy_minus_sign: | Whether to include BYOK usage in the limit | true |
| `limit` | *OptionalNullable[float]* | :heavy_minus_sign: | New spending limit for the API key in USD | 75 |
-| `limit_reset` | [OptionalNullable[operations.UpdateKeysLimitReset]](../../operations/updatekeyslimitreset.md) | :heavy_minus_sign: | New limit reset type for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday. | daily |
+| `limit_reset` | [OptionalNullable[operations.UpdateKeysLimitReset]](../../operations/updatekeyslimitreset.mdx) | :heavy_minus_sign: | New limit reset type for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday. | daily |
| `name` | *Optional[str]* | :heavy_minus_sign: | New name for the API key | Updated API Key Name |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.UpdateKeysResponse](../../operations/updatekeysresponse.md)**
+**[operations.UpdateKeysResponse](../../operations/updatekeysresponse.mdx)**
### Errors
diff --git a/docs/sdks/benchmarks/README.mdx b/docs/sdks/benchmarks/README.mdx
new file mode 100644
index 0000000..072d78b
--- /dev/null
+++ b/docs/sdks/benchmarks/README.mdx
@@ -0,0 +1,65 @@
+---
+title: "Benchmarks"
+description: "Benchmarks endpoints"
+---
+
+## Overview
+
+Benchmarks endpoints
+
+### Available Operations
+
+* [get_benchmarks](#get_benchmarks) - List Benchmarks
+
+## get_benchmarks
+
+Unified benchmark endpoint that aggregates scores from multiple benchmark sources (Artificial Analysis, Design Arena). Filter by source to reproduce the exact shapes from the legacy per-source endpoints, or use task_type to find models suited for specific workloads. Authenticate with any valid OpenRouter API key. Rate-limited to 30 requests/minute per key and 500 requests/day per account.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.benchmarks.get_benchmarks()
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `source` | [Optional[operations.Source]](../../operations/source.mdx) | :heavy_minus_sign: | Benchmark source to query. Determines the shape of the returned items. When omitted, returns results from all sources. | artificial-analysis |
+| `task_type` | [Optional[operations.TaskType]](../../operations/tasktype.mdx) | :heavy_minus_sign: | Filter results by task type. For Artificial Analysis, maps to the corresponding index. For Design Arena, maps to the matching category. | coding |
+| `arena` | [Optional[operations.Arena]](../../operations/arena.mdx) | :heavy_minus_sign: | Design Arena only: arena to query. Defaults to `models` when source is `design-arena`. | models |
+| `category` | *Optional[str]* | :heavy_minus_sign: | Design Arena only: category within the arena (e.g. `codecategories`, `uicomponent`, `gamedev`, `3d`, `dataviz`, `image`, `video`, `svg`). When omitted, returns all categories. | codecategories |
+| `max_results` | *Optional[int]* | :heavy_minus_sign: | Maximum number of items to return. When omitted, all matching results are returned. | 50 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.UnifiedBenchmarksResponse](../../components/unifiedbenchmarksresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/betaanalytics/README.mdx b/docs/sdks/betaanalytics/README.mdx
new file mode 100644
index 0000000..716e463
--- /dev/null
+++ b/docs/sdks/betaanalytics/README.mdx
@@ -0,0 +1,125 @@
+---
+title: "Beta.Analytics"
+description: "beta.Analytics endpoints"
+---
+
+## Overview
+
+beta.Analytics endpoints
+
+### Available Operations
+
+* [get_analytics_meta](#get_analytics_meta) - Get available analytics metrics and dimensions
+* [query_analytics](#query_analytics) - Query analytics data
+
+## get_analytics_meta
+
+Returns the available metrics, dimensions, filter operators, and granularities for the analytics query endpoint. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.beta.analytics.get_analytics_meta()
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
+
+### Response
+
+**[operations.GetAnalyticsMetaResponse](../../operations/getanalyticsmetaresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## query_analytics
+
+Execute an analytics query with specified metrics, dimensions, filters, and time range. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+from openrouter.utils import parse_datetime
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.beta.analytics.query_analytics(metrics=[
+ "request_count",
+ ], dimensions=[
+ "model",
+ ], granularity="day", limit=100, time_range={
+ "end": parse_datetime("2025-01-08T00:00:00Z"),
+ "start": parse_datetime("2025-01-01T00:00:00Z"),
+ })
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `metrics` | List[*str*] | :heavy_check_mark: | N/A | |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `dimensions` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `filters` | List[[operations.Filter](../../operations/filter_.mdx)] | :heavy_minus_sign: | N/A | |
+| `granularity` | *Optional[str]* | :heavy_minus_sign: | Time granularity | day |
+| `group_limit` | *Optional[int]* | :heavy_minus_sign: | Maximum rows per distinct combination of dimensions. When omitted on time-series queries (granularity + dimensions), auto-computed to avoid truncating time windows. Explicit values override the default and may truncate time buckets if set lower than the number of buckets in the range. Ignored when no dimensions are specified. | 100 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum total rows returned. Defaults to 1000. On time-series queries with dimensions and no explicit group_limit, the server may raise this to accommodate the expected number of unique time-bucket/dimension combinations. | |
+| `order_by` | [Optional[operations.OrderBy]](../../operations/orderby.mdx) | :heavy_minus_sign: | N/A | |
+| `time_range` | [Optional[operations.TimeRange]](../../operations/timerange.mdx) | :heavy_minus_sign: | N/A | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[operations.QueryAnalyticsResponse](../../operations/queryanalyticsresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.RequestTimeoutResponseError | 408 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/byok/README.mdx b/docs/sdks/byok/README.mdx
new file mode 100644
index 0000000..f1da2da
--- /dev/null
+++ b/docs/sdks/byok/README.mdx
@@ -0,0 +1,275 @@
+---
+title: "Byok"
+description: "BYOK endpoints"
+---
+
+## Overview
+
+BYOK endpoints
+
+### Available Operations
+
+* [list](#list) - List BYOK provider credentials
+* [create](#create) - Create a BYOK provider credential
+* [delete](#delete) - Delete a BYOK provider credential
+* [get](#get) - Get a BYOK provider credential
+* [update](#update) - Update a BYOK provider credential
+
+## list
+
+List the bring-your-own-key (BYOK) provider credentials for the authenticated entity's default workspace. Use the `workspace_id` query parameter to scope the result to a different workspace, or the `provider` query parameter to filter by upstream provider. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.byok.list()
+
+ while res is not None:
+ # Handle items
+
+ res = res.next()
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Optional workspace ID to filter by. Defaults to the authenticated entity's default workspace. | 550e8400-e29b-41d4-a716-446655440000 |
+| `provider` | [Optional[operations.Provider]](../../operations/provider.mdx) | :heavy_minus_sign: | Optional provider slug to filter by (e.g. `openai`, `anthropic`, `amazon-bedrock`). | openai |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[operations.ListBYOKKeysResponse](../../operations/listbyokkeysresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## create
+
+Create a new bring-your-own-key (BYOK) provider credential. The raw key is encrypted at rest and never returned in API responses. Defaults to the authenticated entity's default workspace; use the `workspace_id` body field to scope to a different workspace. Treat the raw key as write-only; it is never returned after creation. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.byok.create(key="sk-proj-abc123...", provider="openai", name="Production OpenAI Key")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `key` | *str* | :heavy_check_mark: | The raw provider API key or credential. This value is encrypted at rest and never returned in API responses. | sk-proj-abc123... |
+| `provider` | [components.BYOKProviderSlug](../../components/byokproviderslug.mdx) | :heavy_check_mark: | The upstream provider this credential authenticates against, as a lowercase slug (e.g. `openai`, `anthropic`, `amazon-bedrock`). | openai |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `allowed_models` | List[*str*] | :heavy_minus_sign: | Optional allowlist of model slugs this credential may be used for. `null` means no restriction. | null |
+| `allowed_user_ids` | List[*str*] | :heavy_minus_sign: | Optional allowlist of user IDs that may use this credential. `null` means no restriction. | null |
+| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Whether this credential should be created in a disabled state. | false |
+| `is_fallback` | *Optional[bool]* | :heavy_minus_sign: | Whether this credential is treated as a fallback — used only after non-fallback keys for the same provider have been tried. | false |
+| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | Optional human-readable name for the credential. | Production OpenAI Key |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Optional workspace ID. Defaults to the authenticated entity's default workspace. | 550e8400-e29b-41d4-a716-446655440000 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.CreateBYOKKeyResponse](../../components/createbyokkeyresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## delete
+
+Delete (soft-delete) a bring-your-own-key (BYOK) provider credential by its `id`. The encrypted key material is wiped and the record is marked as deleted. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.byok.delete(id="11111111-2222-3333-4444-555555555555")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The BYOK credential ID (UUID). | 11111111-2222-3333-4444-555555555555 |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.DeleteBYOKKeyResponse](../../components/deletebyokkeyresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## get
+
+Get a single bring-your-own-key (BYOK) provider credential by its `id`. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.byok.get(id="11111111-2222-3333-4444-555555555555")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The BYOK credential ID (UUID). | 11111111-2222-3333-4444-555555555555 |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.GetBYOKKeyResponse](../../components/getbyokkeyresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## update
+
+Update an existing bring-your-own-key (BYOK) provider credential by its `id`. Include the `key` field to rotate the raw provider API key in-place (the previous key material is overwritten). [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.byok.update(id="11111111-2222-3333-4444-555555555555", disabled=False, name="Updated OpenAI Key")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The BYOK credential ID (UUID). | 11111111-2222-3333-4444-555555555555 |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `allowed_models` | List[*str*] | :heavy_minus_sign: | Optional allowlist of model slugs this credential may be used for. `null` means no restriction. | null |
+| `allowed_user_ids` | List[*str*] | :heavy_minus_sign: | Optional allowlist of user IDs that may use this credential. `null` means no restriction. | null |
+| `disabled` | *Optional[bool]* | :heavy_minus_sign: | Whether this credential is disabled. | false |
+| `is_fallback` | *Optional[bool]* | :heavy_minus_sign: | Whether this credential is treated as a fallback — used only after non-fallback keys for the same provider have been tried. | false |
+| `key` | *Optional[str]* | :heavy_minus_sign: | A new raw provider API key to rotate the credential in-place. The previous key material is overwritten and the masked label is regenerated. Encrypted at rest and never returned in API responses. | sk-proj-newkey456... |
+| `name` | *OptionalNullable[str]* | :heavy_minus_sign: | Optional human-readable name for the credential. | Updated OpenAI Key |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.UpdateBYOKKeyResponse](../../components/updatebyokkeyresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/chat/README.md b/docs/sdks/chat/README.mdx
similarity index 89%
rename from docs/sdks/chat/README.md
rename to docs/sdks/chat/README.mdx
index 08b736f..390ca7c 100644
--- a/docs/sdks/chat/README.md
+++ b/docs/sdks/chat/README.mdx
@@ -1,4 +1,6 @@
-# Chat
+---
+title: "Chat"
+---
## Overview
@@ -10,9 +12,8 @@
Sends a request for a model response for the given chat conversation. Supports both streaming and non-streaming modes.
-### Example Usage
+### Example Usage: guardrail-blocked
-
```python
from openrouter import OpenRouter
import os
@@ -34,7 +35,38 @@ with OpenRouter(
"content": "What is the capital of France?",
"role": "user",
},
- ], x_open_router_metadata="enabled", max_tokens=150, model="openai/gpt-4", stream=False, temperature=0.7)
+ ], stream=False)
+
+ with res as event_stream:
+ for event in event_stream:
+ # handle event
+ print(event, flush=True)
+
+```
+### Example Usage: insufficient-permissions
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.chat.send(messages=[
+ {
+ "content": "You are a helpful assistant.",
+ "role": "system",
+ },
+ {
+ "content": "What is the capital of France?",
+ "role": "user",
+ },
+ ], stream=False)
with res as event_stream:
for event in event_stream:
@@ -47,53 +79,53 @@ with OpenRouter(
| Parameter | Type | Required | Description | Example |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `messages` | List[[components.ChatMessages](../../components/chatmessages.md)] | :heavy_check_mark: | List of messages for the conversation | [
{
"content": "Hello!",
"role": "user"
}
] |
+| `messages` | List[[components.ChatMessages](../../components/chatmessages.mdx)] | :heavy_check_mark: | List of messages for the conversation | [
\{
"content": "Hello!",
"role": "user"
}
] |
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `x_open_router_metadata` | [Optional[components.MetadataLevel]](../../components/metadatalevel.md) | :heavy_minus_sign: | Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility. | enabled |
-| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../../components/anthropiccachecontroldirective.md) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | {
"type": "ephemeral"
} |
-| `debug` | [Optional[components.ChatDebugOptions]](../../components/chatdebugoptions.md) | :heavy_minus_sign: | Debug options for inspecting request transformations (streaming only) | {
"echo_upstream_body": true
} |
+| `x_open_router_metadata` | [Optional[components.MetadataLevel]](../../components/metadatalevel.mdx) | :heavy_minus_sign: | Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility. | enabled |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `debug` | [Optional[components.ChatDebugOptions]](../../components/chatdebugoptions.mdx) | :heavy_minus_sign: | Debug options for inspecting request transformations (streaming only) | \{
"echo_upstream_body": true
} |
| `frequency_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | Frequency penalty (-2.0 to 2.0) | 0 |
-| `image_config` | Dict[str, [components.ImageConfig](../../components/imageconfig.md)] | :heavy_minus_sign: | Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details. | {
"aspect_ratio": "16:9",
"quality": "high"
} |
-| `logit_bias` | Dict[str, *float*] | :heavy_minus_sign: | Token logit bias adjustments | {
"50256": -100
} |
+| `image_config` | Dict[str, [components.ImageConfig](../../components/imageconfig.mdx)] | :heavy_minus_sign: | Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details. | \{
"aspect_ratio": "16:9",
"quality": "high"
} |
+| `logit_bias` | Dict[str, *float*] | :heavy_minus_sign: | Token logit bias adjustments | \{
"50256": -100
} |
| `logprobs` | *OptionalNullable[bool]* | :heavy_minus_sign: | Return log probabilities | false |
| `max_completion_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Maximum tokens in completion | 100 |
| `max_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Maximum tokens (deprecated, use max_completion_tokens). Note: some providers enforce a minimum of 16. | 100 |
-| `metadata` | Dict[str, *str*] | :heavy_minus_sign: | Key-value pairs for additional object information (max 16 pairs, 64 char keys, 512 char values) | {
"session_id": "session-456",
"user_id": "user-123"
} |
+| `metadata` | Dict[str, *str*] | :heavy_minus_sign: | Key-value pairs for additional object information (max 16 pairs, 64 char keys, 512 char values) | \{
"session_id": "session-456",
"user_id": "user-123"
} |
| `min_p` | *OptionalNullable[float]* | :heavy_minus_sign: | Minimum probability threshold relative to the most likely token. Tokens with probability below min_p * (probability of top token) are filtered out. Not all providers support this parameter. | 0.1 |
-| `modalities` | List[[components.Modality](../../components/modality.md)] | :heavy_minus_sign: | Output modalities for the response. Supported values are "text", "image", and "audio". | [
"text",
"image"
] |
+| `modalities` | List[[components.Modality](../../components/modality.mdx)] | :heavy_minus_sign: | Output modalities for the response. Supported values are "text", "image", and "audio". | [
"text",
"image"
] |
| `model` | *Optional[str]* | :heavy_minus_sign: | Model to use for completion | openai/gpt-4 |
| `models` | List[*str*] | :heavy_minus_sign: | Models to use for completion | [
"openai/gpt-4",
"openai/gpt-4o"
] |
| `parallel_tool_calls` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enable parallel function calling during tool use. When true, the model may generate multiple tool calls in a single response. | true |
-| `plugins` | List[[components.ChatRequestPlugin](../../components/chatrequestplugin.md)] | :heavy_minus_sign: | Plugins you want to enable for this request, including their settings. | |
+| `plugins` | List[[components.ChatRequestPlugin](../../components/chatrequestplugin.mdx)] | :heavy_minus_sign: | Plugins you want to enable for this request, including their settings. | |
| `presence_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | Presence penalty (-2.0 to 2.0) | 0 |
-| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.md) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | {
"allow_fallbacks": true
} |
-| `reasoning` | [Optional[components.ChatRequestReasoning]](../../components/chatrequestreasoning.md) | :heavy_minus_sign: | Configuration options for reasoning models | {
"effort": "medium",
"summary": "concise"
} |
-| `reasoning_effort` | [OptionalNullable[components.ChatRequestReasoningEffort]](../../components/chatrequestreasoningeffort.md) | :heavy_minus_sign: | Shorthand for setting reasoning effort. Equivalent to setting reasoning.effort. Cannot be used simultaneously with reasoning.effort if they differ. | medium |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.mdx) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | \{
"allow_fallbacks": true
} |
+| `reasoning` | [Optional[components.ChatRequestReasoning]](../../components/chatrequestreasoning.mdx) | :heavy_minus_sign: | Configuration options for reasoning models | \{
"effort": "medium",
"summary": "concise"
} |
+| `reasoning_effort` | [OptionalNullable[components.ChatRequestReasoningEffort]](../../components/chatrequestreasoningeffort.mdx) | :heavy_minus_sign: | Shorthand for setting reasoning effort. Equivalent to setting reasoning.effort. Cannot be used simultaneously with reasoning.effort if they differ. | medium |
| `repetition_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | Penalizes tokens based on how much they have already appeared in the text. A value of 1.0 means no penalty. Values above 1.0 penalize repeated tokens more strongly. Not all providers support this parameter. | 1 |
-| `response_format` | [Optional[components.ResponseFormat]](../../components/responseformat.md) | :heavy_minus_sign: | Response format configuration | {
"type": "json_object"
} |
+| `response_format` | [Optional[components.ResponseFormat]](../../components/responseformat.mdx) | :heavy_minus_sign: | Response format configuration | \{
"type": "json_object"
} |
| `seed` | *OptionalNullable[int]* | :heavy_minus_sign: | Random seed for deterministic outputs | 42 |
-| `service_tier` | [OptionalNullable[components.ChatRequestServiceTier]](../../components/chatrequestservicetier.md) | :heavy_minus_sign: | The service tier to use for processing this request. | auto |
+| `service_tier` | [OptionalNullable[components.ChatRequestServiceTier]](../../components/chatrequestservicetier.mdx) | :heavy_minus_sign: | The service tier to use for processing this request. | auto |
| `session_id` | *Optional[str]* | :heavy_minus_sign: | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | |
-| `stop` | [OptionalNullable[components.Stop]](../../components/stop.md) | :heavy_minus_sign: | Stop sequences (up to 4) | [
""
] |
-| `stop_server_tools_when` | List[[components.StopServerToolsWhenCondition](../../components/stopservertoolswhencondition.md)] | :heavy_minus_sign: | Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`. | [
{
"step_count": 5,
"type": "step_count_is"
},
{
"max_cost_in_dollars": 0.5,
"type": "max_cost"
}
] |
+| `stop` | [OptionalNullable[components.Stop]](../../components/stop.mdx) | :heavy_minus_sign: | Stop sequences (up to 4) | [
""
] |
+| `stop_server_tools_when` | List[[components.StopServerToolsWhenCondition](../../components/stopservertoolswhencondition.mdx)] | :heavy_minus_sign: | Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`. | [
\{
"step_count": 5,
"type": "step_count_is"
},
\{
"max_cost_in_dollars": 0.5,
"type": "max_cost"
}
] |
| `stream` | *Optional[bool]* | :heavy_minus_sign: | Enable streaming response | false |
-| `stream_options` | [OptionalNullable[components.ChatStreamOptions]](../../components/chatstreamoptions.md) | :heavy_minus_sign: | Streaming configuration options | {
"include_usage": true
} |
+| `stream_options` | [OptionalNullable[components.ChatStreamOptions]](../../components/chatstreamoptions.mdx) | :heavy_minus_sign: | Streaming configuration options | \{
"include_usage": true
} |
| `temperature` | *OptionalNullable[float]* | :heavy_minus_sign: | Sampling temperature (0-2) | 0.7 |
-| `tool_choice` | [Optional[components.ChatToolChoice]](../../components/chattoolchoice.md) | :heavy_minus_sign: | Tool choice configuration | auto |
-| `tools` | List[[components.ChatFunctionTool](../../components/chatfunctiontool.md)] | :heavy_minus_sign: | Available tools for function calling | [
{
"function": {
"description": "Get weather",
"name": "get_weather"
},
"type": "function"
}
] |
+| `tool_choice` | [Optional[components.ChatToolChoice]](../../components/chattoolchoice.mdx) | :heavy_minus_sign: | Tool choice configuration | auto |
+| `tools` | List[[components.ChatFunctionTool](../../components/chatfunctiontool.mdx)] | :heavy_minus_sign: | Available tools for function calling | [
\{
"function": \{
"description": "Get weather",
"name": "get_weather"
},
"type": "function"
}
] |
| `top_a` | *OptionalNullable[float]* | :heavy_minus_sign: | Consider only tokens with "sufficiently high" probabilities based on the probability of the most likely token. Not all providers support this parameter. | 0 |
| `top_k` | *OptionalNullable[int]* | :heavy_minus_sign: | Limits the model to choose from the top K most likely tokens at each step. A value of 1 means the model will always pick the most likely next token. Not all providers support this parameter. | 40 |
| `top_logprobs` | *OptionalNullable[int]* | :heavy_minus_sign: | Number of top log probabilities to return (0-20) | 5 |
| `top_p` | *OptionalNullable[float]* | :heavy_minus_sign: | Nucleus sampling parameter (0-1) | 1 |
-| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.md) | :heavy_minus_sign: | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | {
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
+| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.mdx) | :heavy_minus_sign: | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
| `user` | *Optional[str]* | :heavy_minus_sign: | Unique user identifier | user-123 |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.SendChatCompletionRequestResponse](../../operations/sendchatcompletionrequestresponse.md)**
+**[operations.SendChatCompletionRequestResponse](../../operations/sendchatcompletionrequestresponse.mdx)**
### Errors
diff --git a/docs/sdks/classifications/README.mdx b/docs/sdks/classifications/README.mdx
new file mode 100644
index 0000000..bed5f74
--- /dev/null
+++ b/docs/sdks/classifications/README.mdx
@@ -0,0 +1,79 @@
+---
+title: "Classifications"
+description: "Task classification market-share endpoints"
+---
+
+## Overview
+
+Task classification market-share endpoints
+
+### Available Operations
+
+* [get_task_classifications](#get_task_classifications) - Task classification market share
+
+## get_task_classifications
+
+Returns the market-share breakdown of OpenRouter traffic by task classification
+(e.g. code generation, web search, summarization) over a trailing time window.
+
+Each classification reports its share of classified sampled requests (`usage_share`)
+and classified sampled token volume (`token_share`) as fractions between 0 and 1.
+The unclassified `other` bucket is excluded. Absolute volumes are not exposed
+because the underlying data is sampled.
+
+Each classification also includes a `models` array listing the top models by
+request volume within that classification, with their within-tag usage and token shares.
+
+Classifications are grouped into macro-categories (Code, Data, Agent, General)
+with aggregate shares provided for each.
+
+Authenticate with any valid OpenRouter API key (same key used for inference).
+Rate-limited to 30 requests/minute per key and 500 requests/day per account.
+
+When republishing or quoting this data, cite as:
+"Source: OpenRouter (openrouter.ai/rankings), as of \{as_of}."
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.classifications.get_task_classifications(window="7d")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `window` | [Optional[operations.Window]](../../operations/window.mdx) | :heavy_minus_sign: | Trailing time window for the classification data. Currently only `7d` (trailing 7 days) is supported. | 7d |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.TaskClassificationResponse](../../components/taskclassificationresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/credits/README.md b/docs/sdks/credits/README.mdx
similarity index 91%
rename from docs/sdks/credits/README.md
rename to docs/sdks/credits/README.mdx
index 1837ff5..414ae28 100644
--- a/docs/sdks/credits/README.md
+++ b/docs/sdks/credits/README.mdx
@@ -1,4 +1,7 @@
-# Credits
+---
+title: "Credits"
+description: "Credit management endpoints"
+---
## Overview
@@ -14,7 +17,6 @@ Get total credits purchased and used for the authenticated user. [Management key
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -41,11 +43,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
### Response
-**[operations.GetCreditsResponse](../../operations/getcreditsresponse.md)**
+**[operations.GetCreditsResponse](../../operations/getcreditsresponse.mdx)**
### Errors
diff --git a/docs/sdks/datasets/README.mdx b/docs/sdks/datasets/README.mdx
new file mode 100644
index 0000000..9cdcae1
--- /dev/null
+++ b/docs/sdks/datasets/README.mdx
@@ -0,0 +1,160 @@
+---
+title: "Datasets"
+description: "Datasets endpoints"
+---
+
+## Overview
+
+Datasets endpoints
+
+### Available Operations
+
+* [get_app_rankings](#get_app_rankings) - Top apps by token usage
+* [get_rankings_daily](#get_rankings_daily) - Daily token totals for top 50 models
+
+## get_app_rankings
+
+Returns the top public apps on OpenRouter ranked by token usage inside the requested
+date window, matching the public apps marketplace on openrouter.ai/apps. Token totals
+are `prompt_tokens + completion_tokens`; hidden and private apps are excluded and
+traffic from related app aliases is merged into the canonical visible app.
+
+`sort=popular` (default) ranks by total token volume inside the window.
+`sort=trending` ranks by absolute excess token growth: window volume minus the average
+volume of the three equal-length periods immediately preceding the window. Apps with
+no excess growth are omitted, so `trending` may return fewer than `limit` rows.
+
+Filter with `category` (marketplace category group, e.g. `coding`) or `subcategory`
+(e.g. `cli-agent`). Ranks are re-numbered 1..N after filtering. Page with `offset` —
+`rank` stays absolute, so the first row of `offset=50` is `rank: 51`.
+
+Authenticate with any valid OpenRouter API key (same key used for inference).
+Rate-limited to 30 requests/minute per key and 500 requests/day per account.
+
+When republishing or quoting this dataset, OpenRouter must be cited as:
+"Source: OpenRouter (openrouter.ai/apps), as of \{as_of}."
+
+Token counts come from each upstream provider's own tokenizer, so a token attributed
+to one app is not directly comparable to a token attributed to another app whose
+traffic flows through a different provider.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.datasets.get_app_rankings(sort="popular", limit=50, offset=0)
+
+ while res is not None:
+ # Handle items
+
+ res = res.next()
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `category` | [Optional[operations.GetAppRankingsCategory]](../../operations/getapprankingscategory.mdx) | :heavy_minus_sign: | Marketplace category group to filter by (e.g. `coding`). Only apps tagged with a subcategory inside this group are returned. Mutually combinable with `subcategory` — when both are supplied the `subcategory` must belong to the `category` group. | coding |
+| `subcategory` | [Optional[operations.Subcategory]](../../operations/subcategory.mdx) | :heavy_minus_sign: | Marketplace subcategory to filter by (e.g. `cli-agent`). Takes precedence over `category` for the actual filter; when `category` is also supplied the pair must be consistent. | cli-agent |
+| `sort` | [Optional[operations.GetAppRankingsSort]](../../operations/getapprankingssort.mdx) | :heavy_minus_sign: | `popular` ranks apps by total token volume inside the date window. `trending` ranks apps by absolute excess token growth: window volume minus the average volume of the three equal-length periods immediately preceding the window. Apps with no excess growth are omitted from `trending` results. | popular |
+| `start_date` | *Optional[str]* | :heavy_minus_sign: | Start of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to 30 days before `end_date`. The dataset begins at 2025-01-01; earlier values are clamped forward to that floor and the resolved value is echoed in `meta.start_date`. | 2026-04-12 |
+| `end_date` | *Optional[str]* | :heavy_minus_sign: | End of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to the most recent completed UTC day. Must be on or after 2025-01-01; earlier values are rejected with a 400. | 2026-05-11 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of apps to return (1-100). Defaults to 50. | 50 |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of ranked apps to skip before the first returned row (0-100). Defaults to 0. `rank` stays absolute, so the first row of `offset=50` is `rank: 51`. | 0 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[operations.GetAppRankingsResponse](../../operations/getapprankingsresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## get_rankings_daily
+
+Returns the top 50 public models per day by total token usage on OpenRouter, plus a
+single aggregated `other` row per day that sums every model outside that top 50.
+Token totals are `prompt_tokens + completion_tokens`, matching the public rankings
+chart on openrouter.ai/rankings.
+
+Each row is a distinct `(date, model_permaslug)` pair. The `other` row uses the
+reserved permaslug `other` and is always returned last within its date, so callers
+can compute `top-50 traffic / total daily traffic` without a second request.
+
+Authenticate with any valid OpenRouter API key (same key used for inference).
+Rate-limited to 30 requests/minute per key and 500 requests/day per account.
+
+When republishing or quoting this dataset, OpenRouter must be cited as:
+"Source: OpenRouter (openrouter.ai/rankings), as of \{as_of}."
+
+Token counts come from each upstream provider's own tokenizer (Anthropic counts
+are as reported by Anthropic, OpenAI counts are as reported by OpenAI, etc.), so
+a token in one row is not directly comparable to a token in another row from a
+different provider.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.datasets.get_rankings_daily()
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `start_date` | *Optional[str]* | :heavy_minus_sign: | Start of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to 30 days before `end_date`. The dataset begins at 2025-01-01; earlier values are clamped forward to that floor and the resolved value is echoed in `meta.start_date`. | 2026-04-12 |
+| `end_date` | *Optional[str]* | :heavy_minus_sign: | End of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to the most recent completed UTC day. Must be on or after 2025-01-01; earlier values are rejected with a 400. | 2026-05-11 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.RankingsDailyResponse](../../components/rankingsdailyresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/embeddings/README.md b/docs/sdks/embeddings/README.mdx
similarity index 87%
rename from docs/sdks/embeddings/README.md
rename to docs/sdks/embeddings/README.mdx
index b649f5b..bf8b8c5 100644
--- a/docs/sdks/embeddings/README.md
+++ b/docs/sdks/embeddings/README.mdx
@@ -1,4 +1,7 @@
-# Embeddings
+---
+title: "Embeddings"
+description: "Text embedding endpoints"
+---
## Overview
@@ -15,7 +18,6 @@ Submits an embedding request to the embeddings router
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -39,21 +41,21 @@ with OpenRouter(
| Parameter | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `input` | [operations.InputUnion](../../operations/inputunion.md) | :heavy_check_mark: | Text, token, or multimodal input(s) to embed | The quick brown fox jumps over the lazy dog |
+| `input` | [operations.InputUnion](../../operations/inputunion.mdx) | :heavy_check_mark: | Text, token, or multimodal input(s) to embed | The quick brown fox jumps over the lazy dog |
| `model` | *str* | :heavy_check_mark: | The model to use for embeddings | openai/text-embedding-3-small |
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `dimensions` | *Optional[int]* | :heavy_minus_sign: | The number of dimensions for the output embeddings | 1536 |
-| `encoding_format` | [Optional[operations.EncodingFormat]](../../operations/encodingformat.md) | :heavy_minus_sign: | The format of the output embeddings | float |
+| `encoding_format` | [Optional[operations.EncodingFormat]](../../operations/encodingformat.mdx) | :heavy_minus_sign: | The format of the output embeddings | float |
| `input_type` | *Optional[str]* | :heavy_minus_sign: | The type of input (e.g. search_query, search_document) | search_query |
-| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.md) | :heavy_minus_sign: | N/A | {
"allow_fallbacks": true
} |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.mdx) | :heavy_minus_sign: | N/A | \{
"allow_fallbacks": true
} |
| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier for the end-user | user-1234 |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.CreateEmbeddingsResponse](../../operations/createembeddingsresponse.md)**
+**[operations.CreateEmbeddingsResponse](../../operations/createembeddingsresponse.mdx)**
### Errors
@@ -77,7 +79,6 @@ Returns a list of all available embeddings models and their properties
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -104,11 +105,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
### Response
-**[components.ModelsListResponse](../../components/modelslistresponse.md)**
+**[components.ModelsListResponse](../../components/modelslistresponse.mdx)**
### Errors
diff --git a/docs/sdks/endpoints/README.md b/docs/sdks/endpoints/README.mdx
similarity index 91%
rename from docs/sdks/endpoints/README.md
rename to docs/sdks/endpoints/README.mdx
index 2ce96e9..741c77c 100644
--- a/docs/sdks/endpoints/README.md
+++ b/docs/sdks/endpoints/README.mdx
@@ -1,4 +1,7 @@
-# Endpoints
+---
+title: "Endpoints"
+description: "Endpoint information"
+---
## Overview
@@ -15,7 +18,6 @@ Preview the impact of ZDR on the available endpoints
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -42,11 +44,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
### Response
-**[operations.ListEndpointsZdrResponse](../../operations/listendpointszdrresponse.md)**
+**[operations.ListEndpointsZdrResponse](../../operations/listendpointszdrresponse.mdx)**
### Errors
@@ -61,7 +63,6 @@ List all endpoints for a model
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -90,11 +91,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.ListEndpointsResponse](../../operations/listendpointsresponse.md)**
+**[operations.ListEndpointsResponse](../../operations/listendpointsresponse.mdx)**
### Errors
diff --git a/docs/sdks/files/README.mdx b/docs/sdks/files/README.mdx
new file mode 100644
index 0000000..5327882
--- /dev/null
+++ b/docs/sdks/files/README.mdx
@@ -0,0 +1,275 @@
+---
+title: "Files"
+description: "Files endpoints"
+---
+
+## Overview
+
+Files endpoints
+
+### Available Operations
+
+* [list](#list) - List files
+* [upload](#upload) - Upload a file
+* [delete](#delete) - Delete a file
+* [retrieve](#retrieve) - Get file metadata
+* [download](#download) - Download file content
+
+## list
+
+Lists files belonging to the workspace of the authenticating API key.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.files.list()
+
+ while res is not None:
+ # Handle items
+
+ res = res.next()
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of files to return (1–1000). | 100 |
+| `cursor` | *Optional[str]* | :heavy_minus_sign: | Opaque pagination cursor from a previous response. | eyJjdXJzb3IiOiJmaWxlXzAxMUNOaGE4aUNKY1Uxd1hOUjZxNFY4dyJ9 |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace. | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[operations.ListFilesResponse](../../operations/listfilesresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## upload
+
+Uploads a file to be referenced in future API calls. The file is stored under the workspace of the authenticating API key. Maximum file size: 100 MB.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.files.upload(file={
+ "file_name": "example.file",
+ "content": open("example.file", "rb"),
+ })
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `file` | [operations.File](../../operations/file.mdx) | :heavy_check_mark: | N/A | |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace. | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.FileMetadata](../../components/filemetadata.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.PayloadTooLargeResponseError | 413 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## delete
+
+Deletes a file owned by the requesting workspace. Deletion is irreversible.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.files.delete(file_id="file_011CNha8iCJcU1wXNR6q4V8w")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `file_id` | *str* | :heavy_check_mark: | N/A | file_011CNha8iCJcU1wXNR6q4V8w |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace. | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.FileDeleteResponse](../../components/filedeleteresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## retrieve
+
+Retrieves metadata for a single file owned by the requesting workspace.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.files.retrieve(file_id="file_011CNha8iCJcU1wXNR6q4V8w")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `file_id` | *str* | :heavy_check_mark: | N/A | file_011CNha8iCJcU1wXNR6q4V8w |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace. | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.FileMetadata](../../components/filemetadata.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## download
+
+Downloads the raw bytes of a file. Only files created server-side are downloadable; uploaded files return 400.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.files.download(file_id="file_011CNha8iCJcU1wXNR6q4V8w")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `file_id` | *str* | :heavy_check_mark: | N/A | file_011CNha8iCJcU1wXNR6q4V8w |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Workspace to scope the request to. Defaults to the caller’s default workspace. | a103d8b6-42f0-4e50-9a3c-bf41e2c3c1a7 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[httpx.Response](../../models/.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/generations/README.md b/docs/sdks/generations/README.mdx
similarity index 92%
rename from docs/sdks/generations/README.md
rename to docs/sdks/generations/README.mdx
index 7fd647d..b29ea12 100644
--- a/docs/sdks/generations/README.md
+++ b/docs/sdks/generations/README.mdx
@@ -1,4 +1,7 @@
-# Generations
+---
+title: "Generations"
+description: "Generation history endpoints"
+---
## Overview
@@ -15,7 +18,6 @@ Get request & usage metadata for a generation
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -43,11 +45,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.GenerationResponse](../../components/generationresponse.md)**
+**[components.GenerationResponse](../../components/generationresponse.mdx)**
### Errors
@@ -69,7 +71,6 @@ Get stored prompt and completion content for a generation
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -97,11 +98,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.GenerationContentResponse](../../components/generationcontentresponse.md)**
+**[components.GenerationContentResponse](../../components/generationcontentresponse.mdx)**
### Errors
diff --git a/docs/sdks/guardrails/README.md b/docs/sdks/guardrails/README.mdx
similarity index 93%
rename from docs/sdks/guardrails/README.md
rename to docs/sdks/guardrails/README.mdx
index 4b79890..d164a1d 100644
--- a/docs/sdks/guardrails/README.md
+++ b/docs/sdks/guardrails/README.mdx
@@ -1,4 +1,7 @@
-# Guardrails
+---
+title: "Guardrails"
+description: "Guardrails endpoints"
+---
## Overview
@@ -26,7 +29,6 @@ List all guardrails for the authenticated user. [Management key](/docs/guides/ov
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -58,11 +60,11 @@ with OpenRouter(
| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Filter guardrails by workspace ID. By default, guardrails in the default workspace are returned. | 0df9e665-d932-5740-b2c7-b52af166bc11 |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.ListGuardrailsResponse](../../operations/listguardrailsresponse.md)**
+**[operations.ListGuardrailsResponse](../../operations/listguardrailsresponse.mdx)**
### Errors
@@ -78,7 +80,6 @@ Create a new guardrail for the authenticated user. [Management key](/docs/guides
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -112,8 +113,8 @@ with OpenRouter(
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `allowed_models` | List[*str*] | :heavy_minus_sign: | Array of model identifiers (slug or canonical_slug accepted) | [
"openai/gpt-5.2",
"anthropic/claude-4.5-opus-20251124",
"deepseek/deepseek-r1-0528:free"
] |
| `allowed_providers` | List[*str*] | :heavy_minus_sign: | List of allowed provider IDs | [
"openai",
"anthropic",
"deepseek"
] |
-| `content_filter_builtins` | List[[components.ContentFilterBuiltinEntryInput](../../components/contentfilterbuiltinentryinput.md)] | :heavy_minus_sign: | Builtin content filters to apply. The "flag" action is only supported for "regex-prompt-injection"; PII slugs (email, phone, ssn, credit-card, ip-address, person-name, address) accept "block" or "redact" only. | [
{
"action": "block",
"slug": "regex-prompt-injection"
}
] |
-| `content_filters` | List[[components.ContentFilterEntry](../../components/contentfilterentry.md)] | :heavy_minus_sign: | Custom regex content filters to apply to request messages | [
{
"action": "redact",
"label": "[API_KEY]",
"pattern": "\\b(sk-[a-zA-Z0-9]{48})\\b"
}
] |
+| `content_filter_builtins` | List[[components.ContentFilterBuiltinEntryInput](../../components/contentfilterbuiltinentryinput.mdx)] | :heavy_minus_sign: | Builtin content filters to apply. The "flag" action is only supported for "regex-prompt-injection"; PII slugs (email, phone, ssn, credit-card, ip-address, person-name, address) accept "block" or "redact" only. | [
\{
"action": "block",
"slug": "regex-prompt-injection"
}
] |
+| `content_filters` | List[[components.ContentFilterEntry](../../components/contentfilterentry.mdx)] | :heavy_minus_sign: | Custom regex content filters to apply to request messages | [
\{
"action": "redact",
"label": "[API_KEY]",
"pattern": "\\b(sk-[a-zA-Z0-9]\{48})\\b"
}
] |
| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | Description of the guardrail | A guardrail for limiting API usage |
| `enforce_zdr` | *OptionalNullable[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Deprecated. Use enforce_zdr_anthropic, enforce_zdr_openai, enforce_zdr_google, and enforce_zdr_other instead. When provided, its value is copied into any of those per-provider fields that are not explicitly specified on the request. | false |
| `enforce_zdr_anthropic` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for Anthropic models. Falls back to enforce_zdr when not provided. | false |
@@ -123,13 +124,13 @@ with OpenRouter(
| `ignored_models` | List[*str*] | :heavy_minus_sign: | Array of model identifiers to exclude from routing (slug or canonical_slug accepted) | [
"openai/gpt-4o-mini"
] |
| `ignored_providers` | List[*str*] | :heavy_minus_sign: | List of provider IDs to exclude from routing | [
"azure"
] |
| `limit_usd` | *OptionalNullable[float]* | :heavy_minus_sign: | Spending limit in USD | 50 |
-| `reset_interval` | [OptionalNullable[components.GuardrailInterval]](../../components/guardrailinterval.md) | :heavy_minus_sign: | Interval at which the limit resets (daily, weekly, monthly) | monthly |
+| `reset_interval` | [OptionalNullable[components.GuardrailInterval]](../../components/guardrailinterval.mdx) | :heavy_minus_sign: | Interval at which the limit resets (daily, weekly, monthly) | monthly |
| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | The workspace to create the guardrail in. Defaults to the default workspace if not provided. | 0df9e665-d932-5740-b2c7-b52af166bc11 |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.CreateGuardrailResponse](../../components/createguardrailresponse.md)**
+**[components.CreateGuardrailResponse](../../components/createguardrailresponse.mdx)**
### Errors
@@ -147,7 +148,6 @@ Delete an existing guardrail. [Management key](/docs/guides/overview/auth/manage
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -175,11 +175,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.DeleteGuardrailResponse](../../components/deleteguardrailresponse.md)**
+**[components.DeleteGuardrailResponse](../../components/deleteguardrailresponse.mdx)**
### Errors
@@ -196,7 +196,6 @@ Get a single guardrail by ID. [Management key](/docs/guides/overview/auth/manage
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -224,11 +223,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.GetGuardrailResponse](../../components/getguardrailresponse.md)**
+**[components.GetGuardrailResponse](../../components/getguardrailresponse.mdx)**
### Errors
@@ -245,7 +244,6 @@ Update an existing guardrail. Collection fields use replace semantics: send the
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -275,8 +273,8 @@ with OpenRouter(
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `allowed_models` | List[*str*] | :heavy_minus_sign: | Array of model identifiers (slug or canonical_slug accepted) | [
"openai/gpt-5.2"
] |
| `allowed_providers` | List[*str*] | :heavy_minus_sign: | New list of allowed provider IDs | [
"openai",
"anthropic",
"deepseek"
] |
-| `content_filter_builtins` | List[[components.ContentFilterBuiltinEntryInput](../../components/contentfilterbuiltinentryinput.md)] | :heavy_minus_sign: | Builtin content filters to apply. Set to null to remove. The "flag" action is only supported for "regex-prompt-injection"; PII slugs (email, phone, ssn, credit-card, ip-address, person-name, address) accept "block" or "redact" only. | [
{
"action": "block",
"slug": "regex-prompt-injection"
}
] |
-| `content_filters` | List[[components.ContentFilterEntry](../../components/contentfilterentry.md)] | :heavy_minus_sign: | Custom regex content filters to apply. Set to null to remove. | |
+| `content_filter_builtins` | List[[components.ContentFilterBuiltinEntryInput](../../components/contentfilterbuiltinentryinput.mdx)] | :heavy_minus_sign: | Builtin content filters to apply. Set to null to remove. The "flag" action is only supported for "regex-prompt-injection"; PII slugs (email, phone, ssn, credit-card, ip-address, person-name, address) accept "block" or "redact" only. | [
\{
"action": "block",
"slug": "regex-prompt-injection"
}
] |
+| `content_filters` | List[[components.ContentFilterEntry](../../components/contentfilterentry.mdx)] | :heavy_minus_sign: | Custom regex content filters to apply. Set to null to remove. | null |
| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | New description for the guardrail | Updated description |
| `enforce_zdr` | *OptionalNullable[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.
Deprecated. Use enforce_zdr_anthropic, enforce_zdr_openai, enforce_zdr_google, and enforce_zdr_other instead. When provided, its value is copied into any of those per-provider fields that are not explicitly specified on the request. | true |
| `enforce_zdr_anthropic` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enforce zero data retention for Anthropic models. Falls back to enforce_zdr when not provided. | true |
@@ -287,12 +285,12 @@ with OpenRouter(
| `ignored_providers` | List[*str*] | :heavy_minus_sign: | List of provider IDs to exclude from routing | [
"azure"
] |
| `limit_usd` | *OptionalNullable[float]* | :heavy_minus_sign: | New spending limit in USD | 75 |
| `name` | *Optional[str]* | :heavy_minus_sign: | New name for the guardrail | Updated Guardrail Name |
-| `reset_interval` | [OptionalNullable[components.GuardrailInterval]](../../components/guardrailinterval.md) | :heavy_minus_sign: | Interval at which the limit resets (daily, weekly, monthly) | monthly |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `reset_interval` | [OptionalNullable[components.GuardrailInterval]](../../components/guardrailinterval.mdx) | :heavy_minus_sign: | Interval at which the limit resets (daily, weekly, monthly) | monthly |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.UpdateGuardrailResponse](../../components/updateguardrailresponse.md)**
+**[components.UpdateGuardrailResponse](../../components/updateguardrailresponse.mdx)**
### Errors
@@ -310,7 +308,6 @@ List all API key assignments for a specific guardrail. [Management key](/docs/gu
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -342,11 +339,11 @@ with OpenRouter(
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.ListGuardrailKeyAssignmentsResponse](../../operations/listguardrailkeyassignmentsresponse.md)**
+**[operations.ListGuardrailKeyAssignmentsResponse](../../operations/listguardrailkeyassignmentsresponse.mdx)**
### Errors
@@ -363,7 +360,6 @@ Assign multiple API keys to a specific guardrail. A key may hold at most one gua
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -394,11 +390,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.BulkAssignKeysResponse](../../components/bulkassignkeysresponse.md)**
+**[components.BulkAssignKeysResponse](../../components/bulkassignkeysresponse.mdx)**
### Errors
@@ -416,7 +412,6 @@ Unassign multiple API keys from a specific guardrail. [Management key](/docs/gui
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -447,11 +442,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.BulkUnassignKeysResponse](../../components/bulkunassignkeysresponse.md)**
+**[components.BulkUnassignKeysResponse](../../components/bulkunassignkeysresponse.mdx)**
### Errors
@@ -469,7 +464,6 @@ List all organization member assignments for a specific guardrail. [Management k
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -501,11 +495,11 @@ with OpenRouter(
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.ListGuardrailMemberAssignmentsResponse](../../operations/listguardrailmemberassignmentsresponse.md)**
+**[operations.ListGuardrailMemberAssignmentsResponse](../../operations/listguardrailmemberassignmentsresponse.mdx)**
### Errors
@@ -522,7 +516,6 @@ Assign multiple organization members to a specific guardrail. [Management key](/
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -554,11 +547,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.BulkAssignMembersResponse](../../components/bulkassignmembersresponse.md)**
+**[components.BulkAssignMembersResponse](../../components/bulkassignmembersresponse.mdx)**
### Errors
@@ -576,7 +569,6 @@ Unassign multiple organization members from a specific guardrail. [Management ke
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -608,11 +600,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.BulkUnassignMembersResponse](../../components/bulkunassignmembersresponse.md)**
+**[components.BulkUnassignMembersResponse](../../components/bulkunassignmembersresponse.mdx)**
### Errors
@@ -630,7 +622,6 @@ List all API key guardrail assignments for the authenticated user. [Management k
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -661,11 +652,11 @@ with OpenRouter(
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.ListKeyAssignmentsResponse](../../operations/listkeyassignmentsresponse.md)**
+**[operations.ListKeyAssignmentsResponse](../../operations/listkeyassignmentsresponse.mdx)**
### Errors
@@ -681,7 +672,6 @@ List all organization member guardrail assignments for the authenticated user. [
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -712,11 +702,11 @@ with OpenRouter(
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.ListMemberAssignmentsResponse](../../operations/listmemberassignmentsresponse.md)**
+**[operations.ListMemberAssignmentsResponse](../../operations/listmemberassignmentsresponse.mdx)**
### Errors
diff --git a/docs/sdks/images/README.mdx b/docs/sdks/images/README.mdx
new file mode 100644
index 0000000..cb61de8
--- /dev/null
+++ b/docs/sdks/images/README.mdx
@@ -0,0 +1,177 @@
+---
+title: "Images"
+description: "Images endpoints"
+---
+
+## Overview
+
+Images endpoints
+
+### Available Operations
+
+* [generate](#generate) - Generate an image
+* [list_models](#list_models) - List image generation models
+* [list_model_endpoints](#list_model_endpoints) - List endpoints for an image model
+
+## generate
+
+Generates an image from a text prompt via the image generation router
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.images.generate(model="bytedance-seed/seedream-4.5", prompt="a red panda astronaut floating in space, studio lighting")
+
+ with res as event_stream:
+ for event in event_stream:
+ # handle event
+ print(event, flush=True)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `model` | *str* | :heavy_check_mark: | The image generation model to use | bytedance-seed/seedream-4.5 |
+| `prompt` | *str* | :heavy_check_mark: | Text description of the desired image | a red panda astronaut floating in space, studio lighting |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `aspect_ratio` | [Optional[components.ImageGenerationRequestAspectRatio]](../../components/imagegenerationrequestaspectratio.mdx) | :heavy_minus_sign: | Normalized aspect ratio of the generated image. Providers clamp to their supported subset. | 16:9 |
+| `background` | [Optional[components.ImageGenerationRequestBackground]](../../components/imagegenerationrequestbackground.mdx) | :heavy_minus_sign: | Background treatment. `transparent` requires an output_format that supports alpha (png or webp). | auto |
+| `input_references` | List[[components.ContentPartImage](../../components/contentpartimage.mdx)] | :heavy_minus_sign: | Reference images to guide image-to-image generation, as base64 data URLs or HTTP(S) URLs. | |
+| `n` | *Optional[int]* | :heavy_minus_sign: | Number of images to generate (1-10). Providers that only support single-image generation reject n > 1. | 1 |
+| `output_compression` | *Optional[int]* | :heavy_minus_sign: | Compression level (0-100) for webp/jpeg output. Ignored for png and by providers without a compression knob. | 100 |
+| `output_format` | [Optional[components.ImageGenerationRequestOutputFormat]](../../components/imagegenerationrequestoutputformat.mdx) | :heavy_minus_sign: | Encoding of the returned image bytes. Most models produce raster formats (png, jpeg, webp). SVG is supported by vectorization models (e.g. Quiver) — the SVG markup is UTF-8 base64-encoded in `b64_json`. | png |
+| `provider` | [Optional[components.ImageGenerationRequestProvider]](../../components/imagegenerationrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | |
+| `quality` | [Optional[components.ImageGenerationRequestQuality]](../../components/imagegenerationrequestquality.mdx) | :heavy_minus_sign: | Rendering quality. Providers without a quality knob ignore this. | high |
+| `resolution` | [Optional[components.ImageGenerationRequestResolution]](../../components/imagegenerationrequestresolution.mdx) | :heavy_minus_sign: | Normalized resolution tier of the generated image. Concrete pixel dimensions are derived per-provider. | 2K |
+| `seed` | *Optional[int]* | :heavy_minus_sign: | If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers. | |
+| `size` | *Optional[str]* | :heavy_minus_sign: | Optional. A convenience shorthand for output dimensions — pass a tier ("2K", "4K") or explicit pixels ("2048x2048") and we normalize it to the right dimensions for the chosen provider. Interchangeable with resolution + aspect_ratio; use those directly for enumerated, per-model discoverable values. Conflicting size + resolution/aspect_ratio is rejected. | 2K |
+| `stream` | *Optional[bool]* | :heavy_minus_sign: | If true, partial images are streamed as SSE events as they become available. Only supported by providers with native streaming (currently OpenAI). Non-streaming providers ignore this flag and return a buffered response. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[operations.CreateImagesResponse](../../operations/createimagesresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| -------------------------------------- | -------------------------------------- | -------------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.PaymentRequiredResponseError | 402 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.BadGatewayResponseError | 502 | application/json |
+| errors.EdgeNetworkTimeoutResponseError | 524 | application/json |
+| errors.ProviderOverloadedResponseError | 529 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## list_models
+
+Lists every image generation model with its top-level supported-parameter superset and a URL to its full per-endpoint records.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.images.list_models()
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
+
+### Response
+
+**[components.ImageModelsListResponse](../../components/imagemodelslistresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## list_model_endpoints
+
+Returns the full per-endpoint records for an image model: each endpoint's definitive supported parameters, pricing, and passthrough allowlist.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.images.list_model_endpoints(author="bytedance-seed", slug="seedream-4.5")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `author` | *str* | :heavy_check_mark: | Model author/organization | bytedance-seed |
+| `slug` | *str* | :heavy_check_mark: | Model slug | seedream-4.5 |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.ImageModelEndpointsResponse](../../components/imagemodelendpointsresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/models/README.md b/docs/sdks/models/README.mdx
similarity index 94%
rename from docs/sdks/models/README.md
rename to docs/sdks/models/README.mdx
index acaf3e2..cc84c8d 100644
--- a/docs/sdks/models/README.md
+++ b/docs/sdks/models/README.mdx
@@ -1,4 +1,7 @@
-# Models
+---
+title: "Models"
+description: "Model information endpoints"
+---
## Overview
@@ -17,7 +20,6 @@ Returns full details for a single model identified by its author and slug (e.g.
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -46,11 +48,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.ModelResponse](../../components/modelresponse.md)**
+**[components.ModelResponse](../../components/modelresponse.mdx)**
### Errors
@@ -66,7 +68,6 @@ List all models and their properties
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -93,10 +94,10 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `category` | [Optional[operations.GetModelsCategory]](../../operations/getmodelscategory.md) | :heavy_minus_sign: | Filter models by use case category | programming |
+| `category` | [Optional[operations.GetModelsCategory]](../../operations/getmodelscategory.mdx) | :heavy_minus_sign: | Filter models by use case category | programming |
| `supported_parameters` | *Optional[str]* | :heavy_minus_sign: | Filter models by supported parameter (comma-separated) | temperature |
| `output_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or "all" to include all models. Defaults to "text". | text |
-| `sort` | [Optional[operations.GetModelsSort]](../../operations/getmodelssort.md) | :heavy_minus_sign: | Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved. | newest |
+| `sort` | [Optional[operations.GetModelsSort]](../../operations/getmodelssort.mdx) | :heavy_minus_sign: | Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved. | newest |
| `q` | *Optional[str]* | :heavy_minus_sign: | Free-text search by model name or slug. | gpt-4 |
| `input_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by input modality. Comma-separated list of: text, image, audio, file. | text,image |
| `context` | *Optional[int]* | :heavy_minus_sign: | Minimum context length (tokens). Models with smaller context are excluded. | 128000 |
@@ -105,14 +106,14 @@ with OpenRouter(
| `arch` | *Optional[str]* | :heavy_minus_sign: | Filter models by architecture/model family (e.g. GPT, Claude, Gemini, Llama). | GPT |
| `model_authors` | *Optional[str]* | :heavy_minus_sign: | Filter models by the organization that created the model. Comma-separated list of author slugs. | openai,anthropic |
| `providers` | *Optional[str]* | :heavy_minus_sign: | Filter models by hosting provider. Comma-separated list of provider names. | OpenAI,Anthropic |
-| `distillable` | [Optional[operations.Distillable]](../../operations/distillable.md) | :heavy_minus_sign: | Filter by distillation capability. "true" returns only distillable models, "false" excludes them. | true |
-| `zdr` | [Optional[operations.Zdr]](../../operations/zdr.md) | :heavy_minus_sign: | When set to "true", return only models with zero data retention endpoints. | true |
-| `region` | [Optional[operations.Region]](../../operations/region.md) | :heavy_minus_sign: | Filter to models with endpoints in the given data region. Currently only "eu" is supported. | eu |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `distillable` | [Optional[operations.Distillable]](../../operations/distillable.mdx) | :heavy_minus_sign: | Filter by distillation capability. "true" returns only distillable models, "false" excludes them. | true |
+| `zdr` | [Optional[operations.Zdr]](../../operations/zdr.mdx) | :heavy_minus_sign: | When set to "true", return only models with zero data retention endpoints. | true |
+| `region` | [Optional[operations.Region]](../../operations/region.mdx) | :heavy_minus_sign: | Filter to models with endpoints in the given data region. Currently only "eu" is supported. | eu |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.ModelsListResponse](../../components/modelslistresponse.md)**
+**[components.ModelsListResponse](../../components/modelslistresponse.mdx)**
### Errors
@@ -128,7 +129,6 @@ Get total count of available models
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -156,11 +156,11 @@ with OpenRouter(
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `output_modalities` | *Optional[str]* | :heavy_minus_sign: | Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or "all" to include all models. Defaults to "text". | text |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[components.ModelsCountResponse](../../components/modelscountresponse.md)**
+**[components.ModelsCountResponse](../../components/modelscountresponse.mdx)**
### Errors
@@ -176,7 +176,6 @@ List models filtered by user provider preferences, [privacy settings](https://op
### Example Usage
-
```python
from openrouter import OpenRouter, operations
import os
@@ -201,15 +200,15 @@ with OpenRouter(
| Parameter | Type | Required | Description |
| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `security` | [operations.ListModelsUserSecurity](../../operations/listmodelsusersecurity.md) | :heavy_check_mark: | N/A |
+| `security` | [operations.ListModelsUserSecurity](../../operations/listmodelsusersecurity.mdx) | :heavy_check_mark: | N/A |
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
### Response
-**[components.ModelsListResponse](../../components/modelslistresponse.md)**
+**[components.ModelsListResponse](../../components/modelslistresponse.mdx)**
### Errors
diff --git a/docs/sdks/oauth/README.md b/docs/sdks/oauth/README.mdx
similarity index 89%
rename from docs/sdks/oauth/README.md
rename to docs/sdks/oauth/README.mdx
index a99fae6..c8f7dfd 100644
--- a/docs/sdks/oauth/README.md
+++ b/docs/sdks/oauth/README.mdx
@@ -1,4 +1,7 @@
-# OAuth
+---
+title: "OAuth"
+description: "OAuth authentication endpoints"
+---
## Overview
@@ -15,7 +18,6 @@ Exchange an authorization code from the PKCE flow for a user-controlled API key
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -43,13 +45,13 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `code_challenge_method` | [OptionalNullable[operations.ExchangeAuthCodeForAPIKeyCodeChallengeMethod]](../../operations/exchangeauthcodeforapikeycodechallengemethod.md) | :heavy_minus_sign: | The method used to generate the code challenge | S256 |
+| `code_challenge_method` | [OptionalNullable[operations.ExchangeAuthCodeForAPIKeyCodeChallengeMethod]](../../operations/exchangeauthcodeforapikeycodechallengemethod.mdx) | :heavy_minus_sign: | The method used to generate the code challenge | S256 |
| `code_verifier` | *Optional[str]* | :heavy_minus_sign: | The code verifier if code_challenge was used in the authorization request | dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.ExchangeAuthCodeForAPIKeyResponse](../../operations/exchangeauthcodeforapikeyresponse.md)**
+**[operations.ExchangeAuthCodeForAPIKeyResponse](../../operations/exchangeauthcodeforapikeyresponse.mdx)**
### Errors
@@ -66,7 +68,6 @@ Create an authorization code for the PKCE flow to generate a user-controlled API
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -95,17 +96,17 @@ with OpenRouter(
| `x_open_router_title` | *Optional[str]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
| `code_challenge` | *Optional[str]* | :heavy_minus_sign: | PKCE code challenge for enhanced security | E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM |
-| `code_challenge_method` | [Optional[operations.CreateAuthKeysCodeCodeChallengeMethod]](../../operations/createauthkeyscodecodechallengemethod.md) | :heavy_minus_sign: | The method used to generate the code challenge | S256 |
+| `code_challenge_method` | [Optional[operations.CreateAuthKeysCodeCodeChallengeMethod]](../../operations/createauthkeyscodecodechallengemethod.mdx) | :heavy_minus_sign: | The method used to generate the code challenge | S256 |
| `expires_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | Optional expiration time for the API key to be created | 2027-12-31T23:59:59Z |
| `key_label` | *Optional[str]* | :heavy_minus_sign: | Optional custom label for the API key. Defaults to the app name if not provided. | My Custom Key |
| `limit` | *Optional[float]* | :heavy_minus_sign: | Credit limit for the API key to be created | 100 |
-| `usage_limit_type` | [Optional[operations.UsageLimitType]](../../operations/usagelimittype.md) | :heavy_minus_sign: | Optional credit limit reset interval. When set, the credit limit resets on this interval. | monthly |
+| `usage_limit_type` | [Optional[operations.UsageLimitType]](../../operations/usagelimittype.mdx) | :heavy_minus_sign: | Optional credit limit reset interval. When set, the credit limit resets on this interval. | monthly |
| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Optional workspace ID to associate the API key with | |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.CreateAuthKeysCodeResponse](../../operations/createauthkeyscoderesponse.md)**
+**[operations.CreateAuthKeysCodeResponse](../../operations/createauthkeyscoderesponse.mdx)**
### Errors
diff --git a/docs/sdks/observability/README.mdx b/docs/sdks/observability/README.mdx
new file mode 100644
index 0000000..869bf82
--- /dev/null
+++ b/docs/sdks/observability/README.mdx
@@ -0,0 +1,282 @@
+---
+title: "Observability"
+description: "Observability endpoints"
+---
+
+## Overview
+
+Observability endpoints
+
+### Available Operations
+
+* [list](#list) - List observability destinations
+* [create](#create) - Create an observability destination
+* [delete](#delete) - Delete an observability destination
+* [get](#get) - Get an observability destination
+* [update](#update) - Update an observability destination
+
+## list
+
+List the observability destinations configured for the authenticated entity's default workspace. Use the `workspace_id` query parameter to scope the result to a different workspace. Only destinations with stable release status are surfaced — destinations of other types are excluded. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.observability.list()
+
+ while res is not None:
+ # Handle items
+
+ res = res.next()
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Optional workspace ID to filter by. Defaults to the authenticated entity's default workspace. | 550e8400-e29b-41d4-a716-446655440000 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[operations.ListObservabilityDestinationsResponse](../../operations/listobservabilitydestinationsresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## create
+
+Create a new observability destination. A maximum of 5 destinations per type is allowed. Defaults to the authenticated entity's default workspace; use the `workspace_id` body field to scope to a different workspace. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.observability.create(config={
+ "baseUrl": "https://us.cloud.langfuse.com",
+ "publicKey": "pk-l...EfGh",
+ "secretKey": "sk-l...AbCd",
+ }, name="Production Langfuse", type_="langfuse", enabled=True, privacy_mode=False)
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `config` | Dict[str, *Nullable[Any]*] | :heavy_check_mark: | Provider-specific configuration. The shape depends on `type` and is validated server-side. | \{
"baseUrl": "https://us.cloud.langfuse.com",
"publicKey": "pk-l...EfGh",
"secretKey": "sk-l...AbCd"
} |
+| `name` | *str* | :heavy_check_mark: | Human-readable name for the destination. | Production Langfuse |
+| `type` | [components.CreateObservabilityDestinationRequestType](../../components/createobservabilitydestinationrequesttype.mdx) | :heavy_check_mark: | The destination type. Only stable destination types are accepted. | langfuse |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `api_key_hashes` | List[*str*] | :heavy_minus_sign: | Optional allowlist of OpenRouter API key hashes whose traffic is forwarded. `null` or omitted means all keys. Must contain at least one hash if provided. | null |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether this destination should be enabled immediately. | true |
+| `filter_rules` | [OptionalNullable[components.ObservabilityFilterRulesConfig]](../../components/observabilityfilterrulesconfig.mdx) | :heavy_minus_sign: | Optional structured filter rules controlling which events are forwarded. | null |
+| `privacy_mode` | *Optional[bool]* | :heavy_minus_sign: | When true, request/response bodies are not forwarded — only metadata. | false |
+| `sampling_rate` | *Optional[float]* | :heavy_minus_sign: | Sampling rate between 0.0001 and 1 (1 = 100%). | 1 |
+| `workspace_id` | *Optional[str]* | :heavy_minus_sign: | Optional workspace ID. Defaults to the authenticated entity's default workspace. | 550e8400-e29b-41d4-a716-446655440000 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.CreateObservabilityDestinationResponse](../../components/createobservabilitydestinationresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.ConflictResponseError | 409 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## delete
+
+Delete an existing observability destination. This performs a soft delete. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.observability.delete(id="99999999-aaaa-bbbb-cccc-dddddddddddd")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The destination ID (UUID). | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.DeleteObservabilityDestinationResponse](../../components/deleteobservabilitydestinationresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## get
+
+Fetch a single observability destination by its UUID. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.observability.get(id="99999999-aaaa-bbbb-cccc-dddddddddddd")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The destination ID (UUID). | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.GetObservabilityDestinationResponse](../../components/getobservabilitydestinationresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## update
+
+Update an existing observability destination. Only the fields provided in the request body are updated. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.observability.update(id="99999999-aaaa-bbbb-cccc-dddddddddddd", enabled=False, name="Updated Langfuse")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The destination ID (UUID). | 99999999-aaaa-bbbb-cccc-dddddddddddd |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `api_key_hashes` | List[*str*] | :heavy_minus_sign: | Optional allowlist of OpenRouter API key hashes. `null` clears the filter (all keys). Omitting leaves the current value. Must contain at least one hash if provided. | null |
+| `config` | Dict[str, *Nullable[Any]*] | :heavy_minus_sign: | Provider-specific configuration fields to update. Masked values are ignored; unset fields keep their current value. | \{
"baseUrl": "https://us.cloud.langfuse.com",
"publicKey": "pk-l...EfGh",
"secretKey": "sk-l...AbCd"
} |
+| `enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether the destination is enabled. | true |
+| `filter_rules` | [OptionalNullable[components.ObservabilityFilterRulesConfig]](../../components/observabilityfilterrulesconfig.mdx) | :heavy_minus_sign: | N/A | null |
+| `name` | *Optional[str]* | :heavy_minus_sign: | Human-readable name for the destination. | Production Langfuse |
+| `privacy_mode` | *Optional[bool]* | :heavy_minus_sign: | When true, request/response bodies are not forwarded — only metadata. | false |
+| `sampling_rate` | *Optional[float]* | :heavy_minus_sign: | Sampling rate between 0.0001 and 1 (1 = 100%). | 1 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.UpdateObservabilityDestinationResponse](../../components/updateobservabilitydestinationresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.ConflictResponseError | 409 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/organization/README.mdx b/docs/sdks/organization/README.mdx
new file mode 100644
index 0000000..6e199ab
--- /dev/null
+++ b/docs/sdks/organization/README.mdx
@@ -0,0 +1,63 @@
+---
+title: "Organization"
+description: "Organization endpoints"
+---
+
+## Overview
+
+Organization endpoints
+
+### Available Operations
+
+* [list_members](#list_members) - List organization members
+
+## list_members
+
+List all members of the organization associated with the authenticated management key. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.organization.list_members()
+
+ while res is not None:
+ # Handle items
+
+ res = res.next()
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[operations.ListOrganizationMembersResponse](../../operations/listorganizationmembersresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/presets/README.mdx b/docs/sdks/presets/README.mdx
new file mode 100644
index 0000000..5e8523f
--- /dev/null
+++ b/docs/sdks/presets/README.mdx
@@ -0,0 +1,489 @@
+---
+title: "Presets"
+description: "Presets endpoints"
+---
+
+## Overview
+
+Presets endpoints
+
+### Available Operations
+
+* [list](#list) - List presets
+* [get](#get) - Get a preset
+* [create_presets_chat_completions](#create_presets_chat_completions) - Create a preset from a chat-completions request body
+* [create_presets_messages](#create_presets_messages) - Create a preset from a messages request body
+* [create_presets_responses](#create_presets_responses) - Create a preset from a responses request body
+* [list_versions](#list_versions) - List versions of a preset
+* [get_version](#get_version) - Get a specific version of a preset
+
+## list
+
+Lists all presets for the authenticated user, ordered by most recently updated first.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.presets.list()
+
+ while res is not None:
+ # Handle items
+
+ res = res.next()
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[operations.ListPresetsResponse](../../operations/listpresetsresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## get
+
+Retrieves a preset by its slug with its currently designated version inline.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.presets.get(slug="my-preset")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `slug` | *str* | :heavy_check_mark: | URL-safe slug identifying the preset. | my-preset |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.GetPresetResponse](../../components/getpresetresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## create_presets_chat_completions
+
+Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.presets.create_presets_chat_completions(slug="my-preset", messages=[
+ {
+ "content": "You are a helpful assistant.",
+ "role": "system",
+ },
+ {
+ "content": "Hello!",
+ "role": "user",
+ },
+ ], model="openai/gpt-5.4", stream=False, temperature=0.7)
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `slug` | *str* | :heavy_check_mark: | URL-safe slug identifying the preset. Created if it does not exist. | my-preset |
+| `messages` | List[[components.ChatMessages](../../components/chatmessages.mdx)] | :heavy_check_mark: | List of messages for the conversation | [
\{
"content": "Hello!",
"role": "user"
}
] |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `debug` | [Optional[components.ChatDebugOptions]](../../components/chatdebugoptions.mdx) | :heavy_minus_sign: | Debug options for inspecting request transformations (streaming only) | \{
"echo_upstream_body": true
} |
+| `frequency_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | Frequency penalty (-2.0 to 2.0) | 0 |
+| `image_config` | Dict[str, [components.ImageConfig](../../components/imageconfig.mdx)] | :heavy_minus_sign: | Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details. | \{
"aspect_ratio": "16:9",
"quality": "high"
} |
+| `logit_bias` | Dict[str, *float*] | :heavy_minus_sign: | Token logit bias adjustments | \{
"50256": -100
} |
+| `logprobs` | *OptionalNullable[bool]* | :heavy_minus_sign: | Return log probabilities | false |
+| `max_completion_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Maximum tokens in completion | 100 |
+| `max_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | Maximum tokens (deprecated, use max_completion_tokens). Note: some providers enforce a minimum of 16. | 100 |
+| `metadata` | Dict[str, *str*] | :heavy_minus_sign: | Key-value pairs for additional object information (max 16 pairs, 64 char keys, 512 char values) | \{
"session_id": "session-456",
"user_id": "user-123"
} |
+| `min_p` | *OptionalNullable[float]* | :heavy_minus_sign: | Minimum probability threshold relative to the most likely token. Tokens with probability below min_p * (probability of top token) are filtered out. Not all providers support this parameter. | 0.1 |
+| `modalities` | List[[components.Modality](../../components/modality.mdx)] | :heavy_minus_sign: | Output modalities for the response. Supported values are "text", "image", and "audio". | [
"text",
"image"
] |
+| `model` | *Optional[str]* | :heavy_minus_sign: | Model to use for completion | openai/gpt-4 |
+| `models` | List[*str*] | :heavy_minus_sign: | Models to use for completion | [
"openai/gpt-4",
"openai/gpt-4o"
] |
+| `parallel_tool_calls` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enable parallel function calling during tool use. When true, the model may generate multiple tool calls in a single response. | true |
+| `plugins` | List[[components.ChatRequestPlugin](../../components/chatrequestplugin.mdx)] | :heavy_minus_sign: | Plugins you want to enable for this request, including their settings. | |
+| `presence_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | Presence penalty (-2.0 to 2.0) | 0 |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.mdx) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | \{
"allow_fallbacks": true
} |
+| `reasoning` | [Optional[components.ChatRequestReasoning]](../../components/chatrequestreasoning.mdx) | :heavy_minus_sign: | Configuration options for reasoning models | \{
"effort": "medium",
"summary": "concise"
} |
+| `reasoning_effort` | [OptionalNullable[components.ChatRequestReasoningEffort]](../../components/chatrequestreasoningeffort.mdx) | :heavy_minus_sign: | Shorthand for setting reasoning effort. Equivalent to setting reasoning.effort. Cannot be used simultaneously with reasoning.effort if they differ. | medium |
+| `repetition_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | Penalizes tokens based on how much they have already appeared in the text. A value of 1.0 means no penalty. Values above 1.0 penalize repeated tokens more strongly. Not all providers support this parameter. | 1 |
+| `response_format` | [Optional[components.ResponseFormat]](../../components/responseformat.mdx) | :heavy_minus_sign: | Response format configuration | \{
"type": "json_object"
} |
+| `seed` | *OptionalNullable[int]* | :heavy_minus_sign: | Random seed for deterministic outputs | 42 |
+| `service_tier` | [OptionalNullable[components.ChatRequestServiceTier]](../../components/chatrequestservicetier.mdx) | :heavy_minus_sign: | The service tier to use for processing this request. | auto |
+| `session_id` | *Optional[str]* | :heavy_minus_sign: | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | |
+| `stop` | [OptionalNullable[components.Stop]](../../components/stop.mdx) | :heavy_minus_sign: | Stop sequences (up to 4) | [
""
] |
+| `stop_server_tools_when` | List[[components.StopServerToolsWhenCondition](../../components/stopservertoolswhencondition.mdx)] | :heavy_minus_sign: | Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`. | [
\{
"step_count": 5,
"type": "step_count_is"
},
\{
"max_cost_in_dollars": 0.5,
"type": "max_cost"
}
] |
+| `stream` | *Optional[bool]* | :heavy_minus_sign: | Enable streaming response | false |
+| `stream_options` | [OptionalNullable[components.ChatStreamOptions]](../../components/chatstreamoptions.mdx) | :heavy_minus_sign: | Streaming configuration options | \{
"include_usage": true
} |
+| `temperature` | *OptionalNullable[float]* | :heavy_minus_sign: | Sampling temperature (0-2) | 0.7 |
+| `tool_choice` | [Optional[components.ChatToolChoice]](../../components/chattoolchoice.mdx) | :heavy_minus_sign: | Tool choice configuration | auto |
+| `tools` | List[[components.ChatFunctionTool](../../components/chatfunctiontool.mdx)] | :heavy_minus_sign: | Available tools for function calling | [
\{
"function": \{
"description": "Get weather",
"name": "get_weather"
},
"type": "function"
}
] |
+| `top_a` | *OptionalNullable[float]* | :heavy_minus_sign: | Consider only tokens with "sufficiently high" probabilities based on the probability of the most likely token. Not all providers support this parameter. | 0 |
+| `top_k` | *OptionalNullable[int]* | :heavy_minus_sign: | Limits the model to choose from the top K most likely tokens at each step. A value of 1 means the model will always pick the most likely next token. Not all providers support this parameter. | 40 |
+| `top_logprobs` | *OptionalNullable[int]* | :heavy_minus_sign: | Number of top log probabilities to return (0-20) | 5 |
+| `top_p` | *OptionalNullable[float]* | :heavy_minus_sign: | Nucleus sampling parameter (0-1) | 1 |
+| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.mdx) | :heavy_minus_sign: | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
+| `user` | *Optional[str]* | :heavy_minus_sign: | Unique user identifier | user-123 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.CreatePresetFromInferenceResponse](../../components/createpresetfrominferenceresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.ConflictResponseError | 409 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## create_presets_messages
+
+Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.presets.create_presets_messages(slug="my-preset", messages=[
+ {
+ "content": "Hello!",
+ "role": "user",
+ },
+ ], model="anthropic/claude-4.6-sonnet", max_tokens=1024, system="You are a helpful assistant.")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `slug` | *str* | :heavy_check_mark: | URL-safe slug identifying the preset. Created if it does not exist. | my-preset |
+| `messages` | List[[components.MessagesMessageParam](../../components/messagesmessageparam.mdx)] | :heavy_check_mark: | N/A | |
+| `model` | *str* | :heavy_check_mark: | N/A | |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `context_management` | [OptionalNullable[components.ContextManagement]](../../components/contextmanagement.mdx) | :heavy_minus_sign: | N/A | |
+| `fallbacks` | List[[components.MessagesFallbackParam](../../components/messagesfallbackparam.mdx)] | :heavy_minus_sign: | Fallback models to try if the primary model fails or refuses, in order. Handled by OpenRouter multi-model routing rather than Anthropic server-side fallbacks; cannot be combined with `models`. Each entry accepts only `model`. Maximum of 3 entries. | [
\{
"model": "claude-opus-4-8"
}
] |
+| `max_tokens` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `metadata` | [Optional[components.MessagesRequestMetadata]](../../components/messagesrequestmetadata.mdx) | :heavy_minus_sign: | N/A | |
+| `models` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `output_config` | [Optional[components.MessagesOutputConfig]](../../components/messagesoutputconfig.mdx) | :heavy_minus_sign: | Configuration for controlling output behavior. Supports the effort parameter and structured output format. | \{
"effort": "medium"
} |
+| `plugins` | List[[components.MessagesRequestPlugin](../../components/messagesrequestplugin.mdx)] | :heavy_minus_sign: | Plugins you want to enable for this request, including their settings. | |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.mdx) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | \{
"allow_fallbacks": true
} |
+| `service_tier` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `session_id` | *Optional[str]* | :heavy_minus_sign: | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | |
+| `speed` | [OptionalNullable[components.Speed]](../../components/speed.mdx) | :heavy_minus_sign: | N/A | fast |
+| `stop_sequences` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `stop_server_tools_when` | List[[components.StopServerToolsWhenCondition](../../components/stopservertoolswhencondition.mdx)] | :heavy_minus_sign: | Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`. | [
\{
"step_count": 5,
"type": "step_count_is"
},
\{
"max_cost_in_dollars": 0.5,
"type": "max_cost"
}
] |
+| `stream` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `system` | [Optional[components.System]](../../components/system.mdx) | :heavy_minus_sign: | N/A | |
+| `temperature` | *Optional[float]* | :heavy_minus_sign: | N/A | |
+| `thinking` | [Optional[components.Thinking]](../../components/thinking.mdx) | :heavy_minus_sign: | N/A | |
+| `tool_choice` | [Optional[components.ToolChoice]](../../components/toolchoice.mdx) | :heavy_minus_sign: | N/A | |
+| `tools` | List[[components.MessagesRequestToolUnion](../../components/messagesrequesttoolunion.mdx)] | :heavy_minus_sign: | N/A | |
+| `top_k` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `top_p` | *Optional[float]* | :heavy_minus_sign: | N/A | |
+| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.mdx) | :heavy_minus_sign: | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
+| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 256 characters. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.CreatePresetFromInferenceResponse](../../components/createpresetfrominferenceresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.ConflictResponseError | 409 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## create_presets_responses
+
+Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.presets.create_presets_responses(slug="my-preset", input="Hello!", instructions="You are a helpful assistant.", model="openai/gpt-5.4", service_tier="auto", stream=False)
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `slug` | *str* | :heavy_check_mark: | URL-safe slug identifying the preset. Created if it does not exist. | my-preset |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `debug` | [Optional[components.ChatDebugOptions]](../../components/chatdebugoptions.mdx) | :heavy_minus_sign: | Debug options for inspecting request transformations (streaming only) | \{
"echo_upstream_body": true
} |
+| `frequency_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
+| `image_config` | Dict[str, [components.ImageConfig](../../components/imageconfig.mdx)] | :heavy_minus_sign: | Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details. | \{
"aspect_ratio": "16:9",
"quality": "high"
} |
+| `include` | List[[components.ResponseIncludesEnum](../../components/responseincludesenum.mdx)] | :heavy_minus_sign: | N/A | |
+| `input` | [Optional[components.InputsUnion]](../../components/inputsunion.mdx) | :heavy_minus_sign: | Input for a response request - can be a string or array of items | [
\{
"content": "What is the weather today?",
"role": "user"
}
] |
+| `instructions` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `max_output_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
+| `max_tool_calls` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
+| `metadata` | Dict[str, *str*] | :heavy_minus_sign: | Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed. | \{
"session_id": "abc-def-ghi",
"user_id": "123"
} |
+| `modalities` | List[[components.OutputModalityEnum](../../components/outputmodalityenum.mdx)] | :heavy_minus_sign: | Output modalities for the response. Supported values are "text" and "image". | [
"text",
"image"
] |
+| `model` | *Optional[str]* | :heavy_minus_sign: | N/A | |
+| `models` | List[*str*] | :heavy_minus_sign: | N/A | |
+| `parallel_tool_calls` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
+| `plugins` | List[[components.ResponsesRequestPlugin](../../components/responsesrequestplugin.mdx)] | :heavy_minus_sign: | Plugins you want to enable for this request, including their settings. | |
+| `presence_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
+| `previous_response_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `prompt` | [OptionalNullable[components.StoredPromptTemplate]](../../components/storedprompttemplate.mdx) | :heavy_minus_sign: | N/A | \{
"id": "prompt-abc123",
"variables": \{
"name": "John"
}
} |
+| `prompt_cache_key` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.mdx) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | \{
"allow_fallbacks": true
} |
+| `reasoning` | [OptionalNullable[components.ReasoningConfig]](../../components/reasoningconfig.mdx) | :heavy_minus_sign: | Configuration for reasoning mode in the response | \{
"enabled": true,
"summary": "auto"
} |
+| `safety_identifier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
+| `service_tier` | [OptionalNullable[components.ResponsesRequestServiceTier]](../../components/responsesrequestservicetier.mdx) | :heavy_minus_sign: | N/A | |
+| `session_id` | *Optional[str]* | :heavy_minus_sign: | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | |
+| `stop_server_tools_when` | List[[components.StopServerToolsWhenCondition](../../components/stopservertoolswhencondition.mdx)] | :heavy_minus_sign: | Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`. | [
\{
"step_count": 5,
"type": "step_count_is"
},
\{
"max_cost_in_dollars": 0.5,
"type": "max_cost"
}
] |
+| `stream` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
+| `temperature` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
+| `text` | [Optional[components.TextExtendedConfig]](../../components/textextendedconfig.mdx) | :heavy_minus_sign: | Text output configuration including format and verbosity | \{
"format": \{
"type": "text"
}
} |
+| `tool_choice` | [Optional[components.OpenAIResponsesToolChoiceUnion]](../../components/openairesponsestoolchoiceunion.mdx) | :heavy_minus_sign: | N/A | auto |
+| `tools` | List[[components.ResponsesRequestToolUnion](../../components/responsesrequesttoolunion.mdx)] | :heavy_minus_sign: | N/A | |
+| `top_k` | *Optional[int]* | :heavy_minus_sign: | N/A | |
+| `top_logprobs` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
+| `top_p` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
+| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.mdx) | :heavy_minus_sign: | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
+| `truncation` | [OptionalNullable[components.OpenAIResponsesTruncation]](../../components/openairesponsestruncation.mdx) | :heavy_minus_sign: | N/A | auto |
+| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 256 characters. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.CreatePresetFromInferenceResponse](../../components/createpresetfrominferenceresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.ConflictResponseError | 409 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## list_versions
+
+Lists all versions of a preset, ordered by version number ascending (oldest first).
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.presets.list_versions(slug="my-preset")
+
+ while res is not None:
+ # Handle items
+
+ res = res.next()
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `slug` | *str* | :heavy_check_mark: | URL-safe slug identifying the preset. | my-preset |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[operations.ListPresetVersionsResponse](../../operations/listpresetversionsresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## get_version
+
+Retrieves a specific version of a preset by its slug and version number.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.presets.get_version(slug="my-preset", version="1")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `slug` | *str* | :heavy_check_mark: | URL-safe slug identifying the preset. | my-preset |
+| `version` | *str* | :heavy_check_mark: | Version number of the preset. | 1 |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.GetPresetVersionResponse](../../components/getpresetversionresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/providers/README.md b/docs/sdks/providers/README.mdx
similarity index 90%
rename from docs/sdks/providers/README.md
rename to docs/sdks/providers/README.mdx
index b414ebc..7571e25 100644
--- a/docs/sdks/providers/README.md
+++ b/docs/sdks/providers/README.mdx
@@ -1,4 +1,7 @@
-# Providers
+---
+title: "Providers"
+description: "Provider information endpoints"
+---
## Overview
@@ -14,7 +17,6 @@ List all providers
### Example Usage
-
```python
from openrouter import OpenRouter
import os
@@ -41,11 +43,11 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
### Response
-**[operations.ListProvidersResponse](../../operations/listprovidersresponse.md)**
+**[operations.ListProvidersResponse](../../operations/listprovidersresponse.mdx)**
### Errors
diff --git a/docs/sdks/rerank/README.mdx b/docs/sdks/rerank/README.mdx
new file mode 100644
index 0000000..cd1b341
--- /dev/null
+++ b/docs/sdks/rerank/README.mdx
@@ -0,0 +1,74 @@
+---
+title: "Rerank"
+description: "Rerank endpoints"
+---
+
+## Overview
+
+Rerank endpoints
+
+### Available Operations
+
+* [rerank](#rerank) - Submit a rerank request
+
+## rerank
+
+Submits a rerank request to the rerank router
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.rerank.rerank(documents=[
+ "Paris is the capital of France.",
+ "Berlin is the capital of Germany.",
+ ], model="cohere/rerank-v3.5", query="What is the capital of France?")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `documents` | List[[operations.Document](../../operations/document.mdx)] | :heavy_check_mark: | The list of documents to rerank. Documents may be plain strings, or structured objects with `text` and/or `image` for multimodal models. | [
"Paris is the capital of France.",
"Berlin is the capital of Germany."
] |
+| `model` | *str* | :heavy_check_mark: | The rerank model to use | cohere/rerank-v3.5 |
+| `query` | *str* | :heavy_check_mark: | The search query to rerank documents against | What is the capital of France? |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.mdx) | :heavy_minus_sign: | N/A | \{
"allow_fallbacks": true
} |
+| `top_n` | *Optional[int]* | :heavy_minus_sign: | Number of most relevant documents to return | 3 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[operations.CreateRerankResponse](../../operations/creatererankresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| -------------------------------------- | -------------------------------------- | -------------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.PaymentRequiredResponseError | 402 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.BadGatewayResponseError | 502 | application/json |
+| errors.ServiceUnavailableResponseError | 503 | application/json |
+| errors.EdgeNetworkTimeoutResponseError | 524 | application/json |
+| errors.ProviderOverloadedResponseError | 529 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/responses/README.md b/docs/sdks/responses/README.mdx
similarity index 89%
rename from docs/sdks/responses/README.md
rename to docs/sdks/responses/README.mdx
index c9601f1..03281f8 100644
--- a/docs/sdks/responses/README.md
+++ b/docs/sdks/responses/README.mdx
@@ -1,4 +1,7 @@
-# Beta.Responses
+---
+title: "Beta.Responses"
+description: "beta.responses endpoints"
+---
## Overview
@@ -12,9 +15,8 @@ beta.responses endpoints
Creates a streaming or non-streaming response using OpenResponses API format
-### Example Usage
+### Example Usage: guardrail-blocked
-
```python
from openrouter import OpenRouter
import os
@@ -27,7 +29,29 @@ with OpenRouter(
api_key=os.getenv("OPENROUTER_API_KEY", ""),
) as open_router:
- res = open_router.beta.responses.send(x_open_router_metadata="enabled", input="Tell me a joke", model="openai/gpt-4o", service_tier="auto", stream=False)
+ res = open_router.beta.responses.send(service_tier="auto", stream=False)
+
+ with res as event_stream:
+ for event in event_stream:
+ # handle event
+ print(event, flush=True)
+
+```
+### Example Usage: insufficient-permissions
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.beta.responses.send(service_tier="auto", stream=False)
with res as event_stream:
for event in event_stream:
@@ -43,49 +67,49 @@ with OpenRouter(
| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
-| `x_open_router_metadata` | [Optional[components.MetadataLevel]](../../components/metadatalevel.md) | :heavy_minus_sign: | Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility. | enabled |
+| `x_open_router_metadata` | [Optional[components.MetadataLevel]](../../components/metadatalevel.mdx) | :heavy_minus_sign: | Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility. | enabled |
| `background` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
-| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../../components/anthropiccachecontroldirective.md) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | {
"type": "ephemeral"
} |
-| `debug` | [Optional[components.ChatDebugOptions]](../../components/chatdebugoptions.md) | :heavy_minus_sign: | Debug options for inspecting request transformations (streaming only) | {
"echo_upstream_body": true
} |
+| `cache_control` | [Optional[components.AnthropicCacheControlDirective]](../../components/anthropiccachecontroldirective.mdx) | :heavy_minus_sign: | Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models. | \{
"type": "ephemeral"
} |
+| `debug` | [Optional[components.ChatDebugOptions]](../../components/chatdebugoptions.mdx) | :heavy_minus_sign: | Debug options for inspecting request transformations (streaming only) | \{
"echo_upstream_body": true
} |
| `frequency_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
-| `image_config` | Dict[str, [components.ImageConfig](../../components/imageconfig.md)] | :heavy_minus_sign: | Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details. | {
"aspect_ratio": "16:9",
"quality": "high"
} |
-| `include` | List[[components.ResponseIncludesEnum](../../components/responseincludesenum.md)] | :heavy_minus_sign: | N/A | |
-| `input` | [Optional[components.InputsUnion]](../../components/inputsunion.md) | :heavy_minus_sign: | Input for a response request - can be a string or array of items | [
{
"content": "What is the weather today?",
"role": "user"
}
] |
+| `image_config` | Dict[str, [components.ImageConfig](../../components/imageconfig.mdx)] | :heavy_minus_sign: | Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details. | \{
"aspect_ratio": "16:9",
"quality": "high"
} |
+| `include` | List[[components.ResponseIncludesEnum](../../components/responseincludesenum.mdx)] | :heavy_minus_sign: | N/A | |
+| `input` | [Optional[components.InputsUnion]](../../components/inputsunion.mdx) | :heavy_minus_sign: | Input for a response request - can be a string or array of items | [
\{
"content": "What is the weather today?",
"role": "user"
}
] |
| `instructions` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
| `max_output_tokens` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
| `max_tool_calls` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
-| `metadata` | Dict[str, *str*] | :heavy_minus_sign: | Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed. | {
"session_id": "abc-def-ghi",
"user_id": "123"
} |
-| `modalities` | List[[components.OutputModalityEnum](../../components/outputmodalityenum.md)] | :heavy_minus_sign: | Output modalities for the response. Supported values are "text" and "image". | [
"text",
"image"
] |
+| `metadata` | Dict[str, *str*] | :heavy_minus_sign: | Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed. | \{
"session_id": "abc-def-ghi",
"user_id": "123"
} |
+| `modalities` | List[[components.OutputModalityEnum](../../components/outputmodalityenum.mdx)] | :heavy_minus_sign: | Output modalities for the response. Supported values are "text" and "image". | [
"text",
"image"
] |
| `model` | *Optional[str]* | :heavy_minus_sign: | N/A | |
| `models` | List[*str*] | :heavy_minus_sign: | N/A | |
| `parallel_tool_calls` | *OptionalNullable[bool]* | :heavy_minus_sign: | N/A | |
-| `plugins` | List[[components.ResponsesRequestPlugin](../../components/responsesrequestplugin.md)] | :heavy_minus_sign: | Plugins you want to enable for this request, including their settings. | |
+| `plugins` | List[[components.ResponsesRequestPlugin](../../components/responsesrequestplugin.mdx)] | :heavy_minus_sign: | Plugins you want to enable for this request, including their settings. | |
| `presence_penalty` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
| `previous_response_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
-| `prompt` | [OptionalNullable[components.StoredPromptTemplate]](../../components/storedprompttemplate.md) | :heavy_minus_sign: | N/A | {
"id": "prompt-abc123",
"variables": {
"name": "John"
}
} |
+| `prompt` | [OptionalNullable[components.StoredPromptTemplate]](../../components/storedprompttemplate.mdx) | :heavy_minus_sign: | N/A | \{
"id": "prompt-abc123",
"variables": \{
"name": "John"
}
} |
| `prompt_cache_key` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
-| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.md) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | {
"allow_fallbacks": true
} |
-| `reasoning` | [OptionalNullable[components.ReasoningConfig]](../../components/reasoningconfig.md) | :heavy_minus_sign: | Configuration for reasoning mode in the response | {
"effort": "medium",
"summary": "auto"
} |
+| `provider` | [OptionalNullable[components.ProviderPreferences]](../../components/providerpreferences.mdx) | :heavy_minus_sign: | When multiple model providers are available, optionally indicate your routing preference. | \{
"allow_fallbacks": true
} |
+| `reasoning` | [OptionalNullable[components.ReasoningConfig]](../../components/reasoningconfig.mdx) | :heavy_minus_sign: | Configuration for reasoning mode in the response | \{
"enabled": true,
"summary": "auto"
} |
| `safety_identifier` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | |
-| `service_tier` | [OptionalNullable[components.ResponsesRequestServiceTier]](../../components/responsesrequestservicetier.md) | :heavy_minus_sign: | N/A | |
+| `service_tier` | [OptionalNullable[components.ResponsesRequestServiceTier]](../../components/responsesrequestservicetier.mdx) | :heavy_minus_sign: | N/A | |
| `session_id` | *Optional[str]* | :heavy_minus_sign: | A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters. | |
-| `stop_server_tools_when` | List[[components.StopServerToolsWhenCondition](../../components/stopservertoolswhencondition.md)] | :heavy_minus_sign: | Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`. | [
{
"step_count": 5,
"type": "step_count_is"
},
{
"max_cost_in_dollars": 0.5,
"type": "max_cost"
}
] |
+| `stop_server_tools_when` | List[[components.StopServerToolsWhenCondition](../../components/stopservertoolswhencondition.mdx)] | :heavy_minus_sign: | Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`. | [
\{
"step_count": 5,
"type": "step_count_is"
},
\{
"max_cost_in_dollars": 0.5,
"type": "max_cost"
}
] |
| `stream` | *Optional[bool]* | :heavy_minus_sign: | N/A | |
| `temperature` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
-| `text` | [Optional[components.TextExtendedConfig]](../../components/textextendedconfig.md) | :heavy_minus_sign: | Text output configuration including format and verbosity | {
"format": {
"type": "text"
},
"verbosity": "medium"
} |
-| `tool_choice` | [Optional[components.OpenAIResponsesToolChoiceUnion]](../../components/openairesponsestoolchoiceunion.md) | :heavy_minus_sign: | N/A | auto |
-| `tools` | List[[components.ResponsesRequestToolUnion](../../components/responsesrequesttoolunion.md)] | :heavy_minus_sign: | N/A | |
+| `text` | [Optional[components.TextExtendedConfig]](../../components/textextendedconfig.mdx) | :heavy_minus_sign: | Text output configuration including format and verbosity | \{
"format": \{
"type": "text"
}
} |
+| `tool_choice` | [Optional[components.OpenAIResponsesToolChoiceUnion]](../../components/openairesponsestoolchoiceunion.mdx) | :heavy_minus_sign: | N/A | auto |
+| `tools` | List[[components.ResponsesRequestToolUnion](../../components/responsesrequesttoolunion.mdx)] | :heavy_minus_sign: | N/A | |
| `top_k` | *Optional[int]* | :heavy_minus_sign: | N/A | |
| `top_logprobs` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | |
| `top_p` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | |
-| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.md) | :heavy_minus_sign: | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | {
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
-| `truncation` | [OptionalNullable[components.OpenAIResponsesTruncation]](../../components/openairesponsestruncation.md) | :heavy_minus_sign: | N/A | auto |
+| `trace` | [Optional[components.TraceConfig]](../../components/traceconfig.mdx) | :heavy_minus_sign: | Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations. | \{
"trace_id": "trace-abc123",
"trace_name": "my-app-trace"
} |
+| `truncation` | [OptionalNullable[components.OpenAIResponsesTruncation]](../../components/openairesponsestruncation.mdx) | :heavy_minus_sign: | N/A | auto |
| `user` | *Optional[str]* | :heavy_minus_sign: | A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 256 characters. | |
-| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
### Response
-**[operations.CreateResponsesResponse](../../operations/createresponsesresponse.md)**
+**[operations.CreateResponsesResponse](../../operations/createresponsesresponse.mdx)**
### Errors
diff --git a/docs/sdks/stt/README.mdx b/docs/sdks/stt/README.mdx
new file mode 100644
index 0000000..a5097c9
--- /dev/null
+++ b/docs/sdks/stt/README.mdx
@@ -0,0 +1,74 @@
+---
+title: "Stt"
+description: "Speech-to-text endpoints"
+---
+
+## Overview
+
+Speech-to-text endpoints
+
+### Available Operations
+
+* [create_transcription](#create_transcription) - Create transcription
+
+## create_transcription
+
+Transcribes audio into text. Accepts base64-encoded audio input and returns the transcribed text.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.stt.create_transcription(input_audio={
+ "data": "UklGRiQA...",
+ "format_": "wav",
+ }, model="openai/whisper-large-v3", language="en")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `input_audio` | [components.STTInputAudio](../../components/sttinputaudio.mdx) | :heavy_check_mark: | Base64-encoded audio to transcribe | \{
"data": "UklGRiQA...",
"format": "wav"
} |
+| `model` | *str* | :heavy_check_mark: | STT model identifier | openai/whisper-large-v3 |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `language` | *Optional[str]* | :heavy_minus_sign: | ISO-639-1 language code (e.g., "en", "ja"). Auto-detected if omitted. | en |
+| `provider` | [Optional[components.STTRequestProvider]](../../components/sttrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | |
+| `temperature` | *Optional[float]* | :heavy_minus_sign: | Sampling temperature for transcription | 0 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.STTResponse](../../components/sttresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| -------------------------------------- | -------------------------------------- | -------------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.PaymentRequiredResponseError | 402 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.BadGatewayResponseError | 502 | application/json |
+| errors.ServiceUnavailableResponseError | 503 | application/json |
+| errors.EdgeNetworkTimeoutResponseError | 524 | application/json |
+| errors.ProviderOverloadedResponseError | 529 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/tts/README.mdx b/docs/sdks/tts/README.mdx
new file mode 100644
index 0000000..ece7fa9
--- /dev/null
+++ b/docs/sdks/tts/README.mdx
@@ -0,0 +1,72 @@
+---
+title: "Tts"
+description: "Text-to-speech endpoints"
+---
+
+## Overview
+
+Text-to-speech endpoints
+
+### Available Operations
+
+* [create_speech](#create_speech) - Create speech
+
+## create_speech
+
+Synthesizes audio from the input text. Returns a raw audio bytestream in the requested format (e.g. mp3, pcm, wav).
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.tts.create_speech(input="Hello world", model="elevenlabs/eleven-turbo-v2", voice="alloy", response_format="pcm", speed=1)
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `input` | *str* | :heavy_check_mark: | Text to synthesize | Hello world |
+| `model` | *str* | :heavy_check_mark: | TTS model identifier | elevenlabs/eleven-turbo-v2 |
+| `voice` | *str* | :heavy_check_mark: | Voice identifier (provider-specific). | alloy |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `provider` | [Optional[components.SpeechRequestProvider]](../../components/speechrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | |
+| `response_format` | [Optional[components.ResponseFormatEnum]](../../components/responseformatenum.mdx) | :heavy_minus_sign: | Audio output format | pcm |
+| `speed` | *Optional[float]* | :heavy_minus_sign: | Playback speed multiplier. Only used by models that support it (e.g. OpenAI TTS). Ignored by other providers. | 1 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[httpx.Response](../../models/.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| -------------------------------------- | -------------------------------------- | -------------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.PaymentRequiredResponseError | 402 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.BadGatewayResponseError | 502 | application/json |
+| errors.ServiceUnavailableResponseError | 503 | application/json |
+| errors.EdgeNetworkTimeoutResponseError | 524 | application/json |
+| errors.ProviderOverloadedResponseError | 529 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/videogeneration/README.mdx b/docs/sdks/videogeneration/README.mdx
new file mode 100644
index 0000000..429ca7d
--- /dev/null
+++ b/docs/sdks/videogeneration/README.mdx
@@ -0,0 +1,222 @@
+---
+title: "VideoGeneration"
+description: "Video Generation endpoints"
+---
+
+## Overview
+
+Video Generation endpoints
+
+### Available Operations
+
+* [generate](#generate) - Submit a video generation request
+* [get_generation](#get_generation) - Poll video generation status
+* [get_video_content](#get_video_content) - Download generated video content
+* [list_videos_models](#list_videos_models) - List all video generation models
+
+## generate
+
+Submits a video generation request and returns a polling URL to check status
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.video_generation.generate(model="google/veo-3.1", prompt="A serene mountain landscape at sunset", aspect_ratio="16:9", duration=8, resolution="720p")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `model` | *str* | :heavy_check_mark: | N/A | |
+| `prompt` | *str* | :heavy_check_mark: | N/A | |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `aspect_ratio` | [Optional[components.VideoGenerationRequestAspectRatio]](../../components/videogenerationrequestaspectratio.mdx) | :heavy_minus_sign: | Aspect ratio of the generated video | 16:9 |
+| `callback_url` | *Optional[str]* | :heavy_minus_sign: | URL to receive a webhook notification when the video generation job completes. Overrides the workspace-level default callback URL if set. Must be HTTPS. | https://example.com/webhook |
+| `duration` | *Optional[int]* | :heavy_minus_sign: | Duration of the generated video in seconds | 8 |
+| `frame_images` | List[[components.FrameImage](../../components/frameimage.mdx)] | :heavy_minus_sign: | Images to use as the first and/or last frame of the generated video. Each image must specify a frame_type of first_frame or last_frame. | |
+| `generate_audio` | *Optional[bool]* | :heavy_minus_sign: | Whether to generate audio alongside the video. Defaults to the endpoint's generate_audio capability flag, false if not set. | true |
+| `input_references` | List[[components.InputReference](../../components/inputreference.mdx)] | :heavy_minus_sign: | Reference assets to guide video generation. Accepts image, audio, and video references. Audio and video references are only honored by providers that support them (currently BytePlus Seedance 2.0); other providers use image references and ignore the rest. | |
+| `provider` | [Optional[components.VideoGenerationRequestProvider]](../../components/videogenerationrequestprovider.mdx) | :heavy_minus_sign: | Provider-specific passthrough configuration | |
+| `resolution` | [Optional[components.VideoGenerationRequestResolution]](../../components/videogenerationrequestresolution.mdx) | :heavy_minus_sign: | Resolution of the generated video | 720p |
+| `seed` | *Optional[int]* | :heavy_minus_sign: | If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers. | |
+| `size` | *Optional[str]* | :heavy_minus_sign: | Exact pixel dimensions of the generated video in "WIDTHxHEIGHT" format (e.g. "1280x720"). Interchangeable with resolution + aspect_ratio. | 1280x720 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.VideoGenerationResponse](../../components/videogenerationresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ----------------------------------- | ----------------------------------- | ----------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.PaymentRequiredResponseError | 402 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.TooManyRequestsResponseError | 429 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## get_generation
+
+Returns job status and content URLs when completed
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.video_generation.get_generation(job_id="job-abc123")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `job_id` | *str* | :heavy_check_mark: | N/A | job-abc123 |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.VideoGenerationResponse](../../components/videogenerationresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## get_video_content
+
+Streams the generated video content from the upstream provider
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.video_generation.get_video_content(job_id="job-abc123", index=0)
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `job_id` | *str* | :heavy_check_mark: | N/A | job-abc123 |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `index` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | 0 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[httpx.Response](../../models/.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.BadGatewayResponseError | 502 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## list_videos_models
+
+Returns a list of all available video generation models and their properties
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.video_generation.list_videos_models()
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
|
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
|
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. |
+
+### Response
+
+**[components.VideoModelsListResponse](../../components/videomodelslistresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/docs/sdks/workspaces/README.mdx b/docs/sdks/workspaces/README.mdx
new file mode 100644
index 0000000..37f2346
--- /dev/null
+++ b/docs/sdks/workspaces/README.mdx
@@ -0,0 +1,599 @@
+---
+title: "Workspaces"
+description: "Workspaces endpoints"
+---
+
+## Overview
+
+Workspaces endpoints
+
+### Available Operations
+
+* [list](#list) - List workspaces
+* [create](#create) - Create a workspace
+* [delete](#delete) - Delete a workspace
+* [get](#get) - Get a workspace
+* [update](#update) - Update a workspace
+* [list_budgets](#list_budgets) - List workspace budgets
+* [delete_budget](#delete_budget) - Delete a workspace budget
+* [set_budget](#set_budget) - Create or update a workspace budget
+* [list_members](#list_members) - List workspace members
+* [bulk_add_members](#bulk_add_members) - Bulk add members to a workspace
+* [bulk_remove_members](#bulk_remove_members) - Bulk remove members from a workspace
+
+## list
+
+List all workspaces for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.workspaces.list()
+
+ while res is not None:
+ # Handle items
+
+ res = res.next()
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[operations.ListWorkspacesResponse](../../operations/listworkspacesresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## create
+
+Create a new workspace for the authenticated user. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.workspaces.create(name="Production", slug="production", default_image_model="openai/dall-e-3", default_provider_sort="price", default_text_model="openai/gpt-4o", description="Production environment workspace")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `name` | *str* | :heavy_check_mark: | Name for the new workspace | Production |
+| `slug` | *str* | :heavy_check_mark: | URL-friendly slug (lowercase alphanumeric segments separated by single hyphens, no leading/trailing hyphens) | production |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `default_image_model` | *OptionalNullable[str]* | :heavy_minus_sign: | Default image model for this workspace | openai/dall-e-3 |
+| `default_provider_sort` | *OptionalNullable[str]* | :heavy_minus_sign: | Default provider sort preference (price, throughput, latency, exacto) | price |
+| `default_text_model` | *OptionalNullable[str]* | :heavy_minus_sign: | Default text model for this workspace | openai/gpt-4o |
+| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | Description of the workspace | Production environment workspace |
+| `io_logging_api_key_ids` | List[*int*] | :heavy_minus_sign: | Optional array of API key IDs to filter I/O logging | null |
+| `io_logging_sampling_rate` | *Optional[float]* | :heavy_minus_sign: | Sampling rate for I/O logging (0.0001-1) | 1 |
+| `is_data_discount_logging_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether data discount logging is enabled | true |
+| `is_observability_broadcast_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether broadcast is enabled | false |
+| `is_observability_io_logging_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether private logging is enabled | false |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.CreateWorkspaceResponse](../../components/createworkspaceresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## delete
+
+Delete an existing workspace. The default workspace cannot be deleted. Workspaces with active API keys cannot be deleted; remove the keys first. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.workspaces.delete(id="production")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.DeleteWorkspaceResponse](../../components/deleteworkspaceresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## get
+
+Get a single workspace by ID or slug. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.workspaces.get(id="production")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.GetWorkspaceResponse](../../components/getworkspaceresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## update
+
+Update an existing workspace by ID or slug. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.workspaces.update(id="production", name="Updated Workspace", slug="updated-workspace")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `default_image_model` | *OptionalNullable[str]* | :heavy_minus_sign: | Default image model for this workspace | openai/dall-e-3 |
+| `default_provider_sort` | *OptionalNullable[str]* | :heavy_minus_sign: | Default provider sort preference (price, throughput, latency, exacto) | price |
+| `default_text_model` | *OptionalNullable[str]* | :heavy_minus_sign: | Default text model for this workspace | openai/gpt-4o |
+| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | New description for the workspace | Updated description |
+| `io_logging_api_key_ids` | List[*int*] | :heavy_minus_sign: | Optional array of API key IDs to filter I/O logging | null |
+| `io_logging_sampling_rate` | *Optional[float]* | :heavy_minus_sign: | Sampling rate for I/O logging (0.0001-1) | 1 |
+| `is_data_discount_logging_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether data discount logging is enabled | true |
+| `is_observability_broadcast_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether broadcast is enabled | false |
+| `is_observability_io_logging_enabled` | *Optional[bool]* | :heavy_minus_sign: | Whether private logging is enabled | false |
+| `name` | *Optional[str]* | :heavy_minus_sign: | New name for the workspace | Updated Workspace |
+| `slug` | *Optional[str]* | :heavy_minus_sign: | New URL-friendly slug (lowercase alphanumeric segments separated by single hyphens, no leading/trailing hyphens) | updated-workspace |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.UpdateWorkspaceResponse](../../components/updateworkspaceresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## list_budgets
+
+List all budgets configured for a workspace. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.workspaces.list_budgets(id="production")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.ListWorkspaceBudgetsResponse](../../components/listworkspacebudgetsresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## delete_budget
+
+Remove the budget for a given interval. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.workspaces.delete_budget(id="production", interval="monthly")
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `interval` | [components.WorkspaceBudgetInterval](../../components/workspacebudgetinterval.mdx) | :heavy_check_mark: | Budget reset interval. Use "lifetime" for a one-time budget that never resets. | monthly |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.DeleteWorkspaceBudgetResponse](../../components/deleteworkspacebudgetresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## set_budget
+
+Create or update the budget for a given interval. Budget limits must strictly decrease as the interval narrows (lifetime > monthly > weekly > daily). [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.workspaces.set_budget(id="production", interval="monthly", limit_usd=100)
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `interval` | [components.WorkspaceBudgetInterval](../../components/workspacebudgetinterval.mdx) | :heavy_check_mark: | Budget reset interval. Use "lifetime" for a one-time budget that never resets. | monthly |
+| `limit_usd` | *float* | :heavy_check_mark: | Spending limit in USD. Must be greater than 0. | 100 |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.UpsertWorkspaceBudgetResponse](../../components/upsertworkspacebudgetresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## list_members
+
+List all members of a workspace. Returns paginated results. For the default workspace, returns all organization members (implicit membership). [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.workspaces.list_members(id="production")
+
+ while res is not None:
+ # Handle items
+
+ res = res.next()
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `offset` | *Optional[int]* | :heavy_minus_sign: | Number of records to skip for pagination | 0 |
+| `limit` | *Optional[int]* | :heavy_minus_sign: | Maximum number of records to return (max 100) | 50 |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[operations.ListWorkspaceMembersResponse](../../operations/listworkspacemembersresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## bulk_add_members
+
+Add multiple organization members to a workspace. Members are assigned the same role they hold in the organization. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.workspaces.bulk_add_members(id="production", user_ids=[
+ "user_abc123",
+ "user_def456",
+ ])
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `user_ids` | List[*str*] | :heavy_check_mark: | List of user IDs to add to the workspace. Members are assigned the same role they hold in the organization. | [
"user_abc123",
"user_def456"
] |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.BulkAddWorkspaceMembersResponse](../../components/bulkaddworkspacemembersresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
+
+## bulk_remove_members
+
+Remove multiple members from a workspace. Members with active API keys in the workspace cannot be removed. [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+### Example Usage
+
+```python
+from openrouter import OpenRouter
+import os
+
+
+with OpenRouter(
+ http_referer="",
+ x_open_router_title="",
+ x_open_router_categories="",
+ api_key=os.getenv("OPENROUTER_API_KEY", ""),
+) as open_router:
+
+ res = open_router.workspaces.bulk_remove_members(id="production", user_ids=[
+ "user_abc123",
+ "user_def456",
+ ])
+
+ # Handle response
+ print(res)
+
+```
+
+### Parameters
+
+| Parameter | Type | Required | Description | Example |
+| ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | *str* | :heavy_check_mark: | The workspace ID (UUID) or slug | production |
+| `user_ids` | List[*str*] | :heavy_check_mark: | List of user IDs to remove from the workspace | [
"user_abc123",
"user_def456"
] |
+| `http_referer` | *Optional[str]* | :heavy_minus_sign: | 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]* | :heavy_minus_sign: | The app display name allows you to customize how your app appears in OpenRouter's dashboard.
| |
+| `x_open_router_categories` | *Optional[str]* | :heavy_minus_sign: | Comma-separated list of app categories (e.g. "cli-agent,cloud-agent"). Used for marketplace rankings.
| |
+| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.mdx) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | |
+
+### Response
+
+**[components.BulkRemoveWorkspaceMembersResponse](../../components/bulkremoveworkspacemembersresponse.mdx)**
+
+### Errors
+
+| Error Type | Status Code | Content Type |
+| ---------------------------------- | ---------------------------------- | ---------------------------------- |
+| errors.BadRequestResponseError | 400 | application/json |
+| errors.UnauthorizedResponseError | 401 | application/json |
+| errors.ForbiddenResponseError | 403 | application/json |
+| errors.NotFoundResponseError | 404 | application/json |
+| errors.InternalServerResponseError | 500 | application/json |
+| errors.OpenRouterDefaultError | 4XX, 5XX | \*/\* |
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index 2c73ae5..0ee40fc 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,15 +1,15 @@
[project]
name = "openrouter"
-version = "0.10.8"
+version = "0.11.3"
description = "Official Python Client SDK for OpenRouter."
authors = [{ name = "OpenRouter" },]
readme = "README-PYPI.md"
-requires-python = ">=3.9.2"
+requires-python = ">=3.10"
dependencies = [
"httpcore >=1.0.9",
"httpx >=0.28.1",
"jsonpath-python >=1.0.6",
- "pydantic >=2.11.2",
+ "pydantic >=2.11.2,<2.13",
]
urls.repository = "https://github.com/OpenRouterTeam/python-sdk.git"
license = { text = "Apache-2.0" }
diff --git a/scripts/gen-docs-nav.sh b/scripts/gen-docs-nav.sh
new file mode 100755
index 0000000..f043870
--- /dev/null
+++ b/scripts/gen-docs-nav.sh
@@ -0,0 +1,53 @@
+#!/usr/bin/env bash
+# Regenerate docs/docs.json navigation from the service pages Speakeasy emits
+# under docs/sdks//README.mdx.
+#
+# The docs.json exposes a flat `navigation.pages` array so it can be mounted
+# into the base docs site via a `sourceRef` inside a `pages` context (Mintlify
+# requires the referenced source to define the same navigation type as the slot
+# it is mounted into). The array is: the "overview" page first, then every
+# service page sorted alphabetically by tag.
+#
+# Run after `speakeasy run` so new API sections appear without hand-editing
+# docs.json. Only `navigation.pages` is rewritten; $schema/theme/name/colors
+# are preserved. Idempotent: no doc changes -> byte-identical output.
+#
+# Requires: bash, jq. No network, no toolchain.
+set -euo pipefail
+
+ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+cd "$ROOT"
+
+DOCS_JSON="docs/docs.json"
+OVERVIEW="overview"
+
+if [[ ! -f "$DOCS_JSON" ]]; then
+ echo "missing $DOCS_JSON" >&2
+ exit 1
+fi
+
+# Collect service page paths (docs.json paths are doc-root-relative, no
+# extension), sorted alphabetically by tag.
+pages=()
+# Lead with the overview landing page when present.
+[[ -f "docs/${OVERVIEW}.mdx" ]] && pages+=("$OVERVIEW")
+while IFS= read -r readme; do
+ # docs/sdks//README.mdx -> sdks//README
+ rel="${readme#docs/}"
+ pages+=("${rel%.mdx}")
+done < <(find docs/sdks -mindepth 2 -maxdepth 2 -name 'README.mdx' | sort)
+
+if ((${#pages[@]} == 0)); then
+ echo "no pages found (missing docs/${OVERVIEW}.mdx and docs/sdks/*/README.mdx)" >&2
+ exit 1
+fi
+
+pages_json="$(printf '%s\n' "${pages[@]}" | jq -R . | jq -s .)"
+
+tmp="$(mktemp)"
+jq --indent 2 --argjson pages "$pages_json" '
+ .navigation = {pages: $pages}
+' "$DOCS_JSON" >"$tmp"
+
+mv "$tmp" "$DOCS_JSON"
+echo "updated $DOCS_JSON: ${#pages[@]} pages in navigation.pages"
diff --git a/src/openrouter/_hooks/types.py b/src/openrouter/_hooks/types.py
index 07ace03..86713cf 100644
--- a/src/openrouter/_hooks/types.py
+++ b/src/openrouter/_hooks/types.py
@@ -3,7 +3,7 @@
from abc import ABC, abstractmethod
import httpx
from openrouter.sdkconfiguration import SDKConfiguration
-from typing import Any, Callable, List, Optional, Tuple, Union
+from typing import Any, Callable, Dict, List, Optional, Tuple, Union
class HookContext:
@@ -12,6 +12,8 @@ class HookContext:
operation_id: str
oauth2_scopes: Optional[List[str]] = None
security_source: Optional[Union[Any, Callable[[], Any]]] = None
+ tags: Optional[List[str]] = None
+ extensions: Optional[Dict[str, Any]] = None
def __init__(
self,
@@ -20,12 +22,16 @@ class HookContext:
operation_id: str,
oauth2_scopes: Optional[List[str]],
security_source: Optional[Union[Any, Callable[[], Any]]],
+ tags: Optional[List[str]],
+ extensions: Optional[Dict[str, Any]],
):
self.config = config
self.base_url = base_url
self.operation_id = operation_id
self.oauth2_scopes = oauth2_scopes
self.security_source = security_source
+ self.tags = tags
+ self.extensions = extensions
class BeforeRequestContext(HookContext):
@@ -36,6 +42,8 @@ class BeforeRequestContext(HookContext):
hook_ctx.operation_id,
hook_ctx.oauth2_scopes,
hook_ctx.security_source,
+ hook_ctx.tags,
+ hook_ctx.extensions,
)
@@ -47,6 +55,8 @@ class AfterSuccessContext(HookContext):
hook_ctx.operation_id,
hook_ctx.oauth2_scopes,
hook_ctx.security_source,
+ hook_ctx.tags,
+ hook_ctx.extensions,
)
@@ -58,6 +68,8 @@ class AfterErrorContext(HookContext):
hook_ctx.operation_id,
hook_ctx.oauth2_scopes,
hook_ctx.security_source,
+ hook_ctx.tags,
+ hook_ctx.extensions,
)
diff --git a/src/openrouter/_version.py b/src/openrouter/_version.py
index ae046a1..c226327 100644
--- a/src/openrouter/_version.py
+++ b/src/openrouter/_version.py
@@ -3,10 +3,10 @@
import importlib.metadata
__title__: str = "openrouter"
-__version__: str = "0.10.8"
+__version__: str = "0.11.3"
__openapi_doc_version__: str = "1.0.0"
-__gen_version__: str = "2.788.4"
-__user_agent__: str = "speakeasy-sdk/python 0.10.8 2.788.4 1.0.0 openrouter"
+__gen_version__: str = "2.914.0"
+__user_agent__: str = "speakeasy-sdk/python 0.11.3 2.914.0 1.0.0 openrouter"
try:
if __package__ is not None:
diff --git a/src/openrouter/analytics.py b/src/openrouter/analytics.py
index ea004ea..ddb44a1 100644
--- a/src/openrouter/analytics.py
+++ b/src/openrouter/analytics.py
@@ -107,9 +107,11 @@ class Analytics(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Analytics"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -249,9 +251,11 @@ class Analytics(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Analytics"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/api_keys.py b/src/openrouter/api_keys.py
index 6c2cdf7..76eafbc 100644
--- a/src/openrouter/api_keys.py
+++ b/src/openrouter/api_keys.py
@@ -99,9 +99,11 @@ class APIKeys(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["API Keys"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -217,9 +219,11 @@ class APIKeys(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["API Keys"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -344,9 +348,11 @@ class APIKeys(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["API Keys"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -476,9 +482,11 @@ class APIKeys(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["API Keys"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -629,9 +637,11 @@ class APIKeys(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["API Keys"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -792,9 +802,11 @@ class APIKeys(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["API Keys"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -928,9 +940,11 @@ class APIKeys(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["API Keys"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1059,9 +1073,11 @@ class APIKeys(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["API Keys"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1190,9 +1206,11 @@ class APIKeys(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["API Keys"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1321,9 +1339,11 @@ class APIKeys(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["API Keys"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1476,9 +1496,11 @@ class APIKeys(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["API Keys"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1636,9 +1658,11 @@ class APIKeys(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["API Keys"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/basesdk.py b/src/openrouter/basesdk.py
index fcffdcc..7a562e2 100644
--- a/src/openrouter/basesdk.py
+++ b/src/openrouter/basesdk.py
@@ -7,8 +7,14 @@ from openrouter._hooks import (
AfterErrorContext,
AfterSuccessContext,
BeforeRequestContext,
+ HookContext,
+)
+from openrouter.utils import (
+ RetryConfig,
+ SerializedRequestBody,
+ get_body_content,
+ run_sync_in_thread,
)
-from openrouter.utils import RetryConfig, SerializedRequestBody, get_body_content
from typing import Callable, List, Mapping, Optional, Tuple
from urllib.parse import parse_qs, urlparse
@@ -61,6 +67,7 @@ class BaseSDK:
url_override: Optional[str] = None,
http_headers: Optional[Mapping[str, str]] = None,
allow_empty_value: Optional[List[str]] = None,
+ allowed_fields: Optional[List[str]] = None,
) -> httpx.Request:
client = self.sdk_configuration.async_client
return self._build_request_with_client(
@@ -82,6 +89,7 @@ class BaseSDK:
url_override,
http_headers,
allow_empty_value,
+ allowed_fields,
)
def _build_request(
@@ -105,6 +113,7 @@ class BaseSDK:
url_override: Optional[str] = None,
http_headers: Optional[Mapping[str, str]] = None,
allow_empty_value: Optional[List[str]] = None,
+ allowed_fields: Optional[List[str]] = None,
) -> httpx.Request:
client = self.sdk_configuration.client
return self._build_request_with_client(
@@ -126,6 +135,7 @@ class BaseSDK:
url_override,
http_headers,
allow_empty_value,
+ allowed_fields,
)
def _build_request_with_client(
@@ -150,6 +160,7 @@ class BaseSDK:
url_override: Optional[str] = None,
http_headers: Optional[Mapping[str, str]] = None,
allow_empty_value: Optional[List[str]] = None,
+ allowed_fields: Optional[List[str]] = None,
) -> httpx.Request:
query_params = {}
@@ -183,7 +194,9 @@ class BaseSDK:
security = security()
security = utils.get_security_from_env(security, components.Security)
if security is not None:
- security_headers, security_query_params = utils.get_security(security)
+ security_headers, security_query_params = utils.get_security(
+ security, allowed_fields
+ )
headers = {**headers, **security_headers}
query_params = {**query_params, **security_query_params}
@@ -220,15 +233,15 @@ class BaseSDK:
data=serialized_request_body.data,
files=serialized_request_body.files,
headers=headers,
- timeout=timeout,
+ timeout=timeout if timeout is not None else httpx.USE_CLIENT_DEFAULT,
)
def do_request(
self,
- hook_ctx,
- request,
- error_status_codes,
- stream=False,
+ hook_ctx: HookContext,
+ request: httpx.Request,
+ is_error_status_code: Callable[[int], bool],
+ stream: bool = False,
retry_config: Optional[Tuple[RetryConfig, List[str]]] = None,
) -> httpx.Response:
client = self.sdk_configuration.client
@@ -240,6 +253,8 @@ class BaseSDK:
http_res = None
try:
req = hooks.before_request(BeforeRequestContext(hook_ctx), request)
+ if "timeout" in request.extensions and "timeout" not in req.extensions:
+ req.extensions["timeout"] = request.extensions["timeout"]
logger.debug(
"Request:\nMethod: %s\nURL: %s\nHeaders: %s\nBody: %s",
req.method,
@@ -270,21 +285,6 @@ class BaseSDK:
"" if stream else http_res.text,
)
- if utils.match_status_codes(error_status_codes, http_res.status_code):
- result, err = hooks.after_error(
- AfterErrorContext(hook_ctx), http_res, None
- )
- if err is not None:
- logger.debug("Request Exception", exc_info=True)
- raise err
- if result is not None:
- http_res = result
- else:
- logger.debug("Raising unexpected SDK error")
- raise errors.OpenRouterDefaultError(
- "Unexpected error occurred", http_res
- )
-
return http_res
if retry_config is not None:
@@ -292,17 +292,29 @@ class BaseSDK:
else:
http_res = do()
- if not utils.match_status_codes(error_status_codes, http_res.status_code):
+ if is_error_status_code(http_res.status_code):
+ result, err = hooks.after_error(AfterErrorContext(hook_ctx), http_res, None)
+ if err is not None:
+ logger.debug("Request Exception", exc_info=True)
+ raise err
+ if result is not None:
+ http_res = result
+ else:
+ logger.debug("Raising unexpected SDK error")
+ raise errors.OpenRouterDefaultError(
+ "Unexpected error occurred", http_res
+ )
+ else:
http_res = hooks.after_success(AfterSuccessContext(hook_ctx), http_res)
return http_res
async def do_request_async(
self,
- hook_ctx,
- request,
- error_status_codes,
- stream=False,
+ hook_ctx: HookContext,
+ request: httpx.Request,
+ is_error_status_code: Callable[[int], bool],
+ stream: bool = False,
retry_config: Optional[Tuple[RetryConfig, List[str]]] = None,
) -> httpx.Response:
client = self.sdk_configuration.async_client
@@ -313,7 +325,12 @@ class BaseSDK:
async def do():
http_res = None
try:
- req = hooks.before_request(BeforeRequestContext(hook_ctx), request)
+ req = await run_sync_in_thread(
+ hooks.before_request, BeforeRequestContext(hook_ctx), request
+ )
+
+ if "timeout" in request.extensions and "timeout" not in req.extensions:
+ req.extensions["timeout"] = request.extensions["timeout"]
logger.debug(
"Request:\nMethod: %s\nURL: %s\nHeaders: %s\nBody: %s",
req.method,
@@ -327,7 +344,10 @@ class BaseSDK:
http_res = await client.send(req, stream=stream)
except Exception as e:
- _, e = hooks.after_error(AfterErrorContext(hook_ctx), None, e)
+ _, e = await run_sync_in_thread(
+ hooks.after_error, AfterErrorContext(hook_ctx), None, e
+ )
+
if e is not None:
logger.debug("Request Exception", exc_info=True)
raise e
@@ -344,21 +364,6 @@ class BaseSDK:
"" if stream else http_res.text,
)
- if utils.match_status_codes(error_status_codes, http_res.status_code):
- result, err = hooks.after_error(
- AfterErrorContext(hook_ctx), http_res, None
- )
- if err is not None:
- logger.debug("Request Exception", exc_info=True)
- raise err
- if result is not None:
- http_res = result
- else:
- logger.debug("Raising unexpected SDK error")
- raise errors.OpenRouterDefaultError(
- "Unexpected error occurred", http_res
- )
-
return http_res
if retry_config is not None:
@@ -368,7 +373,24 @@ class BaseSDK:
else:
http_res = await do()
- if not utils.match_status_codes(error_status_codes, http_res.status_code):
- http_res = hooks.after_success(AfterSuccessContext(hook_ctx), http_res)
+ if is_error_status_code(http_res.status_code):
+ result, err = await run_sync_in_thread(
+ hooks.after_error, AfterErrorContext(hook_ctx), http_res, None
+ )
+
+ if err is not None:
+ logger.debug("Request Exception", exc_info=True)
+ raise err
+ if result is not None:
+ http_res = result
+ else:
+ logger.debug("Raising unexpected SDK error")
+ raise errors.OpenRouterDefaultError(
+ "Unexpected error occurred", http_res
+ )
+ else:
+ http_res = await run_sync_in_thread(
+ hooks.after_success, AfterSuccessContext(hook_ctx), http_res
+ )
return http_res
diff --git a/src/openrouter/benchmarks.py b/src/openrouter/benchmarks.py
index d29a685..1b503c8 100644
--- a/src/openrouter/benchmarks.py
+++ b/src/openrouter/benchmarks.py
@@ -113,9 +113,11 @@ class Benchmarks(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Benchmarks"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -258,9 +260,11 @@ class Benchmarks(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Benchmarks"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/beta_analytics.py b/src/openrouter/beta_analytics.py
index 9db10e8..bcf5829 100644
--- a/src/openrouter/beta_analytics.py
+++ b/src/openrouter/beta_analytics.py
@@ -6,7 +6,7 @@ from openrouter._hooks import HookContext
from openrouter.types import OptionalNullable, UNSET
from openrouter.utils import get_security_from_env
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
-from typing import Any, List, Mapping, Optional, Union
+from typing import Any, Iterable, List, Mapping, Optional, Union
class BetaAnalytics(BaseSDK):
@@ -98,9 +98,11 @@ class BetaAnalytics(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["beta.Analytics"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "403", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -223,9 +225,11 @@ class BetaAnalytics(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["beta.Analytics"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "403", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -265,13 +269,13 @@ class BetaAnalytics(BaseSDK):
def query_analytics(
self,
*,
- metrics: List[str],
+ metrics: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- dimensions: Optional[List[str]] = None,
+ dimensions: Optional[Iterable[str]] = None,
filters: Optional[
- Union[List[operations.Filter], List[operations.FilterTypedDict]]
+ Union[Iterable[operations.Filter], Iterable[operations.FilterTypedDict]]
] = None,
granularity: Optional[str] = None,
group_limit: Optional[int] = None,
@@ -326,14 +330,14 @@ class BetaAnalytics(BaseSDK):
x_open_router_title=x_open_router_title,
x_open_router_categories=x_open_router_categories,
request_body=operations.QueryAnalyticsRequestBody(
- dimensions=dimensions,
+ dimensions=utils.unmarshal(dimensions, Optional[List[str]]),
filters=utils.get_pydantic_model(
filters, Optional[List[operations.Filter]]
),
granularity=granularity,
group_limit=group_limit,
limit=limit,
- metrics=metrics,
+ metrics=utils.unmarshal(metrics, List[str]),
order_by=utils.get_pydantic_model(
order_by, Optional[operations.OrderBy]
),
@@ -393,9 +397,11 @@ class BetaAnalytics(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["beta.Analytics"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "408", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -443,13 +449,13 @@ class BetaAnalytics(BaseSDK):
async def query_analytics_async(
self,
*,
- metrics: List[str],
+ metrics: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- dimensions: Optional[List[str]] = None,
+ dimensions: Optional[Iterable[str]] = None,
filters: Optional[
- Union[List[operations.Filter], List[operations.FilterTypedDict]]
+ Union[Iterable[operations.Filter], Iterable[operations.FilterTypedDict]]
] = None,
granularity: Optional[str] = None,
group_limit: Optional[int] = None,
@@ -504,14 +510,14 @@ class BetaAnalytics(BaseSDK):
x_open_router_title=x_open_router_title,
x_open_router_categories=x_open_router_categories,
request_body=operations.QueryAnalyticsRequestBody(
- dimensions=dimensions,
+ dimensions=utils.unmarshal(dimensions, Optional[List[str]]),
filters=utils.get_pydantic_model(
filters, Optional[List[operations.Filter]]
),
granularity=granularity,
group_limit=group_limit,
limit=limit,
- metrics=metrics,
+ metrics=utils.unmarshal(metrics, List[str]),
order_by=utils.get_pydantic_model(
order_by, Optional[operations.OrderBy]
),
@@ -571,9 +577,11 @@ class BetaAnalytics(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["beta.Analytics"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "408", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/byok.py b/src/openrouter/byok.py
index e915cbb..fcbfd1a 100644
--- a/src/openrouter/byok.py
+++ b/src/openrouter/byok.py
@@ -7,7 +7,7 @@ from openrouter._hooks import HookContext
from openrouter.types import OptionalNullable, UNSET
from openrouter.utils import get_security_from_env
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
-from typing import Any, Awaitable, Dict, List, Mapping, Optional, Union
+from typing import Any, Awaitable, Dict, Iterable, List, Mapping, Optional, Union
class Byok(BaseSDK):
@@ -111,24 +111,26 @@ class Byok(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["BYOK"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.ListBYOKKeysResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
@@ -141,6 +143,9 @@ class Byok(BaseSDK):
workspace_id=workspace_id,
provider=provider,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -272,9 +277,11 @@ class Byok(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["BYOK"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -284,15 +291,15 @@ class Byok(BaseSDK):
async def empty_result():
return None
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
@@ -305,6 +312,9 @@ class Byok(BaseSDK):
workspace_id=workspace_id,
provider=provider,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -346,8 +356,8 @@ class Byok(BaseSDK):
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- allowed_models: OptionalNullable[List[str]] = UNSET,
- allowed_user_ids: OptionalNullable[List[str]] = UNSET,
+ allowed_models: OptionalNullable[Iterable[str]] = UNSET,
+ allowed_user_ids: OptionalNullable[Iterable[str]] = UNSET,
disabled: Optional[bool] = None,
is_fallback: Optional[bool] = None,
name: OptionalNullable[str] = UNSET,
@@ -396,8 +406,12 @@ class Byok(BaseSDK):
x_open_router_title=x_open_router_title,
x_open_router_categories=x_open_router_categories,
create_byok_key_request=components.CreateBYOKKeyRequest(
- allowed_models=allowed_models,
- allowed_user_ids=allowed_user_ids,
+ allowed_models=utils.unmarshal(
+ allowed_models, OptionalNullable[List[str]]
+ ),
+ allowed_user_ids=utils.unmarshal(
+ allowed_user_ids, OptionalNullable[List[str]]
+ ),
disabled=disabled,
is_fallback=is_fallback,
key=key,
@@ -457,9 +471,11 @@ class Byok(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["BYOK"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -507,8 +523,8 @@ class Byok(BaseSDK):
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- allowed_models: OptionalNullable[List[str]] = UNSET,
- allowed_user_ids: OptionalNullable[List[str]] = UNSET,
+ allowed_models: OptionalNullable[Iterable[str]] = UNSET,
+ allowed_user_ids: OptionalNullable[Iterable[str]] = UNSET,
disabled: Optional[bool] = None,
is_fallback: Optional[bool] = None,
name: OptionalNullable[str] = UNSET,
@@ -557,8 +573,12 @@ class Byok(BaseSDK):
x_open_router_title=x_open_router_title,
x_open_router_categories=x_open_router_categories,
create_byok_key_request=components.CreateBYOKKeyRequest(
- allowed_models=allowed_models,
- allowed_user_ids=allowed_user_ids,
+ allowed_models=utils.unmarshal(
+ allowed_models, OptionalNullable[List[str]]
+ ),
+ allowed_user_ids=utils.unmarshal(
+ allowed_user_ids, OptionalNullable[List[str]]
+ ),
disabled=disabled,
is_fallback=is_fallback,
key=key,
@@ -618,9 +638,11 @@ class Byok(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["BYOK"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -749,9 +771,11 @@ class Byok(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["BYOK"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -875,9 +899,11 @@ class Byok(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["BYOK"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1001,9 +1027,11 @@ class Byok(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["BYOK"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1127,9 +1155,11 @@ class Byok(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["BYOK"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1171,8 +1201,8 @@ class Byok(BaseSDK):
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- allowed_models: OptionalNullable[List[str]] = UNSET,
- allowed_user_ids: OptionalNullable[List[str]] = UNSET,
+ allowed_models: OptionalNullable[Iterable[str]] = UNSET,
+ allowed_user_ids: OptionalNullable[Iterable[str]] = UNSET,
disabled: Optional[bool] = None,
is_fallback: Optional[bool] = None,
key: Optional[str] = None,
@@ -1221,8 +1251,12 @@ class Byok(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
update_byok_key_request=components.UpdateBYOKKeyRequest(
- allowed_models=allowed_models,
- allowed_user_ids=allowed_user_ids,
+ allowed_models=utils.unmarshal(
+ allowed_models, OptionalNullable[List[str]]
+ ),
+ allowed_user_ids=utils.unmarshal(
+ allowed_user_ids, OptionalNullable[List[str]]
+ ),
disabled=disabled,
is_fallback=is_fallback,
key=key,
@@ -1280,9 +1314,11 @@ class Byok(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["BYOK"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1329,8 +1365,8 @@ class Byok(BaseSDK):
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- allowed_models: OptionalNullable[List[str]] = UNSET,
- allowed_user_ids: OptionalNullable[List[str]] = UNSET,
+ allowed_models: OptionalNullable[Iterable[str]] = UNSET,
+ allowed_user_ids: OptionalNullable[Iterable[str]] = UNSET,
disabled: Optional[bool] = None,
is_fallback: Optional[bool] = None,
key: Optional[str] = None,
@@ -1379,8 +1415,12 @@ class Byok(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
update_byok_key_request=components.UpdateBYOKKeyRequest(
- allowed_models=allowed_models,
- allowed_user_ids=allowed_user_ids,
+ allowed_models=utils.unmarshal(
+ allowed_models, OptionalNullable[List[str]]
+ ),
+ allowed_user_ids=utils.unmarshal(
+ allowed_user_ids, OptionalNullable[List[str]]
+ ),
disabled=disabled,
is_fallback=is_fallback,
key=key,
@@ -1438,9 +1478,11 @@ class Byok(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["BYOK"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/chat.py b/src/openrouter/chat.py
index a189491..ab93b1b 100644
--- a/src/openrouter/chat.py
+++ b/src/openrouter/chat.py
@@ -1,18 +1,22 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from .basesdk import BaseSDK
-from enum import Enum
from openrouter import components, errors, operations, utils
from openrouter._hooks import HookContext
from openrouter.types import OptionalNullable, UNSET
from openrouter.utils import eventstreaming, get_security_from_env
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
-from typing import Any, Dict, List, Literal, Mapping, Optional, Union, overload
-
-
-class SendAcceptEnum(str, Enum):
- APPLICATION_JSON = "application/json"
- TEXT_EVENT_STREAM = "text/event-stream"
+from typing import (
+ Any,
+ Dict,
+ Iterable,
+ List,
+ Literal,
+ Mapping,
+ Optional,
+ Union,
+ overload,
+)
class Chat(BaseSDK):
@@ -21,7 +25,8 @@ class Chat(BaseSDK):
self,
*,
messages: Union[
- List[components.ChatMessages], List[components.ChatMessagesTypedDict]
+ Iterable[components.ChatMessages],
+ Iterable[components.ChatMessagesTypedDict],
],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
@@ -39,24 +44,24 @@ class Chat(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- logit_bias: OptionalNullable[Dict[str, float]] = UNSET,
+ logit_bias: OptionalNullable[Mapping[str, float]] = UNSET,
logprobs: OptionalNullable[bool] = UNSET,
max_completion_tokens: OptionalNullable[int] = UNSET,
max_tokens: OptionalNullable[int] = UNSET,
- metadata: Optional[Dict[str, str]] = None,
+ metadata: Optional[Mapping[str, str]] = None,
min_p: OptionalNullable[float] = UNSET,
- modalities: Optional[List[components.Modality]] = None,
+ modalities: Optional[Iterable[components.Modality]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ChatRequestPlugin],
- List[components.ChatRequestPluginTypedDict],
+ Iterable[components.ChatRequestPlugin],
+ Iterable[components.ChatRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -86,8 +91,8 @@ class Chat(BaseSDK):
] = UNSET,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Union[Literal[False], None] = None,
@@ -100,8 +105,8 @@ class Chat(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ChatFunctionTool],
- List[components.ChatFunctionToolTypedDict],
+ Iterable[components.ChatFunctionTool],
+ Iterable[components.ChatFunctionToolTypedDict],
]
] = None,
top_a: OptionalNullable[float] = UNSET,
@@ -170,7 +175,6 @@ class Chat(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
@@ -179,7 +183,8 @@ class Chat(BaseSDK):
self,
*,
messages: Union[
- List[components.ChatMessages], List[components.ChatMessagesTypedDict]
+ Iterable[components.ChatMessages],
+ Iterable[components.ChatMessagesTypedDict],
],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
@@ -197,24 +202,24 @@ class Chat(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- logit_bias: OptionalNullable[Dict[str, float]] = UNSET,
+ logit_bias: OptionalNullable[Mapping[str, float]] = UNSET,
logprobs: OptionalNullable[bool] = UNSET,
max_completion_tokens: OptionalNullable[int] = UNSET,
max_tokens: OptionalNullable[int] = UNSET,
- metadata: Optional[Dict[str, str]] = None,
+ metadata: Optional[Mapping[str, str]] = None,
min_p: OptionalNullable[float] = UNSET,
- modalities: Optional[List[components.Modality]] = None,
+ modalities: Optional[Iterable[components.Modality]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ChatRequestPlugin],
- List[components.ChatRequestPluginTypedDict],
+ Iterable[components.ChatRequestPlugin],
+ Iterable[components.ChatRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -244,8 +249,8 @@ class Chat(BaseSDK):
] = UNSET,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Literal[True],
@@ -258,8 +263,8 @@ class Chat(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ChatFunctionTool],
- List[components.ChatFunctionToolTypedDict],
+ Iterable[components.ChatFunctionTool],
+ Iterable[components.ChatFunctionToolTypedDict],
]
] = None,
top_a: OptionalNullable[float] = UNSET,
@@ -328,15 +333,16 @@ class Chat(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
+ @overload
def send(
self,
*,
messages: Union[
- List[components.ChatMessages], List[components.ChatMessagesTypedDict]
+ Iterable[components.ChatMessages],
+ Iterable[components.ChatMessagesTypedDict],
],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
@@ -354,24 +360,24 @@ class Chat(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- logit_bias: OptionalNullable[Dict[str, float]] = UNSET,
+ logit_bias: OptionalNullable[Mapping[str, float]] = UNSET,
logprobs: OptionalNullable[bool] = UNSET,
max_completion_tokens: OptionalNullable[int] = UNSET,
max_tokens: OptionalNullable[int] = UNSET,
- metadata: Optional[Dict[str, str]] = None,
+ metadata: Optional[Mapping[str, str]] = None,
min_p: OptionalNullable[float] = UNSET,
- modalities: Optional[List[components.Modality]] = None,
+ modalities: Optional[Iterable[components.Modality]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ChatRequestPlugin],
- List[components.ChatRequestPluginTypedDict],
+ Iterable[components.ChatRequestPlugin],
+ Iterable[components.ChatRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -401,11 +407,11 @@ class Chat(BaseSDK):
] = UNSET,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
- stream: Optional[bool] = False,
+ stream: bool,
stream_options: OptionalNullable[
Union[components.ChatStreamOptions, components.ChatStreamOptionsTypedDict]
] = UNSET,
@@ -415,8 +421,8 @@ class Chat(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ChatFunctionTool],
- List[components.ChatFunctionToolTypedDict],
+ Iterable[components.ChatFunctionTool],
+ Iterable[components.ChatFunctionToolTypedDict],
]
] = None,
top_a: OptionalNullable[float] = UNSET,
@@ -431,7 +437,168 @@ class Chat(BaseSDK):
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
- ) -> operations.SendChatCompletionRequestResponse:
+ ) -> Union[
+ components.ChatResult, eventstreaming.EventStream[components.ChatStreamChunk]
+ ]:
+ r"""Create a chat completion
+
+ Sends a request for a model response for the given chat conversation. Supports both streaming and non-streaming modes.
+
+ :param messages: List of messages for the conversation
+ :param http_referer: 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.
+
+ :param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+
+ :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+
+ :param x_open_router_metadata: Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.
+ :param cache_control: Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
+ :param debug: Debug options for inspecting request transformations (streaming only)
+ :param frequency_penalty: Frequency penalty (-2.0 to 2.0)
+ :param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.
+ :param logit_bias: Token logit bias adjustments
+ :param logprobs: Return log probabilities
+ :param max_completion_tokens: Maximum tokens in completion
+ :param max_tokens: Maximum tokens (deprecated, use max_completion_tokens). Note: some providers enforce a minimum of 16.
+ :param metadata: Key-value pairs for additional object information (max 16 pairs, 64 char keys, 512 char values)
+ :param min_p: Minimum probability threshold relative to the most likely token. Tokens with probability below min_p * (probability of top token) are filtered out. Not all providers support this parameter.
+ :param modalities: Output modalities for the response. Supported values are \"text\", \"image\", and \"audio\".
+ :param model: Model to use for completion
+ :param models: Models to use for completion
+ :param parallel_tool_calls: Whether to enable parallel function calling during tool use. When true, the model may generate multiple tool calls in a single response.
+ :param plugins: Plugins you want to enable for this request, including their settings.
+ :param presence_penalty: Presence penalty (-2.0 to 2.0)
+ :param provider: When multiple model providers are available, optionally indicate your routing preference.
+ :param reasoning: Configuration options for reasoning models
+ :param reasoning_effort: Shorthand for setting reasoning effort. Equivalent to setting reasoning.effort. Cannot be used simultaneously with reasoning.effort if they differ.
+ :param repetition_penalty: Penalizes tokens based on how much they have already appeared in the text. A value of 1.0 means no penalty. Values above 1.0 penalize repeated tokens more strongly. Not all providers support this parameter.
+ :param response_format: Response format configuration
+ :param seed: Random seed for deterministic outputs
+ :param service_tier: The service tier to use for processing this request.
+ :param session_id: A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters.
+ :param stop: Stop sequences (up to 4)
+ :param stop_server_tools_when: Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`.
+ :param stream: Enable streaming response
+ :param stream_options: Streaming configuration options
+ :param temperature: Sampling temperature (0-2)
+ :param tool_choice: Tool choice configuration
+ :param tools: Available tools for function calling
+ :param top_a: Consider only tokens with \"sufficiently high\" probabilities based on the probability of the most likely token. Not all providers support this parameter.
+ :param top_k: Limits the model to choose from the top K most likely tokens at each step. A value of 1 means the model will always pick the most likely next token. Not all providers support this parameter.
+ :param top_logprobs: Number of top log probabilities to return (0-20)
+ :param top_p: Nucleus sampling parameter (0-1)
+ :param trace: Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations.
+ :param user: Unique user identifier
+ :param retries: Override the default retry configuration for this method
+ :param server_url: Override the default server URL for this method
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
+ :param http_headers: Additional headers to set or replace on requests.
+ """
+
+ def send(
+ self,
+ *,
+ messages: Union[
+ Iterable[components.ChatMessages],
+ Iterable[components.ChatMessagesTypedDict],
+ ],
+ http_referer: Optional[str] = None,
+ x_open_router_title: Optional[str] = None,
+ x_open_router_categories: Optional[str] = None,
+ x_open_router_metadata: Optional[components.MetadataLevel] = None,
+ cache_control: Optional[
+ Union[
+ components.AnthropicCacheControlDirective,
+ components.AnthropicCacheControlDirectiveTypedDict,
+ ]
+ ] = None,
+ debug: Optional[
+ Union[components.ChatDebugOptions, components.ChatDebugOptionsTypedDict]
+ ] = None,
+ frequency_penalty: OptionalNullable[float] = UNSET,
+ image_config: Optional[
+ Union[
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
+ ]
+ ] = None,
+ logit_bias: OptionalNullable[Mapping[str, float]] = UNSET,
+ logprobs: OptionalNullable[bool] = UNSET,
+ max_completion_tokens: OptionalNullable[int] = UNSET,
+ max_tokens: OptionalNullable[int] = UNSET,
+ metadata: Optional[Mapping[str, str]] = None,
+ min_p: OptionalNullable[float] = UNSET,
+ modalities: Optional[Iterable[components.Modality]] = None,
+ model: Optional[str] = None,
+ models: Optional[Iterable[str]] = None,
+ parallel_tool_calls: OptionalNullable[bool] = UNSET,
+ plugins: Optional[
+ Union[
+ Iterable[components.ChatRequestPlugin],
+ Iterable[components.ChatRequestPluginTypedDict],
+ ]
+ ] = None,
+ presence_penalty: OptionalNullable[float] = UNSET,
+ provider: OptionalNullable[
+ Union[
+ components.ProviderPreferences, components.ProviderPreferencesTypedDict
+ ]
+ ] = UNSET,
+ reasoning: Optional[
+ Union[
+ components.ChatRequestReasoning,
+ components.ChatRequestReasoningTypedDict,
+ ]
+ ] = None,
+ reasoning_effort: OptionalNullable[
+ components.ChatRequestReasoningEffort
+ ] = UNSET,
+ repetition_penalty: OptionalNullable[float] = UNSET,
+ response_format: Optional[
+ Union[components.ResponseFormat, components.ResponseFormatTypedDict]
+ ] = None,
+ seed: OptionalNullable[int] = UNSET,
+ service_tier: OptionalNullable[components.ChatRequestServiceTier] = UNSET,
+ session_id: Optional[str] = None,
+ stop: OptionalNullable[
+ Union[components.Stop, components.StopTypedDict]
+ ] = UNSET,
+ stop_server_tools_when: Optional[
+ Union[
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
+ ]
+ ] = None,
+ stream: Optional[bool] = False,
+ stream_options: OptionalNullable[
+ Union[components.ChatStreamOptions, components.ChatStreamOptionsTypedDict]
+ ] = UNSET,
+ temperature: OptionalNullable[float] = UNSET,
+ tool_choice: Optional[
+ Union[components.ChatToolChoice, components.ChatToolChoiceTypedDict]
+ ] = None,
+ tools: Optional[
+ Union[
+ Iterable[components.ChatFunctionTool],
+ Iterable[components.ChatFunctionToolTypedDict],
+ ]
+ ] = None,
+ top_a: OptionalNullable[float] = UNSET,
+ top_k: OptionalNullable[int] = UNSET,
+ top_logprobs: OptionalNullable[int] = UNSET,
+ top_p: OptionalNullable[float] = UNSET,
+ trace: Optional[
+ Union[components.TraceConfig, components.TraceConfigTypedDict]
+ ] = None,
+ user: Optional[str] = None,
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
+ server_url: Optional[str] = None,
+ timeout_ms: Optional[int] = None,
+ http_headers: Optional[Mapping[str, str]] = None,
+ ) -> Union[
+ components.ChatResult, eventstreaming.EventStream[components.ChatStreamChunk]
+ ]:
r"""Create a chat completion
Sends a request for a model response for the given chat conversation. Supports both streaming and non-streaming modes.
@@ -485,7 +652,6 @@ class Chat(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
base_url = None
@@ -511,19 +677,25 @@ class Chat(BaseSDK):
debug, Optional[components.ChatDebugOptions]
),
frequency_penalty=frequency_penalty,
- image_config=image_config,
- logit_bias=logit_bias,
+ image_config=utils.unmarshal(
+ image_config, Optional[Dict[str, components.ImageConfig]]
+ ),
+ logit_bias=utils.unmarshal(
+ logit_bias, OptionalNullable[Dict[str, float]]
+ ),
logprobs=logprobs,
max_completion_tokens=max_completion_tokens,
max_tokens=max_tokens,
messages=utils.get_pydantic_model(
messages, List[components.ChatMessages]
),
- metadata=metadata,
+ metadata=utils.unmarshal(metadata, Optional[Dict[str, str]]),
min_p=min_p,
- modalities=modalities,
+ modalities=utils.unmarshal(
+ modalities, Optional[List[components.Modality]]
+ ),
model=model,
- models=models,
+ models=utils.unmarshal(models, Optional[List[str]]),
parallel_tool_calls=parallel_tool_calls,
plugins=utils.get_pydantic_model(
plugins, Optional[List[components.ChatRequestPlugin]]
@@ -543,7 +715,7 @@ class Chat(BaseSDK):
seed=seed,
service_tier=service_tier,
session_id=session_id,
- stop=stop,
+ stop=utils.unmarshal(stop, OptionalNullable[components.Stop]),
stop_server_tools_when=utils.get_pydantic_model(
stop_server_tools_when,
Optional[List[components.StopServerToolsWhenCondition]],
@@ -578,7 +750,9 @@ class Chat(BaseSDK):
request_has_path_params=False,
request_has_query_params=True,
user_agent_header="user-agent",
- accept_header_value="text/event-stream" if stream else "application/json",
+ accept_header_value="text/event-stream"
+ if stream is True
+ else "application/json",
http_headers=http_headers,
_globals=operations.SendChatCompletionRequestGlobals(
http_referer=self.sdk_configuration.globals.http_referer,
@@ -614,27 +788,12 @@ class Chat(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Chat"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "403",
- "404",
- "408",
- "413",
- "422",
- "429",
- "4XX",
- "500",
- "502",
- "503",
- "524",
- "529",
- "5XX",
- ],
- stream=True,
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
+ stream=stream is True,
retry_config=retry_config,
)
@@ -647,8 +806,8 @@ class Chat(BaseSDK):
if utils.match_response(http_res, "200", "text/event-stream"):
return eventstreaming.EventStream(
http_res,
- lambda raw: utils.unmarshal_json(
- raw, components.ChatStreamingResponse
+ lambda raw: unmarshal_json_response(
+ components.ChatStreamingResponse, http_res, raw
).data,
sentinel="[DONE]",
client_ref=self,
@@ -778,7 +937,8 @@ class Chat(BaseSDK):
self,
*,
messages: Union[
- List[components.ChatMessages], List[components.ChatMessagesTypedDict]
+ Iterable[components.ChatMessages],
+ Iterable[components.ChatMessagesTypedDict],
],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
@@ -796,24 +956,24 @@ class Chat(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- logit_bias: OptionalNullable[Dict[str, float]] = UNSET,
+ logit_bias: OptionalNullable[Mapping[str, float]] = UNSET,
logprobs: OptionalNullable[bool] = UNSET,
max_completion_tokens: OptionalNullable[int] = UNSET,
max_tokens: OptionalNullable[int] = UNSET,
- metadata: Optional[Dict[str, str]] = None,
+ metadata: Optional[Mapping[str, str]] = None,
min_p: OptionalNullable[float] = UNSET,
- modalities: Optional[List[components.Modality]] = None,
+ modalities: Optional[Iterable[components.Modality]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ChatRequestPlugin],
- List[components.ChatRequestPluginTypedDict],
+ Iterable[components.ChatRequestPlugin],
+ Iterable[components.ChatRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -843,8 +1003,8 @@ class Chat(BaseSDK):
] = UNSET,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Union[Literal[False], None] = None,
@@ -857,8 +1017,8 @@ class Chat(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ChatFunctionTool],
- List[components.ChatFunctionToolTypedDict],
+ Iterable[components.ChatFunctionTool],
+ Iterable[components.ChatFunctionToolTypedDict],
]
] = None,
top_a: OptionalNullable[float] = UNSET,
@@ -927,7 +1087,6 @@ class Chat(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
@@ -936,7 +1095,8 @@ class Chat(BaseSDK):
self,
*,
messages: Union[
- List[components.ChatMessages], List[components.ChatMessagesTypedDict]
+ Iterable[components.ChatMessages],
+ Iterable[components.ChatMessagesTypedDict],
],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
@@ -954,24 +1114,24 @@ class Chat(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- logit_bias: OptionalNullable[Dict[str, float]] = UNSET,
+ logit_bias: OptionalNullable[Mapping[str, float]] = UNSET,
logprobs: OptionalNullable[bool] = UNSET,
max_completion_tokens: OptionalNullable[int] = UNSET,
max_tokens: OptionalNullable[int] = UNSET,
- metadata: Optional[Dict[str, str]] = None,
+ metadata: Optional[Mapping[str, str]] = None,
min_p: OptionalNullable[float] = UNSET,
- modalities: Optional[List[components.Modality]] = None,
+ modalities: Optional[Iterable[components.Modality]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ChatRequestPlugin],
- List[components.ChatRequestPluginTypedDict],
+ Iterable[components.ChatRequestPlugin],
+ Iterable[components.ChatRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -1001,8 +1161,8 @@ class Chat(BaseSDK):
] = UNSET,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Literal[True],
@@ -1015,8 +1175,8 @@ class Chat(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ChatFunctionTool],
- List[components.ChatFunctionToolTypedDict],
+ Iterable[components.ChatFunctionTool],
+ Iterable[components.ChatFunctionToolTypedDict],
]
] = None,
top_a: OptionalNullable[float] = UNSET,
@@ -1085,15 +1245,16 @@ class Chat(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
+ @overload
async def send_async(
self,
*,
messages: Union[
- List[components.ChatMessages], List[components.ChatMessagesTypedDict]
+ Iterable[components.ChatMessages],
+ Iterable[components.ChatMessagesTypedDict],
],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
@@ -1111,24 +1272,24 @@ class Chat(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- logit_bias: OptionalNullable[Dict[str, float]] = UNSET,
+ logit_bias: OptionalNullable[Mapping[str, float]] = UNSET,
logprobs: OptionalNullable[bool] = UNSET,
max_completion_tokens: OptionalNullable[int] = UNSET,
max_tokens: OptionalNullable[int] = UNSET,
- metadata: Optional[Dict[str, str]] = None,
+ metadata: Optional[Mapping[str, str]] = None,
min_p: OptionalNullable[float] = UNSET,
- modalities: Optional[List[components.Modality]] = None,
+ modalities: Optional[Iterable[components.Modality]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ChatRequestPlugin],
- List[components.ChatRequestPluginTypedDict],
+ Iterable[components.ChatRequestPlugin],
+ Iterable[components.ChatRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -1158,11 +1319,11 @@ class Chat(BaseSDK):
] = UNSET,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
- stream: Optional[bool] = False,
+ stream: bool,
stream_options: OptionalNullable[
Union[components.ChatStreamOptions, components.ChatStreamOptionsTypedDict]
] = UNSET,
@@ -1172,8 +1333,8 @@ class Chat(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ChatFunctionTool],
- List[components.ChatFunctionToolTypedDict],
+ Iterable[components.ChatFunctionTool],
+ Iterable[components.ChatFunctionToolTypedDict],
]
] = None,
top_a: OptionalNullable[float] = UNSET,
@@ -1188,7 +1349,170 @@ class Chat(BaseSDK):
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
- ) -> operations.SendChatCompletionRequestResponse:
+ ) -> Union[
+ components.ChatResult,
+ eventstreaming.EventStreamAsync[components.ChatStreamChunk],
+ ]:
+ r"""Create a chat completion
+
+ Sends a request for a model response for the given chat conversation. Supports both streaming and non-streaming modes.
+
+ :param messages: List of messages for the conversation
+ :param http_referer: 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.
+
+ :param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+
+ :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+
+ :param x_open_router_metadata: Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.
+ :param cache_control: Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
+ :param debug: Debug options for inspecting request transformations (streaming only)
+ :param frequency_penalty: Frequency penalty (-2.0 to 2.0)
+ :param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.
+ :param logit_bias: Token logit bias adjustments
+ :param logprobs: Return log probabilities
+ :param max_completion_tokens: Maximum tokens in completion
+ :param max_tokens: Maximum tokens (deprecated, use max_completion_tokens). Note: some providers enforce a minimum of 16.
+ :param metadata: Key-value pairs for additional object information (max 16 pairs, 64 char keys, 512 char values)
+ :param min_p: Minimum probability threshold relative to the most likely token. Tokens with probability below min_p * (probability of top token) are filtered out. Not all providers support this parameter.
+ :param modalities: Output modalities for the response. Supported values are \"text\", \"image\", and \"audio\".
+ :param model: Model to use for completion
+ :param models: Models to use for completion
+ :param parallel_tool_calls: Whether to enable parallel function calling during tool use. When true, the model may generate multiple tool calls in a single response.
+ :param plugins: Plugins you want to enable for this request, including their settings.
+ :param presence_penalty: Presence penalty (-2.0 to 2.0)
+ :param provider: When multiple model providers are available, optionally indicate your routing preference.
+ :param reasoning: Configuration options for reasoning models
+ :param reasoning_effort: Shorthand for setting reasoning effort. Equivalent to setting reasoning.effort. Cannot be used simultaneously with reasoning.effort if they differ.
+ :param repetition_penalty: Penalizes tokens based on how much they have already appeared in the text. A value of 1.0 means no penalty. Values above 1.0 penalize repeated tokens more strongly. Not all providers support this parameter.
+ :param response_format: Response format configuration
+ :param seed: Random seed for deterministic outputs
+ :param service_tier: The service tier to use for processing this request.
+ :param session_id: A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters.
+ :param stop: Stop sequences (up to 4)
+ :param stop_server_tools_when: Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`.
+ :param stream: Enable streaming response
+ :param stream_options: Streaming configuration options
+ :param temperature: Sampling temperature (0-2)
+ :param tool_choice: Tool choice configuration
+ :param tools: Available tools for function calling
+ :param top_a: Consider only tokens with \"sufficiently high\" probabilities based on the probability of the most likely token. Not all providers support this parameter.
+ :param top_k: Limits the model to choose from the top K most likely tokens at each step. A value of 1 means the model will always pick the most likely next token. Not all providers support this parameter.
+ :param top_logprobs: Number of top log probabilities to return (0-20)
+ :param top_p: Nucleus sampling parameter (0-1)
+ :param trace: Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations.
+ :param user: Unique user identifier
+ :param retries: Override the default retry configuration for this method
+ :param server_url: Override the default server URL for this method
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
+ :param http_headers: Additional headers to set or replace on requests.
+ """
+
+ async def send_async(
+ self,
+ *,
+ messages: Union[
+ Iterable[components.ChatMessages],
+ Iterable[components.ChatMessagesTypedDict],
+ ],
+ http_referer: Optional[str] = None,
+ x_open_router_title: Optional[str] = None,
+ x_open_router_categories: Optional[str] = None,
+ x_open_router_metadata: Optional[components.MetadataLevel] = None,
+ cache_control: Optional[
+ Union[
+ components.AnthropicCacheControlDirective,
+ components.AnthropicCacheControlDirectiveTypedDict,
+ ]
+ ] = None,
+ debug: Optional[
+ Union[components.ChatDebugOptions, components.ChatDebugOptionsTypedDict]
+ ] = None,
+ frequency_penalty: OptionalNullable[float] = UNSET,
+ image_config: Optional[
+ Union[
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
+ ]
+ ] = None,
+ logit_bias: OptionalNullable[Mapping[str, float]] = UNSET,
+ logprobs: OptionalNullable[bool] = UNSET,
+ max_completion_tokens: OptionalNullable[int] = UNSET,
+ max_tokens: OptionalNullable[int] = UNSET,
+ metadata: Optional[Mapping[str, str]] = None,
+ min_p: OptionalNullable[float] = UNSET,
+ modalities: Optional[Iterable[components.Modality]] = None,
+ model: Optional[str] = None,
+ models: Optional[Iterable[str]] = None,
+ parallel_tool_calls: OptionalNullable[bool] = UNSET,
+ plugins: Optional[
+ Union[
+ Iterable[components.ChatRequestPlugin],
+ Iterable[components.ChatRequestPluginTypedDict],
+ ]
+ ] = None,
+ presence_penalty: OptionalNullable[float] = UNSET,
+ provider: OptionalNullable[
+ Union[
+ components.ProviderPreferences, components.ProviderPreferencesTypedDict
+ ]
+ ] = UNSET,
+ reasoning: Optional[
+ Union[
+ components.ChatRequestReasoning,
+ components.ChatRequestReasoningTypedDict,
+ ]
+ ] = None,
+ reasoning_effort: OptionalNullable[
+ components.ChatRequestReasoningEffort
+ ] = UNSET,
+ repetition_penalty: OptionalNullable[float] = UNSET,
+ response_format: Optional[
+ Union[components.ResponseFormat, components.ResponseFormatTypedDict]
+ ] = None,
+ seed: OptionalNullable[int] = UNSET,
+ service_tier: OptionalNullable[components.ChatRequestServiceTier] = UNSET,
+ session_id: Optional[str] = None,
+ stop: OptionalNullable[
+ Union[components.Stop, components.StopTypedDict]
+ ] = UNSET,
+ stop_server_tools_when: Optional[
+ Union[
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
+ ]
+ ] = None,
+ stream: Optional[bool] = False,
+ stream_options: OptionalNullable[
+ Union[components.ChatStreamOptions, components.ChatStreamOptionsTypedDict]
+ ] = UNSET,
+ temperature: OptionalNullable[float] = UNSET,
+ tool_choice: Optional[
+ Union[components.ChatToolChoice, components.ChatToolChoiceTypedDict]
+ ] = None,
+ tools: Optional[
+ Union[
+ Iterable[components.ChatFunctionTool],
+ Iterable[components.ChatFunctionToolTypedDict],
+ ]
+ ] = None,
+ top_a: OptionalNullable[float] = UNSET,
+ top_k: OptionalNullable[int] = UNSET,
+ top_logprobs: OptionalNullable[int] = UNSET,
+ top_p: OptionalNullable[float] = UNSET,
+ trace: Optional[
+ Union[components.TraceConfig, components.TraceConfigTypedDict]
+ ] = None,
+ user: Optional[str] = None,
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
+ server_url: Optional[str] = None,
+ timeout_ms: Optional[int] = None,
+ http_headers: Optional[Mapping[str, str]] = None,
+ ) -> Union[
+ components.ChatResult,
+ eventstreaming.EventStreamAsync[components.ChatStreamChunk],
+ ]:
r"""Create a chat completion
Sends a request for a model response for the given chat conversation. Supports both streaming and non-streaming modes.
@@ -1242,7 +1566,6 @@ class Chat(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
base_url = None
@@ -1268,19 +1591,25 @@ class Chat(BaseSDK):
debug, Optional[components.ChatDebugOptions]
),
frequency_penalty=frequency_penalty,
- image_config=image_config,
- logit_bias=logit_bias,
+ image_config=utils.unmarshal(
+ image_config, Optional[Dict[str, components.ImageConfig]]
+ ),
+ logit_bias=utils.unmarshal(
+ logit_bias, OptionalNullable[Dict[str, float]]
+ ),
logprobs=logprobs,
max_completion_tokens=max_completion_tokens,
max_tokens=max_tokens,
messages=utils.get_pydantic_model(
messages, List[components.ChatMessages]
),
- metadata=metadata,
+ metadata=utils.unmarshal(metadata, Optional[Dict[str, str]]),
min_p=min_p,
- modalities=modalities,
+ modalities=utils.unmarshal(
+ modalities, Optional[List[components.Modality]]
+ ),
model=model,
- models=models,
+ models=utils.unmarshal(models, Optional[List[str]]),
parallel_tool_calls=parallel_tool_calls,
plugins=utils.get_pydantic_model(
plugins, Optional[List[components.ChatRequestPlugin]]
@@ -1300,7 +1629,7 @@ class Chat(BaseSDK):
seed=seed,
service_tier=service_tier,
session_id=session_id,
- stop=stop,
+ stop=utils.unmarshal(stop, OptionalNullable[components.Stop]),
stop_server_tools_when=utils.get_pydantic_model(
stop_server_tools_when,
Optional[List[components.StopServerToolsWhenCondition]],
@@ -1335,7 +1664,9 @@ class Chat(BaseSDK):
request_has_path_params=False,
request_has_query_params=True,
user_agent_header="user-agent",
- accept_header_value="text/event-stream" if stream else "application/json",
+ accept_header_value="text/event-stream"
+ if stream is True
+ else "application/json",
http_headers=http_headers,
_globals=operations.SendChatCompletionRequestGlobals(
http_referer=self.sdk_configuration.globals.http_referer,
@@ -1371,27 +1702,12 @@ class Chat(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Chat"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "403",
- "404",
- "408",
- "413",
- "422",
- "429",
- "4XX",
- "500",
- "502",
- "503",
- "524",
- "529",
- "5XX",
- ],
- stream=True,
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
+ stream=stream is True,
retry_config=retry_config,
)
@@ -1404,8 +1720,8 @@ class Chat(BaseSDK):
if utils.match_response(http_res, "200", "text/event-stream"):
return eventstreaming.EventStreamAsync(
http_res,
- lambda raw: utils.unmarshal_json(
- raw, components.ChatStreamingResponse
+ lambda raw: unmarshal_json_response(
+ components.ChatStreamingResponse, http_res, raw
).data,
sentinel="[DONE]",
client_ref=self,
diff --git a/src/openrouter/classifications.py b/src/openrouter/classifications.py
index 2654cbc..ad3d247 100644
--- a/src/openrouter/classifications.py
+++ b/src/openrouter/classifications.py
@@ -119,9 +119,11 @@ class Classifications(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Classifications"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -270,9 +272,11 @@ class Classifications(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Classifications"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/components/__init__.py b/src/openrouter/components/__init__.py
index 581b01c..192d308 100644
--- a/src/openrouter/components/__init__.py
+++ b/src/openrouter/components/__init__.py
@@ -1,9 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
-from typing import TYPE_CHECKING
-from importlib import import_module
-import builtins
-import sys
+from typing import Any, TYPE_CHECKING
+
+from openrouter.utils.dynamic_imports import lazy_getattr, lazy_dir
if TYPE_CHECKING:
from .aabenchmarkentry import AABenchmarkEntry, AABenchmarkEntryTypedDict
@@ -204,6 +203,7 @@ if TYPE_CHECKING:
from .applypatchcalloperation import (
ApplyPatchCallOperation,
ApplyPatchCallOperationTypedDict,
+ UnknownApplyPatchCallOperation,
)
from .applypatchcalloperationdiffdeltaevent import (
ApplyPatchCallOperationDiffDeltaEvent,
@@ -289,6 +289,7 @@ if TYPE_CHECKING:
BaseInputsUnion1,
BaseInputsUnion1TypedDict,
BaseInputsUnionTypedDict,
+ UnknownBaseInputsContent1,
)
from .basereasoningconfig import BaseReasoningConfig, BaseReasoningConfigTypedDict
from .bashservertool import (
@@ -363,6 +364,7 @@ if TYPE_CHECKING:
from .capabilitydescriptor import (
CapabilityDescriptor,
CapabilityDescriptorTypedDict,
+ UnknownCapabilityDescriptor,
)
from .chatassistantimages import (
ChatAssistantImages,
@@ -406,7 +408,11 @@ if TYPE_CHECKING:
ChatContentImageType,
ChatContentImageTypedDict,
)
- from .chatcontentitems import ChatContentItems, ChatContentItemsTypedDict
+ from .chatcontentitems import (
+ ChatContentItems,
+ ChatContentItemsTypedDict,
+ UnknownChatContentItems,
+ )
from .chatcontenttext import (
ChatContentText,
ChatContentTextType,
@@ -646,6 +652,7 @@ if TYPE_CHECKING:
ContentPartAddedEventPartTypedDict,
ContentPartAddedEventType,
ContentPartAddedEventTypedDict,
+ UnknownContentPartAddedEventPart,
)
from .contentpartaudio import (
AudioURL,
@@ -660,6 +667,7 @@ if TYPE_CHECKING:
ContentPartDoneEventPartTypedDict,
ContentPartDoneEventType,
ContentPartDoneEventTypedDict,
+ UnknownContentPartDoneEventPart,
)
from .contentpartimage import (
ContentPartImage,
@@ -747,6 +755,7 @@ if TYPE_CHECKING:
FormatTypeText,
FormatTypedDict,
Syntax,
+ UnknownFormat,
)
from .customtoolcallinputdeltaevent import (
CustomToolCallInputDeltaEvent,
@@ -884,6 +893,15 @@ if TYPE_CHECKING:
RankingOptionsTypedDict,
TypeFileSearch,
)
+ from .filesservertool import (
+ FilesServerTool,
+ FilesServerToolType,
+ FilesServerToolTypedDict,
+ )
+ from .filesservertoolconfig import (
+ FilesServerToolConfig,
+ FilesServerToolConfigTypedDict,
+ )
from .forbiddenresponseerrordata import (
ForbiddenResponseErrorData,
ForbiddenResponseErrorDataTypedDict,
@@ -898,7 +916,7 @@ if TYPE_CHECKING:
FormatJSONSchemaConfigType,
FormatJSONSchemaConfigTypedDict,
)
- from .formats import Formats, FormatsTypedDict
+ from .formats import Formats, FormatsTypedDict, UnknownFormats
from .formattextconfig import (
FormatTextConfig,
FormatTextConfigType,
@@ -1186,6 +1204,7 @@ if TYPE_CHECKING:
ImageStreamingResponseData,
ImageStreamingResponseDataTypedDict,
ImageStreamingResponseTypedDict,
+ UnknownImageStreamingResponseData,
)
from .incompletedetails import IncompleteDetails, IncompleteDetailsTypedDict, Reason
from .inputaudio import (
@@ -1311,6 +1330,10 @@ if TYPE_CHECKING:
ListWorkspaceBudgetsResponse,
ListWorkspaceBudgetsResponseTypedDict,
)
+ from .listworkspacemembersresponse import (
+ ListWorkspaceMembersResponse,
+ ListWorkspaceMembersResponseTypedDict,
+ )
from .listworkspacesresponse import (
ListWorkspacesResponse,
ListWorkspacesResponseTypedDict,
@@ -1585,6 +1608,7 @@ if TYPE_CHECKING:
from .observabilitydestination import (
ObservabilityDestination,
ObservabilityDestinationTypedDict,
+ UnknownObservabilityDestination,
)
from .observabilityfilterrulesconfig import (
FieldT,
@@ -1705,6 +1729,7 @@ if TYPE_CHECKING:
OpenAIResponseCustomToolCallOutputOutput2TypedDict,
OpenAIResponseCustomToolCallOutputType,
OpenAIResponseCustomToolCallOutputTypedDict,
+ UnknownOpenAIResponseCustomToolCallOutputOutput1,
)
from .openairesponsefunctiontoolcall import (
OpenAIResponseFunctionToolCall,
@@ -1720,6 +1745,7 @@ if TYPE_CHECKING:
OpenAIResponseFunctionToolCallOutputStatus,
OpenAIResponseFunctionToolCallOutputType,
OpenAIResponseFunctionToolCallOutputTypedDict,
+ UnknownOpenAIResponseFunctionToolCallOutputOutput1,
)
from .openairesponseinputmessageitem import (
OpenAIResponseInputMessageItem,
@@ -1732,10 +1758,12 @@ if TYPE_CHECKING:
OpenAIResponseInputMessageItemRoleUser,
OpenAIResponseInputMessageItemType,
OpenAIResponseInputMessageItemTypedDict,
+ UnknownOpenAIResponseInputMessageItemContent,
)
from .openairesponsesannotation import (
OpenAIResponsesAnnotation,
OpenAIResponsesAnnotationTypedDict,
+ UnknownOpenAIResponsesAnnotation,
)
from .openairesponsesrefusalcontent import (
OpenAIResponsesRefusalContent,
@@ -1785,6 +1813,7 @@ if TYPE_CHECKING:
OpenResponsesResultToolUnionTypedDict,
OpenResponsesResultType,
OpenResponsesResultTypedDict,
+ UnknownOpenResponsesResultToolUnion,
)
from .openroutermetadata import OpenRouterMetadata, OpenRouterMetadataTypedDict
from .openrouterwebsearchservertool import (
@@ -1829,6 +1858,7 @@ if TYPE_CHECKING:
OutputLogsTypedDict,
TypeCodeInterpreterCall,
TypeLogs,
+ UnknownOutputCodeInterpreterCallItemOutputUnion,
)
from .outputcodeinterpreterservertoolitem import (
OutputCodeInterpreterServerToolItem,
@@ -1863,6 +1893,11 @@ if TYPE_CHECKING:
OutputFileSearchServerToolItemType,
OutputFileSearchServerToolItemTypedDict,
)
+ from .outputfilesservertoolitem import (
+ OutputFilesServerToolItem,
+ OutputFilesServerToolItemType,
+ OutputFilesServerToolItemTypedDict,
+ )
from .outputfunctioncallitem import (
OutputFunctionCallItem,
OutputFunctionCallItemStatusCompleted,
@@ -1897,7 +1932,7 @@ if TYPE_CHECKING:
OutputItemImageGenerationCallType,
OutputItemImageGenerationCallTypedDict,
)
- from .outputitems import OutputItems, OutputItemsTypedDict
+ from .outputitems import OutputItems, OutputItemsTypedDict, UnknownOutputItems
from .outputmcpservertoolitem import (
OutputMcpServerToolItem,
OutputMcpServerToolItemType,
@@ -1925,6 +1960,7 @@ if TYPE_CHECKING:
OutputMessageStatusUnionTypedDict,
OutputMessageType,
OutputMessageTypedDict,
+ UnknownOutputMessageContent,
)
from .outputmessageitem import (
OutputMessageItem,
@@ -1942,6 +1978,7 @@ if TYPE_CHECKING:
OutputMessageItemStatusUnionTypedDict,
OutputMessageItemType,
OutputMessageItemTypedDict,
+ UnknownOutputMessageItemContent,
)
from .outputmodality import OutputModality
from .outputmodalityenum import OutputModalityEnum
@@ -1981,6 +2018,7 @@ if TYPE_CHECKING:
OutputShellCallOutputItemTypedDict,
TypeExit,
TypeTimeout,
+ UnknownOutcome,
)
from .outputsubagentservertoolitem import (
OutputSubagentServerToolItem,
@@ -2018,6 +2056,7 @@ if TYPE_CHECKING:
TypeFindInPage,
TypeOpenPage,
TypeWebSearchCall,
+ UnknownAction,
)
from .outputwebsearchservertoolitem import (
OutputWebSearchServerToolItem,
@@ -2175,6 +2214,7 @@ if TYPE_CHECKING:
from .reasoningdetailunion import (
ReasoningDetailUnion,
ReasoningDetailUnionTypedDict,
+ UnknownReasoningDetailUnion,
)
from .reasoningdoneevent import (
ReasoningDoneEvent,
@@ -2366,7 +2406,7 @@ if TYPE_CHECKING:
Variables,
VariablesTypedDict,
)
- from .streamevents import StreamEvents, StreamEventsTypedDict
+ from .streamevents import StreamEvents, StreamEventsTypedDict, UnknownStreamEvents
from .streameventsresponsecompleted import (
StreamEventsResponseCompleted,
StreamEventsResponseCompletedType,
@@ -2498,6 +2538,7 @@ if TYPE_CHECKING:
UnifiedBenchmarksResponseData,
UnifiedBenchmarksResponseDataTypedDict,
UnifiedBenchmarksResponseTypedDict,
+ UnknownUnifiedBenchmarksResponseData,
)
from .unprocessableentityresponseerrordata import (
UnprocessableEntityResponseErrorData,
@@ -3326,6 +3367,11 @@ __all__ = [
"FileSearchServerToolValue2",
"FileSearchServerToolValue2TypedDict",
"FileTypedDict",
+ "FilesServerTool",
+ "FilesServerToolConfig",
+ "FilesServerToolConfigTypedDict",
+ "FilesServerToolType",
+ "FilesServerToolTypedDict",
"Filters",
"FiltersType",
"FiltersTypedDict",
@@ -3649,6 +3695,8 @@ __all__ = [
"ListPresetsResponseTypedDict",
"ListWorkspaceBudgetsResponse",
"ListWorkspaceBudgetsResponseTypedDict",
+ "ListWorkspaceMembersResponse",
+ "ListWorkspaceMembersResponseTypedDict",
"ListWorkspacesResponse",
"ListWorkspacesResponseTypedDict",
"LocalShellCallItem",
@@ -3978,6 +4026,9 @@ __all__ = [
"OutputFileSearchServerToolItem",
"OutputFileSearchServerToolItemType",
"OutputFileSearchServerToolItemTypedDict",
+ "OutputFilesServerToolItem",
+ "OutputFilesServerToolItemType",
+ "OutputFilesServerToolItemTypedDict",
"OutputFunctionCallItem",
"OutputFunctionCallItemStatusCompleted",
"OutputFunctionCallItemStatusInProgress",
@@ -4528,6 +4579,30 @@ __all__ = [
"UniqueInsight",
"UniqueInsightTypedDict",
"Unit",
+ "UnknownAction",
+ "UnknownApplyPatchCallOperation",
+ "UnknownBaseInputsContent1",
+ "UnknownCapabilityDescriptor",
+ "UnknownChatContentItems",
+ "UnknownContentPartAddedEventPart",
+ "UnknownContentPartDoneEventPart",
+ "UnknownFormat",
+ "UnknownFormats",
+ "UnknownImageStreamingResponseData",
+ "UnknownObservabilityDestination",
+ "UnknownOpenAIResponseCustomToolCallOutputOutput1",
+ "UnknownOpenAIResponseFunctionToolCallOutputOutput1",
+ "UnknownOpenAIResponseInputMessageItemContent",
+ "UnknownOpenAIResponsesAnnotation",
+ "UnknownOpenResponsesResultToolUnion",
+ "UnknownOutcome",
+ "UnknownOutputCodeInterpreterCallItemOutputUnion",
+ "UnknownOutputItems",
+ "UnknownOutputMessageContent",
+ "UnknownOutputMessageItemContent",
+ "UnknownReasoningDetailUnion",
+ "UnknownStreamEvents",
+ "UnknownUnifiedBenchmarksResponseData",
"UnprocessableEntityResponseErrorData",
"UnprocessableEntityResponseErrorDataTypedDict",
"UpdateBYOKKeyRequest",
@@ -4768,6 +4843,7 @@ _dynamic_imports: dict[str, str] = {
"ApplyPatchCallItemTypedDict": ".applypatchcallitem",
"ApplyPatchCallOperation": ".applypatchcalloperation",
"ApplyPatchCallOperationTypedDict": ".applypatchcalloperation",
+ "UnknownApplyPatchCallOperation": ".applypatchcalloperation",
"ApplyPatchCallOperationDiffDeltaEvent": ".applypatchcalloperationdiffdeltaevent",
"ApplyPatchCallOperationDiffDeltaEventType": ".applypatchcalloperationdiffdeltaevent",
"ApplyPatchCallOperationDiffDeltaEventTypedDict": ".applypatchcalloperationdiffdeltaevent",
@@ -4829,6 +4905,7 @@ _dynamic_imports: dict[str, str] = {
"BaseInputsUnion1": ".baseinputs_union",
"BaseInputsUnion1TypedDict": ".baseinputs_union",
"BaseInputsUnionTypedDict": ".baseinputs_union",
+ "UnknownBaseInputsContent1": ".baseinputs_union",
"BaseReasoningConfig": ".basereasoningconfig",
"BaseReasoningConfigTypedDict": ".basereasoningconfig",
"BashServerTool": ".bashservertool",
@@ -4871,6 +4948,7 @@ _dynamic_imports: dict[str, str] = {
"BYOKProviderSlug": ".byokproviderslug",
"CapabilityDescriptor": ".capabilitydescriptor",
"CapabilityDescriptorTypedDict": ".capabilitydescriptor",
+ "UnknownCapabilityDescriptor": ".capabilitydescriptor",
"ChatAssistantImages": ".chatassistantimages",
"ChatAssistantImagesImageURL": ".chatassistantimages",
"ChatAssistantImagesImageURLTypedDict": ".chatassistantimages",
@@ -4905,6 +4983,7 @@ _dynamic_imports: dict[str, str] = {
"ChatContentImageTypedDict": ".chatcontentimage",
"ChatContentItems": ".chatcontentitems",
"ChatContentItemsTypedDict": ".chatcontentitems",
+ "UnknownChatContentItems": ".chatcontentitems",
"ChatContentText": ".chatcontenttext",
"ChatContentTextType": ".chatcontenttext",
"ChatContentTextTypedDict": ".chatcontenttext",
@@ -5079,6 +5158,7 @@ _dynamic_imports: dict[str, str] = {
"ContentPartAddedEventPartTypedDict": ".contentpartaddedevent",
"ContentPartAddedEventType": ".contentpartaddedevent",
"ContentPartAddedEventTypedDict": ".contentpartaddedevent",
+ "UnknownContentPartAddedEventPart": ".contentpartaddedevent",
"AudioURL": ".contentpartaudio",
"AudioURLTypedDict": ".contentpartaudio",
"ContentPartAudio": ".contentpartaudio",
@@ -5089,6 +5169,7 @@ _dynamic_imports: dict[str, str] = {
"ContentPartDoneEventPartTypedDict": ".contentpartdoneevent",
"ContentPartDoneEventType": ".contentpartdoneevent",
"ContentPartDoneEventTypedDict": ".contentpartdoneevent",
+ "UnknownContentPartDoneEventPart": ".contentpartdoneevent",
"ContentPartImage": ".contentpartimage",
"ContentPartImageImageURL": ".contentpartimage",
"ContentPartImageImageURLTypedDict": ".contentpartimage",
@@ -5145,6 +5226,7 @@ _dynamic_imports: dict[str, str] = {
"FormatTypeText": ".customtool",
"FormatTypedDict": ".customtool",
"Syntax": ".customtool",
+ "UnknownFormat": ".customtool",
"CustomToolCallInputDeltaEvent": ".customtoolcallinputdeltaevent",
"CustomToolCallInputDeltaEventType": ".customtoolcallinputdeltaevent",
"CustomToolCallInputDeltaEventTypedDict": ".customtoolcallinputdeltaevent",
@@ -5258,6 +5340,11 @@ _dynamic_imports: dict[str, str] = {
"RankingOptions": ".filesearchservertool",
"RankingOptionsTypedDict": ".filesearchservertool",
"TypeFileSearch": ".filesearchservertool",
+ "FilesServerTool": ".filesservertool",
+ "FilesServerToolType": ".filesservertool",
+ "FilesServerToolTypedDict": ".filesservertool",
+ "FilesServerToolConfig": ".filesservertoolconfig",
+ "FilesServerToolConfigTypedDict": ".filesservertoolconfig",
"ForbiddenResponseErrorData": ".forbiddenresponseerrordata",
"ForbiddenResponseErrorDataTypedDict": ".forbiddenresponseerrordata",
"FormatJSONObjectConfig": ".formatjsonobjectconfig",
@@ -5268,6 +5355,7 @@ _dynamic_imports: dict[str, str] = {
"FormatJSONSchemaConfigTypedDict": ".formatjsonschemaconfig",
"Formats": ".formats",
"FormatsTypedDict": ".formats",
+ "UnknownFormats": ".formats",
"FormatTextConfig": ".formattextconfig",
"FormatTextConfigType": ".formattextconfig",
"FormatTextConfigTypedDict": ".formattextconfig",
@@ -5473,6 +5561,7 @@ _dynamic_imports: dict[str, str] = {
"ImageStreamingResponseData": ".imagestreamingresponse",
"ImageStreamingResponseDataTypedDict": ".imagestreamingresponse",
"ImageStreamingResponseTypedDict": ".imagestreamingresponse",
+ "UnknownImageStreamingResponseData": ".imagestreamingresponse",
"IncompleteDetails": ".incompletedetails",
"IncompleteDetailsTypedDict": ".incompletedetails",
"Reason": ".incompletedetails",
@@ -5576,6 +5665,8 @@ _dynamic_imports: dict[str, str] = {
"ListPresetVersionsResponseTypedDict": ".listpresetversionsresponse",
"ListWorkspaceBudgetsResponse": ".listworkspacebudgetsresponse",
"ListWorkspaceBudgetsResponseTypedDict": ".listworkspacebudgetsresponse",
+ "ListWorkspaceMembersResponse": ".listworkspacemembersresponse",
+ "ListWorkspaceMembersResponseTypedDict": ".listworkspacemembersresponse",
"ListWorkspacesResponse": ".listworkspacesresponse",
"ListWorkspacesResponseTypedDict": ".listworkspacesresponse",
"LocalShellCallItem": ".localshellcallitem",
@@ -5820,6 +5911,7 @@ _dynamic_imports: dict[str, str] = {
"ObservabilityDatadogDestinationTypedDict": ".observabilitydatadogdestination",
"ObservabilityDestination": ".observabilitydestination",
"ObservabilityDestinationTypedDict": ".observabilitydestination",
+ "UnknownObservabilityDestination": ".observabilitydestination",
"FieldT": ".observabilityfilterrulesconfig",
"Group": ".observabilityfilterrulesconfig",
"GroupTypedDict": ".observabilityfilterrulesconfig",
@@ -5908,6 +6000,7 @@ _dynamic_imports: dict[str, str] = {
"OpenAIResponseCustomToolCallOutputOutput2TypedDict": ".openairesponsecustomtoolcalloutput",
"OpenAIResponseCustomToolCallOutputType": ".openairesponsecustomtoolcalloutput",
"OpenAIResponseCustomToolCallOutputTypedDict": ".openairesponsecustomtoolcalloutput",
+ "UnknownOpenAIResponseCustomToolCallOutputOutput1": ".openairesponsecustomtoolcalloutput",
"OpenAIResponseFunctionToolCall": ".openairesponsefunctiontoolcall",
"OpenAIResponseFunctionToolCallType": ".openairesponsefunctiontoolcall",
"OpenAIResponseFunctionToolCallTypedDict": ".openairesponsefunctiontoolcall",
@@ -5919,6 +6012,7 @@ _dynamic_imports: dict[str, str] = {
"OpenAIResponseFunctionToolCallOutputStatus": ".openairesponsefunctiontoolcalloutput",
"OpenAIResponseFunctionToolCallOutputType": ".openairesponsefunctiontoolcalloutput",
"OpenAIResponseFunctionToolCallOutputTypedDict": ".openairesponsefunctiontoolcalloutput",
+ "UnknownOpenAIResponseFunctionToolCallOutputOutput1": ".openairesponsefunctiontoolcalloutput",
"OpenAIResponseInputMessageItem": ".openairesponseinputmessageitem",
"OpenAIResponseInputMessageItemContent": ".openairesponseinputmessageitem",
"OpenAIResponseInputMessageItemContentTypedDict": ".openairesponseinputmessageitem",
@@ -5929,8 +6023,10 @@ _dynamic_imports: dict[str, str] = {
"OpenAIResponseInputMessageItemRoleUser": ".openairesponseinputmessageitem",
"OpenAIResponseInputMessageItemType": ".openairesponseinputmessageitem",
"OpenAIResponseInputMessageItemTypedDict": ".openairesponseinputmessageitem",
+ "UnknownOpenAIResponseInputMessageItemContent": ".openairesponseinputmessageitem",
"OpenAIResponsesAnnotation": ".openairesponsesannotation",
"OpenAIResponsesAnnotationTypedDict": ".openairesponsesannotation",
+ "UnknownOpenAIResponsesAnnotation": ".openairesponsesannotation",
"OpenAIResponsesRefusalContent": ".openairesponsesrefusalcontent",
"OpenAIResponsesRefusalContentType": ".openairesponsesrefusalcontent",
"OpenAIResponsesRefusalContentTypedDict": ".openairesponsesrefusalcontent",
@@ -5970,6 +6066,7 @@ _dynamic_imports: dict[str, str] = {
"OpenResponsesResultToolUnionTypedDict": ".openresponsesresult",
"OpenResponsesResultType": ".openresponsesresult",
"OpenResponsesResultTypedDict": ".openresponsesresult",
+ "UnknownOpenResponsesResultToolUnion": ".openresponsesresult",
"OpenRouterMetadata": ".openroutermetadata",
"OpenRouterMetadataTypedDict": ".openroutermetadata",
"OpenRouterWebSearchServerTool": ".openrouterwebsearchservertool",
@@ -6001,6 +6098,7 @@ _dynamic_imports: dict[str, str] = {
"OutputLogsTypedDict": ".outputcodeinterpretercallitem",
"TypeCodeInterpreterCall": ".outputcodeinterpretercallitem",
"TypeLogs": ".outputcodeinterpretercallitem",
+ "UnknownOutputCodeInterpreterCallItemOutputUnion": ".outputcodeinterpretercallitem",
"OutputCodeInterpreterServerToolItem": ".outputcodeinterpreterservertoolitem",
"OutputCodeInterpreterServerToolItemType": ".outputcodeinterpreterservertoolitem",
"OutputCodeInterpreterServerToolItemTypedDict": ".outputcodeinterpreterservertoolitem",
@@ -6022,6 +6120,9 @@ _dynamic_imports: dict[str, str] = {
"OutputFileSearchServerToolItem": ".outputfilesearchservertoolitem",
"OutputFileSearchServerToolItemType": ".outputfilesearchservertoolitem",
"OutputFileSearchServerToolItemTypedDict": ".outputfilesearchservertoolitem",
+ "OutputFilesServerToolItem": ".outputfilesservertoolitem",
+ "OutputFilesServerToolItemType": ".outputfilesservertoolitem",
+ "OutputFilesServerToolItemTypedDict": ".outputfilesservertoolitem",
"OutputFunctionCallItem": ".outputfunctioncallitem",
"OutputFunctionCallItemStatusCompleted": ".outputfunctioncallitem",
"OutputFunctionCallItemStatusInProgress": ".outputfunctioncallitem",
@@ -6048,6 +6149,7 @@ _dynamic_imports: dict[str, str] = {
"OutputItemImageGenerationCallTypedDict": ".outputitemimagegenerationcall",
"OutputItems": ".outputitems",
"OutputItemsTypedDict": ".outputitems",
+ "UnknownOutputItems": ".outputitems",
"OutputMcpServerToolItem": ".outputmcpservertoolitem",
"OutputMcpServerToolItemType": ".outputmcpservertoolitem",
"OutputMcpServerToolItemTypedDict": ".outputmcpservertoolitem",
@@ -6070,6 +6172,7 @@ _dynamic_imports: dict[str, str] = {
"OutputMessageStatusUnionTypedDict": ".outputmessage",
"OutputMessageType": ".outputmessage",
"OutputMessageTypedDict": ".outputmessage",
+ "UnknownOutputMessageContent": ".outputmessage",
"OutputMessageItem": ".outputmessageitem",
"OutputMessageItemContent": ".outputmessageitem",
"OutputMessageItemContentTypedDict": ".outputmessageitem",
@@ -6085,6 +6188,7 @@ _dynamic_imports: dict[str, str] = {
"OutputMessageItemStatusUnionTypedDict": ".outputmessageitem",
"OutputMessageItemType": ".outputmessageitem",
"OutputMessageItemTypedDict": ".outputmessageitem",
+ "UnknownOutputMessageItemContent": ".outputmessageitem",
"OutputModality": ".outputmodality",
"OutputModalityEnum": ".outputmodalityenum",
"OutputReasoningItem": ".outputreasoningitem",
@@ -6116,6 +6220,7 @@ _dynamic_imports: dict[str, str] = {
"OutputShellCallOutputItemTypedDict": ".outputshellcalloutputitem",
"TypeExit": ".outputshellcalloutputitem",
"TypeTimeout": ".outputshellcalloutputitem",
+ "UnknownOutcome": ".outputshellcalloutputitem",
"OutputSubagentServerToolItem": ".outputsubagentservertoolitem",
"OutputSubagentServerToolItemType": ".outputsubagentservertoolitem",
"OutputSubagentServerToolItemTypedDict": ".outputsubagentservertoolitem",
@@ -6143,6 +6248,7 @@ _dynamic_imports: dict[str, str] = {
"TypeFindInPage": ".outputwebsearchcallitem",
"TypeOpenPage": ".outputwebsearchcallitem",
"TypeWebSearchCall": ".outputwebsearchcallitem",
+ "UnknownAction": ".outputwebsearchcallitem",
"OutputWebSearchServerToolItem": ".outputwebsearchservertoolitem",
"OutputWebSearchServerToolItemAction": ".outputwebsearchservertoolitem",
"OutputWebSearchServerToolItemActionTypedDict": ".outputwebsearchservertoolitem",
@@ -6258,6 +6364,7 @@ _dynamic_imports: dict[str, str] = {
"ReasoningDetailTextTypedDict": ".reasoningdetailtext",
"ReasoningDetailUnion": ".reasoningdetailunion",
"ReasoningDetailUnionTypedDict": ".reasoningdetailunion",
+ "UnknownReasoningDetailUnion": ".reasoningdetailunion",
"ReasoningDoneEvent": ".reasoningdoneevent",
"ReasoningDoneEventType": ".reasoningdoneevent",
"ReasoningDoneEventTypedDict": ".reasoningdoneevent",
@@ -6389,6 +6496,7 @@ _dynamic_imports: dict[str, str] = {
"VariablesTypedDict": ".storedprompttemplate",
"StreamEvents": ".streamevents",
"StreamEventsTypedDict": ".streamevents",
+ "UnknownStreamEvents": ".streamevents",
"StreamEventsResponseCompleted": ".streameventsresponsecompleted",
"StreamEventsResponseCompletedType": ".streameventsresponsecompleted",
"StreamEventsResponseCompletedTypedDict": ".streameventsresponsecompleted",
@@ -6482,6 +6590,7 @@ _dynamic_imports: dict[str, str] = {
"UnifiedBenchmarksResponseData": ".unifiedbenchmarksresponse",
"UnifiedBenchmarksResponseDataTypedDict": ".unifiedbenchmarksresponse",
"UnifiedBenchmarksResponseTypedDict": ".unifiedbenchmarksresponse",
+ "UnknownUnifiedBenchmarksResponseData": ".unifiedbenchmarksresponse",
"UnprocessableEntityResponseErrorData": ".unprocessableentityresponseerrordata",
"UnprocessableEntityResponseErrorDataTypedDict": ".unprocessableentityresponseerrordata",
"UpdateBYOKKeyRequest": ".updatebyokkeyrequest",
@@ -6596,39 +6705,11 @@ _dynamic_imports: dict[str, str] = {
}
-def dynamic_import(modname, retries=3):
- for attempt in range(retries):
- try:
- return import_module(modname, __package__)
- except KeyError:
- # Clear any half-initialized module and retry
- sys.modules.pop(modname, None)
- if attempt == retries - 1:
- break
- raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
-
-
-def __getattr__(attr_name: str) -> object:
- module_name = _dynamic_imports.get(attr_name)
- if module_name is None:
- raise AttributeError(
- f"No {attr_name} found in _dynamic_imports for module name -> {__name__} "
- )
-
- try:
- module = dynamic_import(module_name)
- result = getattr(module, attr_name)
- return result
- except ImportError as e:
- raise ImportError(
- f"Failed to import {attr_name} from {module_name}: {e}"
- ) from e
- except AttributeError as e:
- raise AttributeError(
- f"Failed to get {attr_name} from {module_name}: {e}"
- ) from e
+def __getattr__(attr_name: str) -> Any:
+ return lazy_getattr(
+ attr_name, package=__package__, dynamic_imports=_dynamic_imports
+ )
def __dir__():
- lazy_attrs = builtins.list(_dynamic_imports.keys())
- return builtins.sorted(lazy_attrs)
+ return lazy_dir(dynamic_imports=_dynamic_imports)
diff --git a/src/openrouter/components/aabenchmarkentry.py b/src/openrouter/components/aabenchmarkentry.py
index dcf3613..ad39bd9 100644
--- a/src/openrouter/components/aabenchmarkentry.py
+++ b/src/openrouter/components/aabenchmarkentry.py
@@ -31,30 +31,14 @@ class AABenchmarkEntry(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["agentic_index", "coding_index", "intelligence_index"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/activityitem.py b/src/openrouter/components/activityitem.py
index 2f00349..a234e6d 100644
--- a/src/openrouter/components/activityitem.py
+++ b/src/openrouter/components/activityitem.py
@@ -64,3 +64,9 @@ class ActivityItem(BaseModel):
usage: float
r"""Total cost in USD (OpenRouter credits spent)"""
+
+
+try:
+ ActivityItem.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/advisornestedtool.py b/src/openrouter/components/advisornestedtool.py
index e21d2d2..b661de1 100644
--- a/src/openrouter/components/advisornestedtool.py
+++ b/src/openrouter/components/advisornestedtool.py
@@ -1,9 +1,9 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, Nullable
+from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
import pydantic
-from pydantic import ConfigDict
+from pydantic import ConfigDict, model_serializer
from typing import Any, Dict, Optional
from typing_extensions import NotRequired, TypedDict
@@ -34,3 +34,22 @@ class AdvisorNestedTool(BaseModel):
@additional_properties.setter
def additional_properties(self, value):
self.__pydantic_extra__ = value # pyright: ignore[reportIncompatibleVariableOverride]
+
+ @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))
+ serialized.pop(k, serialized.pop(n, None))
+
+ if val != UNSET_SENTINEL:
+ if val is not None or k not in optional_fields:
+ m[k] = val
+ for k, v in serialized.items():
+ m[k] = v
+
+ return m
diff --git a/src/openrouter/components/advisorreasoning.py b/src/openrouter/components/advisorreasoning.py
index a2ab438..0b87e3c 100644
--- a/src/openrouter/components/advisorreasoning.py
+++ b/src/openrouter/components/advisorreasoning.py
@@ -1,11 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from pydantic import model_serializer
from typing import Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
AdvisorReasoningEffort = Union[
@@ -35,10 +34,24 @@ class AdvisorReasoningTypedDict(TypedDict):
class AdvisorReasoning(BaseModel):
r"""Reasoning configuration forwarded to the advisor call. Use this to control reasoning effort and token budget for models that support extended thinking."""
- effort: Annotated[
- Optional[AdvisorReasoningEffort], PlainValidator(validate_open_enum(False))
- ] = None
+ effort: Optional[AdvisorReasoningEffort] = None
r"""Reasoning effort level for the advisor call."""
max_tokens: Optional[int] = None
r"""Maximum number of reasoning tokens the advisor may use."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["effort", "max_tokens"])
+ 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/advisorservertool_openrouter.py b/src/openrouter/components/advisorservertool_openrouter.py
index 923d263..ffec551 100644
--- a/src/openrouter/components/advisorservertool_openrouter.py
+++ b/src/openrouter/components/advisorservertool_openrouter.py
@@ -5,7 +5,8 @@ from .advisorservertoolconfig import (
AdvisorServerToolConfig,
AdvisorServerToolConfigTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -28,3 +29,19 @@ class AdvisorServerToolOpenRouter(BaseModel):
parameters: Optional[AdvisorServerToolConfig] = None
r"""Configuration for one openrouter:advisor server tool entry."""
+
+ @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/advisorservertoolconfig.py b/src/openrouter/components/advisorservertoolconfig.py
index 4540be9..d92e19f 100644
--- a/src/openrouter/components/advisorservertoolconfig.py
+++ b/src/openrouter/components/advisorservertoolconfig.py
@@ -3,7 +3,8 @@
from __future__ import annotations
from .advisornestedtool import AdvisorNestedTool, AdvisorNestedToolTypedDict
from .advisorreasoning import AdvisorReasoning, AdvisorReasoningTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Optional
from typing_extensions import NotRequired, TypedDict
@@ -65,3 +66,32 @@ class AdvisorServerToolConfig(BaseModel):
tools: Optional[List[AdvisorNestedTool]] = None
r"""Tools the advisor sub-agent may use while forming its advice. The advisor runs as an agentic sub-agent over these tools, then returns its text. Only OpenRouter server tools are supported — function tools are rejected — and the list must not include the advisor tool itself."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "forward_transcript",
+ "instructions",
+ "max_completion_tokens",
+ "max_tool_calls",
+ "model",
+ "name",
+ "reasoning",
+ "stream",
+ "temperature",
+ "tools",
+ ]
+ )
+ 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/anthropicadvisormessageusageiteration.py b/src/openrouter/components/anthropicadvisormessageusageiteration.py
index 86b0175..7b83b75 100644
--- a/src/openrouter/components/anthropicadvisormessageusageiteration.py
+++ b/src/openrouter/components/anthropicadvisormessageusageiteration.py
@@ -47,36 +47,33 @@ class AnthropicAdvisorMessageUsageIteration(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "cache_creation",
- "cache_creation_input_tokens",
- "cache_read_input_tokens",
- "input_tokens",
- "output_tokens",
- ]
- nullable_fields = ["cache_creation"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "cache_creation",
+ "cache_creation_input_tokens",
+ "cache_read_input_tokens",
+ "input_tokens",
+ "output_tokens",
+ ]
+ )
+ nullable_fields = set(["cache_creation"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/anthropicbase64imagesource.py b/src/openrouter/components/anthropicbase64imagesource.py
index b49ef8c..18b1840 100644
--- a/src/openrouter/components/anthropicbase64imagesource.py
+++ b/src/openrouter/components/anthropicbase64imagesource.py
@@ -3,10 +3,8 @@
from __future__ import annotations
from .anthropicimagemimetype import AnthropicImageMimeType
from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
from typing import Literal
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
AnthropicBase64ImageSourceType = Literal["base64",]
@@ -21,8 +19,6 @@ class AnthropicBase64ImageSourceTypedDict(TypedDict):
class AnthropicBase64ImageSource(BaseModel):
data: str
- media_type: Annotated[
- AnthropicImageMimeType, PlainValidator(validate_open_enum(False))
- ]
+ media_type: AnthropicImageMimeType
type: AnthropicBase64ImageSourceType
diff --git a/src/openrouter/components/anthropiccachecontroldirective.py b/src/openrouter/components/anthropiccachecontroldirective.py
index 4b2567b..a9292b2 100644
--- a/src/openrouter/components/anthropiccachecontroldirective.py
+++ b/src/openrouter/components/anthropiccachecontroldirective.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .anthropiccachecontrolttl import AnthropicCacheControlTTL
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
AnthropicCacheControlDirectiveType = Literal["ephemeral",]
@@ -24,6 +23,20 @@ class AnthropicCacheControlDirective(BaseModel):
type: AnthropicCacheControlDirectiveType
- ttl: Annotated[
- Optional[AnthropicCacheControlTTL], PlainValidator(validate_open_enum(False))
- ] = None
+ ttl: Optional[AnthropicCacheControlTTL] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["ttl"])
+ 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/anthropiccitationcharlocationparam.py b/src/openrouter/components/anthropiccitationcharlocationparam.py
index 08a89ab..4f0862e 100644
--- a/src/openrouter/components/anthropiccitationcharlocationparam.py
+++ b/src/openrouter/components/anthropiccitationcharlocationparam.py
@@ -34,30 +34,14 @@ class AnthropicCitationCharLocationParam(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["document_title"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/anthropiccitationcontentblocklocationparam.py b/src/openrouter/components/anthropiccitationcontentblocklocationparam.py
index 8763d42..7bdfee1 100644
--- a/src/openrouter/components/anthropiccitationcontentblocklocationparam.py
+++ b/src/openrouter/components/anthropiccitationcontentblocklocationparam.py
@@ -34,30 +34,14 @@ class AnthropicCitationContentBlockLocationParam(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["document_title"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/anthropiccitationpagelocationparam.py b/src/openrouter/components/anthropiccitationpagelocationparam.py
index 24af0c2..cbe0a66 100644
--- a/src/openrouter/components/anthropiccitationpagelocationparam.py
+++ b/src/openrouter/components/anthropiccitationpagelocationparam.py
@@ -34,30 +34,14 @@ class AnthropicCitationPageLocationParam(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["document_title"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/anthropiccitationsearchresultlocation.py b/src/openrouter/components/anthropiccitationsearchresultlocation.py
index 2c3548b..8a90ed4 100644
--- a/src/openrouter/components/anthropiccitationsearchresultlocation.py
+++ b/src/openrouter/components/anthropiccitationsearchresultlocation.py
@@ -37,30 +37,14 @@ class AnthropicCitationSearchResultLocation(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["title"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/anthropiccitationwebsearchresultlocation.py b/src/openrouter/components/anthropiccitationwebsearchresultlocation.py
index e64d169..4d061c6 100644
--- a/src/openrouter/components/anthropiccitationwebsearchresultlocation.py
+++ b/src/openrouter/components/anthropiccitationwebsearchresultlocation.py
@@ -31,30 +31,14 @@ class AnthropicCitationWebSearchResultLocation(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["title"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/anthropiccompactionusageiteration.py b/src/openrouter/components/anthropiccompactionusageiteration.py
index 5b00555..50ad24f 100644
--- a/src/openrouter/components/anthropiccompactionusageiteration.py
+++ b/src/openrouter/components/anthropiccompactionusageiteration.py
@@ -44,36 +44,33 @@ class AnthropicCompactionUsageIteration(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "cache_creation",
- "cache_creation_input_tokens",
- "cache_read_input_tokens",
- "input_tokens",
- "output_tokens",
- ]
- nullable_fields = ["cache_creation"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "cache_creation",
+ "cache_creation_input_tokens",
+ "cache_read_input_tokens",
+ "input_tokens",
+ "output_tokens",
+ ]
+ )
+ nullable_fields = set(["cache_creation"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/anthropicdocumentblockparam.py b/src/openrouter/components/anthropicdocumentblockparam.py
index 9aef9c7..686764b 100644
--- a/src/openrouter/components/anthropicdocumentblockparam.py
+++ b/src/openrouter/components/anthropicdocumentblockparam.py
@@ -46,6 +46,22 @@ class AnthropicDocumentBlockParamCitationsTypedDict(TypedDict):
class AnthropicDocumentBlockParamCitations(BaseModel):
enabled: Optional[bool] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["enabled"])
+ 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
+
AnthropicDocumentBlockParamContent1TypedDict = TypeAliasType(
"AnthropicDocumentBlockParamContent1TypedDict",
@@ -141,30 +157,25 @@ class AnthropicDocumentBlockParam(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["cache_control", "citations", "context", "title"]
- nullable_fields = ["citations", "context", "title"]
- null_default_fields = []
-
+ optional_fields = set(["cache_control", "citations", "context", "title"])
+ nullable_fields = set(["citations", "context", "title"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/anthropicimageblockparam.py b/src/openrouter/components/anthropicimageblockparam.py
index 05e6773..979d046 100644
--- a/src/openrouter/components/anthropicimageblockparam.py
+++ b/src/openrouter/components/anthropicimageblockparam.py
@@ -13,9 +13,9 @@ from .anthropicurlimagesource import (
AnthropicURLImageSource,
AnthropicURLImageSourceTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
+from pydantic import Discriminator, Tag, model_serializer
from typing import Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -52,3 +52,19 @@ class AnthropicImageBlockParam(BaseModel):
cache_control: Optional[AnthropicCacheControlDirective] = None
r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["cache_control"])
+ 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/anthropiciterationcachecreation.py b/src/openrouter/components/anthropiciterationcachecreation.py
index 9447771..b32195e 100644
--- a/src/openrouter/components/anthropiciterationcachecreation.py
+++ b/src/openrouter/components/anthropiciterationcachecreation.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import NotRequired, TypedDict
@@ -15,3 +16,21 @@ class AnthropicIterationCacheCreation(BaseModel):
ephemeral_1h_input_tokens: Optional[int] = None
ephemeral_5m_input_tokens: Optional[int] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["ephemeral_1h_input_tokens", "ephemeral_5m_input_tokens"]
+ )
+ 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/anthropicmessageusageiteration.py b/src/openrouter/components/anthropicmessageusageiteration.py
index 0c76c28..49e169b 100644
--- a/src/openrouter/components/anthropicmessageusageiteration.py
+++ b/src/openrouter/components/anthropicmessageusageiteration.py
@@ -47,37 +47,34 @@ class AnthropicMessageUsageIteration(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "cache_creation",
- "cache_creation_input_tokens",
- "cache_read_input_tokens",
- "input_tokens",
- "output_tokens",
- "model",
- ]
- nullable_fields = ["cache_creation"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "cache_creation",
+ "cache_creation_input_tokens",
+ "cache_read_input_tokens",
+ "input_tokens",
+ "output_tokens",
+ "model",
+ ]
+ )
+ nullable_fields = set(["cache_creation"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/anthropicsearchresultblockparam.py b/src/openrouter/components/anthropicsearchresultblockparam.py
index f953ecd..5925732 100644
--- a/src/openrouter/components/anthropicsearchresultblockparam.py
+++ b/src/openrouter/components/anthropicsearchresultblockparam.py
@@ -9,7 +9,8 @@ from .anthropictextblockparam import (
AnthropicTextBlockParam,
AnthropicTextBlockParamTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -21,6 +22,22 @@ class AnthropicSearchResultBlockParamCitationsTypedDict(TypedDict):
class AnthropicSearchResultBlockParamCitations(BaseModel):
enabled: Optional[bool] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["enabled"])
+ 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
+
AnthropicSearchResultBlockParamType = Literal["search_result",]
@@ -48,3 +65,19 @@ class AnthropicSearchResultBlockParam(BaseModel):
r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
citations: Optional[AnthropicSearchResultBlockParamCitations] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["cache_control", "citations"])
+ 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/anthropictextblockparam.py b/src/openrouter/components/anthropictextblockparam.py
index 38b493a..ed10fdc 100644
--- a/src/openrouter/components/anthropictextblockparam.py
+++ b/src/openrouter/components/anthropictextblockparam.py
@@ -89,30 +89,25 @@ class AnthropicTextBlockParam(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["cache_control", "citations"]
- nullable_fields = ["citations"]
- null_default_fields = []
-
+ optional_fields = set(["cache_control", "citations"])
+ nullable_fields = set(["citations"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/anthropicunknownusageiteration.py b/src/openrouter/components/anthropicunknownusageiteration.py
index 5bbd2e0..2bf0af8 100644
--- a/src/openrouter/components/anthropicunknownusageiteration.py
+++ b/src/openrouter/components/anthropicunknownusageiteration.py
@@ -41,36 +41,33 @@ class AnthropicUnknownUsageIteration(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "cache_creation",
- "cache_creation_input_tokens",
- "cache_read_input_tokens",
- "input_tokens",
- "output_tokens",
- ]
- nullable_fields = ["cache_creation"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "cache_creation",
+ "cache_creation_input_tokens",
+ "cache_read_input_tokens",
+ "input_tokens",
+ "output_tokens",
+ ]
+ )
+ nullable_fields = set(["cache_creation"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/anthropicwebsearchresultblockparam.py b/src/openrouter/components/anthropicwebsearchresultblockparam.py
index b9df82c..fbd558e 100644
--- a/src/openrouter/components/anthropicwebsearchresultblockparam.py
+++ b/src/openrouter/components/anthropicwebsearchresultblockparam.py
@@ -37,30 +37,25 @@ class AnthropicWebSearchResultBlockParam(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["page_age"]
- nullable_fields = ["page_age"]
- null_default_fields = []
-
+ optional_fields = set(["page_age"])
+ nullable_fields = set(["page_age"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/anthropicwebsearchtooluserlocation.py b/src/openrouter/components/anthropicwebsearchtooluserlocation.py
index 888de6c..194443c 100644
--- a/src/openrouter/components/anthropicwebsearchtooluserlocation.py
+++ b/src/openrouter/components/anthropicwebsearchtooluserlocation.py
@@ -37,30 +37,25 @@ class AnthropicWebSearchToolUserLocation(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["city", "country", "region", "timezone"]
- nullable_fields = ["city", "country", "region", "timezone"]
- null_default_fields = []
-
+ optional_fields = set(["city", "country", "region", "timezone"])
+ nullable_fields = set(["city", "country", "region", "timezone"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/applypatchcallitem.py b/src/openrouter/components/applypatchcallitem.py
index 1a5f1e0..798b10e 100644
--- a/src/openrouter/components/applypatchcallitem.py
+++ b/src/openrouter/components/applypatchcallitem.py
@@ -13,11 +13,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
ApplyPatchCallItemType = Literal["apply_patch_call",]
@@ -43,7 +41,7 @@ class ApplyPatchCallItem(BaseModel):
operation: ApplyPatchCallOperation
r"""The patch operation requested by an `apply_patch_call`. `create_file` and `update_file` carry a V4A diff; `delete_file` omits it."""
- status: Annotated[ApplyPatchCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ApplyPatchCallStatus
r"""Lifecycle state of an `apply_patch_call` output item."""
type: ApplyPatchCallItemType
@@ -52,30 +50,25 @@ class ApplyPatchCallItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["id"]
- nullable_fields = ["id"]
- null_default_fields = []
-
+ optional_fields = set(["id"])
+ nullable_fields = set(["id"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/applypatchcalloperation.py b/src/openrouter/components/applypatchcalloperation.py
index f0188f4..4445294 100644
--- a/src/openrouter/components/applypatchcalloperation.py
+++ b/src/openrouter/components/applypatchcalloperation.py
@@ -13,9 +13,12 @@ from .applypatchupdatefileoperation import (
ApplyPatchUpdateFileOperation,
ApplyPatchUpdateFileOperationTypedDict,
)
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import Union
+from functools import partial
+from openrouter.types import BaseModel
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Union
from typing_extensions import Annotated, TypeAliasType
@@ -30,12 +33,38 @@ ApplyPatchCallOperationTypedDict = TypeAliasType(
r"""The patch operation requested by an `apply_patch_call`. `create_file` and `update_file` carry a V4A diff; `delete_file` omits it."""
+class UnknownApplyPatchCallOperation(BaseModel):
+ r"""A ApplyPatchCallOperation variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_APPLY_PATCH_CALL_OPERATION_VARIANTS: dict[str, Any] = {
+ "create_file": ApplyPatchCreateFileOperation,
+ "delete_file": ApplyPatchDeleteFileOperation,
+ "update_file": ApplyPatchUpdateFileOperation,
+}
+
+
ApplyPatchCallOperation = Annotated[
Union[
- Annotated[ApplyPatchCreateFileOperation, Tag("create_file")],
- Annotated[ApplyPatchDeleteFileOperation, Tag("delete_file")],
- Annotated[ApplyPatchUpdateFileOperation, Tag("update_file")],
+ ApplyPatchCreateFileOperation,
+ ApplyPatchDeleteFileOperation,
+ ApplyPatchUpdateFileOperation,
+ UnknownApplyPatchCallOperation,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_APPLY_PATCH_CALL_OPERATION_VARIANTS,
+ unknown_cls=UnknownApplyPatchCallOperation,
+ union_name="ApplyPatchCallOperation",
+ )
+ ),
]
r"""The patch operation requested by an `apply_patch_call`. `create_file` and `update_file` carry a V4A diff; `delete_file` omits it."""
diff --git a/src/openrouter/components/applypatchcalloutputitem.py b/src/openrouter/components/applypatchcalloutputitem.py
index 1b768e6..7d543c9 100644
--- a/src/openrouter/components/applypatchcalloutputitem.py
+++ b/src/openrouter/components/applypatchcalloutputitem.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
ApplyPatchCallOutputItemStatus = Union[
@@ -43,9 +41,7 @@ class ApplyPatchCallOutputItem(BaseModel):
call_id: str
- status: Annotated[
- ApplyPatchCallOutputItemStatus, PlainValidator(validate_open_enum(False))
- ]
+ status: ApplyPatchCallOutputItemStatus
type: ApplyPatchCallOutputItemType
@@ -55,30 +51,25 @@ class ApplyPatchCallOutputItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["id", "output"]
- nullable_fields = ["id", "output"]
- null_default_fields = []
-
+ optional_fields = set(["id", "output"])
+ nullable_fields = set(["id", "output"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/applypatchservertool_openrouter.py b/src/openrouter/components/applypatchservertool_openrouter.py
index 158c52b..daf2de6 100644
--- a/src/openrouter/components/applypatchservertool_openrouter.py
+++ b/src/openrouter/components/applypatchservertool_openrouter.py
@@ -5,7 +5,8 @@ from .applypatchservertoolconfig import (
ApplyPatchServerToolConfig,
ApplyPatchServerToolConfigTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -28,3 +29,19 @@ class ApplyPatchServerToolOpenRouter(BaseModel):
parameters: Optional[ApplyPatchServerToolConfig] = None
r"""Configuration for the openrouter:apply_patch 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/applypatchservertoolconfig.py b/src/openrouter/components/applypatchservertoolconfig.py
index 61d5a3b..6220993 100644
--- a/src/openrouter/components/applypatchservertoolconfig.py
+++ b/src/openrouter/components/applypatchservertoolconfig.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .applypatchengineenum import ApplyPatchEngineEnum
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class ApplyPatchServerToolConfigTypedDict(TypedDict):
@@ -19,7 +18,21 @@ class ApplyPatchServerToolConfigTypedDict(TypedDict):
class ApplyPatchServerToolConfig(BaseModel):
r"""Configuration for the openrouter:apply_patch server tool"""
- engine: Annotated[
- Optional[ApplyPatchEngineEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ engine: Optional[ApplyPatchEngineEnum] = None
r"""Which apply_patch engine to use. \"auto\" (default) uses native passthrough when the endpoint advertises native apply_patch support, otherwise falls back to OpenRouter's HITL validator. \"native\" forces native passthrough — when the endpoint does not support native, the request falls back to HITL. \"openrouter\" always runs the HITL validator. Native passthrough streams the diff incrementally via `apply_patch_call_operation_diff.delta` events; HITL buffers the diff for atomic delivery as a single delta."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["engine"])
+ 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/autorouterplugin.py b/src/openrouter/components/autorouterplugin.py
index 665aaa0..64a0715 100644
--- a/src/openrouter/components/autorouterplugin.py
+++ b/src/openrouter/components/autorouterplugin.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -30,3 +31,19 @@ class AutoRouterPlugin(BaseModel):
enabled: Optional[bool] = None
r"""Set to false to disable the auto-router plugin for this request. Defaults to true."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["allowed_models", "cost_quality_tradeoff", "enabled"])
+ 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/badgatewayresponseerrordata.py b/src/openrouter/components/badgatewayresponseerrordata.py
index c1740ad..0890553 100644
--- a/src/openrouter/components/badgatewayresponseerrordata.py
+++ b/src/openrouter/components/badgatewayresponseerrordata.py
@@ -32,30 +32,25 @@ class BadGatewayResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/badrequestresponseerrordata.py b/src/openrouter/components/badrequestresponseerrordata.py
index caaacbd..c59b958 100644
--- a/src/openrouter/components/badrequestresponseerrordata.py
+++ b/src/openrouter/components/badrequestresponseerrordata.py
@@ -32,30 +32,25 @@ class BadRequestResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/baseinputs_union.py b/src/openrouter/components/baseinputs_union.py
index 25128bd..56b48e7 100644
--- a/src/openrouter/components/baseinputs_union.py
+++ b/src/openrouter/components/baseinputs_union.py
@@ -35,6 +35,7 @@ from .outputitemimagegenerationcall import (
OutputItemImageGenerationCallTypedDict,
)
from .outputmessage import OutputMessage, OutputMessageTypedDict
+from functools import partial
from openrouter.types import (
BaseModel,
Nullable,
@@ -42,8 +43,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag, model_serializer
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict, model_serializer
+from pydantic.functional_validators import BeforeValidator
from typing import Any, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -56,14 +58,35 @@ BaseInputsContent1TypedDict = TypeAliasType(
)
+class UnknownBaseInputsContent1(BaseModel):
+ r"""A BaseInputsContent1 variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_BASE_INPUTS_CONTENT_1_VARIANTS: dict[str, Any] = {
+ "input_audio": InputAudio,
+ "input_file": InputFile,
+ "input_image": InputImage,
+ "input_text": InputText,
+}
+
+
BaseInputsContent1 = Annotated[
- Union[
- Annotated[InputAudio, Tag("input_audio")],
- Annotated[InputFile, Tag("input_file")],
- Annotated[InputImage, Tag("input_image")],
- Annotated[InputText, Tag("input_text")],
- ],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ Union[InputAudio, InputFile, InputImage, InputText, UnknownBaseInputsContent1],
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_BASE_INPUTS_CONTENT_1_VARIANTS,
+ unknown_cls=UnknownBaseInputsContent1,
+ union_name="BaseInputsContent1",
+ )
+ ),
]
@@ -150,31 +173,26 @@ class BaseInputsMessage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["phase", "type"]
- nullable_fields = ["phase"]
- null_default_fields = []
-
+ optional_fields = set(["phase", "type"])
+ nullable_fields = set(["phase"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/basereasoningconfig.py b/src/openrouter/components/basereasoningconfig.py
index 22bd982..35d8ea7 100644
--- a/src/openrouter/components/basereasoningconfig.py
+++ b/src/openrouter/components/basereasoningconfig.py
@@ -10,10 +10,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class BaseReasoningConfigTypedDict(TypedDict):
@@ -22,41 +20,31 @@ class BaseReasoningConfigTypedDict(TypedDict):
class BaseReasoningConfig(BaseModel):
- effort: Annotated[
- OptionalNullable[ReasoningEffort], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ effort: OptionalNullable[ReasoningEffort] = UNSET
- summary: Annotated[
- OptionalNullable[ReasoningSummaryVerbosity],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ summary: OptionalNullable[ReasoningSummaryVerbosity] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["effort", "summary"]
- nullable_fields = ["effort", "summary"]
- null_default_fields = []
-
+ optional_fields = set(["effort", "summary"])
+ nullable_fields = set(["effort", "summary"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/bashservertool.py b/src/openrouter/components/bashservertool.py
index a3021f9..b2a5076 100644
--- a/src/openrouter/components/bashservertool.py
+++ b/src/openrouter/components/bashservertool.py
@@ -2,7 +2,8 @@
from __future__ import annotations
from .bashservertoolconfig import BashServerToolConfig, BashServerToolConfigTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -25,3 +26,19 @@ class BashServerTool(BaseModel):
parameters: Optional[BashServerToolConfig] = None
r"""Configuration for the openrouter:bash 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/bashservertoolconfig.py b/src/openrouter/components/bashservertoolconfig.py
index 4ccf38d..7bb3220 100644
--- a/src/openrouter/components/bashservertoolconfig.py
+++ b/src/openrouter/components/bashservertoolconfig.py
@@ -6,11 +6,10 @@ from .bashservertoolenvironment import (
BashServerToolEnvironment,
BashServerToolEnvironmentTypedDict,
)
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class BashServerToolConfigTypedDict(TypedDict):
@@ -27,9 +26,7 @@ class BashServerToolConfigTypedDict(TypedDict):
class BashServerToolConfig(BaseModel):
r"""Configuration for the openrouter:bash server tool"""
- engine: Annotated[
- Optional[BashServerToolEngine], PlainValidator(validate_open_enum(False))
- ] = None
+ engine: Optional[BashServerToolEngine] = None
r"""Which bash engine to use. \"openrouter\" runs commands server-side in the OpenRouter sandbox. \"auto\" (default) and \"native\" use native passthrough, returning the tool call to your application to run client-side; OpenRouter does not execute the commands."""
environment: Optional[BashServerToolEnvironment] = None
@@ -37,3 +34,19 @@ class BashServerToolConfig(BaseModel):
sleep_after_seconds: Optional[int] = None
r"""How long (in seconds) the container stays warm after its last command before sleeping, freeing its capacity slot. Idle-based: each command renews the timer. Defaults to 900 (15 minutes); capped at 2592000 (30 days)."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["engine", "environment", "sleep_after_seconds"])
+ 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/byokkey.py b/src/openrouter/components/byokkey.py
index 033a6f3..47ef267 100644
--- a/src/openrouter/components/byokkey.py
+++ b/src/openrouter/components/byokkey.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class BYOKKeyTypedDict(TypedDict):
@@ -68,7 +66,7 @@ class BYOKKey(BaseModel):
label: str
r"""Short masked snippet of the key (e.g. the first/last few characters) used to identify it in the UI."""
- provider: Annotated[BYOKProviderSlug, PlainValidator(validate_open_enum(False))]
+ provider: BYOKProviderSlug
r"""The upstream provider this credential authenticates against, as a lowercase slug (e.g. `openai`, `anthropic`, `amazon-bedrock`)."""
sort_order: int
@@ -82,35 +80,27 @@ class BYOKKey(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["name"]
- nullable_fields = [
- "allowed_api_key_hashes",
- "allowed_models",
- "allowed_user_ids",
- "name",
- ]
- null_default_fields = []
-
+ optional_fields = set(["name"])
+ nullable_fields = set(
+ ["allowed_api_key_hashes", "allowed_models", "allowed_user_ids", "name"]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/capabilitydescriptor.py b/src/openrouter/components/capabilitydescriptor.py
index 3b40c65..a1cb577 100644
--- a/src/openrouter/components/capabilitydescriptor.py
+++ b/src/openrouter/components/capabilitydescriptor.py
@@ -4,9 +4,12 @@ from __future__ import annotations
from .booleancapability import BooleanCapability, BooleanCapabilityTypedDict
from .enumcapability import EnumCapability, EnumCapabilityTypedDict
from .rangecapability import RangeCapability, RangeCapabilityTypedDict
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import Union
+from functools import partial
+from openrouter.types import BaseModel
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Union
from typing_extensions import Annotated, TypeAliasType
@@ -19,12 +22,35 @@ CapabilityDescriptorTypedDict = TypeAliasType(
r"""A typed descriptor for one supported request parameter."""
+class UnknownCapabilityDescriptor(BaseModel):
+ r"""A CapabilityDescriptor variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_CAPABILITY_DESCRIPTOR_VARIANTS: dict[str, Any] = {
+ "enum": EnumCapability,
+ "range": RangeCapability,
+ "boolean": BooleanCapability,
+}
+
+
CapabilityDescriptor = Annotated[
Union[
- Annotated[EnumCapability, Tag("enum")],
- Annotated[RangeCapability, Tag("range")],
- Annotated[BooleanCapability, Tag("boolean")],
+ EnumCapability, RangeCapability, BooleanCapability, UnknownCapabilityDescriptor
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_CAPABILITY_DESCRIPTOR_VARIANTS,
+ unknown_cls=UnknownCapabilityDescriptor,
+ union_name="CapabilityDescriptor",
+ )
+ ),
]
r"""A typed descriptor for one supported request parameter."""
diff --git a/src/openrouter/components/chatassistantmessage.py b/src/openrouter/components/chatassistantmessage.py
index 60b919a..f000d90 100644
--- a/src/openrouter/components/chatassistantmessage.py
+++ b/src/openrouter/components/chatassistantmessage.py
@@ -87,39 +87,36 @@ class ChatAssistantMessage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "audio",
- "content",
- "images",
- "name",
- "reasoning",
- "reasoning_details",
- "refusal",
- "tool_calls",
- ]
- nullable_fields = ["content", "reasoning", "refusal"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "audio",
+ "content",
+ "images",
+ "name",
+ "reasoning",
+ "reasoning_details",
+ "refusal",
+ "tool_calls",
+ ]
+ )
+ nullable_fields = set(["content", "reasoning", "refusal"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/chataudiooutput.py b/src/openrouter/components/chataudiooutput.py
index 0ce4edf..7b5a13b 100644
--- a/src/openrouter/components/chataudiooutput.py
+++ b/src/openrouter/components/chataudiooutput.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import NotRequired, TypedDict
@@ -33,3 +34,19 @@ class ChatAudioOutput(BaseModel):
transcript: Optional[str] = None
r"""Audio transcript"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["data", "expires_at", "id", "transcript"])
+ 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/chatchoice.py b/src/openrouter/components/chatchoice.py
index 8651759..c15a10e 100644
--- a/src/openrouter/components/chatchoice.py
+++ b/src/openrouter/components/chatchoice.py
@@ -11,10 +11,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class ChatChoiceTypedDict(TypedDict):
@@ -32,9 +30,7 @@ class ChatChoiceTypedDict(TypedDict):
class ChatChoice(BaseModel):
r"""Chat completion choice"""
- finish_reason: Annotated[
- Nullable[ChatFinishReasonEnum], PlainValidator(validate_open_enum(False))
- ]
+ finish_reason: Nullable[ChatFinishReasonEnum]
index: int
r"""Choice index"""
@@ -47,30 +43,25 @@ class ChatChoice(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["logprobs"]
- nullable_fields = ["finish_reason", "logprobs"]
- null_default_fields = []
-
+ optional_fields = set(["logprobs"])
+ nullable_fields = set(["finish_reason", "logprobs"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/chatcontentaudio.py b/src/openrouter/components/chatcontentaudio.py
index ad506c0..b937a2d 100644
--- a/src/openrouter/components/chatcontentaudio.py
+++ b/src/openrouter/components/chatcontentaudio.py
@@ -38,3 +38,9 @@ class ChatContentAudio(BaseModel):
input_audio: ChatContentAudioInputAudio
type: ChatContentAudioType
+
+
+try:
+ ChatContentAudioInputAudio.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/chatcontentcachecontrol.py b/src/openrouter/components/chatcontentcachecontrol.py
index 7263adc..e23d405 100644
--- a/src/openrouter/components/chatcontentcachecontrol.py
+++ b/src/openrouter/components/chatcontentcachecontrol.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .anthropiccachecontrolttl import AnthropicCacheControlTTL
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
ChatContentCacheControlType = Literal["ephemeral",]
@@ -24,6 +23,20 @@ class ChatContentCacheControl(BaseModel):
type: ChatContentCacheControlType
- ttl: Annotated[
- Optional[AnthropicCacheControlTTL], PlainValidator(validate_open_enum(False))
- ] = None
+ ttl: Optional[AnthropicCacheControlTTL] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["ttl"])
+ 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/chatcontentfile.py b/src/openrouter/components/chatcontentfile.py
index e737cbd..07d3d04 100644
--- a/src/openrouter/components/chatcontentfile.py
+++ b/src/openrouter/components/chatcontentfile.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -25,6 +26,22 @@ class File(BaseModel):
filename: Optional[str] = None
r"""Original filename"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["file_data", "file_id", "filename"])
+ 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
+
ChatContentFileType = Literal["file",]
diff --git a/src/openrouter/components/chatcontentimage.py b/src/openrouter/components/chatcontentimage.py
index 45430fd..44c4909 100644
--- a/src/openrouter/components/chatcontentimage.py
+++ b/src/openrouter/components/chatcontentimage.py
@@ -1,11 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from pydantic import model_serializer
from typing import Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
ChatContentImageDetail = Union[
@@ -31,11 +30,25 @@ class ChatContentImageImageURL(BaseModel):
url: str
r"""URL of the image (data: URLs supported)"""
- detail: Annotated[
- Optional[ChatContentImageDetail], PlainValidator(validate_open_enum(False))
- ] = None
+ detail: Optional[ChatContentImageDetail] = None
r"""Image detail level for vision models. `original` is an OpenRouter extension (not in the OpenAI Chat Completions spec) requesting true original-resolution media; it is downgraded to `high` for providers that lack an original-resolution tier."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["detail"])
+ 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
+
ChatContentImageType = Literal["image_url",]
diff --git a/src/openrouter/components/chatcontentitems.py b/src/openrouter/components/chatcontentitems.py
index cb153a0..61415b0 100644
--- a/src/openrouter/components/chatcontentitems.py
+++ b/src/openrouter/components/chatcontentitems.py
@@ -10,9 +10,12 @@ from .legacy_chatcontentvideo import (
LegacyChatContentVideo,
LegacyChatContentVideoTypedDict,
)
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import Union
+from functools import partial
+from openrouter.types import BaseModel
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Union
from typing_extensions import Annotated, TypeAliasType
@@ -30,15 +33,44 @@ ChatContentItemsTypedDict = TypeAliasType(
r"""Content part for chat completion messages"""
+class UnknownChatContentItems(BaseModel):
+ r"""A ChatContentItems variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_CHAT_CONTENT_ITEMS_VARIANTS: dict[str, Any] = {
+ "file": ChatContentFile,
+ "image_url": ChatContentImage,
+ "input_audio": ChatContentAudio,
+ "input_video": LegacyChatContentVideo,
+ "text": ChatContentText,
+ "video_url": ChatContentVideo,
+}
+
+
ChatContentItems = Annotated[
Union[
- Annotated[ChatContentFile, Tag("file")],
- Annotated[ChatContentImage, Tag("image_url")],
- Annotated[ChatContentAudio, Tag("input_audio")],
- Annotated[LegacyChatContentVideo, Tag("input_video")],
- Annotated[ChatContentText, Tag("text")],
- Annotated[ChatContentVideo, Tag("video_url")],
+ ChatContentFile,
+ ChatContentImage,
+ ChatContentAudio,
+ LegacyChatContentVideo,
+ ChatContentText,
+ ChatContentVideo,
+ UnknownChatContentItems,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_CHAT_CONTENT_ITEMS_VARIANTS,
+ unknown_cls=UnknownChatContentItems,
+ union_name="ChatContentItems",
+ )
+ ),
]
r"""Content part for chat completion messages"""
diff --git a/src/openrouter/components/chatcontenttext.py b/src/openrouter/components/chatcontenttext.py
index 4367bde..86d0a04 100644
--- a/src/openrouter/components/chatcontenttext.py
+++ b/src/openrouter/components/chatcontenttext.py
@@ -5,7 +5,8 @@ from .chatcontentcachecontrol import (
ChatContentCacheControl,
ChatContentCacheControlTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -31,3 +32,19 @@ class ChatContentText(BaseModel):
cache_control: Optional[ChatContentCacheControl] = None
r"""Cache control for the content part"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["cache_control"])
+ 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/chatdebugoptions.py b/src/openrouter/components/chatdebugoptions.py
index 777d93e..309df10 100644
--- a/src/openrouter/components/chatdebugoptions.py
+++ b/src/openrouter/components/chatdebugoptions.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import NotRequired, TypedDict
@@ -18,3 +19,19 @@ class ChatDebugOptions(BaseModel):
echo_upstream_body: Optional[bool] = None
r"""If true, includes the transformed upstream request body in a debug chunk at the start of the stream. Only works with streaming mode."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["echo_upstream_body"])
+ 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/chatdevelopermessage.py b/src/openrouter/components/chatdevelopermessage.py
index 175218a..56dcbb9 100644
--- a/src/openrouter/components/chatdevelopermessage.py
+++ b/src/openrouter/components/chatdevelopermessage.py
@@ -2,7 +2,8 @@
from __future__ import annotations
from .chatcontenttext import ChatContentText, ChatContentTextTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Literal, Optional, Union
from typing_extensions import NotRequired, TypeAliasType, TypedDict
@@ -42,3 +43,19 @@ class ChatDeveloperMessage(BaseModel):
name: Optional[str] = None
r"""Optional name for the developer message"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["name"])
+ 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/chatfunctiontool.py b/src/openrouter/components/chatfunctiontool.py
index e0f23b3..b62a155 100644
--- a/src/openrouter/components/chatfunctiontool.py
+++ b/src/openrouter/components/chatfunctiontool.py
@@ -19,6 +19,7 @@ from .chatwebsearchshorthand import (
ChatWebSearchShorthandTypedDict,
)
from .datetimeservertool import DatetimeServerTool, DatetimeServerToolTypedDict
+from .filesservertool import FilesServerTool, FilesServerToolTypedDict
from .imagegenerationservertool_openrouter import (
ImageGenerationServerToolOpenRouter,
ImageGenerationServerToolOpenRouterTypedDict,
@@ -39,10 +40,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag, model_serializer
+from pydantic import model_serializer
from typing import Any, Dict, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
+from typing_extensions import NotRequired, TypeAliasType, TypedDict
class ChatFunctionToolFunctionFunctionTypedDict(TypedDict):
@@ -75,31 +75,26 @@ class ChatFunctionToolFunctionFunction(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["description", "parameters", "strict"]
- nullable_fields = ["strict"]
- null_default_fields = []
-
+ optional_fields = set(["description", "parameters", "strict"])
+ nullable_fields = set(["strict"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -124,6 +119,22 @@ class ChatFunctionToolFunction(BaseModel):
cache_control: Optional[ChatContentCacheControl] = None
r"""Cache control for the content part"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["cache_control"])
+ 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
+
ChatFunctionToolTypedDict = TypeAliasType(
"ChatFunctionToolTypedDict",
@@ -131,6 +142,7 @@ ChatFunctionToolTypedDict = TypeAliasType(
AdvisorServerToolOpenRouterTypedDict,
BashServerToolTypedDict,
DatetimeServerToolTypedDict,
+ FilesServerToolTypedDict,
ImageGenerationServerToolOpenRouterTypedDict,
ChatSearchModelsServerToolTypedDict,
SubagentServerToolOpenRouterTypedDict,
@@ -143,26 +155,20 @@ ChatFunctionToolTypedDict = TypeAliasType(
r"""Tool definition for function calling (regular function or OpenRouter built-in server tool)"""
-ChatFunctionTool = Annotated[
+ChatFunctionTool = TypeAliasType(
+ "ChatFunctionTool",
Union[
- Annotated[ChatFunctionToolFunction, Tag("function")],
- Annotated[AdvisorServerToolOpenRouter, Tag("openrouter:advisor")],
- Annotated[BashServerTool, Tag("openrouter:bash")],
- Annotated[DatetimeServerTool, Tag("openrouter:datetime")],
- Annotated[
- ImageGenerationServerToolOpenRouter, Tag("openrouter:image_generation")
- ],
- Annotated[
- ChatSearchModelsServerTool, Tag("openrouter:experimental__search_models")
- ],
- Annotated[SubagentServerToolOpenRouter, Tag("openrouter:subagent")],
- Annotated[WebFetchServerTool, Tag("openrouter:web_fetch")],
- Annotated[OpenRouterWebSearchServerTool, Tag("openrouter:web_search")],
- Annotated[ChatWebSearchShorthand, Tag("web_search")],
- Annotated[ChatWebSearchShorthand, Tag("web_search_preview")],
- Annotated[ChatWebSearchShorthand, Tag("web_search_preview_2025_03_11")],
- Annotated[ChatWebSearchShorthand, Tag("web_search_2025_08_26")],
+ AdvisorServerToolOpenRouter,
+ BashServerTool,
+ DatetimeServerTool,
+ FilesServerTool,
+ ImageGenerationServerToolOpenRouter,
+ ChatSearchModelsServerTool,
+ SubagentServerToolOpenRouter,
+ WebFetchServerTool,
+ OpenRouterWebSearchServerTool,
+ ChatFunctionToolFunction,
+ ChatWebSearchShorthand,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
-]
+)
r"""Tool definition for function calling (regular function or OpenRouter built-in server tool)"""
diff --git a/src/openrouter/components/chatjsonschemaconfig.py b/src/openrouter/components/chatjsonschemaconfig.py
index 0131544..4b3aa41 100644
--- a/src/openrouter/components/chatjsonschemaconfig.py
+++ b/src/openrouter/components/chatjsonschemaconfig.py
@@ -46,30 +46,31 @@ class ChatJSONSchemaConfig(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["description", "schema", "strict"]
- nullable_fields = ["strict"]
- null_default_fields = []
-
+ optional_fields = set(["description", "schema", "strict"])
+ nullable_fields = set(["strict"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
+
+
+try:
+ ChatJSONSchemaConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/chatrequest.py b/src/openrouter/components/chatrequest.py
index f60f367..3ab5ba1 100644
--- a/src/openrouter/components/chatrequest.py
+++ b/src/openrouter/components/chatrequest.py
@@ -55,9 +55,8 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import get_discriminator, validate_open_enum
+from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, Dict, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -130,43 +129,33 @@ class ChatRequestReasoningTypedDict(TypedDict):
class ChatRequestReasoning(BaseModel):
r"""Configuration options for reasoning models"""
- effort: Annotated[
- OptionalNullable[ChatRequestEffort], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ effort: OptionalNullable[ChatRequestEffort] = UNSET
r"""Constrains effort on reasoning for reasoning models"""
- summary: Annotated[
- OptionalNullable[ChatReasoningSummaryVerbosityEnum],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ summary: OptionalNullable[ChatReasoningSummaryVerbosityEnum] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["effort", "summary"]
- nullable_fields = ["effort", "summary"]
- null_default_fields = []
-
+ optional_fields = set(["effort", "summary"])
+ nullable_fields = set(["effort", "summary"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -350,9 +339,7 @@ class ChatRequest(BaseModel):
min_p: OptionalNullable[float] = UNSET
r"""Minimum probability threshold relative to the most likely token. Tokens with probability below min_p * (probability of top token) are filtered out. Not all providers support this parameter."""
- modalities: Optional[
- List[Annotated[Modality, PlainValidator(validate_open_enum(False))]]
- ] = None
+ modalities: Optional[List[Modality]] = None
r"""Output modalities for the response. Supported values are \"text\", \"image\", and \"audio\"."""
model: Optional[str] = None
@@ -376,10 +363,7 @@ class ChatRequest(BaseModel):
reasoning: Optional[ChatRequestReasoning] = None
r"""Configuration options for reasoning models"""
- reasoning_effort: Annotated[
- OptionalNullable[ChatRequestReasoningEffort],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ reasoning_effort: OptionalNullable[ChatRequestReasoningEffort] = UNSET
r"""Shorthand for setting reasoning effort. Equivalent to setting reasoning.effort. Cannot be used simultaneously with reasoning.effort if they differ."""
repetition_penalty: OptionalNullable[float] = UNSET
@@ -391,10 +375,7 @@ class ChatRequest(BaseModel):
seed: OptionalNullable[int] = UNSET
r"""Random seed for deterministic outputs"""
- service_tier: Annotated[
- OptionalNullable[ChatRequestServiceTier],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ service_tier: OptionalNullable[ChatRequestServiceTier] = UNSET
r"""The service tier to use for processing this request."""
session_id: Optional[str] = None
@@ -441,89 +422,88 @@ class ChatRequest(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "cache_control",
- "debug",
- "frequency_penalty",
- "image_config",
- "logit_bias",
- "logprobs",
- "max_completion_tokens",
- "max_tokens",
- "metadata",
- "min_p",
- "modalities",
- "model",
- "models",
- "parallel_tool_calls",
- "plugins",
- "presence_penalty",
- "provider",
- "reasoning",
- "reasoning_effort",
- "repetition_penalty",
- "response_format",
- "seed",
- "service_tier",
- "session_id",
- "stop",
- "stop_server_tools_when",
- "stream",
- "stream_options",
- "temperature",
- "tool_choice",
- "tools",
- "top_a",
- "top_k",
- "top_logprobs",
- "top_p",
- "trace",
- "user",
- ]
- nullable_fields = [
- "frequency_penalty",
- "logit_bias",
- "logprobs",
- "max_completion_tokens",
- "max_tokens",
- "min_p",
- "parallel_tool_calls",
- "presence_penalty",
- "provider",
- "reasoning_effort",
- "repetition_penalty",
- "seed",
- "service_tier",
- "stop",
- "stream_options",
- "temperature",
- "top_a",
- "top_k",
- "top_logprobs",
- "top_p",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "cache_control",
+ "debug",
+ "frequency_penalty",
+ "image_config",
+ "logit_bias",
+ "logprobs",
+ "max_completion_tokens",
+ "max_tokens",
+ "metadata",
+ "min_p",
+ "modalities",
+ "model",
+ "models",
+ "parallel_tool_calls",
+ "plugins",
+ "presence_penalty",
+ "provider",
+ "reasoning",
+ "reasoning_effort",
+ "repetition_penalty",
+ "response_format",
+ "seed",
+ "service_tier",
+ "session_id",
+ "stop",
+ "stop_server_tools_when",
+ "stream",
+ "stream_options",
+ "temperature",
+ "tool_choice",
+ "tools",
+ "top_a",
+ "top_k",
+ "top_logprobs",
+ "top_p",
+ "trace",
+ "user",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "frequency_penalty",
+ "logit_bias",
+ "logprobs",
+ "max_completion_tokens",
+ "max_tokens",
+ "min_p",
+ "parallel_tool_calls",
+ "presence_penalty",
+ "provider",
+ "reasoning_effort",
+ "repetition_penalty",
+ "seed",
+ "service_tier",
+ "stop",
+ "stream_options",
+ "temperature",
+ "top_a",
+ "top_k",
+ "top_logprobs",
+ "top_p",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/chatresult.py b/src/openrouter/components/chatresult.py
index 85bb6c1..e91d161 100644
--- a/src/openrouter/components/chatresult.py
+++ b/src/openrouter/components/chatresult.py
@@ -70,30 +70,25 @@ class ChatResult(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["openrouter_metadata", "service_tier", "usage"]
- nullable_fields = ["service_tier", "system_fingerprint"]
- null_default_fields = []
-
+ optional_fields = set(["openrouter_metadata", "service_tier", "usage"])
+ nullable_fields = set(["service_tier", "system_fingerprint"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/chatsearchmodelsservertool.py b/src/openrouter/components/chatsearchmodelsservertool.py
index 5c78164..e6ea547 100644
--- a/src/openrouter/components/chatsearchmodelsservertool.py
+++ b/src/openrouter/components/chatsearchmodelsservertool.py
@@ -5,7 +5,8 @@ from .searchmodelsservertoolconfig import (
SearchModelsServerToolConfig,
SearchModelsServerToolConfigTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -28,3 +29,19 @@ class ChatSearchModelsServerTool(BaseModel):
parameters: Optional[SearchModelsServerToolConfig] = None
r"""Configuration for the openrouter:experimental__search_models 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/chatstreamchoice.py b/src/openrouter/components/chatstreamchoice.py
index 9166d93..688a877 100644
--- a/src/openrouter/components/chatstreamchoice.py
+++ b/src/openrouter/components/chatstreamchoice.py
@@ -11,10 +11,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class ChatStreamChoiceTypedDict(TypedDict):
@@ -35,9 +33,7 @@ class ChatStreamChoice(BaseModel):
delta: ChatStreamDelta
r"""Delta changes in streaming response"""
- finish_reason: Annotated[
- Nullable[ChatFinishReasonEnum], PlainValidator(validate_open_enum(False))
- ]
+ finish_reason: Nullable[ChatFinishReasonEnum]
index: int
r"""Choice index"""
@@ -47,30 +43,25 @@ class ChatStreamChoice(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["logprobs"]
- nullable_fields = ["finish_reason", "logprobs"]
- null_default_fields = []
-
+ optional_fields = set(["logprobs"])
+ nullable_fields = set(["finish_reason", "logprobs"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/chatstreamchunk.py b/src/openrouter/components/chatstreamchunk.py
index 1f00ab1..aec4bc5 100644
--- a/src/openrouter/components/chatstreamchunk.py
+++ b/src/openrouter/components/chatstreamchunk.py
@@ -12,11 +12,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class ChatStreamChunkMetadataTypedDict(TypedDict):
@@ -31,12 +29,28 @@ class ChatStreamChunkMetadataTypedDict(TypedDict):
class ChatStreamChunkMetadata(BaseModel):
r"""Structured error metadata"""
- error_type: Annotated[APIErrorType, PlainValidator(validate_open_enum(False))]
+ error_type: APIErrorType
r"""Canonical OpenRouter error type, stable across all API formats"""
provider_code: Optional[str] = None
r"""Upstream provider-specific error code, when available"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["provider_code"])
+ 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
+
class ChatStreamChunkErrorTypedDict(TypedDict):
r"""Error information"""
@@ -61,6 +75,22 @@ class ChatStreamChunkError(BaseModel):
metadata: Optional[ChatStreamChunkMetadata] = None
r"""Structured error metadata"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["metadata"])
+ 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
+
ChatStreamChunkObject = Literal["chat.completion.chunk",]
@@ -121,36 +151,33 @@ class ChatStreamChunk(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "error",
- "openrouter_metadata",
- "service_tier",
- "system_fingerprint",
- "usage",
- ]
- nullable_fields = ["service_tier"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "error",
+ "openrouter_metadata",
+ "service_tier",
+ "system_fingerprint",
+ "usage",
+ ]
+ )
+ nullable_fields = set(["service_tier"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/chatstreamdelta.py b/src/openrouter/components/chatstreamdelta.py
index 8d0c74c..6eb1078 100644
--- a/src/openrouter/components/chatstreamdelta.py
+++ b/src/openrouter/components/chatstreamdelta.py
@@ -63,38 +63,35 @@ class ChatStreamDelta(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "audio",
- "content",
- "reasoning",
- "reasoning_details",
- "refusal",
- "role",
- "tool_calls",
- ]
- nullable_fields = ["content", "reasoning", "refusal"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "audio",
+ "content",
+ "reasoning",
+ "reasoning_details",
+ "refusal",
+ "role",
+ "tool_calls",
+ ]
+ )
+ nullable_fields = set(["content", "reasoning", "refusal"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/chatstreamoptions.py b/src/openrouter/components/chatstreamoptions.py
index 48eb279..cecb204 100644
--- a/src/openrouter/components/chatstreamoptions.py
+++ b/src/openrouter/components/chatstreamoptions.py
@@ -1,8 +1,9 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -24,3 +25,19 @@ class ChatStreamOptions(BaseModel):
),
] = None
r"""Deprecated: This field has no effect. Full usage details are always included."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["include_usage"])
+ 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/chatstreamtoolcall.py b/src/openrouter/components/chatstreamtoolcall.py
index 4612139..936fefc 100644
--- a/src/openrouter/components/chatstreamtoolcall.py
+++ b/src/openrouter/components/chatstreamtoolcall.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -24,6 +25,22 @@ class ChatStreamToolCallFunction(BaseModel):
name: Optional[str] = None
r"""Function name"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["arguments", "name"])
+ 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
+
ChatStreamToolCallType = Literal["function",]
r"""Tool call type"""
@@ -56,3 +73,19 @@ class ChatStreamToolCall(BaseModel):
type: Optional[ChatStreamToolCallType] = None
r"""Tool call type"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["function", "id", "type"])
+ 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/chatsystemmessage.py b/src/openrouter/components/chatsystemmessage.py
index a9e7bb1..99beec8 100644
--- a/src/openrouter/components/chatsystemmessage.py
+++ b/src/openrouter/components/chatsystemmessage.py
@@ -2,7 +2,8 @@
from __future__ import annotations
from .chatcontenttext import ChatContentText, ChatContentTextTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Literal, Optional, Union
from typing_extensions import NotRequired, TypeAliasType, TypedDict
@@ -42,3 +43,19 @@ class ChatSystemMessage(BaseModel):
name: Optional[str] = None
r"""Optional name for the system message"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["name"])
+ 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/chattokenlogprob.py b/src/openrouter/components/chattokenlogprob.py
index 2a82b99..1a68969 100644
--- a/src/openrouter/components/chattokenlogprob.py
+++ b/src/openrouter/components/chattokenlogprob.py
@@ -23,30 +23,14 @@ class ChatTokenLogprobTopLogprob(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["bytes"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
@@ -82,30 +66,24 @@ class ChatTokenLogprob(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["bytes"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ChatTokenLogprobTopLogprob.model_rebuild()
+except NameError:
+ pass
+try:
+ ChatTokenLogprob.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/chattokenlogprobs.py b/src/openrouter/components/chattokenlogprobs.py
index 037f8b5..f450b8e 100644
--- a/src/openrouter/components/chattokenlogprobs.py
+++ b/src/openrouter/components/chattokenlogprobs.py
@@ -34,30 +34,25 @@ class ChatTokenLogprobs(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["refusal"]
- nullable_fields = ["content", "refusal"]
- null_default_fields = []
-
+ optional_fields = set(["refusal"])
+ nullable_fields = set(["content", "refusal"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/chatusage.py b/src/openrouter/components/chatusage.py
index 8eb123a..1410ca9 100644
--- a/src/openrouter/components/chatusage.py
+++ b/src/openrouter/components/chatusage.py
@@ -44,41 +44,40 @@ class ChatUsageCompletionTokensDetails(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "accepted_prediction_tokens",
- "audio_tokens",
- "reasoning_tokens",
- "rejected_prediction_tokens",
- ]
- nullable_fields = [
- "accepted_prediction_tokens",
- "audio_tokens",
- "reasoning_tokens",
- "rejected_prediction_tokens",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "accepted_prediction_tokens",
+ "audio_tokens",
+ "reasoning_tokens",
+ "rejected_prediction_tokens",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "accepted_prediction_tokens",
+ "audio_tokens",
+ "reasoning_tokens",
+ "rejected_prediction_tokens",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -111,6 +110,24 @@ class ChatUsagePromptTokensDetails(BaseModel):
video_tokens: Optional[int] = None
r"""Video input tokens"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["audio_tokens", "cache_write_tokens", "cached_tokens", "video_tokens"]
+ )
+ 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
+
class ServerToolUseDetailsTypedDict(TypedDict):
r"""Usage for server-side tool execution (e.g., web search)"""
@@ -137,39 +154,30 @@ class ServerToolUseDetails(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "tool_calls_executed",
- "tool_calls_requested",
- "web_search_requests",
- ]
- nullable_fields = [
- "tool_calls_executed",
- "tool_calls_requested",
- "web_search_requests",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ ["tool_calls_executed", "tool_calls_requested", "web_search_requests"]
+ )
+ nullable_fields = set(
+ ["tool_calls_executed", "tool_calls_requested", "web_search_requests"]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -233,43 +241,42 @@ class ChatUsage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "completion_tokens_details",
- "cost",
- "cost_details",
- "is_byok",
- "prompt_tokens_details",
- "server_tool_use_details",
- ]
- nullable_fields = [
- "completion_tokens_details",
- "cost",
- "cost_details",
- "prompt_tokens_details",
- "server_tool_use_details",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "completion_tokens_details",
+ "cost",
+ "cost_details",
+ "is_byok",
+ "prompt_tokens_details",
+ "server_tool_use_details",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "completion_tokens_details",
+ "cost",
+ "cost_details",
+ "prompt_tokens_details",
+ "server_tool_use_details",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/chatusermessage.py b/src/openrouter/components/chatusermessage.py
index 9092aa3..d5ebd46 100644
--- a/src/openrouter/components/chatusermessage.py
+++ b/src/openrouter/components/chatusermessage.py
@@ -2,7 +2,8 @@
from __future__ import annotations
from .chatcontentitems import ChatContentItems, ChatContentItemsTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Literal, Optional, Union
from typing_extensions import NotRequired, TypeAliasType, TypedDict
@@ -42,3 +43,19 @@ class ChatUserMessage(BaseModel):
name: Optional[str] = None
r"""Optional name for the user"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["name"])
+ 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/chatwebsearchshorthand.py b/src/openrouter/components/chatwebsearchshorthand.py
index f97f261..9d333c1 100644
--- a/src/openrouter/components/chatwebsearchshorthand.py
+++ b/src/openrouter/components/chatwebsearchshorthand.py
@@ -8,11 +8,10 @@ from .websearchuserlocationservertool import (
WebSearchUserLocationServerTool,
WebSearchUserLocationServerToolTypedDict,
)
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from pydantic import model_serializer
from typing import List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
ChatWebSearchShorthandType = Union[
@@ -52,16 +51,12 @@ class ChatWebSearchShorthandTypedDict(TypedDict):
class ChatWebSearchShorthand(BaseModel):
r"""Web search tool using OpenAI Responses API syntax. Automatically converted to openrouter:web_search."""
- type: Annotated[
- ChatWebSearchShorthandType, PlainValidator(validate_open_enum(False))
- ]
+ type: ChatWebSearchShorthandType
allowed_domains: Optional[List[str]] = None
r"""Limit search results to these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, and most native providers (Anthropic, OpenAI, xAI). Cannot be used with excluded_domains."""
- engine: Annotated[
- Optional[WebSearchEngineEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ engine: Optional[WebSearchEngineEnum] = None
r"""Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API. \"perplexity\" uses the Perplexity Search API (raw ranked results)."""
excluded_domains: Optional[List[str]] = None
@@ -78,10 +73,36 @@ class ChatWebSearchShorthand(BaseModel):
parameters: Optional[WebSearchConfig] = None
- search_context_size: Annotated[
- Optional[SearchQualityLevel], PlainValidator(validate_open_enum(False))
- ] = None
+ search_context_size: Optional[SearchQualityLevel] = None
r"""How much context to retrieve per result. Applies to Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, pins a fixed per-result character cap (low=5,000, medium=15,000, high=30,000); when omitted, Exa picks an adaptive size per query and document (typically ~2,000–4,000 characters per result). For Parallel, controls the total characters across all results; when omitted, Parallel uses its own default size. For Perplexity, maps directly to the Search API's native search_context_size parameter. Overridden by `max_characters` when both are set."""
user_location: Optional[WebSearchUserLocationServerTool] = None
r"""Approximate user location for location-biased results."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "allowed_domains",
+ "engine",
+ "excluded_domains",
+ "max_characters",
+ "max_results",
+ "max_total_results",
+ "parameters",
+ "search_context_size",
+ "user_location",
+ ]
+ )
+ 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/codeinterpreterservertool.py b/src/openrouter/components/codeinterpreterservertool.py
index 67d4cf9..5705d69 100644
--- a/src/openrouter/components/codeinterpreterservertool.py
+++ b/src/openrouter/components/codeinterpreterservertool.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
+from typing_extensions import NotRequired, TypeAliasType, TypedDict
MemoryLimit = Union[
@@ -41,37 +39,30 @@ class ContainerAuto(BaseModel):
file_ids: Optional[List[str]] = None
- memory_limit: Annotated[
- OptionalNullable[MemoryLimit], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ memory_limit: OptionalNullable[MemoryLimit] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["file_ids", "memory_limit"]
- nullable_fields = ["memory_limit"]
- null_default_fields = []
-
+ optional_fields = set(["file_ids", "memory_limit"])
+ nullable_fields = set(["memory_limit"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/compactionitem.py b/src/openrouter/components/compactionitem.py
index eb9ac69..0c6d749 100644
--- a/src/openrouter/components/compactionitem.py
+++ b/src/openrouter/components/compactionitem.py
@@ -35,30 +35,25 @@ class CompactionItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["id"]
- nullable_fields = ["id"]
- null_default_fields = []
-
+ optional_fields = set(["id"])
+ nullable_fields = set(["id"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/compoundfilter.py b/src/openrouter/components/compoundfilter.py
index b32ff67..c80781e 100644
--- a/src/openrouter/components/compoundfilter.py
+++ b/src/openrouter/components/compoundfilter.py
@@ -2,10 +2,8 @@
from __future__ import annotations
from openrouter.types import BaseModel, Nullable, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
from typing import Any, Dict, List, Literal, Union
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
CompoundFilterType = Union[
@@ -29,4 +27,4 @@ class CompoundFilter(BaseModel):
filters: List[Dict[str, Nullable[Any]]]
- type: Annotated[CompoundFilterType, PlainValidator(validate_open_enum(False))]
+ type: CompoundFilterType
diff --git a/src/openrouter/components/computeruseservertool.py b/src/openrouter/components/computeruseservertool.py
index 8f6128f..f8c7007 100644
--- a/src/openrouter/components/computeruseservertool.py
+++ b/src/openrouter/components/computeruseservertool.py
@@ -2,10 +2,8 @@
from __future__ import annotations
from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
Environment = Union[
@@ -39,6 +37,6 @@ class ComputerUseServerTool(BaseModel):
display_width: int
- environment: Annotated[Environment, PlainValidator(validate_open_enum(False))]
+ environment: Environment
type: ComputerUseServerToolType
diff --git a/src/openrouter/components/conflictresponseerrordata.py b/src/openrouter/components/conflictresponseerrordata.py
index fdbfb16..39276ad 100644
--- a/src/openrouter/components/conflictresponseerrordata.py
+++ b/src/openrouter/components/conflictresponseerrordata.py
@@ -32,30 +32,25 @@ class ConflictResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/contentfilterbuiltinentry.py b/src/openrouter/components/contentfilterbuiltinentry.py
index 294696b..ae3d7d5 100644
--- a/src/openrouter/components/contentfilterbuiltinentry.py
+++ b/src/openrouter/components/contentfilterbuiltinentry.py
@@ -4,11 +4,10 @@ from __future__ import annotations
from .contentfilterbuiltinaction import ContentFilterBuiltinAction
from .contentfilterbuiltinslug import ContentFilterBuiltinSlug
from .promptinjectionscanscope import PromptInjectionScanScope
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class ContentFilterBuiltinEntryTypedDict(TypedDict):
@@ -27,18 +26,30 @@ class ContentFilterBuiltinEntryTypedDict(TypedDict):
class ContentFilterBuiltinEntry(BaseModel):
r"""A builtin content filter entry. Builtin filters include PII detectors and the regex-based prompt injection detector."""
- action: Annotated[
- ContentFilterBuiltinAction, PlainValidator(validate_open_enum(False))
- ]
+ action: ContentFilterBuiltinAction
r"""Action taken when the builtin filter triggers"""
- slug: Annotated[ContentFilterBuiltinSlug, PlainValidator(validate_open_enum(False))]
+ slug: ContentFilterBuiltinSlug
r"""The builtin filter identifier"""
label: Optional[str] = None
r"""Read-only, system-assigned redaction placeholder derived from the slug (e.g. \"[EMAIL]\", \"[PHONE]\"). Not settable by the caller."""
- scan_scope: Annotated[
- Optional[PromptInjectionScanScope], PlainValidator(validate_open_enum(False))
- ] = None
+ scan_scope: Optional[PromptInjectionScanScope] = None
r"""Which message roles to scan for prompt injection. Only applies to the regex-prompt-injection builtin. Defaults to all_messages."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["label", "scan_scope"])
+ 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/contentfilterbuiltinentryinput.py b/src/openrouter/components/contentfilterbuiltinentryinput.py
index b51baca..50a14b2 100644
--- a/src/openrouter/components/contentfilterbuiltinentryinput.py
+++ b/src/openrouter/components/contentfilterbuiltinentryinput.py
@@ -4,10 +4,9 @@ from __future__ import annotations
from .contentfilterbuiltinaction import ContentFilterBuiltinAction
from .contentfilterbuiltinslug import ContentFilterBuiltinSlug
from .promptinjectionscanscope import PromptInjectionScanScope
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -28,12 +27,10 @@ class ContentFilterBuiltinEntryInputTypedDict(TypedDict):
class ContentFilterBuiltinEntryInput(BaseModel):
r"""A builtin content filter entry for create/update requests. Labels are system-assigned and cannot be set by the caller."""
- action: Annotated[
- ContentFilterBuiltinAction, PlainValidator(validate_open_enum(False))
- ]
+ action: ContentFilterBuiltinAction
r"""Action taken when the builtin filter triggers"""
- slug: Annotated[ContentFilterBuiltinSlug, PlainValidator(validate_open_enum(False))]
+ slug: ContentFilterBuiltinSlug
r"""The builtin filter identifier"""
label: Annotated[
@@ -44,7 +41,21 @@ class ContentFilterBuiltinEntryInput(BaseModel):
] = None
r"""Deprecated: labels are system-assigned and cannot be set by the caller. Accepted for backward compatibility but silently ignored."""
- scan_scope: Annotated[
- Optional[PromptInjectionScanScope], PlainValidator(validate_open_enum(False))
- ] = None
+ scan_scope: Optional[PromptInjectionScanScope] = None
r"""Which message roles to scan for prompt injection. Only applies to the regex-prompt-injection builtin. Defaults to all_messages."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["label", "scan_scope"])
+ 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/contentfilterentry.py b/src/openrouter/components/contentfilterentry.py
index 856522d..882178b 100644
--- a/src/openrouter/components/contentfilterentry.py
+++ b/src/openrouter/components/contentfilterentry.py
@@ -9,10 +9,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class ContentFilterEntryTypedDict(TypedDict):
@@ -29,7 +27,7 @@ class ContentFilterEntryTypedDict(TypedDict):
class ContentFilterEntry(BaseModel):
r"""A custom regex content filter that scans request messages for matching patterns."""
- action: Annotated[ContentFilterAction, PlainValidator(validate_open_enum(False))]
+ action: ContentFilterAction
r"""Action taken when the pattern matches"""
pattern: str
@@ -40,30 +38,25 @@ class ContentFilterEntry(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["label"]
- nullable_fields = ["label"]
- null_default_fields = []
-
+ optional_fields = set(["label"])
+ nullable_fields = set(["label"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/contentpartaddedevent.py b/src/openrouter/components/contentpartaddedevent.py
index 019b906..f6f49db 100644
--- a/src/openrouter/components/contentpartaddedevent.py
+++ b/src/openrouter/components/contentpartaddedevent.py
@@ -7,10 +7,12 @@ from .openairesponsesrefusalcontent import (
)
from .reasoningtextcontent import ReasoningTextContent, ReasoningTextContentTypedDict
from .responseoutputtext import ResponseOutputText, ResponseOutputTextTypedDict
+from functools import partial
from openrouter.types import BaseModel
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import Literal, Union
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Union
from typing_extensions import Annotated, TypeAliasType, TypedDict
@@ -24,13 +26,39 @@ ContentPartAddedEventPartTypedDict = TypeAliasType(
)
+class UnknownContentPartAddedEventPart(BaseModel):
+ r"""A ContentPartAddedEventPart variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_CONTENT_PART_ADDED_EVENT_PART_VARIANTS: dict[str, Any] = {
+ "output_text": ResponseOutputText,
+ "reasoning_text": ReasoningTextContent,
+ "refusal": OpenAIResponsesRefusalContent,
+}
+
+
ContentPartAddedEventPart = Annotated[
Union[
- Annotated[ResponseOutputText, Tag("output_text")],
- Annotated[ReasoningTextContent, Tag("reasoning_text")],
- Annotated[OpenAIResponsesRefusalContent, Tag("refusal")],
+ ResponseOutputText,
+ ReasoningTextContent,
+ OpenAIResponsesRefusalContent,
+ UnknownContentPartAddedEventPart,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_CONTENT_PART_ADDED_EVENT_PART_VARIANTS,
+ unknown_cls=UnknownContentPartAddedEventPart,
+ union_name="ContentPartAddedEventPart",
+ )
+ ),
]
diff --git a/src/openrouter/components/contentpartdoneevent.py b/src/openrouter/components/contentpartdoneevent.py
index 8a7f738..3cd3ed8 100644
--- a/src/openrouter/components/contentpartdoneevent.py
+++ b/src/openrouter/components/contentpartdoneevent.py
@@ -7,10 +7,12 @@ from .openairesponsesrefusalcontent import (
)
from .reasoningtextcontent import ReasoningTextContent, ReasoningTextContentTypedDict
from .responseoutputtext import ResponseOutputText, ResponseOutputTextTypedDict
+from functools import partial
from openrouter.types import BaseModel
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import Literal, Union
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Union
from typing_extensions import Annotated, TypeAliasType, TypedDict
@@ -24,13 +26,39 @@ ContentPartDoneEventPartTypedDict = TypeAliasType(
)
+class UnknownContentPartDoneEventPart(BaseModel):
+ r"""A ContentPartDoneEventPart variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_CONTENT_PART_DONE_EVENT_PART_VARIANTS: dict[str, Any] = {
+ "output_text": ResponseOutputText,
+ "reasoning_text": ReasoningTextContent,
+ "refusal": OpenAIResponsesRefusalContent,
+}
+
+
ContentPartDoneEventPart = Annotated[
Union[
- Annotated[ResponseOutputText, Tag("output_text")],
- Annotated[ReasoningTextContent, Tag("reasoning_text")],
- Annotated[OpenAIResponsesRefusalContent, Tag("refusal")],
+ ResponseOutputText,
+ ReasoningTextContent,
+ OpenAIResponsesRefusalContent,
+ UnknownContentPartDoneEventPart,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_CONTENT_PART_DONE_EVENT_PART_VARIANTS,
+ unknown_cls=UnknownContentPartDoneEventPart,
+ union_name="ContentPartDoneEventPart",
+ )
+ ),
]
diff --git a/src/openrouter/components/contextcompressionplugin.py b/src/openrouter/components/contextcompressionplugin.py
index 22758a0..f6e8d18 100644
--- a/src/openrouter/components/contextcompressionplugin.py
+++ b/src/openrouter/components/contextcompressionplugin.py
@@ -2,7 +2,8 @@
from __future__ import annotations
from .contextcompressionengine import ContextCompressionEngine
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -26,3 +27,19 @@ class ContextCompressionPlugin(BaseModel):
engine: Optional[ContextCompressionEngine] = None
r"""The compression engine to use. Defaults to \"middle-out\"."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["enabled", "engine"])
+ 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/costdetails.py b/src/openrouter/components/costdetails.py
index 7880cdc..dbafc28 100644
--- a/src/openrouter/components/costdetails.py
+++ b/src/openrouter/components/costdetails.py
@@ -31,30 +31,25 @@ class CostDetails(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["upstream_inference_cost"]
- nullable_fields = ["upstream_inference_cost"]
- null_default_fields = []
-
+ optional_fields = set(["upstream_inference_cost"])
+ nullable_fields = set(["upstream_inference_cost"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/createbyokkeyrequest.py b/src/openrouter/components/createbyokkeyrequest.py
index 1287f0a..4202c11 100644
--- a/src/openrouter/components/createbyokkeyrequest.py
+++ b/src/openrouter/components/createbyokkeyrequest.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class CreateBYOKKeyRequestTypedDict(TypedDict):
@@ -39,7 +37,7 @@ class CreateBYOKKeyRequest(BaseModel):
key: str
r"""The raw provider API key or credential. This value is encrypted at rest and never returned in API responses."""
- provider: Annotated[BYOKProviderSlug, PlainValidator(validate_open_enum(False))]
+ provider: BYOKProviderSlug
r"""The upstream provider this credential authenticates against, as a lowercase slug (e.g. `openai`, `anthropic`, `amazon-bedrock`)."""
allowed_models: OptionalNullable[List[str]] = UNSET
@@ -62,37 +60,34 @@ class CreateBYOKKeyRequest(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "allowed_models",
- "allowed_user_ids",
- "disabled",
- "is_fallback",
- "name",
- "workspace_id",
- ]
- nullable_fields = ["allowed_models", "allowed_user_ids", "name"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "allowed_models",
+ "allowed_user_ids",
+ "disabled",
+ "is_fallback",
+ "name",
+ "workspace_id",
+ ]
+ )
+ nullable_fields = set(["allowed_models", "allowed_user_ids", "name"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/createguardrailrequest.py b/src/openrouter/components/createguardrailrequest.py
index 36bce65..fb9dae6 100644
--- a/src/openrouter/components/createguardrailrequest.py
+++ b/src/openrouter/components/createguardrailrequest.py
@@ -14,10 +14,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -109,9 +107,7 @@ class CreateGuardrailRequest(BaseModel):
limit_usd: OptionalNullable[float] = UNSET
r"""Spending limit in USD"""
- reset_interval: Annotated[
- OptionalNullable[GuardrailInterval], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ reset_interval: OptionalNullable[GuardrailInterval] = UNSET
r"""Interval at which the limit resets (daily, weekly, monthly)"""
workspace_id: Optional[str] = None
@@ -119,61 +115,60 @@ class CreateGuardrailRequest(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "allowed_models",
- "allowed_providers",
- "content_filter_builtins",
- "content_filters",
- "description",
- "enforce_zdr",
- "enforce_zdr_anthropic",
- "enforce_zdr_google",
- "enforce_zdr_openai",
- "enforce_zdr_other",
- "ignored_models",
- "ignored_providers",
- "limit_usd",
- "reset_interval",
- "workspace_id",
- ]
- nullable_fields = [
- "allowed_models",
- "allowed_providers",
- "content_filter_builtins",
- "content_filters",
- "description",
- "enforce_zdr",
- "enforce_zdr_anthropic",
- "enforce_zdr_google",
- "enforce_zdr_openai",
- "enforce_zdr_other",
- "ignored_models",
- "ignored_providers",
- "limit_usd",
- "reset_interval",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "allowed_models",
+ "allowed_providers",
+ "content_filter_builtins",
+ "content_filters",
+ "description",
+ "enforce_zdr",
+ "enforce_zdr_anthropic",
+ "enforce_zdr_google",
+ "enforce_zdr_openai",
+ "enforce_zdr_other",
+ "ignored_models",
+ "ignored_providers",
+ "limit_usd",
+ "reset_interval",
+ "workspace_id",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "allowed_models",
+ "allowed_providers",
+ "content_filter_builtins",
+ "content_filters",
+ "description",
+ "enforce_zdr",
+ "enforce_zdr_anthropic",
+ "enforce_zdr_google",
+ "enforce_zdr_openai",
+ "enforce_zdr_other",
+ "ignored_models",
+ "ignored_providers",
+ "limit_usd",
+ "reset_interval",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/createobservabilitydestinationrequest.py b/src/openrouter/components/createobservabilitydestinationrequest.py
index 65aab43..b7bf975 100644
--- a/src/openrouter/components/createobservabilitydestinationrequest.py
+++ b/src/openrouter/components/createobservabilitydestinationrequest.py
@@ -13,11 +13,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, Dict, List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
CreateObservabilityDestinationRequestType = Union[
@@ -73,10 +71,7 @@ class CreateObservabilityDestinationRequest(BaseModel):
name: str
r"""Human-readable name for the destination."""
- type: Annotated[
- CreateObservabilityDestinationRequestType,
- PlainValidator(validate_open_enum(False)),
- ]
+ type: CreateObservabilityDestinationRequestType
r"""The destination type. Only stable destination types are accepted."""
api_key_hashes: OptionalNullable[List[str]] = UNSET
@@ -99,37 +94,34 @@ class CreateObservabilityDestinationRequest(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "api_key_hashes",
- "enabled",
- "filter_rules",
- "privacy_mode",
- "sampling_rate",
- "workspace_id",
- ]
- nullable_fields = ["api_key_hashes", "filter_rules"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "api_key_hashes",
+ "enabled",
+ "filter_rules",
+ "privacy_mode",
+ "sampling_rate",
+ "workspace_id",
+ ]
+ )
+ nullable_fields = set(["api_key_hashes", "filter_rules"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/createworkspacerequest.py b/src/openrouter/components/createworkspacerequest.py
index e068f80..0596d01 100644
--- a/src/openrouter/components/createworkspacerequest.py
+++ b/src/openrouter/components/createworkspacerequest.py
@@ -74,46 +74,45 @@ class CreateWorkspaceRequest(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "default_image_model",
- "default_provider_sort",
- "default_text_model",
- "description",
- "io_logging_api_key_ids",
- "io_logging_sampling_rate",
- "is_data_discount_logging_enabled",
- "is_observability_broadcast_enabled",
- "is_observability_io_logging_enabled",
- ]
- nullable_fields = [
- "default_image_model",
- "default_provider_sort",
- "default_text_model",
- "description",
- "io_logging_api_key_ids",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "default_image_model",
+ "default_provider_sort",
+ "default_text_model",
+ "description",
+ "io_logging_api_key_ids",
+ "io_logging_sampling_rate",
+ "is_data_discount_logging_enabled",
+ "is_observability_broadcast_enabled",
+ "is_observability_io_logging_enabled",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "default_image_model",
+ "default_provider_sort",
+ "default_text_model",
+ "description",
+ "io_logging_api_key_ids",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/customtool.py b/src/openrouter/components/customtool.py
index d243793..b7e3767 100644
--- a/src/openrouter/components/customtool.py
+++ b/src/openrouter/components/customtool.py
@@ -1,12 +1,13 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import get_discriminator, validate_open_enum
+from functools import partial
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from openrouter.utils.unions import parse_open_union
import pydantic
-from pydantic import Discriminator, Tag
-from pydantic.functional_validators import PlainValidator
-from typing import Literal, Optional, Union
+from pydantic import ConfigDict, model_serializer
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -31,7 +32,7 @@ class FormatGrammarTypedDict(TypedDict):
class FormatGrammar(BaseModel):
definition: str
- syntax: Annotated[Syntax, PlainValidator(validate_open_enum(False))]
+ syntax: Syntax
type: FormatTypeGrammar
@@ -52,9 +53,33 @@ FormatTypedDict = TypeAliasType(
)
+class UnknownFormat(BaseModel):
+ r"""A Format variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_FORMAT__VARIANTS: dict[str, Any] = {
+ "text": FormatText,
+ "grammar": FormatGrammar,
+}
+
+
Format = Annotated[
- Union[Annotated[FormatText, Tag("text")], Annotated[FormatGrammar, Tag("grammar")]],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ Union[FormatText, FormatGrammar, UnknownFormat],
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_FORMAT__VARIANTS,
+ unknown_cls=UnknownFormat,
+ union_name="Format",
+ )
+ ),
]
@@ -80,3 +105,25 @@ class CustomTool(BaseModel):
description: Optional[str] = None
format_: Annotated[Optional[Format], pydantic.Field(alias="format")] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["description", "format"])
+ 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
+
+
+try:
+ CustomTool.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/customtoolcallitem.py b/src/openrouter/components/customtoolcallitem.py
index 486f76d..3e47f14 100644
--- a/src/openrouter/components/customtoolcallitem.py
+++ b/src/openrouter/components/customtoolcallitem.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -36,3 +37,19 @@ class CustomToolCallItem(BaseModel):
namespace: Optional[str] = None
r"""Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server)"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id", "namespace"])
+ 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/customtoolcalloutputitem.py b/src/openrouter/components/customtoolcalloutputitem.py
index c820142..b80b24d 100644
--- a/src/openrouter/components/customtoolcalloutputitem.py
+++ b/src/openrouter/components/customtoolcalloutputitem.py
@@ -11,9 +11,8 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import get_discriminator, validate_open_enum
+from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -43,9 +42,7 @@ class CustomToolCallOutputItemOutputInputImageTypedDict(TypedDict):
class CustomToolCallOutputItemOutputInputImage(BaseModel):
r"""Image input content item"""
- detail: Annotated[
- CustomToolCallOutputItemDetail, PlainValidator(validate_open_enum(False))
- ]
+ detail: CustomToolCallOutputItemDetail
type: CustomToolCallOutputItemTypeInputImage
@@ -53,31 +50,26 @@ class CustomToolCallOutputItemOutputInputImage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["image_url"]
- nullable_fields = ["image_url"]
- null_default_fields = []
-
+ optional_fields = set(["image_url"])
+ nullable_fields = set(["image_url"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -136,3 +128,19 @@ class CustomToolCallOutputItem(BaseModel):
type: CustomToolCallOutputItemTypeCustomToolCallOutput
id: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id"])
+ 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/datetimeservertool.py b/src/openrouter/components/datetimeservertool.py
index d98c3fd..31a1f90 100644
--- a/src/openrouter/components/datetimeservertool.py
+++ b/src/openrouter/components/datetimeservertool.py
@@ -5,7 +5,8 @@ from .datetimeservertoolconfig import (
DatetimeServerToolConfig,
DatetimeServerToolConfigTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -28,3 +29,19 @@ class DatetimeServerTool(BaseModel):
parameters: Optional[DatetimeServerToolConfig] = None
r"""Configuration for the openrouter:datetime 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/datetimeservertoolconfig.py b/src/openrouter/components/datetimeservertoolconfig.py
index 3eaaa33..0858da1 100644
--- a/src/openrouter/components/datetimeservertoolconfig.py
+++ b/src/openrouter/components/datetimeservertoolconfig.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import NotRequired, TypedDict
@@ -18,3 +19,19 @@ class DatetimeServerToolConfig(BaseModel):
timezone: Optional[str] = None
r"""IANA timezone name (e.g. \"America/New_York\"). Defaults to UTC."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["timezone"])
+ 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/debugevent.py b/src/openrouter/components/debugevent.py
index e163680..3346002 100644
--- a/src/openrouter/components/debugevent.py
+++ b/src/openrouter/components/debugevent.py
@@ -1,11 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, Nullable, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
+from pydantic import model_serializer
from typing import Any, Dict, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
Event = Union[
@@ -28,7 +27,7 @@ class TimingsTypedDict(TypedDict):
class Timings(BaseModel):
epoch_ms: int
- event: Annotated[Event, PlainValidator(validate_open_enum(False))]
+ event: Event
start_ms: int
@@ -43,6 +42,22 @@ class Debug(BaseModel):
timings: Optional[Timings] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["echo_upstream_body", "timings"])
+ 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
+
DebugEventType = Literal["response.debug",]
diff --git a/src/openrouter/components/defaultparameters.py b/src/openrouter/components/defaultparameters.py
index 26ed6c6..dccefb2 100644
--- a/src/openrouter/components/defaultparameters.py
+++ b/src/openrouter/components/defaultparameters.py
@@ -40,44 +40,43 @@ class DefaultParameters(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "frequency_penalty",
- "presence_penalty",
- "repetition_penalty",
- "temperature",
- "top_k",
- "top_p",
- ]
- nullable_fields = [
- "frequency_penalty",
- "presence_penalty",
- "repetition_penalty",
- "temperature",
- "top_k",
- "top_p",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "frequency_penalty",
+ "presence_penalty",
+ "repetition_penalty",
+ "temperature",
+ "top_k",
+ "top_p",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "frequency_penalty",
+ "presence_penalty",
+ "repetition_penalty",
+ "temperature",
+ "top_k",
+ "top_p",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/deletebyokkeyresponse.py b/src/openrouter/components/deletebyokkeyresponse.py
index 19946d2..3e3a7de 100644
--- a/src/openrouter/components/deletebyokkeyresponse.py
+++ b/src/openrouter/components/deletebyokkeyresponse.py
@@ -20,3 +20,9 @@ class DeleteBYOKKeyResponse(BaseModel):
pydantic.Field(alias="deleted"),
] = True
r"""Confirmation that the BYOK credential was deleted."""
+
+
+try:
+ DeleteBYOKKeyResponse.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/deleteguardrailresponse.py b/src/openrouter/components/deleteguardrailresponse.py
index f31843c..0c4b2ec 100644
--- a/src/openrouter/components/deleteguardrailresponse.py
+++ b/src/openrouter/components/deleteguardrailresponse.py
@@ -20,3 +20,9 @@ class DeleteGuardrailResponse(BaseModel):
pydantic.Field(alias="deleted"),
] = True
r"""Confirmation that the guardrail was deleted"""
+
+
+try:
+ DeleteGuardrailResponse.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/deleteobservabilitydestinationresponse.py b/src/openrouter/components/deleteobservabilitydestinationresponse.py
index 3765156..28a54eb 100644
--- a/src/openrouter/components/deleteobservabilitydestinationresponse.py
+++ b/src/openrouter/components/deleteobservabilitydestinationresponse.py
@@ -20,3 +20,9 @@ class DeleteObservabilityDestinationResponse(BaseModel):
pydantic.Field(alias="deleted"),
] = True
r"""Always `true` on success."""
+
+
+try:
+ DeleteObservabilityDestinationResponse.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/deleteworkspacebudgetresponse.py b/src/openrouter/components/deleteworkspacebudgetresponse.py
index 774a3ea..be71670 100644
--- a/src/openrouter/components/deleteworkspacebudgetresponse.py
+++ b/src/openrouter/components/deleteworkspacebudgetresponse.py
@@ -20,3 +20,9 @@ class DeleteWorkspaceBudgetResponse(BaseModel):
pydantic.Field(alias="deleted"),
] = True
r"""Confirmation that the budget was deleted (or did not exist)"""
+
+
+try:
+ DeleteWorkspaceBudgetResponse.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/deleteworkspaceresponse.py b/src/openrouter/components/deleteworkspaceresponse.py
index bed4595..708dfac 100644
--- a/src/openrouter/components/deleteworkspaceresponse.py
+++ b/src/openrouter/components/deleteworkspaceresponse.py
@@ -20,3 +20,9 @@ class DeleteWorkspaceResponse(BaseModel):
pydantic.Field(alias="deleted"),
] = True
r"""Confirmation that the workspace was deleted"""
+
+
+try:
+ DeleteWorkspaceResponse.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/easyinputmessage.py b/src/openrouter/components/easyinputmessage.py
index 60dabda..acc023a 100644
--- a/src/openrouter/components/easyinputmessage.py
+++ b/src/openrouter/components/easyinputmessage.py
@@ -13,9 +13,8 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import get_discriminator, validate_open_enum
+from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -45,7 +44,7 @@ class EasyInputMessageContentInputImageTypedDict(TypedDict):
class EasyInputMessageContentInputImage(BaseModel):
r"""Image input content item"""
- detail: Annotated[EasyInputMessageDetail, PlainValidator(validate_open_enum(False))]
+ detail: EasyInputMessageDetail
type: EasyInputMessageTypeInputImage
@@ -53,31 +52,26 @@ class EasyInputMessageContentInputImage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["image_url"]
- nullable_fields = ["image_url"]
- null_default_fields = []
-
+ optional_fields = set(["image_url"])
+ nullable_fields = set(["image_url"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -195,30 +189,25 @@ class EasyInputMessage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["content", "phase", "type"]
- nullable_fields = ["content", "phase"]
- null_default_fields = []
-
+ optional_fields = set(["content", "phase", "type"])
+ nullable_fields = set(["content", "phase"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/edgenetworktimeoutresponseerrordata.py b/src/openrouter/components/edgenetworktimeoutresponseerrordata.py
index b44fcaf..9e421b3 100644
--- a/src/openrouter/components/edgenetworktimeoutresponseerrordata.py
+++ b/src/openrouter/components/edgenetworktimeoutresponseerrordata.py
@@ -32,30 +32,25 @@ class EdgeNetworkTimeoutResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/errorevent.py b/src/openrouter/components/errorevent.py
index 83b6cd3..0b90b1c 100644
--- a/src/openrouter/components/errorevent.py
+++ b/src/openrouter/components/errorevent.py
@@ -35,30 +35,14 @@ class ErrorEvent(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["code", "param"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/filelistresponse.py b/src/openrouter/components/filelistresponse.py
index 6893299..3b40324 100644
--- a/src/openrouter/components/filelistresponse.py
+++ b/src/openrouter/components/filelistresponse.py
@@ -35,30 +35,14 @@ class FileListResponse(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["cursor", "first_id", "last_id"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/fileparserplugin.py b/src/openrouter/components/fileparserplugin.py
index 4c88871..28d11f1 100644
--- a/src/openrouter/components/fileparserplugin.py
+++ b/src/openrouter/components/fileparserplugin.py
@@ -2,7 +2,8 @@
from __future__ import annotations
from .pdfparseroptions import PDFParserOptions, PDFParserOptionsTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -26,3 +27,19 @@ class FileParserPlugin(BaseModel):
pdf: Optional[PDFParserOptions] = None
r"""Options for PDF parsing."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["enabled", "pdf"])
+ 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/filesearchservertool.py b/src/openrouter/components/filesearchservertool.py
index 974ee97..5f5b45a 100644
--- a/src/openrouter/components/filesearchservertool.py
+++ b/src/openrouter/components/filesearchservertool.py
@@ -10,11 +10,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
+from typing_extensions import NotRequired, TypeAliasType, TypedDict
FiltersType = Union[
@@ -61,7 +59,7 @@ class FiltersTypedDict(TypedDict):
class Filters(BaseModel):
key: str
- type: Annotated[FiltersType, PlainValidator(validate_open_enum(False))]
+ type: FiltersType
value: FileSearchServerToolValue2
@@ -89,12 +87,26 @@ class RankingOptionsTypedDict(TypedDict):
class RankingOptions(BaseModel):
- ranker: Annotated[Optional[Ranker], PlainValidator(validate_open_enum(False))] = (
- None
- )
+ ranker: Optional[Ranker] = None
score_threshold: Optional[float] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["ranker", "score_threshold"])
+ 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
+
TypeFileSearch = Literal["file_search",]
@@ -124,30 +136,25 @@ class FileSearchServerTool(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["filters", "max_num_results", "ranking_options"]
- nullable_fields = ["filters"]
- null_default_fields = []
-
+ optional_fields = set(["filters", "max_num_results", "ranking_options"])
+ nullable_fields = set(["filters"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/filesservertool.py b/src/openrouter/components/filesservertool.py
new file mode 100644
index 0000000..7e9f36a
--- /dev/null
+++ b/src/openrouter/components/filesservertool.py
@@ -0,0 +1,44 @@
+"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+
+from __future__ import annotations
+from .filesservertoolconfig import FilesServerToolConfig, FilesServerToolConfigTypedDict
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
+from typing import Literal, Optional
+from typing_extensions import NotRequired, TypedDict
+
+
+FilesServerToolType = Literal["openrouter:files",]
+
+
+class FilesServerToolTypedDict(TypedDict):
+ r"""OpenRouter built-in server tool: read, write, edit, and list workspace files via the Files API. Requires the `x-openrouter-file-ids: openrouter` request header."""
+
+ type: FilesServerToolType
+ parameters: NotRequired[FilesServerToolConfigTypedDict]
+ r"""Configuration for the openrouter:files server tool"""
+
+
+class FilesServerTool(BaseModel):
+ r"""OpenRouter built-in server tool: read, write, edit, and list workspace files via the Files API. Requires the `x-openrouter-file-ids: openrouter` request header."""
+
+ type: FilesServerToolType
+
+ parameters: Optional[FilesServerToolConfig] = None
+ r"""Configuration for the openrouter:files 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/filesservertoolconfig.py b/src/openrouter/components/filesservertoolconfig.py
new file mode 100644
index 0000000..bca5442
--- /dev/null
+++ b/src/openrouter/components/filesservertoolconfig.py
@@ -0,0 +1,13 @@
+"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+
+from __future__ import annotations
+from openrouter.types import BaseModel
+from typing_extensions import TypedDict
+
+
+class FilesServerToolConfigTypedDict(TypedDict):
+ r"""Configuration for the openrouter:files server tool"""
+
+
+class FilesServerToolConfig(BaseModel):
+ r"""Configuration for the openrouter:files server tool"""
diff --git a/src/openrouter/components/forbiddenresponseerrordata.py b/src/openrouter/components/forbiddenresponseerrordata.py
index a758f01..e790a63 100644
--- a/src/openrouter/components/forbiddenresponseerrordata.py
+++ b/src/openrouter/components/forbiddenresponseerrordata.py
@@ -32,30 +32,25 @@ class ForbiddenResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/formatjsonschemaconfig.py b/src/openrouter/components/formatjsonschemaconfig.py
index 4a08f89..f748cc2 100644
--- a/src/openrouter/components/formatjsonschemaconfig.py
+++ b/src/openrouter/components/formatjsonschemaconfig.py
@@ -42,30 +42,31 @@ class FormatJSONSchemaConfig(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["description", "strict"]
- nullable_fields = ["strict"]
- null_default_fields = []
-
+ optional_fields = set(["description", "strict"])
+ nullable_fields = set(["strict"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
+
+
+try:
+ FormatJSONSchemaConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/formats.py b/src/openrouter/components/formats.py
index dcf0421..a1ac8c3 100644
--- a/src/openrouter/components/formats.py
+++ b/src/openrouter/components/formats.py
@@ -10,9 +10,12 @@ from .formatjsonschemaconfig import (
FormatJSONSchemaConfigTypedDict,
)
from .formattextconfig import FormatTextConfig, FormatTextConfigTypedDict
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import Union
+from functools import partial
+from openrouter.types import BaseModel
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Union
from typing_extensions import Annotated, TypeAliasType
@@ -27,12 +30,35 @@ FormatsTypedDict = TypeAliasType(
r"""Text response format configuration"""
+class UnknownFormats(BaseModel):
+ r"""A Formats variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_FORMATS_VARIANTS: dict[str, Any] = {
+ "text": FormatTextConfig,
+ "json_object": FormatJSONObjectConfig,
+ "json_schema": FormatJSONSchemaConfig,
+}
+
+
Formats = Annotated[
Union[
- Annotated[FormatTextConfig, Tag("text")],
- Annotated[FormatJSONObjectConfig, Tag("json_object")],
- Annotated[FormatJSONSchemaConfig, Tag("json_schema")],
+ FormatTextConfig, FormatJSONObjectConfig, FormatJSONSchemaConfig, UnknownFormats
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_FORMATS_VARIANTS,
+ unknown_cls=UnknownFormats,
+ union_name="Formats",
+ )
+ ),
]
r"""Text response format configuration"""
diff --git a/src/openrouter/components/frameimage.py b/src/openrouter/components/frameimage.py
index 9e5aa13..00319c8 100644
--- a/src/openrouter/components/frameimage.py
+++ b/src/openrouter/components/frameimage.py
@@ -2,10 +2,8 @@
from __future__ import annotations
from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
class FrameImageImageURLTypedDict(TypedDict):
@@ -41,5 +39,5 @@ class FrameImage(BaseModel):
type: FrameImageType
- frame_type: Annotated[FrameType, PlainValidator(validate_open_enum(False))]
+ frame_type: FrameType
r"""Whether this image represents the first or last frame of the video"""
diff --git a/src/openrouter/components/functioncallitem.py b/src/openrouter/components/functioncallitem.py
index 82a1e63..8d9002f 100644
--- a/src/openrouter/components/functioncallitem.py
+++ b/src/openrouter/components/functioncallitem.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
FunctionCallItemType = Literal["function_call",]
@@ -41,6 +40,20 @@ class FunctionCallItem(BaseModel):
namespace: Optional[str] = None
r"""Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server)"""
- status: Annotated[
- Optional[ToolCallStatus], PlainValidator(validate_open_enum(False))
- ] = None
+ status: Optional[ToolCallStatus] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["namespace", "status"])
+ 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/functioncalloutputitem.py b/src/openrouter/components/functioncalloutputitem.py
index 842269a..0f61f4d 100644
--- a/src/openrouter/components/functioncalloutputitem.py
+++ b/src/openrouter/components/functioncalloutputitem.py
@@ -11,9 +11,8 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import get_discriminator, validate_open_enum
+from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -43,9 +42,7 @@ class FunctionCallOutputItemOutputInputImageTypedDict(TypedDict):
class FunctionCallOutputItemOutputInputImage(BaseModel):
r"""Image input content item"""
- detail: Annotated[
- FunctionCallOutputItemDetail, PlainValidator(validate_open_enum(False))
- ]
+ detail: FunctionCallOutputItemDetail
type: FunctionCallOutputItemTypeInputImage
@@ -53,31 +50,26 @@ class FunctionCallOutputItemOutputInputImage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["image_url"]
- nullable_fields = ["image_url"]
- null_default_fields = []
-
+ optional_fields = set(["image_url"])
+ nullable_fields = set(["image_url"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -148,37 +140,29 @@ class FunctionCallOutputItem(BaseModel):
id: OptionalNullable[str] = UNSET
- status: Annotated[
- OptionalNullable[FunctionCallOutputItemStatus],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ status: OptionalNullable[FunctionCallOutputItemStatus] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["id", "status"]
- nullable_fields = ["id", "status"]
- null_default_fields = []
-
+ optional_fields = set(["id", "status"])
+ nullable_fields = set(["id", "status"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/fusioncallpanelfailedevent.py b/src/openrouter/components/fusioncallpanelfailedevent.py
index e1ac791..3498ab2 100644
--- a/src/openrouter/components/fusioncallpanelfailedevent.py
+++ b/src/openrouter/components/fusioncallpanelfailedevent.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -37,3 +38,19 @@ class FusionCallPanelFailedEvent(BaseModel):
type: FusionCallPanelFailedEventType
status_code: Optional[int] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["status_code"])
+ 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/fusionplugin.py b/src/openrouter/components/fusionplugin.py
index d019e18..c04ecdc 100644
--- a/src/openrouter/components/fusionplugin.py
+++ b/src/openrouter/components/fusionplugin.py
@@ -1,11 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, Nullable, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
+from pydantic import model_serializer
from typing import Any, Dict, List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
FusionPluginID = Literal["fusion",]
@@ -36,6 +35,22 @@ class FusionPluginTool(BaseModel):
parameters: Optional[Dict[str, Nullable[Any]]] = None
r"""Optional configuration forwarded as the tool's `parameters` object."""
+ @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
+
class FusionPluginTypedDict(TypedDict):
id: FusionPluginID
@@ -68,10 +83,26 @@ class FusionPlugin(BaseModel):
model: Optional[str] = None
r"""Slug of the model that performs both the judge step (with web_search + web_fetch) and the final synthesis. When omitted, defaults to the first model in the Quality preset."""
- preset: Annotated[
- Optional[PresetEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ preset: Optional[PresetEnum] = None
r"""A curated OpenRouter fusion preset (slugs follow `-`, e.g. `general-high`). Expands server-side into the preset's analysis_models panel and judge model, so callers never name individual models. Explicitly provided `analysis_models` / `model` take precedence."""
tools: Optional[List[FusionPluginTool]] = None
r"""Server tools available to panelist and judge inner calls. Each entry uses the same `{ type, parameters? }` shorthand as the outer Chat Completions request. When omitted, defaults to `[{ type: \"openrouter:web_search\" }, { type: \"openrouter:web_fetch\" }]`. Pass an empty array to disable tools entirely (panelists answer from parametric knowledge only)."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["analysis_models", "enabled", "max_tool_calls", "model", "preset", "tools"]
+ )
+ 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/fusionservertool_openrouter.py b/src/openrouter/components/fusionservertool_openrouter.py
index 5729ea0..0015e26 100644
--- a/src/openrouter/components/fusionservertool_openrouter.py
+++ b/src/openrouter/components/fusionservertool_openrouter.py
@@ -5,7 +5,8 @@ from .fusionservertoolconfig import (
FusionServerToolConfig,
FusionServerToolConfigTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -28,3 +29,19 @@ class FusionServerToolOpenRouter(BaseModel):
parameters: Optional[FusionServerToolConfig] = None
r"""Configuration for the openrouter:fusion 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/fusionservertoolconfig.py b/src/openrouter/components/fusionservertoolconfig.py
index 9d5ec20..5803dc6 100644
--- a/src/openrouter/components/fusionservertoolconfig.py
+++ b/src/openrouter/components/fusionservertoolconfig.py
@@ -5,11 +5,10 @@ from .anthropiccachecontroldirective import (
AnthropicCacheControlDirective,
AnthropicCacheControlDirectiveTypedDict,
)
-from openrouter.types import BaseModel, Nullable, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
+from pydantic import model_serializer
from typing import Any, Dict, List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
FusionServerToolConfigEffort = Union[
@@ -39,15 +38,28 @@ class FusionServerToolConfigReasoningTypedDict(TypedDict):
class FusionServerToolConfigReasoning(BaseModel):
r"""Reasoning configuration forwarded to panelist and judge inner calls. Use this to control reasoning effort and token budget for models that support extended thinking."""
- effort: Annotated[
- Optional[FusionServerToolConfigEffort],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ effort: Optional[FusionServerToolConfigEffort] = None
r"""Reasoning effort level for panelist and judge inner calls."""
max_tokens: Optional[int] = None
r"""Maximum number of reasoning tokens each panelist and judge model may use. Helps bound cost when models allocate too much budget to chain-of-thought."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["effort", "max_tokens"])
+ 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
+
class FusionServerToolConfigToolTypedDict(TypedDict):
type: str
@@ -63,6 +75,22 @@ class FusionServerToolConfigTool(BaseModel):
parameters: Optional[Dict[str, Nullable[Any]]] = None
r"""Optional configuration forwarded as the tool's `parameters` object."""
+ @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
+
class FusionServerToolConfigTypedDict(TypedDict):
r"""Configuration for the openrouter:fusion server tool."""
@@ -111,3 +139,30 @@ class FusionServerToolConfig(BaseModel):
tools: Optional[List[FusionServerToolConfigTool]] = None
r"""Server tools available to panelist and judge inner calls. Each entry uses the same `{ type, parameters? }` shorthand as the outer Chat Completions request. When omitted, defaults to `[{ type: \"openrouter:web_search\" }, { type: \"openrouter:web_fetch\" }]`. Pass an empty array to disable tools entirely (panelists answer from parametric knowledge only)."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "analysis_models",
+ "cache_control",
+ "max_completion_tokens",
+ "max_tool_calls",
+ "model",
+ "reasoning",
+ "temperature",
+ "tools",
+ ]
+ )
+ 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/generationcontentdata.py b/src/openrouter/components/generationcontentdata.py
index 065679a..2005a3b 100644
--- a/src/openrouter/components/generationcontentdata.py
+++ b/src/openrouter/components/generationcontentdata.py
@@ -53,30 +53,14 @@ class GenerationContentDataOutput(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["completion", "reasoning"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/generationresponse.py b/src/openrouter/components/generationresponse.py
index 5c2e03b..4016d8a 100644
--- a/src/openrouter/components/generationresponse.py
+++ b/src/openrouter/components/generationresponse.py
@@ -10,11 +10,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
APIType = Union[
@@ -138,7 +136,7 @@ class GenerationResponseDataTypedDict(TypedDict):
class GenerationResponseData(BaseModel):
r"""Generation data"""
- api_type: Annotated[Nullable[APIType], PlainValidator(validate_open_enum(False))]
+ api_type: Nullable[APIType]
r"""Type of API used for the generation"""
app_id: Nullable[int]
@@ -153,7 +151,7 @@ class GenerationResponseData(BaseModel):
created_at: str
r"""ISO 8601 timestamp of when the generation was created"""
- data_region: Annotated[DataRegion, PlainValidator(validate_open_enum(False))]
+ data_region: DataRegion
r"""The data region this generation was routed through. 'europe' for EU-routed requests, 'global' otherwise."""
external_user: Nullable[str]
@@ -272,68 +270,65 @@ class GenerationResponseData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["request_id", "response_cache_source_id", "session_id"]
- nullable_fields = [
- "api_type",
- "app_id",
- "cache_discount",
- "cancelled",
- "external_user",
- "finish_reason",
- "generation_time",
- "http_referer",
- "latency",
- "moderation_latency",
- "native_finish_reason",
- "native_tokens_cached",
- "native_tokens_completion",
- "native_tokens_completion_images",
- "native_tokens_prompt",
- "native_tokens_reasoning",
- "num_fetches",
- "num_input_audio_prompt",
- "num_media_completion",
- "num_media_prompt",
- "num_search_results",
- "preset_id",
- "provider_name",
- "provider_responses",
- "request_id",
- "response_cache_source_id",
- "router",
- "service_tier",
- "session_id",
- "streamed",
- "tokens_completion",
- "tokens_prompt",
- "upstream_id",
- "upstream_inference_cost",
- "user_agent",
- "web_search_engine",
- ]
- null_default_fields = []
-
+ optional_fields = set(["request_id", "response_cache_source_id", "session_id"])
+ nullable_fields = set(
+ [
+ "api_type",
+ "app_id",
+ "cache_discount",
+ "cancelled",
+ "external_user",
+ "finish_reason",
+ "generation_time",
+ "http_referer",
+ "latency",
+ "moderation_latency",
+ "native_finish_reason",
+ "native_tokens_cached",
+ "native_tokens_completion",
+ "native_tokens_completion_images",
+ "native_tokens_prompt",
+ "native_tokens_reasoning",
+ "num_fetches",
+ "num_input_audio_prompt",
+ "num_media_completion",
+ "num_media_prompt",
+ "num_search_results",
+ "preset_id",
+ "provider_name",
+ "provider_responses",
+ "request_id",
+ "response_cache_source_id",
+ "router",
+ "service_tier",
+ "session_id",
+ "streamed",
+ "tokens_completion",
+ "tokens_prompt",
+ "upstream_id",
+ "upstream_inference_cost",
+ "user_agent",
+ "web_search_engine",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/getpresetversionresponse.py b/src/openrouter/components/getpresetversionresponse.py
index c7fbebc..122b9e8 100644
--- a/src/openrouter/components/getpresetversionresponse.py
+++ b/src/openrouter/components/getpresetversionresponse.py
@@ -25,30 +25,14 @@ class GetPresetVersionResponse(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["data"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/guardrail.py b/src/openrouter/components/guardrail.py
index ec0d139..b087dc3 100644
--- a/src/openrouter/components/guardrail.py
+++ b/src/openrouter/components/guardrail.py
@@ -14,10 +14,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -122,9 +120,7 @@ class Guardrail(BaseModel):
limit_usd: OptionalNullable[float] = UNSET
r"""Spending limit in USD"""
- reset_interval: Annotated[
- OptionalNullable[GuardrailInterval], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ reset_interval: OptionalNullable[GuardrailInterval] = UNSET
r"""Interval at which the limit resets (daily, weekly, monthly)"""
updated_at: OptionalNullable[str] = UNSET
@@ -132,62 +128,61 @@ class Guardrail(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "allowed_models",
- "allowed_providers",
- "content_filter_builtins",
- "content_filters",
- "description",
- "enforce_zdr",
- "enforce_zdr_anthropic",
- "enforce_zdr_google",
- "enforce_zdr_openai",
- "enforce_zdr_other",
- "ignored_models",
- "ignored_providers",
- "limit_usd",
- "reset_interval",
- "updated_at",
- ]
- nullable_fields = [
- "allowed_models",
- "allowed_providers",
- "content_filter_builtins",
- "content_filters",
- "description",
- "enforce_zdr",
- "enforce_zdr_anthropic",
- "enforce_zdr_google",
- "enforce_zdr_openai",
- "enforce_zdr_other",
- "ignored_models",
- "ignored_providers",
- "limit_usd",
- "reset_interval",
- "updated_at",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "allowed_models",
+ "allowed_providers",
+ "content_filter_builtins",
+ "content_filters",
+ "description",
+ "enforce_zdr",
+ "enforce_zdr_anthropic",
+ "enforce_zdr_google",
+ "enforce_zdr_openai",
+ "enforce_zdr_other",
+ "ignored_models",
+ "ignored_providers",
+ "limit_usd",
+ "reset_interval",
+ "updated_at",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "allowed_models",
+ "allowed_providers",
+ "content_filter_builtins",
+ "content_filters",
+ "description",
+ "enforce_zdr",
+ "enforce_zdr_anthropic",
+ "enforce_zdr_google",
+ "enforce_zdr_openai",
+ "enforce_zdr_other",
+ "ignored_models",
+ "ignored_providers",
+ "limit_usd",
+ "reset_interval",
+ "updated_at",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/imageendpoint.py b/src/openrouter/components/imageendpoint.py
index 8d39204..7fe018a 100644
--- a/src/openrouter/components/imageendpoint.py
+++ b/src/openrouter/components/imageendpoint.py
@@ -52,30 +52,14 @@ class ImageEndpoint(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["provider_tag"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/imagegencompletedevent.py b/src/openrouter/components/imagegencompletedevent.py
index e767efe..ca3f68a 100644
--- a/src/openrouter/components/imagegencompletedevent.py
+++ b/src/openrouter/components/imagegencompletedevent.py
@@ -2,7 +2,8 @@
from __future__ import annotations
from .imagegenerationusage import ImageGenerationUsage, ImageGenerationUsageTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -43,3 +44,19 @@ class ImageGenCompletedEvent(BaseModel):
usage: Optional[ImageGenerationUsage] = None
r"""Token and cost usage for the image generation request, when available"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["media_type", "usage"])
+ 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/imagegenerationrequest.py b/src/openrouter/components/imagegenerationrequest.py
index 6c0fe3e..5d2a7e6 100644
--- a/src/openrouter/components/imagegenerationrequest.py
+++ b/src/openrouter/components/imagegenerationrequest.py
@@ -2,10 +2,9 @@
from __future__ import annotations
from .contentpartimage import ContentPartImage, ContentPartImageTypedDict
-from openrouter.types import BaseModel, Nullable, UnrecognizedStr
-from openrouter.utils import validate_open_enum
+from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Any, Dict, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -479,6 +478,145 @@ class ImageGenerationRequestOptions(BaseModel):
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="z-ai")
] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "01ai",
+ "ai21",
+ "aion-labs",
+ "akashml",
+ "alibaba",
+ "amazon-bedrock",
+ "amazon-nova",
+ "ambient",
+ "anthropic",
+ "anyscale",
+ "arcee-ai",
+ "atlas-cloud",
+ "atoma",
+ "avian",
+ "azure",
+ "baidu",
+ "baseten",
+ "black-forest-labs",
+ "byteplus",
+ "centml",
+ "cerebras",
+ "chutes",
+ "cirrascale",
+ "clarifai",
+ "cloudflare",
+ "cohere",
+ "crofai",
+ "crucible",
+ "crusoe",
+ "darkbloom",
+ "decart",
+ "deepinfra",
+ "deepseek",
+ "dekallm",
+ "digitalocean",
+ "enfer",
+ "fake-provider",
+ "featherless",
+ "fireworks",
+ "friendli",
+ "gmicloud",
+ "google-ai-studio",
+ "google-vertex",
+ "gopomelo",
+ "groq",
+ "heygen",
+ "huggingface",
+ "hyperbolic",
+ "hyperbolic-quantized",
+ "inception",
+ "inceptron",
+ "inferact-vllm",
+ "inference-net",
+ "infermatic",
+ "inflection",
+ "inocloud",
+ "io-net",
+ "ionstream",
+ "klusterai",
+ "lambda",
+ "lepton",
+ "liquid",
+ "lynn",
+ "lynn-private",
+ "mancer",
+ "mancer-old",
+ "mara",
+ "meta",
+ "minimax",
+ "mistral",
+ "modal",
+ "modelrun",
+ "modular",
+ "moonshotai",
+ "morph",
+ "ncompass",
+ "nebius",
+ "nex-agi",
+ "nextbit",
+ "nineteen",
+ "novita",
+ "nvidia",
+ "octoai",
+ "open-inference",
+ "openai",
+ "parasail",
+ "perceptron",
+ "perplexity",
+ "phala",
+ "poolside",
+ "quiver",
+ "recraft",
+ "recursal",
+ "reflection",
+ "reka",
+ "relace",
+ "replicate",
+ "sakana-ai",
+ "sambanova",
+ "sambanova-cloaked",
+ "seed",
+ "sf-compute",
+ "siliconflow",
+ "sourceful",
+ "stealth",
+ "stepfun",
+ "streamlake",
+ "switchpoint",
+ "targon",
+ "tenstorrent",
+ "together",
+ "together-lite",
+ "ubicloud",
+ "upstage",
+ "venice",
+ "wafer",
+ "wandb",
+ "xai",
+ "xiaomi",
+ "z-ai",
+ ]
+ )
+ 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
+
class ImageGenerationRequestProviderTypedDict(TypedDict):
r"""Provider-specific passthrough configuration"""
@@ -491,6 +629,22 @@ class ImageGenerationRequestProvider(BaseModel):
options: Optional[ImageGenerationRequestOptions] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["options"])
+ 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
+
ImageGenerationRequestQuality = Union[
Literal[
@@ -558,16 +712,10 @@ class ImageGenerationRequest(BaseModel):
prompt: str
r"""Text description of the desired image"""
- aspect_ratio: Annotated[
- Optional[ImageGenerationRequestAspectRatio],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ aspect_ratio: Optional[ImageGenerationRequestAspectRatio] = None
r"""Normalized aspect ratio of the generated image. Providers clamp to their supported subset."""
- background: Annotated[
- Optional[ImageGenerationRequestBackground],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ background: Optional[ImageGenerationRequestBackground] = None
r"""Background treatment. `transparent` requires an output_format that supports alpha (png or webp)."""
input_references: Optional[List[ContentPartImage]] = None
@@ -579,25 +727,16 @@ class ImageGenerationRequest(BaseModel):
output_compression: Optional[int] = None
r"""Compression level (0-100) for webp/jpeg output. Ignored for png and by providers without a compression knob."""
- output_format: Annotated[
- Optional[ImageGenerationRequestOutputFormat],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ output_format: Optional[ImageGenerationRequestOutputFormat] = None
r"""Encoding of the returned image bytes. Most models produce raster formats (png, jpeg, webp). SVG is supported by vectorization models (e.g. Quiver) — the SVG markup is UTF-8 base64-encoded in `b64_json`."""
provider: Optional[ImageGenerationRequestProvider] = None
r"""Provider-specific passthrough configuration"""
- quality: Annotated[
- Optional[ImageGenerationRequestQuality],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ quality: Optional[ImageGenerationRequestQuality] = None
r"""Rendering quality. Providers without a quality knob ignore this."""
- resolution: Annotated[
- Optional[ImageGenerationRequestResolution],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ resolution: Optional[ImageGenerationRequestResolution] = None
r"""Normalized resolution tier of the generated image. Concrete pixel dimensions are derived per-provider."""
seed: Optional[int] = None
@@ -608,3 +747,40 @@ class ImageGenerationRequest(BaseModel):
stream: Optional[bool] = None
r"""If true, partial images are streamed as SSE events as they become available. Only supported by providers with native streaming (currently OpenAI). Non-streaming providers ignore this flag and return a buffered response."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "aspect_ratio",
+ "background",
+ "input_references",
+ "n",
+ "output_compression",
+ "output_format",
+ "provider",
+ "quality",
+ "resolution",
+ "seed",
+ "size",
+ "stream",
+ ]
+ )
+ 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
+
+
+try:
+ ImageGenerationRequestOptions.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/imagegenerationresponse.py b/src/openrouter/components/imagegenerationresponse.py
index 64b059a..7eddf64 100644
--- a/src/openrouter/components/imagegenerationresponse.py
+++ b/src/openrouter/components/imagegenerationresponse.py
@@ -2,7 +2,8 @@
from __future__ import annotations
from .imagegenerationusage import ImageGenerationUsage, ImageGenerationUsageTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Optional
from typing_extensions import NotRequired, TypedDict
@@ -21,6 +22,22 @@ class ImageGenerationResponseData(BaseModel):
media_type: Optional[str] = None
r"""Media type (MIME type) of the image. Omitted when the output is a standard raster format (PNG). Present for non-raster outputs such as SVG (`image/svg+xml`)."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["media_type"])
+ 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
+
class ImageGenerationResponseTypedDict(TypedDict):
r"""Image generation response"""
@@ -44,3 +61,19 @@ class ImageGenerationResponse(BaseModel):
usage: Optional[ImageGenerationUsage] = None
r"""Token and cost usage for the image generation request, when available"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["usage"])
+ 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/imagegenerationservertool.py b/src/openrouter/components/imagegenerationservertool.py
index dfcb122..6e4cf9a 100644
--- a/src/openrouter/components/imagegenerationservertool.py
+++ b/src/openrouter/components/imagegenerationservertool.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
ImageGenerationServerToolBackground = Union[
@@ -45,6 +43,22 @@ class InputImageMask(BaseModel):
image_url: Optional[str] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["file_id", "image_url"])
+ 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
+
ModelEnum = Union[
Literal[
@@ -120,78 +134,60 @@ class ImageGenerationServerTool(BaseModel):
type: ImageGenerationServerToolType
- background: Annotated[
- Optional[ImageGenerationServerToolBackground],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ background: Optional[ImageGenerationServerToolBackground] = None
- input_fidelity: Annotated[
- OptionalNullable[InputFidelity], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ input_fidelity: OptionalNullable[InputFidelity] = UNSET
input_image_mask: Optional[InputImageMask] = None
- model: Annotated[Optional[ModelEnum], PlainValidator(validate_open_enum(False))] = (
- None
- )
+ model: Optional[ModelEnum] = None
- moderation: Annotated[
- Optional[Moderation], PlainValidator(validate_open_enum(False))
- ] = None
+ moderation: Optional[Moderation] = None
output_compression: Optional[int] = None
- output_format: Annotated[
- Optional[ImageGenerationServerToolOutputFormat],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ output_format: Optional[ImageGenerationServerToolOutputFormat] = None
partial_images: Optional[int] = None
- quality: Annotated[
- Optional[ImageGenerationServerToolQuality],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ quality: Optional[ImageGenerationServerToolQuality] = None
- size: Annotated[Optional[Size], PlainValidator(validate_open_enum(False))] = None
+ size: Optional[Size] = None
@model_serializer(mode="wrap")
- def serialize_model(self, handler):
- optional_fields = [
- "background",
- "input_fidelity",
- "input_image_mask",
- "model",
- "moderation",
- "output_compression",
- "output_format",
- "partial_images",
- "quality",
- "size",
- ]
- nullable_fields = ["input_fidelity"]
- null_default_fields = []
-
+ def _serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "background",
+ "input_fidelity",
+ "input_image_mask",
+ "model",
+ "moderation",
+ "output_compression",
+ "output_format",
+ "partial_images",
+ "quality",
+ "size",
+ ]
+ )
+ nullable_fields = set(["input_fidelity"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/imagegenerationservertool_openrouter.py b/src/openrouter/components/imagegenerationservertool_openrouter.py
index c9609db..dbae649 100644
--- a/src/openrouter/components/imagegenerationservertool_openrouter.py
+++ b/src/openrouter/components/imagegenerationservertool_openrouter.py
@@ -5,7 +5,8 @@ from .imagegenerationservertoolconfig import (
ImageGenerationServerToolConfig,
ImageGenerationServerToolConfigTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -28,3 +29,19 @@ class ImageGenerationServerToolOpenRouter(BaseModel):
parameters: Optional[ImageGenerationServerToolConfig] = None
r"""Configuration for the openrouter:image_generation server tool. Accepts all image_config params (aspect_ratio, quality, size, background, output_format, output_compression, moderation, etc.) plus a model field."""
+
+ @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/imagegenerationservertoolconfig.py b/src/openrouter/components/imagegenerationservertoolconfig.py
index 0fdc8f6..2458156 100644
--- a/src/openrouter/components/imagegenerationservertoolconfig.py
+++ b/src/openrouter/components/imagegenerationservertoolconfig.py
@@ -2,9 +2,9 @@
from __future__ import annotations
from .imagegenerationservertoolconfig_union import ImageGenerationServerToolConfigUnion
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
-from pydantic import ConfigDict
+from pydantic import ConfigDict, model_serializer
from typing import Dict, Optional
from typing_extensions import NotRequired, TypedDict
@@ -36,3 +36,22 @@ class ImageGenerationServerToolConfig(BaseModel):
@additional_properties.setter
def additional_properties(self, value):
self.__pydantic_extra__ = value # pyright: ignore[reportIncompatibleVariableOverride]
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["model"])
+ 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))
+ serialized.pop(k, serialized.pop(n, None))
+
+ if val != UNSET_SENTINEL:
+ if val is not None or k not in optional_fields:
+ m[k] = val
+ for k, v in serialized.items():
+ m[k] = v
+
+ return m
diff --git a/src/openrouter/components/imagegenerationusage.py b/src/openrouter/components/imagegenerationusage.py
index ddc1c84..83ae9b1 100644
--- a/src/openrouter/components/imagegenerationusage.py
+++ b/src/openrouter/components/imagegenerationusage.py
@@ -14,11 +14,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class ImageGenerationUsageCompletionTokensDetailsTypedDict(TypedDict):
@@ -42,31 +40,26 @@ class ImageGenerationUsageCompletionTokensDetails(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["audio_tokens", "image_tokens", "reasoning_tokens"]
- nullable_fields = ["audio_tokens", "image_tokens", "reasoning_tokens"]
- null_default_fields = []
-
+ optional_fields = set(["audio_tokens", "image_tokens", "reasoning_tokens"])
+ nullable_fields = set(["audio_tokens", "image_tokens", "reasoning_tokens"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -106,43 +99,42 @@ class ImageGenerationUsagePromptTokensDetails(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "audio_tokens",
- "cache_write_tokens",
- "cached_tokens",
- "file_tokens",
- "video_tokens",
- ]
- nullable_fields = [
- "audio_tokens",
- "cache_write_tokens",
- "cached_tokens",
- "file_tokens",
- "video_tokens",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "audio_tokens",
+ "cache_write_tokens",
+ "cached_tokens",
+ "file_tokens",
+ "video_tokens",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "audio_tokens",
+ "cache_write_tokens",
+ "cached_tokens",
+ "file_tokens",
+ "video_tokens",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -172,39 +164,30 @@ class ServerToolUse(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "tool_calls_executed",
- "tool_calls_requested",
- "web_search_requests",
- ]
- nullable_fields = [
- "tool_calls_executed",
- "tool_calls_requested",
- "web_search_requests",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ ["tool_calls_executed", "tool_calls_requested", "web_search_requests"]
+ )
+ nullable_fields = set(
+ ["tool_calls_executed", "tool_calls_requested", "web_search_requests"]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -277,55 +260,52 @@ class ImageGenerationUsage(BaseModel):
service_tier: OptionalNullable[str] = UNSET
r"""The service tier used by the upstream provider for this request"""
- speed: Annotated[
- OptionalNullable[AnthropicSpeed], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ speed: OptionalNullable[AnthropicSpeed] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "completion_tokens_details",
- "cost",
- "cost_details",
- "is_byok",
- "iterations",
- "prompt_tokens_details",
- "server_tool_use",
- "service_tier",
- "speed",
- ]
- nullable_fields = [
- "completion_tokens_details",
- "cost",
- "cost_details",
- "iterations",
- "prompt_tokens_details",
- "server_tool_use",
- "service_tier",
- "speed",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "completion_tokens_details",
+ "cost",
+ "cost_details",
+ "is_byok",
+ "iterations",
+ "prompt_tokens_details",
+ "server_tool_use",
+ "service_tier",
+ "speed",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "completion_tokens_details",
+ "cost",
+ "cost_details",
+ "iterations",
+ "prompt_tokens_details",
+ "server_tool_use",
+ "service_tier",
+ "speed",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/imagegenstreamerrorevent.py b/src/openrouter/components/imagegenstreamerrorevent.py
index 9396413..80006d6 100644
--- a/src/openrouter/components/imagegenstreamerrorevent.py
+++ b/src/openrouter/components/imagegenstreamerrorevent.py
@@ -43,31 +43,26 @@ class ImageGenStreamErrorEventError(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["code", "param", "type"]
- nullable_fields = ["code", "param", "type"]
- null_default_fields = []
-
+ optional_fields = set(["code", "param", "type"])
+ nullable_fields = set(["code", "param", "type"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/imagemodelarchitecture.py b/src/openrouter/components/imagemodelarchitecture.py
index 5e93aaa..01f0cb5 100644
--- a/src/openrouter/components/imagemodelarchitecture.py
+++ b/src/openrouter/components/imagemodelarchitecture.py
@@ -4,10 +4,8 @@ from __future__ import annotations
from .imageoutputmodality import ImageOutputModality
from .inputmodality import InputModality
from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
from typing import List
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
class ImageModelArchitectureTypedDict(TypedDict):
@@ -18,12 +16,8 @@ class ImageModelArchitectureTypedDict(TypedDict):
class ImageModelArchitecture(BaseModel):
- input_modalities: List[
- Annotated[InputModality, PlainValidator(validate_open_enum(False))]
- ]
+ input_modalities: List[InputModality]
r"""Supported input modalities"""
- output_modalities: List[
- Annotated[ImageOutputModality, PlainValidator(validate_open_enum(False))]
- ]
+ output_modalities: List[ImageOutputModality]
r"""Supported output modalities"""
diff --git a/src/openrouter/components/imagepricingentry.py b/src/openrouter/components/imagepricingentry.py
index 8a87004..4e4c1cb 100644
--- a/src/openrouter/components/imagepricingentry.py
+++ b/src/openrouter/components/imagepricingentry.py
@@ -1,11 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from pydantic import model_serializer
from typing import Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
Billable = Union[
@@ -42,10 +41,26 @@ class ImagePricingEntryTypedDict(TypedDict):
class ImagePricingEntry(BaseModel):
r"""One billable pricing line for an image provider."""
- billable: Annotated[Billable, PlainValidator(validate_open_enum(False))]
+ billable: Billable
cost_usd: float
- unit: Annotated[Unit, PlainValidator(validate_open_enum(False))]
+ unit: Unit
variant: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["variant"])
+ 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/imagestreamingresponse.py b/src/openrouter/components/imagestreamingresponse.py
index 74c8f06..877d198 100644
--- a/src/openrouter/components/imagestreamingresponse.py
+++ b/src/openrouter/components/imagestreamingresponse.py
@@ -13,10 +13,12 @@ from .imagegenstreamerrorevent import (
ImageGenStreamErrorEvent,
ImageGenStreamErrorEventTypedDict,
)
+from functools import partial
from openrouter.types import BaseModel
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import Union
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Union
from typing_extensions import Annotated, TypeAliasType, TypedDict
@@ -30,13 +32,39 @@ ImageStreamingResponseDataTypedDict = TypeAliasType(
)
+class UnknownImageStreamingResponseData(BaseModel):
+ r"""A ImageStreamingResponseData variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_IMAGE_STREAMING_RESPONSE_DATA_VARIANTS: dict[str, Any] = {
+ "image_generation.partial_image": ImageGenPartialImageEvent,
+ "image_generation.completed": ImageGenCompletedEvent,
+ "error": ImageGenStreamErrorEvent,
+}
+
+
ImageStreamingResponseData = Annotated[
Union[
- Annotated[ImageGenPartialImageEvent, Tag("image_generation.partial_image")],
- Annotated[ImageGenCompletedEvent, Tag("image_generation.completed")],
- Annotated[ImageGenStreamErrorEvent, Tag("error")],
+ ImageGenPartialImageEvent,
+ ImageGenCompletedEvent,
+ ImageGenStreamErrorEvent,
+ UnknownImageStreamingResponseData,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_IMAGE_STREAMING_RESPONSE_DATA_VARIANTS,
+ unknown_cls=UnknownImageStreamingResponseData,
+ union_name="ImageStreamingResponseData",
+ )
+ ),
]
diff --git a/src/openrouter/components/incompletedetails.py b/src/openrouter/components/incompletedetails.py
index 56dc096..313c4e7 100644
--- a/src/openrouter/components/incompletedetails.py
+++ b/src/openrouter/components/incompletedetails.py
@@ -1,11 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from pydantic import model_serializer
from typing import Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
Reason = Union[
@@ -22,6 +21,20 @@ class IncompleteDetailsTypedDict(TypedDict):
class IncompleteDetails(BaseModel):
- reason: Annotated[Optional[Reason], PlainValidator(validate_open_enum(False))] = (
- None
- )
+ reason: Optional[Reason] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["reason"])
+ 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/inputaudio.py b/src/openrouter/components/inputaudio.py
index 00e2180..bb86cd0 100644
--- a/src/openrouter/components/inputaudio.py
+++ b/src/openrouter/components/inputaudio.py
@@ -2,9 +2,7 @@
from __future__ import annotations
from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
import pydantic
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
from typing_extensions import Annotated, TypedDict
@@ -26,10 +24,7 @@ class InputAudioInputAudioTypedDict(TypedDict):
class InputAudioInputAudio(BaseModel):
data: str
- format_: Annotated[
- Annotated[FormatEnum, PlainValidator(validate_open_enum(False))],
- pydantic.Field(alias="format"),
- ]
+ format_: Annotated[FormatEnum, pydantic.Field(alias="format")]
InputAudioType = Literal["input_audio",]
@@ -48,3 +43,9 @@ class InputAudio(BaseModel):
input_audio: InputAudioInputAudio
type: InputAudioType
+
+
+try:
+ InputAudioInputAudio.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/inputfile.py b/src/openrouter/components/inputfile.py
index 7a6dacd..96197ca 100644
--- a/src/openrouter/components/inputfile.py
+++ b/src/openrouter/components/inputfile.py
@@ -41,30 +41,25 @@ class InputFile(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["file_data", "file_id", "file_url", "filename"]
- nullable_fields = ["file_id"]
- null_default_fields = []
-
+ optional_fields = set(["file_data", "file_id", "file_url", "filename"])
+ nullable_fields = set(["file_id"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/inputimage.py b/src/openrouter/components/inputimage.py
index c249efe..0e7edf2 100644
--- a/src/openrouter/components/inputimage.py
+++ b/src/openrouter/components/inputimage.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
InputImageDetail = Union[
@@ -41,7 +39,7 @@ class InputImageTypedDict(TypedDict):
class InputImage(BaseModel):
r"""Image input content item"""
- detail: Annotated[InputImageDetail, PlainValidator(validate_open_enum(False))]
+ detail: InputImageDetail
type: InputImageType
@@ -49,30 +47,25 @@ class InputImage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["image_url"]
- nullable_fields = ["image_url"]
- null_default_fields = []
-
+ optional_fields = set(["image_url"])
+ nullable_fields = set(["image_url"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/inputmessageitem.py b/src/openrouter/components/inputmessageitem.py
index 0a812fc..654f642 100644
--- a/src/openrouter/components/inputmessageitem.py
+++ b/src/openrouter/components/inputmessageitem.py
@@ -13,9 +13,8 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import get_discriminator, validate_open_enum
+from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -45,7 +44,7 @@ class InputMessageItemContentInputImageTypedDict(TypedDict):
class InputMessageItemContentInputImage(BaseModel):
r"""Image input content item"""
- detail: Annotated[InputMessageItemDetail, PlainValidator(validate_open_enum(False))]
+ detail: InputMessageItemDetail
type: InputMessageItemTypeInputImage
@@ -53,31 +52,26 @@ class InputMessageItemContentInputImage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["image_url"]
- nullable_fields = ["image_url"]
- null_default_fields = []
-
+ optional_fields = set(["image_url"])
+ nullable_fields = set(["image_url"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -156,30 +150,25 @@ class InputMessageItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["content", "id", "type"]
- nullable_fields = ["content"]
- null_default_fields = []
-
+ optional_fields = set(["content", "id", "type"])
+ nullable_fields = set(["content"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/inputs_union.py b/src/openrouter/components/inputs_union.py
index 04903b8..1371934 100644
--- a/src/openrouter/components/inputs_union.py
+++ b/src/openrouter/components/inputs_union.py
@@ -80,6 +80,10 @@ from .outputfilesearchservertoolitem import (
OutputFileSearchServerToolItem,
OutputFileSearchServerToolItemTypedDict,
)
+from .outputfilesservertoolitem import (
+ OutputFilesServerToolItem,
+ OutputFilesServerToolItemTypedDict,
+)
from .outputfunctioncallitem import (
OutputFunctionCallItem,
OutputFunctionCallItemTypedDict,
@@ -146,10 +150,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import get_discriminator, validate_open_enum
+from openrouter.utils import get_discriminator
import pydantic
from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -208,10 +211,7 @@ class InputsReasoning(BaseModel):
status: Optional[InputsStatusUnion2] = None
format_: Annotated[
- Annotated[
- OptionalNullable[ReasoningFormat], PlainValidator(validate_open_enum(False))
- ],
- pydantic.Field(alias="format"),
+ OptionalNullable[ReasoningFormat], pydantic.Field(alias="format")
] = UNSET
signature: OptionalNullable[str] = UNSET
@@ -219,43 +219,30 @@ class InputsReasoning(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "content",
- "encrypted_content",
- "status",
- "format",
- "signature",
- ]
- nullable_fields = [
- "content",
- "encrypted_content",
- "summary",
- "format",
- "signature",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ ["content", "encrypted_content", "status", "format", "signature"]
+ )
+ nullable_fields = set(
+ ["content", "encrypted_content", "summary", "format", "signature"]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -359,31 +346,26 @@ class InputsMessage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["phase", "status"]
- nullable_fields = ["content", "phase"]
- null_default_fields = []
-
+ optional_fields = set(["phase", "status"])
+ nullable_fields = set(["content", "phase"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -396,45 +378,46 @@ InputsUnion1TypedDict = TypeAliasType(
OutputFileSearchCallItemTypedDict,
EasyInputMessageTypedDict,
InputMessageItemTypedDict,
- CustomToolCallOutputItemTypedDict,
LocalShellCallOutputItemTypedDict,
OutputToolSearchServerToolItemTypedDict,
OutputFileSearchServerToolItemTypedDict,
OutputWebSearchServerToolItemTypedDict,
+ CustomToolCallOutputItemTypedDict,
OutputImageGenerationCallItemTypedDict,
OutputWebSearchCallItemTypedDict,
- LocalShellCallItemTypedDict,
- OutputSearchModelsServerToolItemTypedDict,
- FunctionCallOutputItemTypedDict,
- ApplyPatchCallItemTypedDict,
OutputDatetimeItemTypedDict,
- McpApprovalResponseItemTypedDict,
- McpApprovalRequestItemTypedDict,
+ OutputMcpServerToolItemTypedDict,
+ FunctionCallOutputItemTypedDict,
+ OutputSearchModelsServerToolItemTypedDict,
+ LocalShellCallItemTypedDict,
+ ApplyPatchCallItemTypedDict,
McpListToolsItemTypedDict,
ApplyPatchCallOutputItemTypedDict,
+ McpApprovalResponseItemTypedDict,
OutputBrowserUseServerToolItemTypedDict,
- OutputMcpServerToolItemTypedDict,
+ McpApprovalRequestItemTypedDict,
OutputTextEditorServerToolItemTypedDict,
OutputApplyPatchServerToolItemTypedDict,
- ShellCallItemTypedDict,
+ CustomToolCallItemTypedDict,
InputsMessageTypedDict,
OutputMemoryServerToolItemTypedDict,
- OutputCodeInterpreterCallItemTypedDict,
OutputCustomToolCallItemTypedDict,
OutputComputerCallItemTypedDict,
- CustomToolCallItemTypedDict,
ShellCallOutputItemTypedDict,
- McpCallItemTypedDict,
- OutputImageGenerationServerToolItemTypedDict,
- OutputFunctionCallItemTypedDict,
+ ShellCallItemTypedDict,
+ OutputCodeInterpreterCallItemTypedDict,
OutputBashServerToolItemTypedDict,
+ OutputImageGenerationServerToolItemTypedDict,
+ McpCallItemTypedDict,
+ OutputFunctionCallItemTypedDict,
FunctionCallItemTypedDict,
- ReasoningItemTypedDict,
+ OutputFilesServerToolItemTypedDict,
OutputSubagentServerToolItemTypedDict,
- InputsReasoningTypedDict,
- OutputCodeInterpreterServerToolItemTypedDict,
- OutputWebFetchServerToolItemTypedDict,
OutputAdvisorServerToolItemTypedDict,
+ OutputWebFetchServerToolItemTypedDict,
+ ReasoningItemTypedDict,
+ OutputCodeInterpreterServerToolItemTypedDict,
+ InputsReasoningTypedDict,
OutputFusionServerToolItemTypedDict,
],
)
@@ -448,45 +431,46 @@ InputsUnion1 = TypeAliasType(
OutputFileSearchCallItem,
EasyInputMessage,
InputMessageItem,
- CustomToolCallOutputItem,
LocalShellCallOutputItem,
OutputToolSearchServerToolItem,
OutputFileSearchServerToolItem,
OutputWebSearchServerToolItem,
+ CustomToolCallOutputItem,
OutputImageGenerationCallItem,
OutputWebSearchCallItem,
- LocalShellCallItem,
- OutputSearchModelsServerToolItem,
- FunctionCallOutputItem,
- ApplyPatchCallItem,
OutputDatetimeItem,
- McpApprovalResponseItem,
- McpApprovalRequestItem,
+ OutputMcpServerToolItem,
+ FunctionCallOutputItem,
+ OutputSearchModelsServerToolItem,
+ LocalShellCallItem,
+ ApplyPatchCallItem,
McpListToolsItem,
ApplyPatchCallOutputItem,
+ McpApprovalResponseItem,
OutputBrowserUseServerToolItem,
- OutputMcpServerToolItem,
+ McpApprovalRequestItem,
OutputTextEditorServerToolItem,
OutputApplyPatchServerToolItem,
- ShellCallItem,
+ CustomToolCallItem,
InputsMessage,
OutputMemoryServerToolItem,
- OutputCodeInterpreterCallItem,
OutputCustomToolCallItem,
OutputComputerCallItem,
- CustomToolCallItem,
ShellCallOutputItem,
- McpCallItem,
- OutputImageGenerationServerToolItem,
- OutputFunctionCallItem,
+ ShellCallItem,
+ OutputCodeInterpreterCallItem,
OutputBashServerToolItem,
+ OutputImageGenerationServerToolItem,
+ McpCallItem,
+ OutputFunctionCallItem,
FunctionCallItem,
- ReasoningItem,
+ OutputFilesServerToolItem,
OutputSubagentServerToolItem,
- InputsReasoning,
- OutputCodeInterpreterServerToolItem,
- OutputWebFetchServerToolItem,
OutputAdvisorServerToolItem,
+ OutputWebFetchServerToolItem,
+ ReasoningItem,
+ OutputCodeInterpreterServerToolItem,
+ InputsReasoning,
OutputFusionServerToolItem,
],
)
@@ -500,3 +484,9 @@ r"""Input for a response request - can be a string or array of items"""
InputsUnion = TypeAliasType("InputsUnion", Union[str, List[InputsUnion1]])
r"""Input for a response request - can be a string or array of items"""
+
+
+try:
+ InputsReasoning.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/internalserverresponseerrordata.py b/src/openrouter/components/internalserverresponseerrordata.py
index 499f492..6742b2e 100644
--- a/src/openrouter/components/internalserverresponseerrordata.py
+++ b/src/openrouter/components/internalserverresponseerrordata.py
@@ -32,30 +32,25 @@ class InternalServerResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/keyassignment.py b/src/openrouter/components/keyassignment.py
index 1598e46..d334197 100644
--- a/src/openrouter/components/keyassignment.py
+++ b/src/openrouter/components/keyassignment.py
@@ -47,30 +47,14 @@ class KeyAssignment(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["assigned_by"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/legacy_websearchservertool.py b/src/openrouter/components/legacy_websearchservertool.py
index 963b590..5628eb8 100644
--- a/src/openrouter/components/legacy_websearchservertool.py
+++ b/src/openrouter/components/legacy_websearchservertool.py
@@ -12,11 +12,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
LegacyWebSearchServerToolType = Literal["web_search",]
@@ -42,9 +40,7 @@ class LegacyWebSearchServerTool(BaseModel):
type: LegacyWebSearchServerToolType
- engine: Annotated[
- Optional[WebSearchEngineEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ engine: Optional[WebSearchEngineEnum] = None
r"""Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API. \"perplexity\" uses the Perplexity Search API (raw ranked results)."""
filters: OptionalNullable[WebSearchDomainFilter] = UNSET
@@ -52,9 +48,7 @@ class LegacyWebSearchServerTool(BaseModel):
max_results: Optional[int] = None
r"""Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped."""
- search_context_size: Annotated[
- Optional[SearchContextSizeEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ search_context_size: Optional[SearchContextSizeEnum] = None
r"""Size of the search context for web search tools"""
user_location: OptionalNullable[WebSearchUserLocation] = UNSET
@@ -62,36 +56,27 @@ class LegacyWebSearchServerTool(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "engine",
- "filters",
- "max_results",
- "search_context_size",
- "user_location",
- ]
- nullable_fields = ["filters", "user_location"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["engine", "filters", "max_results", "search_context_size", "user_location"]
+ )
+ nullable_fields = set(["filters", "user_location"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/listendpointsresponse.py b/src/openrouter/components/listendpointsresponse.py
index de4f121..9618ef2 100644
--- a/src/openrouter/components/listendpointsresponse.py
+++ b/src/openrouter/components/listendpointsresponse.py
@@ -6,11 +6,9 @@ from .instructtype import InstructType
from .outputmodality import OutputModality
from .publicendpoint import PublicEndpoint, PublicEndpointTypedDict
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Union
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
Tokenizer = Union[
@@ -58,52 +56,30 @@ class ArchitectureTypedDict(TypedDict):
class Architecture(BaseModel):
r"""Model architecture information"""
- input_modalities: List[
- Annotated[InputModality, PlainValidator(validate_open_enum(False))]
- ]
+ input_modalities: List[InputModality]
r"""Supported input modalities"""
- instruct_type: Annotated[
- Nullable[InstructType], PlainValidator(validate_open_enum(False))
- ]
+ instruct_type: Nullable[InstructType]
r"""Instruction format type"""
modality: Nullable[str]
r"""Primary modality of the model"""
- output_modalities: List[
- Annotated[OutputModality, PlainValidator(validate_open_enum(False))]
- ]
+ output_modalities: List[OutputModality]
r"""Supported output modalities"""
- tokenizer: Annotated[Nullable[Tokenizer], PlainValidator(validate_open_enum(False))]
+ tokenizer: Nullable[Tokenizer]
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["instruct_type", "modality", "tokenizer"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/listworkspacemembersresponse.py b/src/openrouter/components/listworkspacemembersresponse.py
new file mode 100644
index 0000000..9118237
--- /dev/null
+++ b/src/openrouter/components/listworkspacemembersresponse.py
@@ -0,0 +1,22 @@
+"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+
+from __future__ import annotations
+from .workspacemember import WorkspaceMember, WorkspaceMemberTypedDict
+from openrouter.types import BaseModel
+from typing import List
+from typing_extensions import TypedDict
+
+
+class ListWorkspaceMembersResponseTypedDict(TypedDict):
+ data: List[WorkspaceMemberTypedDict]
+ r"""List of workspace members"""
+ total_count: int
+ r"""Total number of members in the workspace"""
+
+
+class ListWorkspaceMembersResponse(BaseModel):
+ data: List[WorkspaceMember]
+ r"""List of workspace members"""
+
+ total_count: int
+ r"""Total number of members in the workspace"""
diff --git a/src/openrouter/components/localshellcallitem.py b/src/openrouter/components/localshellcallitem.py
index 00560d6..5f66187 100644
--- a/src/openrouter/components/localshellcallitem.py
+++ b/src/openrouter/components/localshellcallitem.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Dict, List, Literal
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
TypeExec = Literal["exec",]
@@ -43,31 +41,26 @@ class LocalShellCallItemAction(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["timeout_ms", "user", "working_directory"]
- nullable_fields = ["timeout_ms", "user", "working_directory"]
- null_default_fields = []
-
+ optional_fields = set(["timeout_ms", "user", "working_directory"])
+ nullable_fields = set(["timeout_ms", "user", "working_directory"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -94,6 +87,6 @@ class LocalShellCallItem(BaseModel):
id: str
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: TypeLocalShellCall
diff --git a/src/openrouter/components/localshellcalloutputitem.py b/src/openrouter/components/localshellcalloutputitem.py
index c1fc179..24a827a 100644
--- a/src/openrouter/components/localshellcalloutputitem.py
+++ b/src/openrouter/components/localshellcalloutputitem.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
LocalShellCallOutputItemStatus = Union[
@@ -47,37 +45,29 @@ class LocalShellCallOutputItem(BaseModel):
type: LocalShellCallOutputItemType
- status: Annotated[
- OptionalNullable[LocalShellCallOutputItemStatus],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ status: OptionalNullable[LocalShellCallOutputItemStatus] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["status"]
- nullable_fields = ["status"]
- null_default_fields = []
-
+ optional_fields = set(["status"])
+ nullable_fields = set(["status"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/mcpapprovalresponseitem.py b/src/openrouter/components/mcpapprovalresponseitem.py
index 3231df9..75dc3be 100644
--- a/src/openrouter/components/mcpapprovalresponseitem.py
+++ b/src/openrouter/components/mcpapprovalresponseitem.py
@@ -41,30 +41,25 @@ class McpApprovalResponseItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["id", "reason"]
- nullable_fields = ["id", "reason"]
- null_default_fields = []
-
+ optional_fields = set(["id", "reason"])
+ nullable_fields = set(["id", "reason"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/mcpcallitem.py b/src/openrouter/components/mcpcallitem.py
index d593dd4..e5f3723 100644
--- a/src/openrouter/components/mcpcallitem.py
+++ b/src/openrouter/components/mcpcallitem.py
@@ -47,30 +47,25 @@ class McpCallItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["error", "output"]
- nullable_fields = ["error", "output"]
- null_default_fields = []
-
+ optional_fields = set(["error", "output"])
+ nullable_fields = set(["error", "output"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/mcplisttoolsitem.py b/src/openrouter/components/mcplisttoolsitem.py
index 305621b..710c3db 100644
--- a/src/openrouter/components/mcplisttoolsitem.py
+++ b/src/openrouter/components/mcplisttoolsitem.py
@@ -31,31 +31,26 @@ class McpListToolsItemTool(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["annotations", "description"]
- nullable_fields = ["annotations", "description"]
- null_default_fields = []
-
+ optional_fields = set(["annotations", "description"])
+ nullable_fields = set(["annotations", "description"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -88,30 +83,25 @@ class McpListToolsItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["error"]
- nullable_fields = ["error"]
- null_default_fields = []
-
+ optional_fields = set(["error"])
+ nullable_fields = set(["error"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/mcpservertool.py b/src/openrouter/components/mcpservertool.py
index 2a2dce0..2b0489b 100644
--- a/src/openrouter/components/mcpservertool.py
+++ b/src/openrouter/components/mcpservertool.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, Dict, List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
+from typing_extensions import NotRequired, TypeAliasType, TypedDict
class AllowedToolsTypedDict(TypedDict):
@@ -26,6 +24,22 @@ class AllowedTools(BaseModel):
tool_names: Optional[List[str]] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["read_only", "tool_names"])
+ 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
+
AllowedToolsUnionTypedDict = TypeAliasType(
"AllowedToolsUnionTypedDict", Union[AllowedToolsTypedDict, List[str], Any]
@@ -65,6 +79,22 @@ class AlwaysTypedDict(TypedDict):
class Always(BaseModel):
tool_names: Optional[List[str]] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["tool_names"])
+ 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
+
class NeverTypedDict(TypedDict):
tool_names: NotRequired[List[str]]
@@ -73,6 +103,22 @@ class NeverTypedDict(TypedDict):
class Never(BaseModel):
tool_names: Optional[List[str]] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["tool_names"])
+ 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
+
class RequireApprovalTypedDict(TypedDict):
always: NotRequired[AlwaysTypedDict]
@@ -84,6 +130,22 @@ class RequireApproval(BaseModel):
never: Optional[Never] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["always", "never"])
+ 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
+
RequireApprovalUnionTypedDict = TypeAliasType(
"RequireApprovalUnionTypedDict",
@@ -125,9 +187,7 @@ class McpServerTool(BaseModel):
authorization: Optional[str] = None
- connector_id: Annotated[
- Optional[ConnectorID], PlainValidator(validate_open_enum(False))
- ] = None
+ connector_id: Optional[ConnectorID] = None
headers: OptionalNullable[Dict[str, str]] = UNSET
@@ -139,38 +199,35 @@ class McpServerTool(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "allowed_tools",
- "authorization",
- "connector_id",
- "headers",
- "require_approval",
- "server_description",
- "server_url",
- ]
- nullable_fields = ["allowed_tools", "headers", "require_approval"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "allowed_tools",
+ "authorization",
+ "connector_id",
+ "headers",
+ "require_approval",
+ "server_description",
+ "server_url",
+ ]
+ )
+ nullable_fields = set(["allowed_tools", "headers", "require_approval"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/memberassignment.py b/src/openrouter/components/memberassignment.py
index bf25760..7650d34 100644
--- a/src/openrouter/components/memberassignment.py
+++ b/src/openrouter/components/memberassignment.py
@@ -42,30 +42,14 @@ class MemberAssignment(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["assigned_by"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/messagesmessageparam.py b/src/openrouter/components/messagesmessageparam.py
index 2eb70ca..8a9738b 100644
--- a/src/openrouter/components/messagesmessageparam.py
+++ b/src/openrouter/components/messagesmessageparam.py
@@ -37,9 +37,8 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import get_discriminator, validate_open_enum
+from openrouter.utils import get_discriminator
from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -64,31 +63,26 @@ class ContentCompaction(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["cache_control"]
- nullable_fields = ["content"]
- null_default_fields = []
-
+ optional_fields = set(["cache_control"])
+ nullable_fields = set(["content"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -114,7 +108,7 @@ class ContentWebSearchToolResultErrorTypedDict(TypedDict):
class ContentWebSearchToolResultError(BaseModel):
- error_code: Annotated[ErrorCode, PlainValidator(validate_open_enum(False))]
+ error_code: ErrorCode
type: TypeWebSearchToolResultError
@@ -155,6 +149,22 @@ class ContentWebSearchToolResult(BaseModel):
cache_control: Optional[AnthropicCacheControlDirective] = None
r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["cache_control"])
+ 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
+
TypeServerToolUse = Literal["server_tool_use",]
@@ -182,31 +192,26 @@ class ContentServerToolUse(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["cache_control", "input"]
- nullable_fields = ["input"]
- null_default_fields = []
-
+ optional_fields = set(["cache_control", "input"])
+ nullable_fields = set(["input"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -316,6 +321,22 @@ class ContentToolResult(BaseModel):
is_error: Optional[bool] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["cache_control", "content", "is_error"])
+ 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
+
TypeToolUse = Literal["tool_use",]
@@ -343,31 +364,26 @@ class ContentToolUse(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["cache_control", "input"]
- nullable_fields = ["input"]
- null_default_fields = []
-
+ optional_fields = set(["cache_control", "input"])
+ nullable_fields = set(["input"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -444,4 +460,4 @@ class MessagesMessageParam(BaseModel):
content: MessagesMessageParamContentUnion5
- role: Annotated[MessagesMessageParamRole, PlainValidator(validate_open_enum(False))]
+ role: MessagesMessageParamRole
diff --git a/src/openrouter/components/messagesoutputconfig.py b/src/openrouter/components/messagesoutputconfig.py
index a5410bd..9b033dd 100644
--- a/src/openrouter/components/messagesoutputconfig.py
+++ b/src/openrouter/components/messagesoutputconfig.py
@@ -9,10 +9,8 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, Dict, Literal, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -70,31 +68,26 @@ class TaskBudget(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["remaining"]
- nullable_fields = ["remaining"]
- null_default_fields = []
-
+ optional_fields = set(["remaining"])
+ nullable_fields = set(["remaining"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -113,10 +106,7 @@ class MessagesOutputConfigTypedDict(TypedDict):
class MessagesOutputConfig(BaseModel):
r"""Configuration for controlling output behavior. Supports the effort parameter and structured output format."""
- effort: Annotated[
- OptionalNullable[MessagesOutputConfigEffort],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ effort: OptionalNullable[MessagesOutputConfigEffort] = UNSET
r"""How much effort the model should put into its response. Higher effort levels may result in more thorough analysis but take longer. Valid values are `low`, `medium`, `high`, `xhigh`, or `max`."""
format_: Annotated[
@@ -129,30 +119,35 @@ class MessagesOutputConfig(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["effort", "format", "task_budget"]
- nullable_fields = ["effort", "format", "task_budget"]
- null_default_fields = []
-
+ optional_fields = set(["effort", "format", "task_budget"])
+ nullable_fields = set(["effort", "format", "task_budget"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
+
+
+try:
+ MessagesOutputConfigFormat.model_rebuild()
+except NameError:
+ pass
+try:
+ MessagesOutputConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/messagesrequest.py b/src/openrouter/components/messagesrequest.py
index 2ccd8d8..e87ddbd 100644
--- a/src/openrouter/components/messagesrequest.py
+++ b/src/openrouter/components/messagesrequest.py
@@ -77,10 +77,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import get_discriminator, validate_open_enum
+from openrouter.utils import get_discriminator
import pydantic
from pydantic import ConfigDict, Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, Dict, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -120,31 +119,26 @@ class EditCompact20260112(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["instructions", "pause_after_compaction", "trigger"]
- nullable_fields = ["instructions", "trigger"]
- null_default_fields = []
-
+ optional_fields = set(["instructions", "pause_after_compaction", "trigger"])
+ nullable_fields = set(["instructions", "trigger"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -184,6 +178,22 @@ class EditClearThinking20251015(BaseModel):
keep: Optional[Keep] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["keep"])
+ 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
+
ClearToolInputsTypedDict = TypeAliasType(
"ClearToolInputsTypedDict", Union[bool, List[str], Any]
@@ -235,37 +245,28 @@ class EditClearToolUses20250919(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "clear_at_least",
- "clear_tool_inputs",
- "exclude_tools",
- "keep",
- "trigger",
- ]
- nullable_fields = ["clear_at_least", "clear_tool_inputs", "exclude_tools"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["clear_at_least", "clear_tool_inputs", "exclude_tools", "keep", "trigger"]
+ )
+ nullable_fields = set(["clear_at_least", "clear_tool_inputs", "exclude_tools"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -297,6 +298,22 @@ class ContextManagementTypedDict(TypedDict):
class ContextManagement(BaseModel):
edits: Optional[List[Edit]] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["edits"])
+ 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
+
class MessagesRequestMetadataTypedDict(TypedDict):
user_id: NotRequired[Nullable[str]]
@@ -307,31 +324,26 @@ class MessagesRequestMetadata(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["user_id"]
- nullable_fields = ["user_id"]
- null_default_fields = []
-
+ optional_fields = set(["user_id"])
+ nullable_fields = set(["user_id"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -397,38 +409,30 @@ class ThinkingAdaptiveTypedDict(TypedDict):
class ThinkingAdaptive(BaseModel):
type: TypeAdaptive
- display: Annotated[
- OptionalNullable[AnthropicThinkingDisplay],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ display: OptionalNullable[AnthropicThinkingDisplay] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["display"]
- nullable_fields = ["display"]
- null_default_fields = []
-
+ optional_fields = set(["display"])
+ nullable_fields = set(["display"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -458,38 +462,30 @@ class ThinkingEnabled(BaseModel):
type: TypeEnabled
- display: Annotated[
- OptionalNullable[AnthropicThinkingDisplay],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ display: OptionalNullable[AnthropicThinkingDisplay] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["display"]
- nullable_fields = ["display"]
- null_default_fields = []
-
+ optional_fields = set(["display"])
+ nullable_fields = set(["display"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -528,6 +524,22 @@ class ToolChoiceTool(BaseModel):
disable_parallel_tool_use: Optional[bool] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["disable_parallel_tool_use"])
+ 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
+
TypeNone = Literal["none",]
@@ -553,6 +565,22 @@ class ToolChoiceAny(BaseModel):
disable_parallel_tool_use: Optional[bool] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["disable_parallel_tool_use"])
+ 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
+
ToolChoiceTypeAuto = Literal["auto",]
@@ -567,6 +595,22 @@ class ToolChoiceAuto(BaseModel):
disable_parallel_tool_use: Optional[bool] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["disable_parallel_tool_use"])
+ 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
+
ToolChoiceTypedDict = TypeAliasType(
"ToolChoiceTypedDict",
@@ -626,9 +670,23 @@ class Caching(BaseModel):
type: ToolTypeEphemeral
- ttl: Annotated[
- Optional[AnthropicCacheControlTTL], PlainValidator(validate_open_enum(False))
- ] = None
+ ttl: Optional[AnthropicCacheControlTTL] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["ttl"])
+ 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
NameAdvisor = Literal["advisor",]
@@ -656,13 +714,7 @@ class ToolAdvisor20260301(BaseModel):
type: TypeAdvisor20260301
- allowed_callers: Optional[
- List[
- Annotated[
- AnthropicAllowedCallers, PlainValidator(validate_open_enum(False))
- ]
- ]
- ] = None
+ allowed_callers: Optional[List[AnthropicAllowedCallers]] = None
cache_control: Optional[AnthropicCacheControlDirective] = None
r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
@@ -675,37 +727,28 @@ class ToolAdvisor20260301(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "allowed_callers",
- "cache_control",
- "caching",
- "defer_loading",
- "max_uses",
- ]
- nullable_fields = ["caching"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["allowed_callers", "cache_control", "caching", "defer_loading", "max_uses"]
+ )
+ nullable_fields = set(["caching"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -733,13 +776,7 @@ class ToolWebSearch20260209(BaseModel):
type: TypeWebSearch20260209
- allowed_callers: Optional[
- List[
- Annotated[
- AnthropicAllowedCallers, PlainValidator(validate_open_enum(False))
- ]
- ]
- ] = None
+ allowed_callers: Optional[List[AnthropicAllowedCallers]] = None
allowed_domains: OptionalNullable[List[str]] = UNSET
@@ -754,43 +791,37 @@ class ToolWebSearch20260209(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "allowed_callers",
- "allowed_domains",
- "blocked_domains",
- "cache_control",
- "max_uses",
- "user_location",
- ]
- nullable_fields = [
- "allowed_domains",
- "blocked_domains",
- "max_uses",
- "user_location",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "allowed_callers",
+ "allowed_domains",
+ "blocked_domains",
+ "cache_control",
+ "max_uses",
+ "user_location",
+ ]
+ )
+ nullable_fields = set(
+ ["allowed_domains", "blocked_domains", "max_uses", "user_location"]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -830,42 +861,36 @@ class ToolWebSearch20250305(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "allowed_domains",
- "blocked_domains",
- "cache_control",
- "max_uses",
- "user_location",
- ]
- nullable_fields = [
- "allowed_domains",
- "blocked_domains",
- "max_uses",
- "user_location",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "allowed_domains",
+ "blocked_domains",
+ "cache_control",
+ "max_uses",
+ "user_location",
+ ]
+ )
+ nullable_fields = set(
+ ["allowed_domains", "blocked_domains", "max_uses", "user_location"]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -891,6 +916,22 @@ class ToolTextEditor20250124(BaseModel):
cache_control: Optional[AnthropicCacheControlDirective] = None
r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["cache_control"])
+ 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
+
NameBash = Literal["bash",]
@@ -913,6 +954,22 @@ class ToolBash20250124(BaseModel):
cache_control: Optional[AnthropicCacheControlDirective] = None
r"""Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["cache_control"])
+ 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
+
class InputSchemaTypedDict(TypedDict):
properties: NotRequired[Nullable[Any]]
@@ -942,32 +999,27 @@ class InputSchema(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["properties", "required", "type"]
- nullable_fields = ["properties", "required"]
- null_default_fields = []
-
+ optional_fields = set(["properties", "required", "type"])
+ nullable_fields = set(["properties", "required"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
-
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ val = serialized.get(k, serialized.get(n))
+ serialized.pop(k, serialized.pop(n, None))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
for k, v in serialized.items():
m[k] = v
@@ -998,6 +1050,22 @@ class ToolCustom(BaseModel):
type: Optional[ToolTypeCustom] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["cache_control", "description", "type"])
+ 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
+
MessagesRequestToolUnionTypedDict = TypeAliasType(
"MessagesRequestToolUnionTypedDict",
@@ -1114,9 +1182,7 @@ class MessagesRequest(BaseModel):
session_id: Optional[str] = None
r"""A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters."""
- speed: Annotated[
- OptionalNullable[Speed], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ speed: OptionalNullable[Speed] = UNSET
stop_sequences: Optional[List[str]] = None
@@ -1147,61 +1213,54 @@ class MessagesRequest(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "cache_control",
- "context_management",
- "fallbacks",
- "max_tokens",
- "metadata",
- "models",
- "output_config",
- "plugins",
- "provider",
- "service_tier",
- "session_id",
- "speed",
- "stop_sequences",
- "stop_server_tools_when",
- "stream",
- "system",
- "temperature",
- "thinking",
- "tool_choice",
- "tools",
- "top_k",
- "top_p",
- "trace",
- "user",
- ]
- nullable_fields = [
- "context_management",
- "fallbacks",
- "messages",
- "provider",
- "speed",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "cache_control",
+ "context_management",
+ "fallbacks",
+ "max_tokens",
+ "metadata",
+ "models",
+ "output_config",
+ "plugins",
+ "provider",
+ "service_tier",
+ "session_id",
+ "speed",
+ "stop_sequences",
+ "stop_server_tools_when",
+ "stream",
+ "system",
+ "temperature",
+ "thinking",
+ "tool_choice",
+ "tools",
+ "top_k",
+ "top_p",
+ "trace",
+ "user",
+ ]
+ )
+ nullable_fields = set(
+ ["context_management", "fallbacks", "messages", "provider", "speed"]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/model.py b/src/openrouter/components/model.py
index c034510..a76656c 100644
--- a/src/openrouter/components/model.py
+++ b/src/openrouter/components/model.py
@@ -17,11 +17,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class ModelTypedDict(TypedDict):
@@ -100,9 +98,7 @@ class Model(BaseModel):
pricing: PublicPricing
r"""Pricing information for the model"""
- supported_parameters: List[
- Annotated[Parameter, PlainValidator(validate_open_enum(False))]
- ]
+ supported_parameters: List[Parameter]
r"""List of supported parameters for this model"""
supported_voices: Nullable[List[str]]
@@ -131,45 +127,44 @@ class Model(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "benchmarks",
- "description",
- "expiration_date",
- "hugging_face_id",
- "knowledge_cutoff",
- "reasoning",
- ]
- nullable_fields = [
- "context_length",
- "default_parameters",
- "expiration_date",
- "hugging_face_id",
- "knowledge_cutoff",
- "per_request_limits",
- "supported_voices",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "benchmarks",
+ "description",
+ "expiration_date",
+ "hugging_face_id",
+ "knowledge_cutoff",
+ "reasoning",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "context_length",
+ "default_parameters",
+ "expiration_date",
+ "hugging_face_id",
+ "knowledge_cutoff",
+ "per_request_limits",
+ "supported_voices",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/modelarchitecture.py b/src/openrouter/components/modelarchitecture.py
index 2da26c7..1fb1dbc 100644
--- a/src/openrouter/components/modelarchitecture.py
+++ b/src/openrouter/components/modelarchitecture.py
@@ -12,11 +12,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
ModelArchitectureInstructType = Union[
@@ -67,56 +65,42 @@ class ModelArchitectureTypedDict(TypedDict):
class ModelArchitecture(BaseModel):
r"""Model architecture information"""
- input_modalities: List[
- Annotated[InputModality, PlainValidator(validate_open_enum(False))]
- ]
+ input_modalities: List[InputModality]
r"""Supported input modalities"""
modality: Nullable[str]
r"""Primary modality of the model"""
- output_modalities: List[
- Annotated[OutputModality, PlainValidator(validate_open_enum(False))]
- ]
+ output_modalities: List[OutputModality]
r"""Supported output modalities"""
- instruct_type: Annotated[
- OptionalNullable[ModelArchitectureInstructType],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ instruct_type: OptionalNullable[ModelArchitectureInstructType] = UNSET
r"""Instruction format type"""
- tokenizer: Annotated[
- Optional[ModelGroup], PlainValidator(validate_open_enum(False))
- ] = None
+ tokenizer: Optional[ModelGroup] = None
r"""Tokenizer type used by the model"""
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["instruct_type", "tokenizer"]
- nullable_fields = ["instruct_type", "modality"]
- null_default_fields = []
-
+ optional_fields = set(["instruct_type", "tokenizer"])
+ nullable_fields = set(["instruct_type", "modality"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/modelbenchmarks.py b/src/openrouter/components/modelbenchmarks.py
index 37d57a2..466a827 100644
--- a/src/openrouter/components/modelbenchmarks.py
+++ b/src/openrouter/components/modelbenchmarks.py
@@ -3,7 +3,8 @@
from __future__ import annotations
from .aabenchmarkentry import AABenchmarkEntry, AABenchmarkEntryTypedDict
from .dabenchmarkentry import DABenchmarkEntry, DABenchmarkEntryTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Optional
from typing_extensions import NotRequired, TypedDict
@@ -25,3 +26,19 @@ class ModelBenchmarks(BaseModel):
artificial_analysis: Optional[AABenchmarkEntry] = None
r"""Artificial Analysis benchmark index scores."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["artificial_analysis"])
+ 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/modelreasoning.py b/src/openrouter/components/modelreasoning.py
index fa73b90..a757560 100644
--- a/src/openrouter/components/modelreasoning.py
+++ b/src/openrouter/components/modelreasoning.py
@@ -10,11 +10,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
DefaultEffort = Union[
@@ -52,20 +50,12 @@ class ModelReasoning(BaseModel):
mandatory: bool
r"""When true, reasoning cannot be disabled and effort \"none\" is rejected."""
- default_effort: Annotated[
- OptionalNullable[DefaultEffort], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ default_effort: OptionalNullable[DefaultEffort] = UNSET
default_enabled: Optional[bool] = None
r"""Default reasoning enabled state when the client does not set `reasoning.enabled`."""
- supported_efforts: OptionalNullable[
- List[
- Annotated[
- Nullable[ReasoningEffort], PlainValidator(validate_open_enum(False))
- ]
- ]
- ] = UNSET
+ supported_efforts: OptionalNullable[List[Nullable[ReasoningEffort]]] = UNSET
r"""Allowed reasoning effort values for this model, in descending effort order (highest first). Null means no allowlist — all gateway effort values are accepted."""
supports_max_tokens: Optional[bool] = None
@@ -73,35 +63,32 @@ class ModelReasoning(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "default_effort",
- "default_enabled",
- "supported_efforts",
- "supports_max_tokens",
- ]
- nullable_fields = ["default_effort", "supported_efforts"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "default_effort",
+ "default_enabled",
+ "supported_efforts",
+ "supports_max_tokens",
+ ]
+ )
+ nullable_fields = set(["default_effort", "supported_efforts"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/multimodalmedia.py b/src/openrouter/components/multimodalmedia.py
index 2cd306c..d71cb72 100644
--- a/src/openrouter/components/multimodalmedia.py
+++ b/src/openrouter/components/multimodalmedia.py
@@ -1,8 +1,9 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -16,3 +17,25 @@ class MultimodalMedia(BaseModel):
data: str
format_: Annotated[Optional[str], pydantic.Field(alias="format")] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["format"])
+ 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
+
+
+try:
+ MultimodalMedia.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/notfoundresponseerrordata.py b/src/openrouter/components/notfoundresponseerrordata.py
index 5b8ca0c..b7549df 100644
--- a/src/openrouter/components/notfoundresponseerrordata.py
+++ b/src/openrouter/components/notfoundresponseerrordata.py
@@ -32,30 +32,25 @@ class NotFoundResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/observabilityarizedestination.py b/src/openrouter/components/observabilityarizedestination.py
index fdcc98d..d1fb605 100644
--- a/src/openrouter/components/observabilityarizedestination.py
+++ b/src/openrouter/components/observabilityarizedestination.py
@@ -37,6 +37,22 @@ class ObservabilityArizeDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
r"""Custom HTTP headers to include in requests to this destination."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["baseUrl", "headers"])
+ 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
+
ObservabilityArizeDestinationType = Literal["arize",]
@@ -103,30 +119,20 @@ class ObservabilityArizeDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilityArizeDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilitybraintrustdestination.py b/src/openrouter/components/observabilitybraintrustdestination.py
index 7980758..37016dc 100644
--- a/src/openrouter/components/observabilitybraintrustdestination.py
+++ b/src/openrouter/components/observabilitybraintrustdestination.py
@@ -32,6 +32,22 @@ class ObservabilityBraintrustDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
r"""Custom HTTP headers to include in requests to this destination."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["baseUrl", "headers"])
+ 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
+
ObservabilityBraintrustDestinationType = Literal["braintrust",]
@@ -98,30 +114,20 @@ class ObservabilityBraintrustDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilityBraintrustDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilityclickhousedestination.py b/src/openrouter/components/observabilityclickhousedestination.py
index 7a65ddb..6281200 100644
--- a/src/openrouter/components/observabilityclickhousedestination.py
+++ b/src/openrouter/components/observabilityclickhousedestination.py
@@ -37,6 +37,22 @@ class ObservabilityClickhouseDestinationConfig(BaseModel):
table: Optional[str] = "OPENROUTER_TRACES"
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["headers", "table"])
+ 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
+
ObservabilityClickhouseDestinationType = Literal["clickhouse",]
@@ -103,30 +119,14 @@ class ObservabilityClickhouseDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/observabilitydatadogdestination.py b/src/openrouter/components/observabilitydatadogdestination.py
index 8043ffc..40cafb2 100644
--- a/src/openrouter/components/observabilitydatadogdestination.py
+++ b/src/openrouter/components/observabilitydatadogdestination.py
@@ -36,6 +36,22 @@ class ObservabilityDatadogDestinationConfig(BaseModel):
url: Optional[str] = "https://api.us5.datadoghq.com"
r"""Datadog API URL for your region (e.g., https://api.datadoghq.com, https://api.us3.datadoghq.com, https://api.datadoghq.eu)"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["headers", "url"])
+ 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
+
ObservabilityDatadogDestinationType = Literal["datadog",]
@@ -102,30 +118,20 @@ class ObservabilityDatadogDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilityDatadogDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilitydestination.py b/src/openrouter/components/observabilitydestination.py
index 340a94c..b7a1d2f 100644
--- a/src/openrouter/components/observabilitydestination.py
+++ b/src/openrouter/components/observabilitydestination.py
@@ -69,9 +69,12 @@ from .observabilitywebhookdestination import (
ObservabilityWebhookDestination,
ObservabilityWebhookDestinationTypedDict,
)
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import Union
+from functools import partial
+from openrouter.types import BaseModel
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Union
from typing_extensions import Annotated, TypeAliasType
@@ -99,25 +102,65 @@ ObservabilityDestinationTypedDict = TypeAliasType(
)
+class UnknownObservabilityDestination(BaseModel):
+ r"""A ObservabilityDestination variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_OBSERVABILITY_DESTINATION_VARIANTS: dict[str, Any] = {
+ "arize": ObservabilityArizeDestination,
+ "braintrust": ObservabilityBraintrustDestination,
+ "clickhouse": ObservabilityClickhouseDestination,
+ "datadog": ObservabilityDatadogDestination,
+ "grafana": ObservabilityGrafanaDestination,
+ "langfuse": ObservabilityLangfuseDestination,
+ "langsmith": ObservabilityLangsmithDestination,
+ "newrelic": ObservabilityNewrelicDestination,
+ "opik": ObservabilityOpikDestination,
+ "otel-collector": ObservabilityOtelCollectorDestination,
+ "posthog": ObservabilityPosthogDestination,
+ "ramp": ObservabilityRampDestination,
+ "s3": ObservabilityS3Destination,
+ "sentry": ObservabilitySentryDestination,
+ "snowflake": ObservabilitySnowflakeDestination,
+ "weave": ObservabilityWeaveDestination,
+ "webhook": ObservabilityWebhookDestination,
+}
+
+
ObservabilityDestination = Annotated[
Union[
- Annotated[ObservabilityArizeDestination, Tag("arize")],
- Annotated[ObservabilityBraintrustDestination, Tag("braintrust")],
- Annotated[ObservabilityClickhouseDestination, Tag("clickhouse")],
- Annotated[ObservabilityDatadogDestination, Tag("datadog")],
- Annotated[ObservabilityGrafanaDestination, Tag("grafana")],
- Annotated[ObservabilityLangfuseDestination, Tag("langfuse")],
- Annotated[ObservabilityLangsmithDestination, Tag("langsmith")],
- Annotated[ObservabilityNewrelicDestination, Tag("newrelic")],
- Annotated[ObservabilityOpikDestination, Tag("opik")],
- Annotated[ObservabilityOtelCollectorDestination, Tag("otel-collector")],
- Annotated[ObservabilityPosthogDestination, Tag("posthog")],
- Annotated[ObservabilityRampDestination, Tag("ramp")],
- Annotated[ObservabilityS3Destination, Tag("s3")],
- Annotated[ObservabilitySentryDestination, Tag("sentry")],
- Annotated[ObservabilitySnowflakeDestination, Tag("snowflake")],
- Annotated[ObservabilityWeaveDestination, Tag("weave")],
- Annotated[ObservabilityWebhookDestination, Tag("webhook")],
+ ObservabilityArizeDestination,
+ ObservabilityBraintrustDestination,
+ ObservabilityClickhouseDestination,
+ ObservabilityDatadogDestination,
+ ObservabilityGrafanaDestination,
+ ObservabilityLangfuseDestination,
+ ObservabilityLangsmithDestination,
+ ObservabilityNewrelicDestination,
+ ObservabilityOpikDestination,
+ ObservabilityOtelCollectorDestination,
+ ObservabilityPosthogDestination,
+ ObservabilityRampDestination,
+ ObservabilityS3Destination,
+ ObservabilitySentryDestination,
+ ObservabilitySnowflakeDestination,
+ ObservabilityWeaveDestination,
+ ObservabilityWebhookDestination,
+ UnknownObservabilityDestination,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_OBSERVABILITY_DESTINATION_VARIANTS,
+ unknown_cls=UnknownObservabilityDestination,
+ union_name="ObservabilityDestination",
+ )
+ ),
]
diff --git a/src/openrouter/components/observabilityfilterrulesconfig.py b/src/openrouter/components/observabilityfilterrulesconfig.py
index 25fc9cf..76f042e 100644
--- a/src/openrouter/components/observabilityfilterrulesconfig.py
+++ b/src/openrouter/components/observabilityfilterrulesconfig.py
@@ -1,11 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from pydantic import model_serializer
from typing import List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
+from typing_extensions import NotRequired, TypeAliasType, TypedDict
Logic = Union[
@@ -73,12 +72,28 @@ class RuleTypedDict(TypedDict):
class Rule(BaseModel):
- field: Annotated[FieldT, PlainValidator(validate_open_enum(False))]
+ field: FieldT
- operator: Annotated[Operator, PlainValidator(validate_open_enum(False))]
+ operator: Operator
value: Optional[ObservabilityFilterRulesConfigValue] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["value"])
+ 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
+
class GroupTypedDict(TypedDict):
rules: List[RuleTypedDict]
@@ -88,7 +103,23 @@ class GroupTypedDict(TypedDict):
class Group(BaseModel):
rules: List[Rule]
- logic: Annotated[Optional[Logic], PlainValidator(validate_open_enum(False))] = "and"
+ logic: Optional[Logic] = "and"
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["logic"])
+ 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
class ObservabilityFilterRulesConfigTypedDict(TypedDict):
@@ -104,3 +135,19 @@ class ObservabilityFilterRulesConfig(BaseModel):
groups: List[Group]
enabled: Optional[bool] = True
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["enabled"])
+ 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/observabilitygrafanadestination.py b/src/openrouter/components/observabilitygrafanadestination.py
index 184ba8b..677a4cf 100644
--- a/src/openrouter/components/observabilitygrafanadestination.py
+++ b/src/openrouter/components/observabilitygrafanadestination.py
@@ -32,6 +32,22 @@ class ObservabilityGrafanaDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
r"""Custom HTTP headers to include in requests to this destination."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["baseUrl", "headers"])
+ 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
+
ObservabilityGrafanaDestinationType = Literal["grafana",]
@@ -98,30 +114,20 @@ class ObservabilityGrafanaDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilityGrafanaDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilitylangfusedestination.py b/src/openrouter/components/observabilitylangfusedestination.py
index a2ceb50..961d424 100644
--- a/src/openrouter/components/observabilitylangfusedestination.py
+++ b/src/openrouter/components/observabilitylangfusedestination.py
@@ -32,6 +32,22 @@ class ObservabilityLangfuseDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
r"""Custom HTTP headers to include in requests to this destination."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["baseUrl", "headers"])
+ 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
+
ObservabilityLangfuseDestinationType = Literal["langfuse",]
@@ -98,30 +114,20 @@ class ObservabilityLangfuseDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilityLangfuseDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilitylangsmithdestination.py b/src/openrouter/components/observabilitylangsmithdestination.py
index cbde970..84d1b83 100644
--- a/src/openrouter/components/observabilitylangsmithdestination.py
+++ b/src/openrouter/components/observabilitylangsmithdestination.py
@@ -37,6 +37,22 @@ class ObservabilityLangsmithDestinationConfig(BaseModel):
workspace_id: Annotated[Optional[str], pydantic.Field(alias="workspaceId")] = None
r"""Required for org-scoped API keys. Find this in your LangSmith workspace settings."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["endpoint", "headers", "project", "workspaceId"])
+ 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
+
ObservabilityLangsmithDestinationType = Literal["langsmith",]
@@ -103,30 +119,20 @@ class ObservabilityLangsmithDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilityLangsmithDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilitynewrelicdestination.py b/src/openrouter/components/observabilitynewrelicdestination.py
index b0560ca..3cae22b 100644
--- a/src/openrouter/components/observabilitynewrelicdestination.py
+++ b/src/openrouter/components/observabilitynewrelicdestination.py
@@ -6,10 +6,8 @@ from .observabilityfilterrulesconfig import (
ObservabilityFilterRulesConfigTypedDict,
)
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Dict, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -36,9 +34,23 @@ class ObservabilityNewrelicDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
r"""Custom HTTP headers to include in requests to this destination."""
- region: Annotated[Optional[Region], PlainValidator(validate_open_enum(False))] = (
- "us"
- )
+ region: Optional[Region] = "us"
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["headers", "region"])
+ 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
ObservabilityNewrelicDestinationType = Literal["newrelic",]
@@ -106,30 +118,20 @@ class ObservabilityNewrelicDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilityNewrelicDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilityopikdestination.py b/src/openrouter/components/observabilityopikdestination.py
index eaf453b..1be42b1 100644
--- a/src/openrouter/components/observabilityopikdestination.py
+++ b/src/openrouter/components/observabilityopikdestination.py
@@ -30,6 +30,22 @@ class ObservabilityOpikDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
r"""Custom HTTP headers to include in requests to this destination."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["headers"])
+ 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
+
ObservabilityOpikDestinationType = Literal["opik",]
@@ -96,30 +112,20 @@ class ObservabilityOpikDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilityOpikDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilityotelcollectordestination.py b/src/openrouter/components/observabilityotelcollectordestination.py
index f58eeb0..00e7086 100644
--- a/src/openrouter/components/observabilityotelcollectordestination.py
+++ b/src/openrouter/components/observabilityotelcollectordestination.py
@@ -23,6 +23,22 @@ class ObservabilityOtelCollectorDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
r"""Custom HTTP headers as a JSON object. For Axiom, use {\"Authorization\": \"Bearer xaat-xxx\", \"X-Axiom-Dataset\": \"your-dataset\"}"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["headers"])
+ 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
+
ObservabilityOtelCollectorDestinationType = Literal["otel-collector",]
@@ -89,30 +105,14 @@ class ObservabilityOtelCollectorDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/observabilityposthogdestination.py b/src/openrouter/components/observabilityposthogdestination.py
index abee5d8..3062e97 100644
--- a/src/openrouter/components/observabilityposthogdestination.py
+++ b/src/openrouter/components/observabilityposthogdestination.py
@@ -27,6 +27,22 @@ class ObservabilityPosthogDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
r"""Custom HTTP headers to include in requests to this destination."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["endpoint", "headers"])
+ 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
+
ObservabilityPosthogDestinationType = Literal["posthog",]
@@ -93,30 +109,20 @@ class ObservabilityPosthogDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilityPosthogDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilityrampdestination.py b/src/openrouter/components/observabilityrampdestination.py
index f8e119c..dd28ccf 100644
--- a/src/openrouter/components/observabilityrampdestination.py
+++ b/src/openrouter/components/observabilityrampdestination.py
@@ -31,6 +31,22 @@ class ObservabilityRampDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
r"""Custom HTTP headers to include in requests to Ramp."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["baseUrl", "headers"])
+ 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
+
ObservabilityRampDestinationType = Literal["ramp",]
@@ -97,30 +113,20 @@ class ObservabilityRampDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilityRampDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilitys3destination.py b/src/openrouter/components/observabilitys3destination.py
index 96ea2a8..5c40031 100644
--- a/src/openrouter/components/observabilitys3destination.py
+++ b/src/openrouter/components/observabilitys3destination.py
@@ -51,6 +51,24 @@ class ObservabilityS3DestinationConfig(BaseModel):
session_token: Annotated[Optional[str], pydantic.Field(alias="sessionToken")] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["endpoint", "headers", "pathTemplate", "prefix", "region", "sessionToken"]
+ )
+ 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
+
ObservabilityS3DestinationType = Literal["s3",]
@@ -117,30 +135,20 @@ class ObservabilityS3Destination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilityS3DestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilitysentrydestination.py b/src/openrouter/components/observabilitysentrydestination.py
index 77f86c7..2c1a346 100644
--- a/src/openrouter/components/observabilitysentrydestination.py
+++ b/src/openrouter/components/observabilitysentrydestination.py
@@ -27,6 +27,22 @@ class ObservabilitySentryDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
r"""Custom HTTP headers to include in requests to this destination."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["headers"])
+ 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
+
ObservabilitySentryDestinationType = Literal["sentry",]
@@ -93,30 +109,20 @@ class ObservabilitySentryDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilitySentryDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilitysnowflakedestination.py b/src/openrouter/components/observabilitysnowflakedestination.py
index e6552f7..9dd853c 100644
--- a/src/openrouter/components/observabilitysnowflakedestination.py
+++ b/src/openrouter/components/observabilitysnowflakedestination.py
@@ -39,6 +39,22 @@ class ObservabilitySnowflakeDestinationConfig(BaseModel):
warehouse: Optional[str] = "COMPUTE_WH"
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["database", "headers", "schema", "table", "warehouse"])
+ 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
+
ObservabilitySnowflakeDestinationType = Literal["snowflake",]
@@ -105,30 +121,20 @@ class ObservabilitySnowflakeDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilitySnowflakeDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilityweavedestination.py b/src/openrouter/components/observabilityweavedestination.py
index 8474c7c..81e7305 100644
--- a/src/openrouter/components/observabilityweavedestination.py
+++ b/src/openrouter/components/observabilityweavedestination.py
@@ -35,6 +35,22 @@ class ObservabilityWeaveDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
r"""Custom HTTP headers to include in requests to this destination."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["baseUrl", "headers"])
+ 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
+
ObservabilityWeaveDestinationType = Literal["weave",]
@@ -101,30 +117,20 @@ class ObservabilityWeaveDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
+
+
+try:
+ ObservabilityWeaveDestinationConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/observabilitywebhookdestination.py b/src/openrouter/components/observabilitywebhookdestination.py
index 3eced6d..344abac 100644
--- a/src/openrouter/components/observabilitywebhookdestination.py
+++ b/src/openrouter/components/observabilitywebhookdestination.py
@@ -6,11 +6,9 @@ from .observabilityfilterrulesconfig import (
ObservabilityFilterRulesConfigTypedDict,
)
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Dict, List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
Method = Union[
@@ -33,9 +31,23 @@ class ObservabilityWebhookDestinationConfig(BaseModel):
headers: Optional[Dict[str, str]] = None
- method: Annotated[Optional[Method], PlainValidator(validate_open_enum(False))] = (
- "POST"
- )
+ method: Optional[Method] = "POST"
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["headers", "method"])
+ 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
ObservabilityWebhookDestinationType = Literal["webhook",]
@@ -103,30 +115,14 @@ class ObservabilityWebhookDestination(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["api_key_hashes", "filter_rules", "name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/openairesponsecustomtoolcall.py b/src/openrouter/components/openairesponsecustomtoolcall.py
index a7c4d28..8e86d12 100644
--- a/src/openrouter/components/openairesponsecustomtoolcall.py
+++ b/src/openrouter/components/openairesponsecustomtoolcall.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -32,3 +33,19 @@ class OpenAIResponseCustomToolCall(BaseModel):
namespace: Optional[str] = None
r"""Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server)"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id", "namespace"])
+ 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/openairesponsecustomtoolcalloutput.py b/src/openrouter/components/openairesponsecustomtoolcalloutput.py
index 1fdfc55..4cfede4 100644
--- a/src/openrouter/components/openairesponsecustomtoolcalloutput.py
+++ b/src/openrouter/components/openairesponsecustomtoolcalloutput.py
@@ -4,10 +4,12 @@ from __future__ import annotations
from .inputfile import InputFile, InputFileTypedDict
from .inputimage import InputImage, InputImageTypedDict
from .inputtext import InputText, InputTextTypedDict
-from openrouter.types import BaseModel
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import List, Literal, Optional, Union
+from functools import partial
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict, model_serializer
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -17,13 +19,39 @@ OpenAIResponseCustomToolCallOutputOutput1TypedDict = TypeAliasType(
)
+class UnknownOpenAIResponseCustomToolCallOutputOutput1(BaseModel):
+ r"""A OpenAIResponseCustomToolCallOutputOutput1 variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_OPEN_AI_RESPONSE_CUSTOM_TOOL_CALL_OUTPUT_OUTPUT_1_VARIANTS: dict[str, Any] = {
+ "input_file": InputFile,
+ "input_image": InputImage,
+ "input_text": InputText,
+}
+
+
OpenAIResponseCustomToolCallOutputOutput1 = Annotated[
Union[
- Annotated[InputFile, Tag("input_file")],
- Annotated[InputImage, Tag("input_image")],
- Annotated[InputText, Tag("input_text")],
+ InputFile,
+ InputImage,
+ InputText,
+ UnknownOpenAIResponseCustomToolCallOutputOutput1,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_OPEN_AI_RESPONSE_CUSTOM_TOOL_CALL_OUTPUT_OUTPUT_1_VARIANTS,
+ unknown_cls=UnknownOpenAIResponseCustomToolCallOutputOutput1,
+ union_name="OpenAIResponseCustomToolCallOutputOutput1",
+ )
+ ),
]
@@ -57,3 +85,19 @@ class OpenAIResponseCustomToolCallOutput(BaseModel):
type: OpenAIResponseCustomToolCallOutputType
id: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id"])
+ 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/openairesponsefunctiontoolcall.py b/src/openrouter/components/openairesponsefunctiontoolcall.py
index 2c0fa25..2351f7f 100644
--- a/src/openrouter/components/openairesponsefunctiontoolcall.py
+++ b/src/openrouter/components/openairesponsefunctiontoolcall.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
OpenAIResponseFunctionToolCallType = Literal["function_call",]
@@ -37,6 +36,20 @@ class OpenAIResponseFunctionToolCall(BaseModel):
namespace: Optional[str] = None
r"""Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server)"""
- status: Annotated[
- Optional[ToolCallStatus], PlainValidator(validate_open_enum(False))
- ] = None
+ status: Optional[ToolCallStatus] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id", "namespace", "status"])
+ 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/openairesponsefunctiontoolcalloutput.py b/src/openrouter/components/openairesponsefunctiontoolcalloutput.py
index 491f3fa..af8258c 100644
--- a/src/openrouter/components/openairesponsefunctiontoolcalloutput.py
+++ b/src/openrouter/components/openairesponsefunctiontoolcalloutput.py
@@ -4,6 +4,7 @@ from __future__ import annotations
from .inputfile import InputFile, InputFileTypedDict
from .inputimage import InputImage, InputImageTypedDict
from .inputtext import InputText, InputTextTypedDict
+from functools import partial
from openrouter.types import (
BaseModel,
Nullable,
@@ -12,10 +13,10 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import get_discriminator, validate_open_enum
-from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
-from typing import List, Literal, Union
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict, model_serializer
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, List, Literal, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -25,13 +26,39 @@ OpenAIResponseFunctionToolCallOutputOutput1TypedDict = TypeAliasType(
)
+class UnknownOpenAIResponseFunctionToolCallOutputOutput1(BaseModel):
+ r"""A OpenAIResponseFunctionToolCallOutputOutput1 variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_OPEN_AI_RESPONSE_FUNCTION_TOOL_CALL_OUTPUT_OUTPUT_1_VARIANTS: dict[str, Any] = {
+ "input_file": InputFile,
+ "input_image": InputImage,
+ "input_text": InputText,
+}
+
+
OpenAIResponseFunctionToolCallOutputOutput1 = Annotated[
Union[
- Annotated[InputFile, Tag("input_file")],
- Annotated[InputImage, Tag("input_image")],
- Annotated[InputText, Tag("input_text")],
+ InputFile,
+ InputImage,
+ InputText,
+ UnknownOpenAIResponseFunctionToolCallOutputOutput1,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_OPEN_AI_RESPONSE_FUNCTION_TOOL_CALL_OUTPUT_OUTPUT_1_VARIANTS,
+ unknown_cls=UnknownOpenAIResponseFunctionToolCallOutputOutput1,
+ union_name="OpenAIResponseFunctionToolCallOutputOutput1",
+ )
+ ),
]
@@ -77,37 +104,29 @@ class OpenAIResponseFunctionToolCallOutput(BaseModel):
id: OptionalNullable[str] = UNSET
- status: Annotated[
- OptionalNullable[OpenAIResponseFunctionToolCallOutputStatus],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ status: OptionalNullable[OpenAIResponseFunctionToolCallOutputStatus] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["id", "status"]
- nullable_fields = ["id", "status"]
- null_default_fields = []
-
+ optional_fields = set(["id", "status"])
+ nullable_fields = set(["id", "status"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/openairesponseinputmessageitem.py b/src/openrouter/components/openairesponseinputmessageitem.py
index 5aedf6b..3dedde3 100644
--- a/src/openrouter/components/openairesponseinputmessageitem.py
+++ b/src/openrouter/components/openairesponseinputmessageitem.py
@@ -5,10 +5,12 @@ from .inputaudio import InputAudio, InputAudioTypedDict
from .inputfile import InputFile, InputFileTypedDict
from .inputimage import InputImage, InputImageTypedDict
from .inputtext import InputText, InputTextTypedDict
-from openrouter.types import BaseModel
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import List, Literal, Optional, Union
+from functools import partial
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict, model_serializer
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -20,14 +22,41 @@ OpenAIResponseInputMessageItemContentTypedDict = TypeAliasType(
)
+class UnknownOpenAIResponseInputMessageItemContent(BaseModel):
+ r"""A OpenAIResponseInputMessageItemContent variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_OPEN_AI_RESPONSE_INPUT_MESSAGE_ITEM_CONTENT_VARIANTS: dict[str, Any] = {
+ "input_audio": InputAudio,
+ "input_file": InputFile,
+ "input_image": InputImage,
+ "input_text": InputText,
+}
+
+
OpenAIResponseInputMessageItemContent = Annotated[
Union[
- Annotated[InputAudio, Tag("input_audio")],
- Annotated[InputFile, Tag("input_file")],
- Annotated[InputImage, Tag("input_image")],
- Annotated[InputText, Tag("input_text")],
+ InputAudio,
+ InputFile,
+ InputImage,
+ InputText,
+ UnknownOpenAIResponseInputMessageItemContent,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_OPEN_AI_RESPONSE_INPUT_MESSAGE_ITEM_CONTENT_VARIANTS,
+ unknown_cls=UnknownOpenAIResponseInputMessageItemContent,
+ union_name="OpenAIResponseInputMessageItemContent",
+ )
+ ),
]
@@ -78,3 +107,19 @@ class OpenAIResponseInputMessageItem(BaseModel):
role: OpenAIResponseInputMessageItemRoleUnion
type: Optional[OpenAIResponseInputMessageItemType] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["type"])
+ 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/openairesponsesannotation.py b/src/openrouter/components/openairesponsesannotation.py
index 1303f98..004a5d0 100644
--- a/src/openrouter/components/openairesponsesannotation.py
+++ b/src/openrouter/components/openairesponsesannotation.py
@@ -4,9 +4,12 @@ from __future__ import annotations
from .filecitation import FileCitation, FileCitationTypedDict
from .filepath import FilePath, FilePathTypedDict
from .urlcitation import URLCitation, URLCitationTypedDict
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import Union
+from functools import partial
+from openrouter.types import BaseModel
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Union
from typing_extensions import Annotated, TypeAliasType
@@ -16,11 +19,32 @@ OpenAIResponsesAnnotationTypedDict = TypeAliasType(
)
+class UnknownOpenAIResponsesAnnotation(BaseModel):
+ r"""A OpenAIResponsesAnnotation variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_OPEN_AI_RESPONSES_ANNOTATION_VARIANTS: dict[str, Any] = {
+ "file_citation": FileCitation,
+ "url_citation": URLCitation,
+ "file_path": FilePath,
+}
+
+
OpenAIResponsesAnnotation = Annotated[
- Union[
- Annotated[FileCitation, Tag("file_citation")],
- Annotated[URLCitation, Tag("url_citation")],
- Annotated[FilePath, Tag("file_path")],
- ],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ Union[FileCitation, URLCitation, FilePath, UnknownOpenAIResponsesAnnotation],
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_OPEN_AI_RESPONSES_ANNOTATION_VARIANTS,
+ unknown_cls=UnknownOpenAIResponsesAnnotation,
+ union_name="OpenAIResponsesAnnotation",
+ )
+ ),
]
diff --git a/src/openrouter/components/openresponsesresult.py b/src/openrouter/components/openresponsesresult.py
index d53fb70..757158f 100644
--- a/src/openrouter/components/openresponsesresult.py
+++ b/src/openrouter/components/openresponsesresult.py
@@ -45,6 +45,7 @@ from .textextendedconfig import TextExtendedConfig, TextExtendedConfigTypedDict
from .truncation import Truncation
from .usage import Usage, UsageTypedDict
from .websearchservertool import WebSearchServerTool, WebSearchServerToolTypedDict
+from functools import partial
from openrouter.types import (
BaseModel,
Nullable,
@@ -52,9 +53,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import get_discriminator, validate_open_enum
-from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict, model_serializer
+from pydantic.functional_validators import BeforeValidator
from typing import Any, Dict, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -90,31 +91,26 @@ class OpenResponsesResultToolFunction(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["description", "strict"]
- nullable_fields = ["description", "parameters", "strict"]
- null_default_fields = []
-
+ optional_fields = set(["description", "strict"])
+ nullable_fields = set(["description", "parameters", "strict"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -140,26 +136,61 @@ OpenResponsesResultToolUnionTypedDict = TypeAliasType(
)
+class UnknownOpenResponsesResultToolUnion(BaseModel):
+ r"""A OpenResponsesResultToolUnion variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_OPEN_RESPONSES_RESULT_TOOL_UNION_VARIANTS: dict[str, Any] = {
+ "function": OpenResponsesResultToolFunction,
+ "web_search_preview": PreviewWebSearchServerTool,
+ "web_search_preview_2025_03_11": Preview20250311WebSearchServerTool,
+ "web_search": LegacyWebSearchServerTool,
+ "web_search_2025_08_26": WebSearchServerTool,
+ "file_search": FileSearchServerTool,
+ "computer_use_preview": ComputerUseServerTool,
+ "code_interpreter": CodeInterpreterServerTool,
+ "mcp": McpServerTool,
+ "image_generation": ImageGenerationServerTool,
+ "local_shell": CodexLocalShellTool,
+ "shell": ShellServerTool,
+ "apply_patch": ApplyPatchServerTool,
+ "custom": CustomTool,
+}
+
+
OpenResponsesResultToolUnion = Annotated[
Union[
- Annotated[OpenResponsesResultToolFunction, Tag("function")],
- Annotated[PreviewWebSearchServerTool, Tag("web_search_preview")],
- Annotated[
- Preview20250311WebSearchServerTool, Tag("web_search_preview_2025_03_11")
- ],
- Annotated[LegacyWebSearchServerTool, Tag("web_search")],
- Annotated[WebSearchServerTool, Tag("web_search_2025_08_26")],
- Annotated[FileSearchServerTool, Tag("file_search")],
- Annotated[ComputerUseServerTool, Tag("computer_use_preview")],
- Annotated[CodeInterpreterServerTool, Tag("code_interpreter")],
- Annotated[McpServerTool, Tag("mcp")],
- Annotated[ImageGenerationServerTool, Tag("image_generation")],
- Annotated[CodexLocalShellTool, Tag("local_shell")],
- Annotated[ShellServerTool, Tag("shell")],
- Annotated[ApplyPatchServerTool, Tag("apply_patch")],
- Annotated[CustomTool, Tag("custom")],
+ OpenResponsesResultToolFunction,
+ PreviewWebSearchServerTool,
+ Preview20250311WebSearchServerTool,
+ LegacyWebSearchServerTool,
+ WebSearchServerTool,
+ FileSearchServerTool,
+ ComputerUseServerTool,
+ CodeInterpreterServerTool,
+ McpServerTool,
+ ImageGenerationServerTool,
+ CodexLocalShellTool,
+ ShellServerTool,
+ ApplyPatchServerTool,
+ CustomTool,
+ UnknownOpenResponsesResultToolUnion,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_OPEN_RESPONSES_RESULT_TOOL_UNION_VARIANTS,
+ unknown_cls=UnknownOpenResponsesResultToolUnion,
+ union_name="OpenResponsesResultToolUnion",
+ )
+ ),
]
@@ -240,9 +271,7 @@ class OpenResponsesResult(BaseModel):
presence_penalty: Nullable[float]
- status: Annotated[
- OpenAIResponsesResponseStatus, PlainValidator(validate_open_enum(False))
- ]
+ status: OpenAIResponsesResponseStatus
temperature: Nullable[float]
@@ -279,89 +308,84 @@ class OpenResponsesResult(BaseModel):
top_logprobs: Optional[int] = None
- truncation: Annotated[
- OptionalNullable[Truncation], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ truncation: OptionalNullable[Truncation] = UNSET
usage: OptionalNullable[Usage] = UNSET
r"""Token usage information for the response"""
user: OptionalNullable[str] = UNSET
- error_type: Annotated[
- Optional[APIErrorType], PlainValidator(validate_open_enum(False))
- ] = None
+ error_type: Optional[APIErrorType] = None
r"""Canonical OpenRouter error type, stable across all API formats"""
openrouter_metadata: Optional[OpenRouterMetadata] = None
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "background",
- "max_output_tokens",
- "max_tool_calls",
- "output_text",
- "previous_response_id",
- "prompt",
- "prompt_cache_key",
- "reasoning",
- "safety_identifier",
- "service_tier",
- "store",
- "text",
- "top_logprobs",
- "truncation",
- "usage",
- "user",
- "error_type",
- "openrouter_metadata",
- ]
- nullable_fields = [
- "background",
- "completed_at",
- "error",
- "frequency_penalty",
- "incomplete_details",
- "instructions",
- "max_output_tokens",
- "max_tool_calls",
- "metadata",
- "presence_penalty",
- "previous_response_id",
- "prompt",
- "prompt_cache_key",
- "reasoning",
- "safety_identifier",
- "service_tier",
- "temperature",
- "top_p",
- "truncation",
- "usage",
- "user",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "background",
+ "max_output_tokens",
+ "max_tool_calls",
+ "output_text",
+ "previous_response_id",
+ "prompt",
+ "prompt_cache_key",
+ "reasoning",
+ "safety_identifier",
+ "service_tier",
+ "store",
+ "text",
+ "top_logprobs",
+ "truncation",
+ "usage",
+ "user",
+ "error_type",
+ "openrouter_metadata",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "background",
+ "completed_at",
+ "error",
+ "frequency_penalty",
+ "incomplete_details",
+ "instructions",
+ "max_output_tokens",
+ "max_tool_calls",
+ "metadata",
+ "presence_penalty",
+ "previous_response_id",
+ "prompt",
+ "prompt_cache_key",
+ "reasoning",
+ "safety_identifier",
+ "service_tier",
+ "temperature",
+ "top_p",
+ "truncation",
+ "usage",
+ "user",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/openroutermetadata.py b/src/openrouter/components/openroutermetadata.py
index bc1d7f3..09b552b 100644
--- a/src/openrouter/components/openroutermetadata.py
+++ b/src/openrouter/components/openroutermetadata.py
@@ -7,11 +7,9 @@ from .routerattempt import RouterAttempt, RouterAttemptTypedDict
from .routerparams import RouterParams, RouterParamsTypedDict
from .routingstrategy import RoutingStrategy
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class OpenRouterMetadataTypedDict(TypedDict):
@@ -38,7 +36,7 @@ class OpenRouterMetadata(BaseModel):
requested: str
- strategy: Annotated[RoutingStrategy, PlainValidator(validate_open_enum(False))]
+ strategy: RoutingStrategy
summary: str
@@ -50,30 +48,25 @@ class OpenRouterMetadata(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["attempts", "params", "pipeline"]
- nullable_fields = ["region"]
- null_default_fields = []
-
+ optional_fields = set(["attempts", "params", "pipeline"])
+ nullable_fields = set(["region"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/openrouterwebsearchservertool.py b/src/openrouter/components/openrouterwebsearchservertool.py
index 0f83d44..73c0923 100644
--- a/src/openrouter/components/openrouterwebsearchservertool.py
+++ b/src/openrouter/components/openrouterwebsearchservertool.py
@@ -2,7 +2,8 @@
from __future__ import annotations
from .websearchconfig import WebSearchConfig, WebSearchConfigTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -23,3 +24,19 @@ class OpenRouterWebSearchServerTool(BaseModel):
type: OpenRouterWebSearchServerToolType
parameters: Optional[WebSearchConfig] = None
+
+ @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/outputadvisorservertoolitem.py b/src/openrouter/components/outputadvisorservertoolitem.py
index 0387112..aef6c89 100644
--- a/src/openrouter/components/outputadvisorservertoolitem.py
+++ b/src/openrouter/components/outputadvisorservertoolitem.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
OutputAdvisorServerToolItemType = Literal["openrouter:advisor",]
@@ -33,7 +32,7 @@ class OutputAdvisorServerToolItemTypedDict(TypedDict):
class OutputAdvisorServerToolItem(BaseModel):
r"""An openrouter:advisor server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputAdvisorServerToolItemType
@@ -53,3 +52,21 @@ class OutputAdvisorServerToolItem(BaseModel):
prompt: Optional[str] = None
r"""The prompt the executor sent to the advisor."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["advice", "error", "id", "instance_name", "model", "prompt"]
+ )
+ 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/outputapplypatchcallitem.py b/src/openrouter/components/outputapplypatchcallitem.py
index 14c0201..183c551 100644
--- a/src/openrouter/components/outputapplypatchcallitem.py
+++ b/src/openrouter/components/outputapplypatchcallitem.py
@@ -7,10 +7,8 @@ from .applypatchcalloperation import (
)
from .applypatchcallstatus import ApplyPatchCallStatus
from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
from typing import Literal
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
OutputApplyPatchCallItemType = Literal["apply_patch_call",]
@@ -38,7 +36,7 @@ class OutputApplyPatchCallItem(BaseModel):
operation: ApplyPatchCallOperation
r"""The patch operation requested by an `apply_patch_call`. `create_file` and `update_file` carry a V4A diff; `delete_file` omits it."""
- status: Annotated[ApplyPatchCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ApplyPatchCallStatus
r"""Lifecycle state of an `apply_patch_call` output item."""
type: OutputApplyPatchCallItemType
diff --git a/src/openrouter/components/outputapplypatchservertoolitem.py b/src/openrouter/components/outputapplypatchservertoolitem.py
index 96d4dac..919f2bb 100644
--- a/src/openrouter/components/outputapplypatchservertoolitem.py
+++ b/src/openrouter/components/outputapplypatchservertoolitem.py
@@ -6,11 +6,10 @@ from .applypatchcalloperation import (
ApplyPatchCallOperationTypedDict,
)
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
OutputApplyPatchServerToolItemType = Literal["openrouter:apply_patch",]
@@ -30,7 +29,7 @@ class OutputApplyPatchServerToolItemTypedDict(TypedDict):
class OutputApplyPatchServerToolItem(BaseModel):
r"""An openrouter:apply_patch server tool output item. The turn halts when validation succeeds so the client can apply the patch and echo an `apply_patch_call_output` on the next turn."""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputApplyPatchServerToolItemType
@@ -40,3 +39,19 @@ class OutputApplyPatchServerToolItem(BaseModel):
operation: Optional[ApplyPatchCallOperation] = None
r"""The patch operation requested by an `apply_patch_call`. `create_file` and `update_file` carry a V4A diff; `delete_file` omits it."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["call_id", "id", "operation"])
+ 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/outputbashservertoolitem.py b/src/openrouter/components/outputbashservertoolitem.py
index 2b9fe18..daa5bcc 100644
--- a/src/openrouter/components/outputbashservertoolitem.py
+++ b/src/openrouter/components/outputbashservertoolitem.py
@@ -2,10 +2,9 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -28,7 +27,7 @@ class OutputBashServerToolItemTypedDict(TypedDict):
class OutputBashServerToolItem(BaseModel):
r"""An openrouter:bash server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputBashServerToolItemType
@@ -41,3 +40,25 @@ class OutputBashServerToolItem(BaseModel):
stderr: Optional[str] = None
stdout: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["command", "exitCode", "id", "stderr", "stdout"])
+ 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
+
+
+try:
+ OutputBashServerToolItem.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/outputbrowseruseservertoolitem.py b/src/openrouter/components/outputbrowseruseservertoolitem.py
index 4e7aac5..3366466 100644
--- a/src/openrouter/components/outputbrowseruseservertoolitem.py
+++ b/src/openrouter/components/outputbrowseruseservertoolitem.py
@@ -2,10 +2,9 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -26,7 +25,7 @@ class OutputBrowserUseServerToolItemTypedDict(TypedDict):
class OutputBrowserUseServerToolItem(BaseModel):
r"""An openrouter:browser_use server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputBrowserUseServerToolItemType
@@ -37,3 +36,25 @@ class OutputBrowserUseServerToolItem(BaseModel):
screenshot_b64: Annotated[Optional[str], pydantic.Field(alias="screenshotB64")] = (
None
)
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["action", "id", "screenshotB64"])
+ 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
+
+
+try:
+ OutputBrowserUseServerToolItem.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/outputcodeinterpretercallitem.py b/src/openrouter/components/outputcodeinterpretercallitem.py
index e322182..cdf3d63 100644
--- a/src/openrouter/components/outputcodeinterpretercallitem.py
+++ b/src/openrouter/components/outputcodeinterpretercallitem.py
@@ -2,11 +2,12 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
+from functools import partial
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
-from openrouter.utils import get_discriminator, validate_open_enum
-from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
-from typing import List, Literal, Union
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict, model_serializer
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, List, Literal, Union
from typing_extensions import Annotated, TypeAliasType, TypedDict
@@ -44,9 +45,33 @@ OutputCodeInterpreterCallItemOutputUnionTypedDict = TypeAliasType(
)
+class UnknownOutputCodeInterpreterCallItemOutputUnion(BaseModel):
+ r"""A OutputCodeInterpreterCallItemOutputUnion variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_OUTPUT_CODE_INTERPRETER_CALL_ITEM_OUTPUT_UNION_VARIANTS: dict[str, Any] = {
+ "image": OutputImage,
+ "logs": OutputLogs,
+}
+
+
OutputCodeInterpreterCallItemOutputUnion = Annotated[
- Union[Annotated[OutputImage, Tag("image")], Annotated[OutputLogs, Tag("logs")]],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ Union[OutputImage, OutputLogs, UnknownOutputCodeInterpreterCallItemOutputUnion],
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_OUTPUT_CODE_INTERPRETER_CALL_ITEM_OUTPUT_UNION_VARIANTS,
+ unknown_cls=UnknownOutputCodeInterpreterCallItemOutputUnion,
+ union_name="OutputCodeInterpreterCallItemOutputUnion",
+ )
+ ),
]
@@ -75,36 +100,20 @@ class OutputCodeInterpreterCallItem(BaseModel):
outputs: Nullable[List[OutputCodeInterpreterCallItemOutputUnion]]
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: TypeCodeInterpreterCall
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["code", "outputs"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/outputcodeinterpreterservertoolitem.py b/src/openrouter/components/outputcodeinterpreterservertoolitem.py
index 50a002f..8820add 100644
--- a/src/openrouter/components/outputcodeinterpreterservertoolitem.py
+++ b/src/openrouter/components/outputcodeinterpreterservertoolitem.py
@@ -2,10 +2,9 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -29,7 +28,7 @@ class OutputCodeInterpreterServerToolItemTypedDict(TypedDict):
class OutputCodeInterpreterServerToolItem(BaseModel):
r"""An openrouter:code_interpreter server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputCodeInterpreterServerToolItemType
@@ -44,3 +43,27 @@ class OutputCodeInterpreterServerToolItem(BaseModel):
stderr: Optional[str] = None
stdout: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["code", "exitCode", "id", "language", "stderr", "stdout"]
+ )
+ 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
+
+
+try:
+ OutputCodeInterpreterServerToolItem.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/outputcomputercallitem.py b/src/openrouter/components/outputcomputercallitem.py
index 6d1009d..f13810c 100644
--- a/src/openrouter/components/outputcomputercallitem.py
+++ b/src/openrouter/components/outputcomputercallitem.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class PendingSafetyCheckTypedDict(TypedDict):
@@ -57,9 +55,7 @@ class OutputComputerCallItem(BaseModel):
pending_safety_checks: List[PendingSafetyCheck]
- status: Annotated[
- OutputComputerCallItemStatus, PlainValidator(validate_open_enum(False))
- ]
+ status: OutputComputerCallItemStatus
type: OutputComputerCallItemType
@@ -69,30 +65,25 @@ class OutputComputerCallItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["action", "id"]
- nullable_fields = ["action"]
- null_default_fields = []
-
+ optional_fields = set(["action", "id"])
+ nullable_fields = set(["action"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/outputcustomtoolcallitem.py b/src/openrouter/components/outputcustomtoolcallitem.py
index 5c3049d..07f9ca2 100644
--- a/src/openrouter/components/outputcustomtoolcallitem.py
+++ b/src/openrouter/components/outputcustomtoolcallitem.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -36,3 +37,19 @@ class OutputCustomToolCallItem(BaseModel):
namespace: Optional[str] = None
r"""Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server)"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id", "namespace"])
+ 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/outputdatetimeitem.py b/src/openrouter/components/outputdatetimeitem.py
index e84df92..379dd07 100644
--- a/src/openrouter/components/outputdatetimeitem.py
+++ b/src/openrouter/components/outputdatetimeitem.py
@@ -2,9 +2,9 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+import pydantic
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -15,7 +15,7 @@ OutputDatetimeItemType = Literal["openrouter:datetime",]
class OutputDatetimeItemTypedDict(TypedDict):
r"""An openrouter:datetime server tool output item"""
- datetime: str
+ datetime_: str
r"""ISO 8601 datetime string"""
status: ToolCallStatus
timezone: str
@@ -27,10 +27,10 @@ class OutputDatetimeItemTypedDict(TypedDict):
class OutputDatetimeItem(BaseModel):
r"""An openrouter:datetime server tool output item"""
- datetime: str
+ datetime_: Annotated[str, pydantic.Field(alias="datetime")]
r"""ISO 8601 datetime string"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
timezone: str
r"""IANA timezone name"""
@@ -38,3 +38,25 @@ class OutputDatetimeItem(BaseModel):
type: OutputDatetimeItemType
id: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id"])
+ 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
+
+
+try:
+ OutputDatetimeItem.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/outputfilesearchcallitem.py b/src/openrouter/components/outputfilesearchcallitem.py
index 0c3c4ba..e6a7eb5 100644
--- a/src/openrouter/components/outputfilesearchcallitem.py
+++ b/src/openrouter/components/outputfilesearchcallitem.py
@@ -3,10 +3,8 @@
from __future__ import annotations
from .websearchstatus import WebSearchStatus
from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
OutputFileSearchCallItemType = Literal["file_search_call",]
@@ -24,6 +22,6 @@ class OutputFileSearchCallItem(BaseModel):
queries: List[str]
- status: Annotated[WebSearchStatus, PlainValidator(validate_open_enum(False))]
+ status: WebSearchStatus
type: OutputFileSearchCallItemType
diff --git a/src/openrouter/components/outputfilesearchservertoolitem.py b/src/openrouter/components/outputfilesearchservertoolitem.py
index 1916f7d..5be8785 100644
--- a/src/openrouter/components/outputfilesearchservertoolitem.py
+++ b/src/openrouter/components/outputfilesearchservertoolitem.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
OutputFileSearchServerToolItemType = Literal["openrouter:file_search",]
@@ -24,10 +23,26 @@ class OutputFileSearchServerToolItemTypedDict(TypedDict):
class OutputFileSearchServerToolItem(BaseModel):
r"""An openrouter:file_search server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputFileSearchServerToolItemType
id: Optional[str] = None
queries: Optional[List[str]] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id", "queries"])
+ 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/outputfilesservertoolitem.py b/src/openrouter/components/outputfilesservertoolitem.py
new file mode 100644
index 0000000..5f30e95
--- /dev/null
+++ b/src/openrouter/components/outputfilesservertoolitem.py
@@ -0,0 +1,72 @@
+"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+
+from __future__ import annotations
+from .toolcallstatus import ToolCallStatus
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
+from typing import Literal, Optional
+from typing_extensions import NotRequired, TypedDict
+
+
+OutputFilesServerToolItemType = Literal["openrouter:files",]
+
+
+class OutputFilesServerToolItemTypedDict(TypedDict):
+ r"""An openrouter:files server tool output item"""
+
+ status: ToolCallStatus
+ type: OutputFilesServerToolItemType
+ error: NotRequired[str]
+ r"""Error message when the file operation failed."""
+ file_id: NotRequired[str]
+ r"""The target file id supplied in the tool-call arguments."""
+ filename: NotRequired[str]
+ r"""The target filename supplied in the tool-call arguments."""
+ id: NotRequired[str]
+ operation: NotRequired[str]
+ r"""The file operation performed (list, read, write, or edit)."""
+ result: NotRequired[str]
+ r"""JSON-serialized result of the file operation."""
+
+
+class OutputFilesServerToolItem(BaseModel):
+ r"""An openrouter:files server tool output item"""
+
+ status: ToolCallStatus
+
+ type: OutputFilesServerToolItemType
+
+ error: Optional[str] = None
+ r"""Error message when the file operation failed."""
+
+ file_id: Optional[str] = None
+ r"""The target file id supplied in the tool-call arguments."""
+
+ filename: Optional[str] = None
+ r"""The target filename supplied in the tool-call arguments."""
+
+ id: Optional[str] = None
+
+ operation: Optional[str] = None
+ r"""The file operation performed (list, read, write, or edit)."""
+
+ result: Optional[str] = None
+ r"""JSON-serialized result of the file operation."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["error", "file_id", "filename", "id", "operation", "result"]
+ )
+ 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/outputfunctioncallitem.py b/src/openrouter/components/outputfunctioncallitem.py
index dcfc7a8..13dc4af 100644
--- a/src/openrouter/components/outputfunctioncallitem.py
+++ b/src/openrouter/components/outputfunctioncallitem.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional, Union
from typing_extensions import NotRequired, TypeAliasType, TypedDict
@@ -64,3 +65,19 @@ class OutputFunctionCallItem(BaseModel):
r"""Namespace qualifier for tools registered as part of a namespace tool group (e.g. an MCP server)"""
status: Optional[OutputFunctionCallItemStatusUnion] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id", "namespace", "status"])
+ 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/outputfusionservertoolitem.py b/src/openrouter/components/outputfusionservertoolitem.py
index 0e8e4e6..78b73af 100644
--- a/src/openrouter/components/outputfusionservertoolitem.py
+++ b/src/openrouter/components/outputfusionservertoolitem.py
@@ -4,11 +4,10 @@ from __future__ import annotations
from .fusionanalysisresult import FusionAnalysisResult, FusionAnalysisResultTypedDict
from .fusionsource import FusionSource, FusionSourceTypedDict
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class FailedModelTypedDict(TypedDict):
@@ -30,6 +29,22 @@ class FailedModel(BaseModel):
status_code: Optional[int] = None
r"""HTTP status code from the upstream response, when available (e.g. 402, 429)."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["status_code"])
+ 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
+
class ResponseTypedDict(TypedDict):
model: str
@@ -41,6 +56,22 @@ class Response(BaseModel):
content: Optional[str] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["content"])
+ 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
+
OutputFusionServerToolItemType = Literal["openrouter:fusion",]
@@ -68,7 +99,7 @@ class OutputFusionServerToolItemTypedDict(TypedDict):
class OutputFusionServerToolItem(BaseModel):
r"""An openrouter:fusion server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputFusionServerToolItemType
@@ -91,3 +122,29 @@ class OutputFusionServerToolItem(BaseModel):
sources: Optional[List[FusionSource]] = None
r"""Web pages the analysis panels and judge retrieved via web search during this fusion run, deduplicated by URL across the whole run. Present when at least one model cited a source."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "analysis",
+ "error",
+ "failed_models",
+ "failure_reason",
+ "id",
+ "responses",
+ "sources",
+ ]
+ )
+ 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/outputimagegenerationcallitem.py b/src/openrouter/components/outputimagegenerationcallitem.py
index abaaa53..f53fc07 100644
--- a/src/openrouter/components/outputimagegenerationcallitem.py
+++ b/src/openrouter/components/outputimagegenerationcallitem.py
@@ -3,11 +3,9 @@
from __future__ import annotations
from .imagegenerationstatus import ImageGenerationStatus
from openrouter.types import BaseModel, Nullable, OptionalNullable, UNSET_SENTINEL
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
OutputImageGenerationCallItemType = Literal["image_generation_call",]
@@ -23,7 +21,7 @@ class OutputImageGenerationCallItemTypedDict(TypedDict):
class OutputImageGenerationCallItem(BaseModel):
id: str
- status: Annotated[ImageGenerationStatus, PlainValidator(validate_open_enum(False))]
+ status: ImageGenerationStatus
type: OutputImageGenerationCallItemType
@@ -31,30 +29,29 @@ class OutputImageGenerationCallItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["result"]
- nullable_fields = ["result"]
- null_default_fields = ["result"]
-
+ optional_fields = set(["result"])
+ nullable_fields = set(["result"])
+ null_default_fields = set(["result"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (
+ self.__pydantic_fields_set__.intersection({n})
+ or k in null_default_fields
+ ) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/outputimagegenerationservertoolitem.py b/src/openrouter/components/outputimagegenerationservertoolitem.py
index a94bd09..ae47b1b 100644
--- a/src/openrouter/components/outputimagegenerationservertoolitem.py
+++ b/src/openrouter/components/outputimagegenerationservertoolitem.py
@@ -9,10 +9,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -36,7 +34,7 @@ class OutputImageGenerationServerToolItemTypedDict(TypedDict):
class OutputImageGenerationServerToolItem(BaseModel):
r"""An openrouter:image_generation server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputImageGenerationServerToolItemType
@@ -55,30 +53,31 @@ class OutputImageGenerationServerToolItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["id", "imageB64", "imageUrl", "result", "revisedPrompt"]
- nullable_fields = ["result"]
- null_default_fields = []
-
+ optional_fields = set(["id", "imageB64", "imageUrl", "result", "revisedPrompt"])
+ nullable_fields = set(["result"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
+
+
+try:
+ OutputImageGenerationServerToolItem.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/outputitemimagegenerationcall.py b/src/openrouter/components/outputitemimagegenerationcall.py
index 897c472..94af810 100644
--- a/src/openrouter/components/outputitemimagegenerationcall.py
+++ b/src/openrouter/components/outputitemimagegenerationcall.py
@@ -3,11 +3,9 @@
from __future__ import annotations
from .imagegenerationstatus import ImageGenerationStatus
from openrouter.types import BaseModel, Nullable, OptionalNullable, UNSET_SENTINEL
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
OutputItemImageGenerationCallType = Literal["image_generation_call",]
@@ -23,7 +21,7 @@ class OutputItemImageGenerationCallTypedDict(TypedDict):
class OutputItemImageGenerationCall(BaseModel):
id: str
- status: Annotated[ImageGenerationStatus, PlainValidator(validate_open_enum(False))]
+ status: ImageGenerationStatus
type: OutputItemImageGenerationCallType
@@ -31,30 +29,29 @@ class OutputItemImageGenerationCall(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["result"]
- nullable_fields = ["result"]
- null_default_fields = ["result"]
-
+ optional_fields = set(["result"])
+ nullable_fields = set(["result"])
+ null_default_fields = set(["result"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (
+ self.__pydantic_fields_set__.intersection({n})
+ or k in null_default_fields
+ ) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/outputitems.py b/src/openrouter/components/outputitems.py
index da3d920..f828fba 100644
--- a/src/openrouter/components/outputitems.py
+++ b/src/openrouter/components/outputitems.py
@@ -46,6 +46,10 @@ from .outputfilesearchservertoolitem import (
OutputFileSearchServerToolItem,
OutputFileSearchServerToolItemTypedDict,
)
+from .outputfilesservertoolitem import (
+ OutputFilesServerToolItem,
+ OutputFilesServerToolItemTypedDict,
+)
from .outputfunctioncallitem import (
OutputFunctionCallItem,
OutputFunctionCallItemTypedDict,
@@ -105,9 +109,12 @@ from .outputwebsearchservertoolitem import (
OutputWebSearchServerToolItem,
OutputWebSearchServerToolItemTypedDict,
)
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import Union
+from functools import partial
+from openrouter.types import BaseModel
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Union
from typing_extensions import Annotated, TypeAliasType
@@ -142,51 +149,99 @@ OutputItemsTypedDict = TypeAliasType(
OutputReasoningItemTypedDict,
OutputAdvisorServerToolItemTypedDict,
OutputSubagentServerToolItemTypedDict,
+ OutputFilesServerToolItemTypedDict,
OutputFusionServerToolItemTypedDict,
],
)
r"""An output item from the response"""
+class UnknownOutputItems(BaseModel):
+ r"""A OutputItems variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_OUTPUT_ITEMS_VARIANTS: dict[str, Any] = {
+ "apply_patch_call": OutputApplyPatchCallItem,
+ "code_interpreter_call": OutputCodeInterpreterCallItem,
+ "computer_call": OutputComputerCallItem,
+ "custom_tool_call": OutputCustomToolCallItem,
+ "file_search_call": OutputFileSearchCallItem,
+ "function_call": OutputFunctionCallItem,
+ "image_generation_call": OutputImageGenerationCallItem,
+ "message": OutputMessageItem,
+ "openrouter:advisor": OutputAdvisorServerToolItem,
+ "openrouter:apply_patch": OutputApplyPatchServerToolItem,
+ "openrouter:bash": OutputBashServerToolItem,
+ "openrouter:browser_use": OutputBrowserUseServerToolItem,
+ "openrouter:code_interpreter": OutputCodeInterpreterServerToolItem,
+ "openrouter:datetime": OutputDatetimeItem,
+ "openrouter:experimental__search_models": OutputSearchModelsServerToolItem,
+ "openrouter:file_search": OutputFileSearchServerToolItem,
+ "openrouter:files": OutputFilesServerToolItem,
+ "openrouter:fusion": OutputFusionServerToolItem,
+ "openrouter:image_generation": OutputImageGenerationServerToolItem,
+ "openrouter:mcp": OutputMcpServerToolItem,
+ "openrouter:memory": OutputMemoryServerToolItem,
+ "openrouter:subagent": OutputSubagentServerToolItem,
+ "openrouter:text_editor": OutputTextEditorServerToolItem,
+ "openrouter:tool_search": OutputToolSearchServerToolItem,
+ "openrouter:web_fetch": OutputWebFetchServerToolItem,
+ "openrouter:web_search": OutputWebSearchServerToolItem,
+ "reasoning": OutputReasoningItem,
+ "shell_call": OutputShellCallItem,
+ "shell_call_output": OutputShellCallOutputItem,
+ "web_search_call": OutputWebSearchCallItem,
+}
+
+
OutputItems = Annotated[
Union[
- Annotated[OutputApplyPatchCallItem, Tag("apply_patch_call")],
- Annotated[OutputCodeInterpreterCallItem, Tag("code_interpreter_call")],
- Annotated[OutputComputerCallItem, Tag("computer_call")],
- Annotated[OutputCustomToolCallItem, Tag("custom_tool_call")],
- Annotated[OutputFileSearchCallItem, Tag("file_search_call")],
- Annotated[OutputFunctionCallItem, Tag("function_call")],
- Annotated[OutputImageGenerationCallItem, Tag("image_generation_call")],
- Annotated[OutputMessageItem, Tag("message")],
- Annotated[OutputAdvisorServerToolItem, Tag("openrouter:advisor")],
- Annotated[OutputApplyPatchServerToolItem, Tag("openrouter:apply_patch")],
- Annotated[OutputBashServerToolItem, Tag("openrouter:bash")],
- Annotated[OutputBrowserUseServerToolItem, Tag("openrouter:browser_use")],
- Annotated[
- OutputCodeInterpreterServerToolItem, Tag("openrouter:code_interpreter")
- ],
- Annotated[OutputDatetimeItem, Tag("openrouter:datetime")],
- Annotated[
- OutputSearchModelsServerToolItem,
- Tag("openrouter:experimental__search_models"),
- ],
- Annotated[OutputFileSearchServerToolItem, Tag("openrouter:file_search")],
- Annotated[OutputFusionServerToolItem, Tag("openrouter:fusion")],
- Annotated[
- OutputImageGenerationServerToolItem, Tag("openrouter:image_generation")
- ],
- Annotated[OutputMcpServerToolItem, Tag("openrouter:mcp")],
- Annotated[OutputMemoryServerToolItem, Tag("openrouter:memory")],
- Annotated[OutputSubagentServerToolItem, Tag("openrouter:subagent")],
- Annotated[OutputTextEditorServerToolItem, Tag("openrouter:text_editor")],
- Annotated[OutputToolSearchServerToolItem, Tag("openrouter:tool_search")],
- Annotated[OutputWebFetchServerToolItem, Tag("openrouter:web_fetch")],
- Annotated[OutputWebSearchServerToolItem, Tag("openrouter:web_search")],
- Annotated[OutputReasoningItem, Tag("reasoning")],
- Annotated[OutputShellCallItem, Tag("shell_call")],
- Annotated[OutputShellCallOutputItem, Tag("shell_call_output")],
- Annotated[OutputWebSearchCallItem, Tag("web_search_call")],
+ OutputApplyPatchCallItem,
+ OutputCodeInterpreterCallItem,
+ OutputComputerCallItem,
+ OutputCustomToolCallItem,
+ OutputFileSearchCallItem,
+ OutputFunctionCallItem,
+ OutputImageGenerationCallItem,
+ OutputMessageItem,
+ OutputAdvisorServerToolItem,
+ OutputApplyPatchServerToolItem,
+ OutputBashServerToolItem,
+ OutputBrowserUseServerToolItem,
+ OutputCodeInterpreterServerToolItem,
+ OutputDatetimeItem,
+ OutputSearchModelsServerToolItem,
+ OutputFileSearchServerToolItem,
+ OutputFilesServerToolItem,
+ OutputFusionServerToolItem,
+ OutputImageGenerationServerToolItem,
+ OutputMcpServerToolItem,
+ OutputMemoryServerToolItem,
+ OutputSubagentServerToolItem,
+ OutputTextEditorServerToolItem,
+ OutputToolSearchServerToolItem,
+ OutputWebFetchServerToolItem,
+ OutputWebSearchServerToolItem,
+ OutputReasoningItem,
+ OutputShellCallItem,
+ OutputShellCallOutputItem,
+ OutputWebSearchCallItem,
+ UnknownOutputItems,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_OUTPUT_ITEMS_VARIANTS,
+ unknown_cls=UnknownOutputItems,
+ union_name="OutputItems",
+ )
+ ),
]
r"""An output item from the response"""
diff --git a/src/openrouter/components/outputmcpservertoolitem.py b/src/openrouter/components/outputmcpservertoolitem.py
index 2595661..58c2151 100644
--- a/src/openrouter/components/outputmcpservertoolitem.py
+++ b/src/openrouter/components/outputmcpservertoolitem.py
@@ -2,10 +2,9 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -26,7 +25,7 @@ class OutputMcpServerToolItemTypedDict(TypedDict):
class OutputMcpServerToolItem(BaseModel):
r"""An openrouter:mcp server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputMcpServerToolItemType
@@ -35,3 +34,25 @@ class OutputMcpServerToolItem(BaseModel):
server_label: Annotated[Optional[str], pydantic.Field(alias="serverLabel")] = None
tool_name: Annotated[Optional[str], pydantic.Field(alias="toolName")] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id", "serverLabel", "toolName"])
+ 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
+
+
+try:
+ OutputMcpServerToolItem.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/outputmemoryservertoolitem.py b/src/openrouter/components/outputmemoryservertoolitem.py
index 204cc7d..a7be8fb 100644
--- a/src/openrouter/components/outputmemoryservertoolitem.py
+++ b/src/openrouter/components/outputmemoryservertoolitem.py
@@ -10,11 +10,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
ActionEnum = Union[
@@ -44,13 +42,11 @@ class OutputMemoryServerToolItemTypedDict(TypedDict):
class OutputMemoryServerToolItem(BaseModel):
r"""An openrouter:memory server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputMemoryServerToolItemType
- action: Annotated[
- Optional[ActionEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ action: Optional[ActionEnum] = None
id: Optional[str] = None
@@ -60,30 +56,25 @@ class OutputMemoryServerToolItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["action", "id", "key", "value"]
- nullable_fields = ["value"]
- null_default_fields = []
-
+ optional_fields = set(["action", "id", "key", "value"])
+ nullable_fields = set(["value"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/outputmessage.py b/src/openrouter/components/outputmessage.py
index def0cb7..4fff8bd 100644
--- a/src/openrouter/components/outputmessage.py
+++ b/src/openrouter/components/outputmessage.py
@@ -6,6 +6,7 @@ from .openairesponsesrefusalcontent import (
OpenAIResponsesRefusalContentTypedDict,
)
from .responseoutputtext import ResponseOutputText, ResponseOutputTextTypedDict
+from functools import partial
from openrouter.types import (
BaseModel,
Nullable,
@@ -13,8 +14,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag, model_serializer
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict, model_serializer
+from pydantic.functional_validators import BeforeValidator
from typing import Any, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -25,12 +27,35 @@ OutputMessageContentTypedDict = TypeAliasType(
)
+class UnknownOutputMessageContent(BaseModel):
+ r"""A OutputMessageContent variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_OUTPUT_MESSAGE_CONTENT_VARIANTS: dict[str, Any] = {
+ "output_text": ResponseOutputText,
+ "refusal": OpenAIResponsesRefusalContent,
+}
+
+
OutputMessageContent = Annotated[
Union[
- Annotated[ResponseOutputText, Tag("output_text")],
- Annotated[OpenAIResponsesRefusalContent, Tag("refusal")],
+ ResponseOutputText, OpenAIResponsesRefusalContent, UnknownOutputMessageContent
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_OUTPUT_MESSAGE_CONTENT_VARIANTS,
+ unknown_cls=UnknownOutputMessageContent,
+ union_name="OutputMessageContent",
+ )
+ ),
]
@@ -115,30 +140,25 @@ class OutputMessage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["phase", "status"]
- nullable_fields = ["phase"]
- null_default_fields = []
-
+ optional_fields = set(["phase", "status"])
+ nullable_fields = set(["phase"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/outputmessageitem.py b/src/openrouter/components/outputmessageitem.py
index ec59a9d..3a2a1f8 100644
--- a/src/openrouter/components/outputmessageitem.py
+++ b/src/openrouter/components/outputmessageitem.py
@@ -6,6 +6,7 @@ from .openairesponsesrefusalcontent import (
OpenAIResponsesRefusalContentTypedDict,
)
from .responseoutputtext import ResponseOutputText, ResponseOutputTextTypedDict
+from functools import partial
from openrouter.types import (
BaseModel,
Nullable,
@@ -13,8 +14,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag, model_serializer
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict, model_serializer
+from pydantic.functional_validators import BeforeValidator
from typing import Any, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -25,12 +27,37 @@ OutputMessageItemContentTypedDict = TypeAliasType(
)
+class UnknownOutputMessageItemContent(BaseModel):
+ r"""A OutputMessageItemContent variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_OUTPUT_MESSAGE_ITEM_CONTENT_VARIANTS: dict[str, Any] = {
+ "output_text": ResponseOutputText,
+ "refusal": OpenAIResponsesRefusalContent,
+}
+
+
OutputMessageItemContent = Annotated[
Union[
- Annotated[ResponseOutputText, Tag("output_text")],
- Annotated[OpenAIResponsesRefusalContent, Tag("refusal")],
+ ResponseOutputText,
+ OpenAIResponsesRefusalContent,
+ UnknownOutputMessageItemContent,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_OUTPUT_MESSAGE_ITEM_CONTENT_VARIANTS,
+ unknown_cls=UnknownOutputMessageItemContent,
+ union_name="OutputMessageItemContent",
+ )
+ ),
]
@@ -119,30 +146,25 @@ class OutputMessageItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["phase", "status"]
- nullable_fields = ["phase"]
- null_default_fields = []
-
+ optional_fields = set(["phase", "status"])
+ nullable_fields = set(["phase"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/outputreasoningitem.py b/src/openrouter/components/outputreasoningitem.py
index 50eff94..46e8472 100644
--- a/src/openrouter/components/outputreasoningitem.py
+++ b/src/openrouter/components/outputreasoningitem.py
@@ -11,10 +11,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -81,10 +79,7 @@ class OutputReasoningItem(BaseModel):
status: Optional[OutputReasoningItemStatusUnion] = None
format_: Annotated[
- Annotated[
- OptionalNullable[ReasoningFormat], PlainValidator(validate_open_enum(False))
- ],
- pydantic.Field(alias="format"),
+ OptionalNullable[ReasoningFormat], pydantic.Field(alias="format")
] = UNSET
signature: OptionalNullable[str] = UNSET
@@ -92,36 +87,33 @@ class OutputReasoningItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "content",
- "encrypted_content",
- "status",
- "format",
- "signature",
- ]
- nullable_fields = ["content", "encrypted_content", "format", "signature"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["content", "encrypted_content", "status", "format", "signature"]
+ )
+ nullable_fields = set(["content", "encrypted_content", "format", "signature"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
+
+
+try:
+ OutputReasoningItem.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/outputsearchmodelsservertoolitem.py b/src/openrouter/components/outputsearchmodelsservertoolitem.py
index f94949d..b9f5ac2 100644
--- a/src/openrouter/components/outputsearchmodelsservertoolitem.py
+++ b/src/openrouter/components/outputsearchmodelsservertoolitem.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
OutputSearchModelsServerToolItemType = Literal[
@@ -28,7 +27,7 @@ class OutputSearchModelsServerToolItemTypedDict(TypedDict):
class OutputSearchModelsServerToolItem(BaseModel):
r"""An openrouter:experimental__search_models server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputSearchModelsServerToolItemType
@@ -38,3 +37,19 @@ class OutputSearchModelsServerToolItem(BaseModel):
id: Optional[str] = None
query: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["arguments", "id", "query"])
+ 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/outputshellcallitem.py b/src/openrouter/components/outputshellcallitem.py
index d2ecd9f..b584077 100644
--- a/src/openrouter/components/outputshellcallitem.py
+++ b/src/openrouter/components/outputshellcallitem.py
@@ -3,11 +3,9 @@
from __future__ import annotations
from .shellcallstatus import ShellCallStatus
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class OutputShellCallItemActionTypedDict(TypedDict):
@@ -25,30 +23,14 @@ class OutputShellCallItemAction(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["max_output_length", "timeout_ms"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
@@ -75,9 +57,25 @@ class OutputShellCallItem(BaseModel):
id: str
- status: Annotated[ShellCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ShellCallStatus
r"""Status of a shell call or its output."""
type: OutputShellCallItemType
action: Optional[OutputShellCallItemAction] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["action"])
+ 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/outputshellcalloutputitem.py b/src/openrouter/components/outputshellcalloutputitem.py
index fca6bbd..18a1f6d 100644
--- a/src/openrouter/components/outputshellcalloutputitem.py
+++ b/src/openrouter/components/outputshellcalloutputitem.py
@@ -2,6 +2,7 @@
from __future__ import annotations
from .shellcallstatus import ShellCallStatus
+from functools import partial
from openrouter.types import (
BaseModel,
Nullable,
@@ -9,10 +10,10 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import get_discriminator, validate_open_enum
-from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
-from typing import List, Literal, Union
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict, model_serializer
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, List, Literal, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -46,11 +47,33 @@ OutcomeTypedDict = TypeAliasType(
)
+class UnknownOutcome(BaseModel):
+ r"""A Outcome variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_OUTCOME_VARIANTS: dict[str, Any] = {
+ "exit": OutcomeExit,
+ "timeout": OutcomeTimeout,
+}
+
+
Outcome = Annotated[
- Union[
- Annotated[OutcomeExit, Tag("exit")], Annotated[OutcomeTimeout, Tag("timeout")]
- ],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ Union[OutcomeExit, OutcomeTimeout, UnknownOutcome],
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_OUTCOME_VARIANTS,
+ unknown_cls=UnknownOutcome,
+ union_name="Outcome",
+ )
+ ),
]
@@ -92,7 +115,7 @@ class OutputShellCallOutputItem(BaseModel):
output: List[OutputShellCallOutputItemOutput]
- status: Annotated[ShellCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ShellCallStatus
r"""Status of a shell call or its output."""
type: OutputShellCallOutputItemTypeShellCallOutput
@@ -101,30 +124,25 @@ class OutputShellCallOutputItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["max_output_length"]
- nullable_fields = ["max_output_length"]
- null_default_fields = []
-
+ optional_fields = set(["max_output_length"])
+ nullable_fields = set(["max_output_length"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/outputsubagentservertoolitem.py b/src/openrouter/components/outputsubagentservertoolitem.py
index 35e0665..bec70ef 100644
--- a/src/openrouter/components/outputsubagentservertoolitem.py
+++ b/src/openrouter/components/outputsubagentservertoolitem.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
OutputSubagentServerToolItemType = Literal["openrouter:subagent",]
@@ -33,7 +32,7 @@ class OutputSubagentServerToolItemTypedDict(TypedDict):
class OutputSubagentServerToolItem(BaseModel):
r"""An openrouter:subagent server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputSubagentServerToolItemType
@@ -53,3 +52,21 @@ class OutputSubagentServerToolItem(BaseModel):
task_name: Optional[str] = None
r"""The short task identifier the delegating model supplied."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["error", "id", "model", "outcome", "task_description", "task_name"]
+ )
+ 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/outputtexteditorservertoolitem.py b/src/openrouter/components/outputtexteditorservertoolitem.py
index 6b7dc1c..bec8c97 100644
--- a/src/openrouter/components/outputtexteditorservertoolitem.py
+++ b/src/openrouter/components/outputtexteditorservertoolitem.py
@@ -2,10 +2,9 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -37,14 +36,34 @@ class OutputTextEditorServerToolItemTypedDict(TypedDict):
class OutputTextEditorServerToolItem(BaseModel):
r"""An openrouter:text_editor server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputTextEditorServerToolItemType
- command: Annotated[Optional[Command], PlainValidator(validate_open_enum(False))] = (
- None
- )
+ command: Optional[Command] = None
file_path: Annotated[Optional[str], pydantic.Field(alias="filePath")] = None
id: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["command", "filePath", "id"])
+ 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
+
+
+try:
+ OutputTextEditorServerToolItem.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/outputtoolsearchservertoolitem.py b/src/openrouter/components/outputtoolsearchservertoolitem.py
index 45dfd93..e9d0b14 100644
--- a/src/openrouter/components/outputtoolsearchservertoolitem.py
+++ b/src/openrouter/components/outputtoolsearchservertoolitem.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
OutputToolSearchServerToolItemType = Literal["openrouter:tool_search",]
@@ -24,10 +23,26 @@ class OutputToolSearchServerToolItemTypedDict(TypedDict):
class OutputToolSearchServerToolItem(BaseModel):
r"""An openrouter:tool_search server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputToolSearchServerToolItemType
id: Optional[str] = None
query: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id", "query"])
+ 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/outputwebfetchservertoolitem.py b/src/openrouter/components/outputwebfetchservertoolitem.py
index 71c97ae..9b139a0 100644
--- a/src/openrouter/components/outputwebfetchservertoolitem.py
+++ b/src/openrouter/components/outputwebfetchservertoolitem.py
@@ -2,10 +2,9 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -31,7 +30,7 @@ class OutputWebFetchServerToolItemTypedDict(TypedDict):
class OutputWebFetchServerToolItem(BaseModel):
r"""An openrouter:web_fetch server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputWebFetchServerToolItemType
@@ -48,3 +47,25 @@ class OutputWebFetchServerToolItem(BaseModel):
title: Optional[str] = None
url: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["content", "error", "httpStatus", "id", "title", "url"])
+ 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
+
+
+try:
+ OutputWebFetchServerToolItem.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/outputwebsearchcallitem.py b/src/openrouter/components/outputwebsearchcallitem.py
index 63fe113..fd19c84 100644
--- a/src/openrouter/components/outputwebsearchcallitem.py
+++ b/src/openrouter/components/outputwebsearchcallitem.py
@@ -3,6 +3,7 @@
from __future__ import annotations
from .websearchsource import WebSearchSource, WebSearchSourceTypedDict
from .websearchstatus import WebSearchStatus
+from functools import partial
from openrouter.types import (
BaseModel,
Nullable,
@@ -10,10 +11,10 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import get_discriminator, validate_open_enum
-from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
-from typing import List, Literal, Optional, Union
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict, model_serializer
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -49,31 +50,26 @@ class ActionOpenPage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["url"]
- nullable_fields = ["url"]
- null_default_fields = []
-
+ optional_fields = set(["url"])
+ nullable_fields = set(["url"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -97,6 +93,22 @@ class OutputWebSearchCallItemActionSearch(BaseModel):
sources: Optional[List[WebSearchSource]] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["queries", "sources"])
+ 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
+
ActionTypedDict = TypeAliasType(
"ActionTypedDict",
@@ -108,13 +120,39 @@ ActionTypedDict = TypeAliasType(
)
+class UnknownAction(BaseModel):
+ r"""A Action variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_ACTION_VARIANTS: dict[str, Any] = {
+ "search": OutputWebSearchCallItemActionSearch,
+ "open_page": ActionOpenPage,
+ "find_in_page": ActionFindInPage,
+}
+
+
Action = Annotated[
Union[
- Annotated[OutputWebSearchCallItemActionSearch, Tag("search")],
- Annotated[ActionOpenPage, Tag("open_page")],
- Annotated[ActionFindInPage, Tag("find_in_page")],
+ OutputWebSearchCallItemActionSearch,
+ ActionOpenPage,
+ ActionFindInPage,
+ UnknownAction,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_ACTION_VARIANTS,
+ unknown_cls=UnknownAction,
+ union_name="Action",
+ )
+ ),
]
@@ -131,8 +169,24 @@ class OutputWebSearchCallItemTypedDict(TypedDict):
class OutputWebSearchCallItem(BaseModel):
id: str
- status: Annotated[WebSearchStatus, PlainValidator(validate_open_enum(False))]
+ status: WebSearchStatus
type: TypeWebSearchCall
action: Optional[Action] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["action"])
+ 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/outputwebsearchservertoolitem.py b/src/openrouter/components/outputwebsearchservertoolitem.py
index 7d63fc5..15fb96b 100644
--- a/src/openrouter/components/outputwebsearchservertoolitem.py
+++ b/src/openrouter/components/outputwebsearchservertoolitem.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .toolcallstatus import ToolCallStatus
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
OutputWebSearchServerToolItemTypeURL = Literal["url",]
@@ -43,6 +42,22 @@ class OutputWebSearchServerToolItemAction(BaseModel):
sources: Optional[List[OutputWebSearchServerToolItemSource]] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["sources"])
+ 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
+
OutputWebSearchServerToolItemTypeOpenrouterWebSearch = Literal["openrouter:web_search",]
@@ -60,7 +75,7 @@ class OutputWebSearchServerToolItemTypedDict(TypedDict):
class OutputWebSearchServerToolItem(BaseModel):
r"""An openrouter:web_search server tool output item"""
- status: Annotated[ToolCallStatus, PlainValidator(validate_open_enum(False))]
+ status: ToolCallStatus
type: OutputWebSearchServerToolItemTypeOpenrouterWebSearch
@@ -68,3 +83,19 @@ class OutputWebSearchServerToolItem(BaseModel):
r"""The search action performed, matching OpenAI web_search_call.action shape. Includes the query the model issued and optional source URLs returned by the search provider."""
id: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["action", "id"])
+ 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/paretorouterplugin.py b/src/openrouter/components/paretorouterplugin.py
index 6b12a70..f010e7d 100644
--- a/src/openrouter/components/paretorouterplugin.py
+++ b/src/openrouter/components/paretorouterplugin.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -25,3 +26,19 @@ class ParetoRouterPlugin(BaseModel):
min_coding_score: Optional[float] = None
r"""Minimum desired coding score between 0 and 1, where 1 is best. Higher values select from stronger coding models (sourced from Artificial Analysis coding percentiles). Maps internally to one of three tiers (low, medium, high). Omit to use the router default tier."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["enabled", "min_coding_score"])
+ 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/payloadtoolargeresponseerrordata.py b/src/openrouter/components/payloadtoolargeresponseerrordata.py
index ee1a068..e644b94 100644
--- a/src/openrouter/components/payloadtoolargeresponseerrordata.py
+++ b/src/openrouter/components/payloadtoolargeresponseerrordata.py
@@ -32,30 +32,25 @@ class PayloadTooLargeResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/paymentrequiredresponseerrordata.py b/src/openrouter/components/paymentrequiredresponseerrordata.py
index 83abd1e..2ddc388 100644
--- a/src/openrouter/components/paymentrequiredresponseerrordata.py
+++ b/src/openrouter/components/paymentrequiredresponseerrordata.py
@@ -32,30 +32,25 @@ class PaymentRequiredResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/pdfparserengine.py b/src/openrouter/components/pdfparserengine.py
index 36c5f8f..324fa11 100644
--- a/src/openrouter/components/pdfparserengine.py
+++ b/src/openrouter/components/pdfparserengine.py
@@ -2,10 +2,8 @@
from __future__ import annotations
from openrouter.types import UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
-from typing_extensions import Annotated, TypeAliasType
+from typing_extensions import TypeAliasType
PDFParserEnginePDFText = Literal["pdf-text",]
@@ -28,10 +26,6 @@ r"""The engine to use for parsing PDF files. \"pdf-text\" is deprecated and auto
PDFParserEngine = TypeAliasType(
- "PDFParserEngine",
- Union[
- Annotated[PDFParserEngineEnum, PlainValidator(validate_open_enum(False))],
- PDFParserEnginePDFText,
- ],
+ "PDFParserEngine", Union[PDFParserEngineEnum, PDFParserEnginePDFText]
)
r"""The engine to use for parsing PDF files. \"pdf-text\" is deprecated and automatically redirected to \"cloudflare-ai\"."""
diff --git a/src/openrouter/components/pdfparseroptions.py b/src/openrouter/components/pdfparseroptions.py
index 4510e73..c041ce5 100644
--- a/src/openrouter/components/pdfparseroptions.py
+++ b/src/openrouter/components/pdfparseroptions.py
@@ -2,7 +2,8 @@
from __future__ import annotations
from .pdfparserengine import PDFParserEngine, PDFParserEngineTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import NotRequired, TypedDict
@@ -19,3 +20,19 @@ class PDFParserOptions(BaseModel):
engine: Optional[PDFParserEngine] = None
r"""The engine to use for parsing PDF files. \"pdf-text\" is deprecated and automatically redirected to \"cloudflare-ai\"."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["engine"])
+ 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/percentilelatencycutoffs.py b/src/openrouter/components/percentilelatencycutoffs.py
index fa8175f..0680a13 100644
--- a/src/openrouter/components/percentilelatencycutoffs.py
+++ b/src/openrouter/components/percentilelatencycutoffs.py
@@ -42,30 +42,25 @@ class PercentileLatencyCutoffs(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["p50", "p75", "p90", "p99"]
- nullable_fields = ["p50", "p75", "p90", "p99"]
- null_default_fields = []
-
+ optional_fields = set(["p50", "p75", "p90", "p99"])
+ nullable_fields = set(["p50", "p75", "p90", "p99"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/percentilethroughputcutoffs.py b/src/openrouter/components/percentilethroughputcutoffs.py
index 17b28ce..d4fad42 100644
--- a/src/openrouter/components/percentilethroughputcutoffs.py
+++ b/src/openrouter/components/percentilethroughputcutoffs.py
@@ -42,30 +42,25 @@ class PercentileThroughputCutoffs(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["p50", "p75", "p90", "p99"]
- nullable_fields = ["p50", "p75", "p90", "p99"]
- null_default_fields = []
-
+ optional_fields = set(["p50", "p75", "p90", "p99"])
+ nullable_fields = set(["p50", "p75", "p90", "p99"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/pipelinestage.py b/src/openrouter/components/pipelinestage.py
index a5a763d..ddecb91 100644
--- a/src/openrouter/components/pipelinestage.py
+++ b/src/openrouter/components/pipelinestage.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, Dict, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class PipelineStageTypedDict(TypedDict):
@@ -30,7 +28,7 @@ class PipelineStageTypedDict(TypedDict):
class PipelineStage(BaseModel):
name: str
- type: Annotated[PipelineStageType, PlainValidator(validate_open_enum(False))]
+ type: PipelineStageType
r"""Categorical kind of a pipeline stage. Multiple plugins can share a type (e.g. all guardrail-level plugins emit `guardrail`); the `name` field disambiguates which plugin emitted it."""
cost_usd: OptionalNullable[float] = UNSET
@@ -45,36 +43,27 @@ class PipelineStage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "cost_usd",
- "data",
- "guardrail_id",
- "guardrail_scope",
- "summary",
- ]
- nullable_fields = ["cost_usd"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["cost_usd", "data", "guardrail_id", "guardrail_scope", "summary"]
+ )
+ nullable_fields = set(["cost_usd"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/preset.py b/src/openrouter/components/preset.py
index f1a974c..9c2ceba 100644
--- a/src/openrouter/components/preset.py
+++ b/src/openrouter/components/preset.py
@@ -3,10 +3,8 @@
from __future__ import annotations
from .presetstatus import PresetStatus
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
class PresetTypedDict(TypedDict):
@@ -43,7 +41,7 @@ class Preset(BaseModel):
slug: str
- status: Annotated[PresetStatus, PlainValidator(validate_open_enum(False))]
+ status: PresetStatus
r"""The status of a preset."""
status_updated_at: Nullable[str]
@@ -54,36 +52,14 @@ class Preset(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = [
- "creator_user_id",
- "description",
- "designated_version_id",
- "status_updated_at",
- "workspace_id",
- ]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/presetdesignatedversion.py b/src/openrouter/components/presetdesignatedversion.py
index 620f08f..504c90e 100644
--- a/src/openrouter/components/presetdesignatedversion.py
+++ b/src/openrouter/components/presetdesignatedversion.py
@@ -41,30 +41,14 @@ class PresetDesignatedVersion(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["system_prompt"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/presetwithdesignatedversion.py b/src/openrouter/components/presetwithdesignatedversion.py
index cb5c910..6828e9d 100644
--- a/src/openrouter/components/presetwithdesignatedversion.py
+++ b/src/openrouter/components/presetwithdesignatedversion.py
@@ -7,10 +7,8 @@ from .presetdesignatedversion import (
)
from .presetstatus import PresetStatus
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
class PresetWithDesignatedVersionTypedDict(TypedDict):
@@ -49,7 +47,7 @@ class PresetWithDesignatedVersion(BaseModel):
slug: str
- status: Annotated[PresetStatus, PlainValidator(validate_open_enum(False))]
+ status: PresetStatus
r"""The status of a preset."""
status_updated_at: Nullable[str]
@@ -63,37 +61,14 @@ class PresetWithDesignatedVersion(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = [
- "creator_user_id",
- "description",
- "designated_version_id",
- "status_updated_at",
- "workspace_id",
- "designated_version",
- ]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/preview_20250311_websearchservertool.py b/src/openrouter/components/preview_20250311_websearchservertool.py
index 89dfe4a..b2ebdf0 100644
--- a/src/openrouter/components/preview_20250311_websearchservertool.py
+++ b/src/openrouter/components/preview_20250311_websearchservertool.py
@@ -15,11 +15,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
Preview20250311WebSearchServerToolType = Literal["web_search_preview_2025_03_11",]
@@ -44,9 +42,7 @@ class Preview20250311WebSearchServerTool(BaseModel):
type: Preview20250311WebSearchServerToolType
- engine: Annotated[
- Optional[WebSearchEngineEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ engine: Optional[WebSearchEngineEnum] = None
r"""Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API. \"perplexity\" uses the Perplexity Search API (raw ranked results)."""
filters: OptionalNullable[WebSearchDomainFilter] = UNSET
@@ -54,45 +50,34 @@ class Preview20250311WebSearchServerTool(BaseModel):
max_results: Optional[int] = None
r"""Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped."""
- search_context_size: Annotated[
- Optional[SearchContextSizeEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ search_context_size: Optional[SearchContextSizeEnum] = None
r"""Size of the search context for web search tools"""
user_location: OptionalNullable[PreviewWebSearchUserLocation] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "engine",
- "filters",
- "max_results",
- "search_context_size",
- "user_location",
- ]
- nullable_fields = ["filters", "user_location"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["engine", "filters", "max_results", "search_context_size", "user_location"]
+ )
+ nullable_fields = set(["filters", "user_location"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/preview_websearchservertool.py b/src/openrouter/components/preview_websearchservertool.py
index a1e76de..7decade 100644
--- a/src/openrouter/components/preview_websearchservertool.py
+++ b/src/openrouter/components/preview_websearchservertool.py
@@ -15,11 +15,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
PreviewWebSearchServerToolType = Literal["web_search_preview",]
@@ -44,9 +42,7 @@ class PreviewWebSearchServerTool(BaseModel):
type: PreviewWebSearchServerToolType
- engine: Annotated[
- Optional[WebSearchEngineEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ engine: Optional[WebSearchEngineEnum] = None
r"""Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API. \"perplexity\" uses the Perplexity Search API (raw ranked results)."""
filters: OptionalNullable[WebSearchDomainFilter] = UNSET
@@ -54,45 +50,34 @@ class PreviewWebSearchServerTool(BaseModel):
max_results: Optional[int] = None
r"""Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped."""
- search_context_size: Annotated[
- Optional[SearchContextSizeEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ search_context_size: Optional[SearchContextSizeEnum] = None
r"""Size of the search context for web search tools"""
user_location: OptionalNullable[PreviewWebSearchUserLocation] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "engine",
- "filters",
- "max_results",
- "search_context_size",
- "user_location",
- ]
- nullable_fields = ["filters", "user_location"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["engine", "filters", "max_results", "search_context_size", "user_location"]
+ )
+ nullable_fields = set(["filters", "user_location"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/preview_websearchuserlocation.py b/src/openrouter/components/preview_websearchuserlocation.py
index 72dd152..90bdb26 100644
--- a/src/openrouter/components/preview_websearchuserlocation.py
+++ b/src/openrouter/components/preview_websearchuserlocation.py
@@ -37,30 +37,25 @@ class PreviewWebSearchUserLocation(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["city", "country", "region", "timezone"]
- nullable_fields = ["city", "country", "region", "timezone"]
- null_default_fields = []
-
+ optional_fields = set(["city", "country", "region", "timezone"])
+ nullable_fields = set(["city", "country", "region", "timezone"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/provideroptions.py b/src/openrouter/components/provideroptions.py
index 160b700..d84b93d 100644
--- a/src/openrouter/components/provideroptions.py
+++ b/src/openrouter/components/provideroptions.py
@@ -1,8 +1,9 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, Nullable
+from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
import pydantic
+from pydantic import model_serializer
from typing import Any, Dict, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -422,3 +423,148 @@ class ProviderOptions(BaseModel):
z_ai: Annotated[
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="z-ai")
] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "01ai",
+ "ai21",
+ "aion-labs",
+ "akashml",
+ "alibaba",
+ "amazon-bedrock",
+ "amazon-nova",
+ "ambient",
+ "anthropic",
+ "anyscale",
+ "arcee-ai",
+ "atlas-cloud",
+ "atoma",
+ "avian",
+ "azure",
+ "baidu",
+ "baseten",
+ "black-forest-labs",
+ "byteplus",
+ "centml",
+ "cerebras",
+ "chutes",
+ "cirrascale",
+ "clarifai",
+ "cloudflare",
+ "cohere",
+ "crofai",
+ "crucible",
+ "crusoe",
+ "darkbloom",
+ "decart",
+ "deepinfra",
+ "deepseek",
+ "dekallm",
+ "digitalocean",
+ "enfer",
+ "fake-provider",
+ "featherless",
+ "fireworks",
+ "friendli",
+ "gmicloud",
+ "google-ai-studio",
+ "google-vertex",
+ "gopomelo",
+ "groq",
+ "heygen",
+ "huggingface",
+ "hyperbolic",
+ "hyperbolic-quantized",
+ "inception",
+ "inceptron",
+ "inferact-vllm",
+ "inference-net",
+ "infermatic",
+ "inflection",
+ "inocloud",
+ "io-net",
+ "ionstream",
+ "klusterai",
+ "lambda",
+ "lepton",
+ "liquid",
+ "lynn",
+ "lynn-private",
+ "mancer",
+ "mancer-old",
+ "mara",
+ "meta",
+ "minimax",
+ "mistral",
+ "modal",
+ "modelrun",
+ "modular",
+ "moonshotai",
+ "morph",
+ "ncompass",
+ "nebius",
+ "nex-agi",
+ "nextbit",
+ "nineteen",
+ "novita",
+ "nvidia",
+ "octoai",
+ "open-inference",
+ "openai",
+ "parasail",
+ "perceptron",
+ "perplexity",
+ "phala",
+ "poolside",
+ "quiver",
+ "recraft",
+ "recursal",
+ "reflection",
+ "reka",
+ "relace",
+ "replicate",
+ "sakana-ai",
+ "sambanova",
+ "sambanova-cloaked",
+ "seed",
+ "sf-compute",
+ "siliconflow",
+ "sourceful",
+ "stealth",
+ "stepfun",
+ "streamlake",
+ "switchpoint",
+ "targon",
+ "tenstorrent",
+ "together",
+ "together-lite",
+ "ubicloud",
+ "upstage",
+ "venice",
+ "wafer",
+ "wandb",
+ "xai",
+ "xiaomi",
+ "z-ai",
+ ]
+ )
+ 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
+
+
+try:
+ ProviderOptions.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/provideroverloadedresponseerrordata.py b/src/openrouter/components/provideroverloadedresponseerrordata.py
index f3d7756..c85a381 100644
--- a/src/openrouter/components/provideroverloadedresponseerrordata.py
+++ b/src/openrouter/components/provideroverloadedresponseerrordata.py
@@ -32,30 +32,25 @@ class ProviderOverloadedResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/providerpreferences.py b/src/openrouter/components/providerpreferences.py
index ce5d942..abbb3cb 100644
--- a/src/openrouter/components/providerpreferences.py
+++ b/src/openrouter/components/providerpreferences.py
@@ -18,11 +18,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
+from typing_extensions import NotRequired, TypeAliasType, TypedDict
DataCollection = Union[
@@ -42,10 +40,7 @@ r"""Data collection setting. If no available model provider meets the requiremen
IgnoreTypedDict = TypeAliasType("IgnoreTypedDict", Union[ProviderName, str])
-Ignore = TypeAliasType(
- "Ignore",
- Union[Annotated[ProviderName, PlainValidator(validate_open_enum(False))], str],
-)
+Ignore = TypeAliasType("Ignore", Union[ProviderName, str])
class MaxPriceTypedDict(TypedDict):
@@ -81,23 +76,33 @@ class MaxPrice(BaseModel):
request: Optional[str] = None
r"""Maximum price in USD per request"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["audio", "completion", "image", "prompt", "request"])
+ 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
+
OnlyTypedDict = TypeAliasType("OnlyTypedDict", Union[ProviderName, str])
-Only = TypeAliasType(
- "Only",
- Union[Annotated[ProviderName, PlainValidator(validate_open_enum(False))], str],
-)
+Only = TypeAliasType("Only", Union[ProviderName, str])
OrderTypedDict = TypeAliasType("OrderTypedDict", Union[ProviderName, str])
-Order = TypeAliasType(
- "Order",
- Union[Annotated[ProviderName, PlainValidator(validate_open_enum(False))], str],
-)
+Order = TypeAliasType("Order", Union[ProviderName, str])
SortTypedDict = TypeAliasType(
@@ -106,14 +111,7 @@ SortTypedDict = TypeAliasType(
r"""The sorting strategy to use for this request, if \"order\" is not specified. When set, no load balancing is performed."""
-Sort = TypeAliasType(
- "Sort",
- Union[
- ProviderSortConfig,
- Annotated[ProviderSort, PlainValidator(validate_open_enum(False))],
- Any,
- ],
-)
+Sort = TypeAliasType("Sort", Union[ProviderSortConfig, ProviderSort, Any])
r"""The sorting strategy to use for this request, if \"order\" is not specified. When set, no load balancing is performed."""
@@ -166,9 +164,7 @@ class ProviderPreferences(BaseModel):
"""
- data_collection: Annotated[
- OptionalNullable[DataCollection], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ data_collection: OptionalNullable[DataCollection] = UNSET
r"""Data collection setting. If no available model provider meets the requirement, your request will return an error.
- allow: (default) allow providers which store user data non-transiently and may train on it
@@ -196,9 +192,7 @@ class ProviderPreferences(BaseModel):
preferred_min_throughput: OptionalNullable[PreferredMinThroughput] = UNSET
r"""Preferred minimum throughput (in tokens per second). Can be a number (applies to p50) or an object with percentile-specific cutoffs. Endpoints below the threshold(s) may still be used, but are deprioritized in routing. When using fallback models, this may cause a fallback model to be used instead of the primary model if it meets the threshold."""
- quantizations: OptionalNullable[
- List[Annotated[Quantization, PlainValidator(validate_open_enum(False))]]
- ] = UNSET
+ quantizations: OptionalNullable[List[Quantization]] = UNSET
r"""A list of quantization levels to filter the provider by."""
require_parameters: OptionalNullable[bool] = UNSET
@@ -212,57 +206,56 @@ class ProviderPreferences(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "allow_fallbacks",
- "data_collection",
- "enforce_distillable_text",
- "ignore",
- "max_price",
- "only",
- "order",
- "preferred_max_latency",
- "preferred_min_throughput",
- "quantizations",
- "require_parameters",
- "sort",
- "zdr",
- ]
- nullable_fields = [
- "allow_fallbacks",
- "data_collection",
- "enforce_distillable_text",
- "ignore",
- "only",
- "order",
- "preferred_max_latency",
- "preferred_min_throughput",
- "quantizations",
- "require_parameters",
- "sort",
- "zdr",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "allow_fallbacks",
+ "data_collection",
+ "enforce_distillable_text",
+ "ignore",
+ "max_price",
+ "only",
+ "order",
+ "preferred_max_latency",
+ "preferred_min_throughput",
+ "quantizations",
+ "require_parameters",
+ "sort",
+ "zdr",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "allow_fallbacks",
+ "data_collection",
+ "enforce_distillable_text",
+ "ignore",
+ "only",
+ "order",
+ "preferred_max_latency",
+ "preferred_min_throughput",
+ "quantizations",
+ "require_parameters",
+ "sort",
+ "zdr",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/providerresponse.py b/src/openrouter/components/providerresponse.py
index 5cad4c1..757907b 100644
--- a/src/openrouter/components/providerresponse.py
+++ b/src/openrouter/components/providerresponse.py
@@ -2,11 +2,9 @@
from __future__ import annotations
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
ProviderResponseProviderName = Union[
@@ -177,45 +175,39 @@ class ProviderResponse(BaseModel):
model_permaslug: Optional[str] = None
r"""Canonical model slug"""
- provider_name: Annotated[
- Optional[ProviderResponseProviderName],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ provider_name: Optional[ProviderResponseProviderName] = None
r"""Name of the provider"""
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "endpoint_id",
- "id",
- "is_byok",
- "latency",
- "model_permaslug",
- "provider_name",
- ]
- nullable_fields = ["status"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "endpoint_id",
+ "id",
+ "is_byok",
+ "latency",
+ "model_permaslug",
+ "provider_name",
+ ]
+ )
+ nullable_fields = set(["status"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/providersortconfig.py b/src/openrouter/components/providersortconfig.py
index 4e1073b..1798ae9 100644
--- a/src/openrouter/components/providersortconfig.py
+++ b/src/openrouter/components/providersortconfig.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
By = Union[
@@ -50,42 +48,33 @@ class ProviderSortConfigTypedDict(TypedDict):
class ProviderSortConfig(BaseModel):
r"""The provider sorting strategy (price, throughput, latency)"""
- by: Annotated[OptionalNullable[By], PlainValidator(validate_open_enum(False))] = (
- UNSET
- )
+ by: OptionalNullable[By] = UNSET
r"""The provider sorting strategy (price, throughput, latency)"""
- partition: Annotated[
- OptionalNullable[Partition], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ partition: OptionalNullable[Partition] = UNSET
r"""Partitioning strategy for sorting: \"model\" (default) groups endpoints by model before sorting (fallback models remain fallbacks), \"none\" sorts all endpoints together regardless of model."""
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["by", "partition"]
- nullable_fields = ["by", "partition"]
- null_default_fields = []
-
+ optional_fields = set(["by", "partition"])
+ nullable_fields = set(["by", "partition"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/publicendpoint.py b/src/openrouter/components/publicendpoint.py
index a7d3e52..270a46d 100644
--- a/src/openrouter/components/publicendpoint.py
+++ b/src/openrouter/components/publicendpoint.py
@@ -6,11 +6,9 @@ from .parameter import Parameter
from .percentilestats import PercentileStats, PercentileStatsTypedDict
from .providername import ProviderName
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class PricingTypedDict(TypedDict):
@@ -92,6 +90,38 @@ class Pricing(BaseModel):
web_search: Optional[str] = None
r"""Price in USD per web search"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "audio",
+ "audio_output",
+ "discount",
+ "image",
+ "image_output",
+ "image_token",
+ "input_audio_cache",
+ "input_cache_read",
+ "input_cache_write",
+ "input_cache_write_1h",
+ "internal_reasoning",
+ "request",
+ "web_search",
+ ]
+ )
+ 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
+
PublicEndpointQuantization = Union[
Literal[
@@ -157,15 +187,11 @@ class PublicEndpoint(BaseModel):
pricing: Pricing
- provider_name: Annotated[ProviderName, PlainValidator(validate_open_enum(False))]
+ provider_name: ProviderName
- quantization: Annotated[
- Nullable[PublicEndpointQuantization], PlainValidator(validate_open_enum(False))
- ]
+ quantization: Nullable[PublicEndpointQuantization]
- supported_parameters: List[
- Annotated[Parameter, PlainValidator(validate_open_enum(False))]
- ]
+ supported_parameters: List[Parameter]
supports_implicit_caching: bool
@@ -181,45 +207,40 @@ class PublicEndpoint(BaseModel):
uptime_last_5m: Nullable[float]
r"""Uptime percentage over the last 5 minutes, calculated as successful requests / (successful + error requests) * 100. Rate-limited requests are excluded. Returns null if insufficient data."""
- status: Annotated[
- Optional[EndpointStatus], PlainValidator(validate_open_enum(True))
- ] = None
+ status: Optional[EndpointStatus] = None
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["status"]
- nullable_fields = [
- "latency_last_30m",
- "max_completion_tokens",
- "max_prompt_tokens",
- "quantization",
- "throughput_last_30m",
- "uptime_last_1d",
- "uptime_last_30m",
- "uptime_last_5m",
- ]
- null_default_fields = []
-
+ optional_fields = set(["status"])
+ nullable_fields = set(
+ [
+ "latency_last_30m",
+ "max_completion_tokens",
+ "max_prompt_tokens",
+ "quantization",
+ "throughput_last_30m",
+ "uptime_last_1d",
+ "uptime_last_30m",
+ "uptime_last_5m",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/publicpricing.py b/src/openrouter/components/publicpricing.py
index 09a1bdd..fc3f2cd 100644
--- a/src/openrouter/components/publicpricing.py
+++ b/src/openrouter/components/publicpricing.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import NotRequired, TypedDict
@@ -88,3 +89,35 @@ class PublicPricing(BaseModel):
web_search: Optional[str] = None
r"""Price in USD per web search"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "audio",
+ "audio_output",
+ "discount",
+ "image",
+ "image_output",
+ "image_token",
+ "input_audio_cache",
+ "input_cache_read",
+ "input_cache_write",
+ "input_cache_write_1h",
+ "internal_reasoning",
+ "request",
+ "web_search",
+ ]
+ )
+ 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/rankingsdailyitem.py b/src/openrouter/components/rankingsdailyitem.py
index 7325fa4..46a16b3 100644
--- a/src/openrouter/components/rankingsdailyitem.py
+++ b/src/openrouter/components/rankingsdailyitem.py
@@ -24,3 +24,9 @@ class RankingsDailyItem(BaseModel):
total_tokens: str
r"""Sum of `prompt_tokens + completion_tokens` for the day, returned as a decimal string so 64-bit values are not truncated."""
+
+
+try:
+ RankingsDailyItem.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/reasoningconfig.py b/src/openrouter/components/reasoningconfig.py
index 6f390d6..7e37f18 100644
--- a/src/openrouter/components/reasoningconfig.py
+++ b/src/openrouter/components/reasoningconfig.py
@@ -10,10 +10,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class ReasoningConfigTypedDict(TypedDict):
@@ -28,14 +26,9 @@ class ReasoningConfigTypedDict(TypedDict):
class ReasoningConfig(BaseModel):
r"""Configuration for reasoning mode in the response"""
- effort: Annotated[
- OptionalNullable[ReasoningEffort], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ effort: OptionalNullable[ReasoningEffort] = UNSET
- summary: Annotated[
- OptionalNullable[ReasoningSummaryVerbosity],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ summary: OptionalNullable[ReasoningSummaryVerbosity] = UNSET
enabled: OptionalNullable[bool] = UNSET
@@ -43,30 +36,25 @@ class ReasoningConfig(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["effort", "summary", "enabled", "max_tokens"]
- nullable_fields = ["effort", "summary", "enabled", "max_tokens"]
- null_default_fields = []
-
+ optional_fields = set(["effort", "summary", "enabled", "max_tokens"])
+ nullable_fields = set(["effort", "summary", "enabled", "max_tokens"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/reasoningdetailencrypted.py b/src/openrouter/components/reasoningdetailencrypted.py
index 0cfaff9..0ba2daa 100644
--- a/src/openrouter/components/reasoningdetailencrypted.py
+++ b/src/openrouter/components/reasoningdetailencrypted.py
@@ -9,10 +9,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -38,10 +36,7 @@ class ReasoningDetailEncrypted(BaseModel):
type: ReasoningDetailEncryptedType
format_: Annotated[
- Annotated[
- OptionalNullable[ReasoningFormat], PlainValidator(validate_open_enum(False))
- ],
- pydantic.Field(alias="format"),
+ OptionalNullable[ReasoningFormat], pydantic.Field(alias="format")
] = UNSET
id: OptionalNullable[str] = UNSET
@@ -50,30 +45,31 @@ class ReasoningDetailEncrypted(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["format", "id", "index"]
- nullable_fields = ["format", "id"]
- null_default_fields = []
-
+ optional_fields = set(["format", "id", "index"])
+ nullable_fields = set(["format", "id"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
+
+
+try:
+ ReasoningDetailEncrypted.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/reasoningdetailsummary.py b/src/openrouter/components/reasoningdetailsummary.py
index ceab1ea..21c892c 100644
--- a/src/openrouter/components/reasoningdetailsummary.py
+++ b/src/openrouter/components/reasoningdetailsummary.py
@@ -9,10 +9,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -38,10 +36,7 @@ class ReasoningDetailSummary(BaseModel):
type: ReasoningDetailSummaryType
format_: Annotated[
- Annotated[
- OptionalNullable[ReasoningFormat], PlainValidator(validate_open_enum(False))
- ],
- pydantic.Field(alias="format"),
+ OptionalNullable[ReasoningFormat], pydantic.Field(alias="format")
] = UNSET
id: OptionalNullable[str] = UNSET
@@ -50,30 +45,31 @@ class ReasoningDetailSummary(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["format", "id", "index"]
- nullable_fields = ["format", "id"]
- null_default_fields = []
-
+ optional_fields = set(["format", "id", "index"])
+ nullable_fields = set(["format", "id"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
+
+
+try:
+ ReasoningDetailSummary.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/reasoningdetailtext.py b/src/openrouter/components/reasoningdetailtext.py
index a21b8ed..49b08a2 100644
--- a/src/openrouter/components/reasoningdetailtext.py
+++ b/src/openrouter/components/reasoningdetailtext.py
@@ -9,10 +9,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -37,10 +35,7 @@ class ReasoningDetailText(BaseModel):
type: ReasoningDetailTextType
format_: Annotated[
- Annotated[
- OptionalNullable[ReasoningFormat], PlainValidator(validate_open_enum(False))
- ],
- pydantic.Field(alias="format"),
+ OptionalNullable[ReasoningFormat], pydantic.Field(alias="format")
] = UNSET
id: OptionalNullable[str] = UNSET
@@ -53,30 +48,31 @@ class ReasoningDetailText(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["format", "id", "index", "signature", "text"]
- nullable_fields = ["format", "id", "signature", "text"]
- null_default_fields = []
-
+ optional_fields = set(["format", "id", "index", "signature", "text"])
+ nullable_fields = set(["format", "id", "signature", "text"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
+
+
+try:
+ ReasoningDetailText.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/reasoningdetailunion.py b/src/openrouter/components/reasoningdetailunion.py
index 42ce663..78e5924 100644
--- a/src/openrouter/components/reasoningdetailunion.py
+++ b/src/openrouter/components/reasoningdetailunion.py
@@ -10,9 +10,12 @@ from .reasoningdetailsummary import (
ReasoningDetailSummaryTypedDict,
)
from .reasoningdetailtext import ReasoningDetailText, ReasoningDetailTextTypedDict
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import Union
+from functools import partial
+from openrouter.types import BaseModel
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Union
from typing_extensions import Annotated, TypeAliasType
@@ -27,12 +30,38 @@ ReasoningDetailUnionTypedDict = TypeAliasType(
r"""Reasoning detail union schema"""
+class UnknownReasoningDetailUnion(BaseModel):
+ r"""A ReasoningDetailUnion variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_REASONING_DETAIL_UNION_VARIANTS: dict[str, Any] = {
+ "reasoning.encrypted": ReasoningDetailEncrypted,
+ "reasoning.summary": ReasoningDetailSummary,
+ "reasoning.text": ReasoningDetailText,
+}
+
+
ReasoningDetailUnion = Annotated[
Union[
- Annotated[ReasoningDetailEncrypted, Tag("reasoning.encrypted")],
- Annotated[ReasoningDetailSummary, Tag("reasoning.summary")],
- Annotated[ReasoningDetailText, Tag("reasoning.text")],
+ ReasoningDetailEncrypted,
+ ReasoningDetailSummary,
+ ReasoningDetailText,
+ UnknownReasoningDetailUnion,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_REASONING_DETAIL_UNION_VARIANTS,
+ unknown_cls=UnknownReasoningDetailUnion,
+ union_name="ReasoningDetailUnion",
+ )
+ ),
]
r"""Reasoning detail union schema"""
diff --git a/src/openrouter/components/reasoningitem.py b/src/openrouter/components/reasoningitem.py
index 43d3ff5..40ee3f6 100644
--- a/src/openrouter/components/reasoningitem.py
+++ b/src/openrouter/components/reasoningitem.py
@@ -11,10 +11,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -80,46 +78,40 @@ class ReasoningItem(BaseModel):
status: Optional[ReasoningItemStatusUnion] = None
format_: Annotated[
- Annotated[
- OptionalNullable[ReasoningFormat], PlainValidator(validate_open_enum(False))
- ],
- pydantic.Field(alias="format"),
+ OptionalNullable[ReasoningFormat], pydantic.Field(alias="format")
] = UNSET
signature: OptionalNullable[str] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "content",
- "encrypted_content",
- "status",
- "format",
- "signature",
- ]
- nullable_fields = ["content", "encrypted_content", "format", "signature"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["content", "encrypted_content", "status", "format", "signature"]
+ )
+ nullable_fields = set(["content", "encrypted_content", "format", "signature"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
+
+
+try:
+ ReasoningItem.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/requesttimeoutresponseerrordata.py b/src/openrouter/components/requesttimeoutresponseerrordata.py
index 50be74a..0ba1a63 100644
--- a/src/openrouter/components/requesttimeoutresponseerrordata.py
+++ b/src/openrouter/components/requesttimeoutresponseerrordata.py
@@ -32,30 +32,25 @@ class RequestTimeoutResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/responsehealingplugin.py b/src/openrouter/components/responsehealingplugin.py
index c13279f..27f0ef5 100644
--- a/src/openrouter/components/responsehealingplugin.py
+++ b/src/openrouter/components/responsehealingplugin.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -20,3 +21,19 @@ class ResponseHealingPlugin(BaseModel):
enabled: Optional[bool] = None
r"""Set to false to disable the response-healing plugin for this request. Defaults to true."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["enabled"])
+ 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/responseoutputtext.py b/src/openrouter/components/responseoutputtext.py
index b1c89ab..900bf08 100644
--- a/src/openrouter/components/responseoutputtext.py
+++ b/src/openrouter/components/responseoutputtext.py
@@ -5,8 +5,9 @@ from .openairesponsesannotation import (
OpenAIResponsesAnnotation,
OpenAIResponsesAnnotationTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
+from pydantic import model_serializer
from typing import List, Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -60,3 +61,29 @@ class ResponseOutputText(BaseModel):
annotations: Optional[List[OpenAIResponsesAnnotation]] = None
logprobs: Optional[List[Logprob]] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["annotations", "logprobs"])
+ 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
+
+
+try:
+ ResponseOutputTextTopLogprob.model_rebuild()
+except NameError:
+ pass
+try:
+ Logprob.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/responseserrorfield.py b/src/openrouter/components/responseserrorfield.py
index d3c7762..1c7f8a0 100644
--- a/src/openrouter/components/responseserrorfield.py
+++ b/src/openrouter/components/responseserrorfield.py
@@ -2,10 +2,8 @@
from __future__ import annotations
from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
Code = Union[
@@ -43,6 +41,6 @@ class ResponsesErrorFieldTypedDict(TypedDict):
class ResponsesErrorField(BaseModel):
r"""Error information returned from the API"""
- code: Annotated[Code, PlainValidator(validate_open_enum(False))]
+ code: Code
message: str
diff --git a/src/openrouter/components/responsesrequest.py b/src/openrouter/components/responsesrequest.py
index 683fab4..53cacf2 100644
--- a/src/openrouter/components/responsesrequest.py
+++ b/src/openrouter/components/responsesrequest.py
@@ -35,6 +35,7 @@ from .customtool import CustomTool, CustomToolTypedDict
from .datetimeservertool import DatetimeServerTool, DatetimeServerToolTypedDict
from .fileparserplugin import FileParserPlugin, FileParserPluginTypedDict
from .filesearchservertool import FileSearchServerTool, FileSearchServerToolTypedDict
+from .filesservertool import FilesServerTool, FilesServerToolTypedDict
from .fusionplugin import FusionPlugin, FusionPluginTypedDict
from .fusionservertool_openrouter import (
FusionServerToolOpenRouter,
@@ -107,10 +108,10 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import get_discriminator, validate_const, validate_open_enum
+from openrouter.utils import get_discriminator, validate_const
import pydantic
from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import AfterValidator, PlainValidator
+from pydantic.functional_validators import AfterValidator
from typing import Any, Dict, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -187,31 +188,26 @@ class ResponsesRequestToolFunction(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["description", "strict"]
- nullable_fields = ["description", "parameters", "strict"]
- null_default_fields = []
-
+ optional_fields = set(["description", "strict"])
+ nullable_fields = set(["description", "parameters", "strict"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -222,25 +218,26 @@ ResponsesRequestToolUnionTypedDict = TypeAliasType(
CodexLocalShellToolTypedDict,
ApplyPatchServerToolTypedDict,
ShellServerToolTypedDict,
+ FusionServerToolOpenRouterTypedDict,
ImageGenerationServerToolOpenRouterTypedDict,
- ChatSearchModelsServerToolTypedDict,
ShellServerToolOpenRouterTypedDict,
BashServerToolTypedDict,
CodeInterpreterServerToolTypedDict,
ApplyPatchServerToolOpenRouterTypedDict,
WebSearchServerToolOpenRouterTypedDict,
WebFetchServerToolTypedDict,
- FusionServerToolOpenRouterTypedDict,
+ ChatSearchModelsServerToolTypedDict,
+ FilesServerToolTypedDict,
DatetimeServerToolTypedDict,
- SubagentServerToolOpenRouterTypedDict,
AdvisorServerToolOpenRouterTypedDict,
+ SubagentServerToolOpenRouterTypedDict,
CustomToolTypedDict,
ComputerUseServerToolTypedDict,
ResponsesRequestToolFunctionTypedDict,
FileSearchServerToolTypedDict,
PreviewWebSearchServerToolTypedDict,
- Preview20250311WebSearchServerToolTypedDict,
WebSearchServerToolTypedDict,
+ Preview20250311WebSearchServerToolTypedDict,
LegacyWebSearchServerToolTypedDict,
McpServerToolTypedDict,
ImageGenerationServerToolTypedDict,
@@ -269,6 +266,7 @@ ResponsesRequestToolUnion = Annotated[
Annotated[AdvisorServerToolOpenRouter, Tag("openrouter:advisor")],
Annotated[SubagentServerToolOpenRouter, Tag("openrouter:subagent")],
Annotated[DatetimeServerTool, Tag("openrouter:datetime")],
+ Annotated[FilesServerTool, Tag("openrouter:files")],
Annotated[FusionServerToolOpenRouter, Tag("openrouter:fusion")],
Annotated[
ImageGenerationServerToolOpenRouter, Tag("openrouter:image_generation")
@@ -359,9 +357,7 @@ class ResponsesRequest(BaseModel):
image_config: Optional[Dict[str, ImageConfig]] = None
r"""Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details."""
- include: OptionalNullable[
- List[Annotated[ResponseIncludesEnum, PlainValidator(validate_open_enum(False))]]
- ] = UNSET
+ include: OptionalNullable[List[ResponseIncludesEnum]] = UNSET
input: Optional[InputsUnion] = None
r"""Input for a response request - can be a string or array of items"""
@@ -375,9 +371,7 @@ class ResponsesRequest(BaseModel):
metadata: OptionalNullable[Dict[str, str]] = UNSET
r"""Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed."""
- modalities: Optional[
- List[Annotated[OutputModalityEnum, PlainValidator(validate_open_enum(False))]]
- ] = None
+ modalities: Optional[List[OutputModalityEnum]] = None
r"""Output modalities for the response. Supported values are \"text\" and \"image\"."""
model: Optional[str] = None
@@ -405,10 +399,7 @@ class ResponsesRequest(BaseModel):
safety_identifier: OptionalNullable[str] = UNSET
- service_tier: Annotated[
- OptionalNullable[ResponsesRequestServiceTier],
- PlainValidator(validate_open_enum(False)),
- ] = "auto"
+ service_tier: OptionalNullable[ResponsesRequestServiceTier] = "auto"
session_id: Optional[str] = None
r"""A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters."""
@@ -441,100 +432,102 @@ class ResponsesRequest(BaseModel):
trace: Optional[TraceConfig] = None
r"""Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations."""
- truncation: Annotated[
- OptionalNullable[OpenAIResponsesTruncation],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ truncation: OptionalNullable[OpenAIResponsesTruncation] = UNSET
user: Optional[str] = None
r"""A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 256 characters."""
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "background",
- "cache_control",
- "debug",
- "frequency_penalty",
- "image_config",
- "include",
- "input",
- "instructions",
- "max_output_tokens",
- "max_tool_calls",
- "metadata",
- "modalities",
- "model",
- "models",
- "parallel_tool_calls",
- "plugins",
- "presence_penalty",
- "previous_response_id",
- "prompt",
- "prompt_cache_key",
- "provider",
- "reasoning",
- "safety_identifier",
- "service_tier",
- "session_id",
- "stop_server_tools_when",
- "store",
- "stream",
- "temperature",
- "text",
- "tool_choice",
- "tools",
- "top_k",
- "top_logprobs",
- "top_p",
- "trace",
- "truncation",
- "user",
- ]
- nullable_fields = [
- "background",
- "frequency_penalty",
- "include",
- "instructions",
- "max_output_tokens",
- "max_tool_calls",
- "metadata",
- "parallel_tool_calls",
- "presence_penalty",
- "previous_response_id",
- "prompt",
- "prompt_cache_key",
- "provider",
- "reasoning",
- "safety_identifier",
- "service_tier",
- "temperature",
- "top_logprobs",
- "top_p",
- "truncation",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "background",
+ "cache_control",
+ "debug",
+ "frequency_penalty",
+ "image_config",
+ "include",
+ "input",
+ "instructions",
+ "max_output_tokens",
+ "max_tool_calls",
+ "metadata",
+ "modalities",
+ "model",
+ "models",
+ "parallel_tool_calls",
+ "plugins",
+ "presence_penalty",
+ "previous_response_id",
+ "prompt",
+ "prompt_cache_key",
+ "provider",
+ "reasoning",
+ "safety_identifier",
+ "service_tier",
+ "session_id",
+ "stop_server_tools_when",
+ "store",
+ "stream",
+ "temperature",
+ "text",
+ "tool_choice",
+ "tools",
+ "top_k",
+ "top_logprobs",
+ "top_p",
+ "trace",
+ "truncation",
+ "user",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "background",
+ "frequency_penalty",
+ "include",
+ "instructions",
+ "max_output_tokens",
+ "max_tool_calls",
+ "metadata",
+ "parallel_tool_calls",
+ "presence_penalty",
+ "previous_response_id",
+ "prompt",
+ "prompt_cache_key",
+ "provider",
+ "reasoning",
+ "safety_identifier",
+ "service_tier",
+ "temperature",
+ "top_logprobs",
+ "top_p",
+ "truncation",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
+
+
+try:
+ ResponsesRequest.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/routerparams.py b/src/openrouter/components/routerparams.py
index ae952a3..264be67 100644
--- a/src/openrouter/components/routerparams.py
+++ b/src/openrouter/components/routerparams.py
@@ -1,9 +1,9 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, Nullable
+from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
import pydantic
-from pydantic import ConfigDict
+from pydantic import ConfigDict, model_serializer
from typing import Any, Dict, Optional
from typing_extensions import NotRequired, TypedDict
@@ -33,3 +33,22 @@ class RouterParams(BaseModel):
@additional_properties.setter
def additional_properties(self, value):
self.__pydantic_extra__ = value # pyright: ignore[reportIncompatibleVariableOverride]
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["quality_floor", "throughput_floor", "version_group"])
+ 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))
+ serialized.pop(k, serialized.pop(n, None))
+
+ if val != UNSET_SENTINEL:
+ if val is not None or k not in optional_fields:
+ m[k] = val
+ for k, v in serialized.items():
+ m[k] = v
+
+ return m
diff --git a/src/openrouter/components/searchmodelsservertoolconfig.py b/src/openrouter/components/searchmodelsservertoolconfig.py
index 559ecad..bec955b 100644
--- a/src/openrouter/components/searchmodelsservertoolconfig.py
+++ b/src/openrouter/components/searchmodelsservertoolconfig.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import NotRequired, TypedDict
@@ -18,3 +19,19 @@ class SearchModelsServerToolConfig(BaseModel):
max_results: Optional[int] = None
r"""Maximum number of models to return. Defaults to 5, max 20."""
+
+ @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/src/openrouter/components/security.py b/src/openrouter/components/security.py
index 1870d08..fce3d07 100644
--- a/src/openrouter/components/security.py
+++ b/src/openrouter/components/security.py
@@ -1,8 +1,9 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, SecurityMetadata
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -23,3 +24,19 @@ class Security(BaseModel):
)
),
] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["apiKey"])
+ 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/serviceunavailableresponseerrordata.py b/src/openrouter/components/serviceunavailableresponseerrordata.py
index 0b28bb2..b6859e9 100644
--- a/src/openrouter/components/serviceunavailableresponseerrordata.py
+++ b/src/openrouter/components/serviceunavailableresponseerrordata.py
@@ -32,30 +32,25 @@ class ServiceUnavailableResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/shellcallitem.py b/src/openrouter/components/shellcallitem.py
index 892539b..3a5faf6 100644
--- a/src/openrouter/components/shellcallitem.py
+++ b/src/openrouter/components/shellcallitem.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, List, Literal, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class ShellCallItemActionTypedDict(TypedDict):
@@ -31,31 +29,26 @@ class ShellCallItemAction(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["max_output_length", "timeout_ms"]
- nullable_fields = ["max_output_length", "timeout_ms"]
- null_default_fields = []
-
+ optional_fields = set(["max_output_length", "timeout_ms"])
+ nullable_fields = set(["max_output_length", "timeout_ms"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -97,36 +90,29 @@ class ShellCallItem(BaseModel):
id: OptionalNullable[str] = UNSET
- status: Annotated[
- OptionalNullable[ShellCallItemStatus], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ status: OptionalNullable[ShellCallItemStatus] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["environment", "id", "status"]
- nullable_fields = ["environment", "id", "status"]
- null_default_fields = []
-
+ optional_fields = set(["environment", "id", "status"])
+ nullable_fields = set(["environment", "id", "status"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/shellcalloutputitem.py b/src/openrouter/components/shellcalloutputitem.py
index fb4b300..872701b 100644
--- a/src/openrouter/components/shellcalloutputitem.py
+++ b/src/openrouter/components/shellcalloutputitem.py
@@ -9,12 +9,10 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import ConfigDict, model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Any, Dict, List, Literal, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class ShellCallOutputItemOutputTypedDict(TypedDict):
@@ -45,32 +43,27 @@ class ShellCallOutputItemOutput(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["content", "exit_code"]
- nullable_fields = ["content", "exit_code"]
- null_default_fields = []
-
+ optional_fields = set(["content", "exit_code"])
+ nullable_fields = set(["content", "exit_code"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
-
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ val = serialized.get(k, serialized.get(n))
+ serialized.pop(k, serialized.pop(n, None))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
for k, v in serialized.items():
m[k] = v
@@ -114,37 +107,29 @@ class ShellCallOutputItem(BaseModel):
max_output_length: OptionalNullable[int] = UNSET
- status: Annotated[
- OptionalNullable[ShellCallOutputItemStatus],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ status: OptionalNullable[ShellCallOutputItemStatus] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["id", "max_output_length", "status"]
- nullable_fields = ["id", "max_output_length", "status"]
- null_default_fields = []
-
+ optional_fields = set(["id", "max_output_length", "status"])
+ nullable_fields = set(["id", "max_output_length", "status"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/shellservertool_openrouter.py b/src/openrouter/components/shellservertool_openrouter.py
index 304313b..0778136 100644
--- a/src/openrouter/components/shellservertool_openrouter.py
+++ b/src/openrouter/components/shellservertool_openrouter.py
@@ -2,7 +2,8 @@
from __future__ import annotations
from .shellservertoolconfig import ShellServerToolConfig, ShellServerToolConfigTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -25,3 +26,19 @@ class ShellServerToolOpenRouter(BaseModel):
parameters: Optional[ShellServerToolConfig] = None
r"""Configuration for the openrouter:shell 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/shellservertoolconfig.py b/src/openrouter/components/shellservertoolconfig.py
index 3568309..aaa115f 100644
--- a/src/openrouter/components/shellservertoolconfig.py
+++ b/src/openrouter/components/shellservertoolconfig.py
@@ -6,11 +6,10 @@ from .shellservertoolenvironment import (
ShellServerToolEnvironment,
ShellServerToolEnvironmentTypedDict,
)
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class ShellServerToolConfigTypedDict(TypedDict):
@@ -27,9 +26,7 @@ class ShellServerToolConfigTypedDict(TypedDict):
class ShellServerToolConfig(BaseModel):
r"""Configuration for the openrouter:shell server tool"""
- engine: Annotated[
- Optional[ShellServerToolEngine], PlainValidator(validate_open_enum(False))
- ] = None
+ engine: Optional[ShellServerToolEngine] = None
r"""Which shell engine to use. \"openrouter\" runs commands server-side in the OpenRouter sandbox. \"auto\" (default) keeps the provider's native hosted shell when available (OpenAI); on other providers the call is routed to the OpenRouter sandbox."""
environment: Optional[ShellServerToolEnvironment] = None
@@ -37,3 +34,19 @@ class ShellServerToolConfig(BaseModel):
sleep_after_seconds: Optional[int] = None
r"""How long (in seconds) the container stays warm after its last command before sleeping, freeing its capacity slot. Idle-based: each command renews the timer. Defaults to 900 (15 minutes); capped at 2592000 (30 days)."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["engine", "environment", "sleep_after_seconds"])
+ 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/speechrequest.py b/src/openrouter/components/speechrequest.py
index 96f8d13..cb7e1b2 100644
--- a/src/openrouter/components/speechrequest.py
+++ b/src/openrouter/components/speechrequest.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .provideroptions import ProviderOptions, ProviderOptionsTypedDict
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from pydantic import model_serializer
from typing import Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class SpeechRequestProviderTypedDict(TypedDict):
@@ -22,6 +21,22 @@ class SpeechRequestProvider(BaseModel):
options: Optional[ProviderOptions] = None
r"""Provider-specific options keyed by provider slug. Only options for the matched provider are forwarded; the rest are ignored. Unrecognized keys are silently dropped."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["options"])
+ 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
+
ResponseFormatEnum = Union[
Literal[
@@ -65,10 +80,24 @@ class SpeechRequest(BaseModel):
provider: Optional[SpeechRequestProvider] = None
r"""Provider-specific passthrough configuration"""
- response_format: Annotated[
- Optional[ResponseFormatEnum], PlainValidator(validate_open_enum(False))
- ] = "pcm"
+ response_format: Optional[ResponseFormatEnum] = "pcm"
r"""Audio output format"""
speed: Optional[float] = None
r"""Playback speed multiplier. Only used by models that support it (e.g. OpenAI TTS). Ignored by other providers."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["provider", "response_format", "speed"])
+ 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/storedprompttemplate.py b/src/openrouter/components/storedprompttemplate.py
index ffb7a43..a27d880 100644
--- a/src/openrouter/components/storedprompttemplate.py
+++ b/src/openrouter/components/storedprompttemplate.py
@@ -37,30 +37,25 @@ class StoredPromptTemplate(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["variables"]
- nullable_fields = ["variables"]
- null_default_fields = []
-
+ optional_fields = set(["variables"])
+ nullable_fields = set(["variables"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/streamevents.py b/src/openrouter/components/streamevents.py
index 0761a96..cc94aff 100644
--- a/src/openrouter/components/streamevents.py
+++ b/src/openrouter/components/streamevents.py
@@ -144,9 +144,12 @@ from .websearchcallsearchingevent import (
WebSearchCallSearchingEvent,
WebSearchCallSearchingEventTypedDict,
)
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import Union
+from functools import partial
+from openrouter.types import BaseModel
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, Literal, Union
from typing_extensions import Annotated, TypeAliasType
@@ -202,105 +205,120 @@ StreamEventsTypedDict = TypeAliasType(
r"""Union of all possible event types emitted during response streaming"""
+class UnknownStreamEvents(BaseModel):
+ r"""A StreamEvents variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ type: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_STREAM_EVENTS_VARIANTS: dict[str, Any] = {
+ "error": ErrorEvent,
+ "response.apply_patch_call_operation_diff.delta": ApplyPatchCallOperationDiffDeltaEvent,
+ "response.apply_patch_call_operation_diff.done": ApplyPatchCallOperationDiffDoneEvent,
+ "response.completed": StreamEventsResponseCompleted,
+ "response.content_part.added": ContentPartAddedEvent,
+ "response.content_part.done": ContentPartDoneEvent,
+ "response.created": OpenResponsesCreatedEvent,
+ "response.custom_tool_call_input.delta": CustomToolCallInputDeltaEvent,
+ "response.custom_tool_call_input.done": CustomToolCallInputDoneEvent,
+ "response.debug": DebugEvent,
+ "response.failed": StreamEventsResponseFailed,
+ "response.function_call_arguments.delta": FunctionCallArgsDeltaEvent,
+ "response.function_call_arguments.done": FunctionCallArgsDoneEvent,
+ "response.fusion_call.analysis.completed": FusionCallAnalysisCompletedEvent,
+ "response.fusion_call.analysis.in_progress": FusionCallAnalysisInProgressEvent,
+ "response.fusion_call.completed": FusionCallCompletedEvent,
+ "response.fusion_call.in_progress": FusionCallInProgressEvent,
+ "response.fusion_call.panel.added": FusionCallPanelAddedEvent,
+ "response.fusion_call.panel.completed": FusionCallPanelCompletedEvent,
+ "response.fusion_call.panel.delta": FusionCallPanelDeltaEvent,
+ "response.fusion_call.panel.failed": FusionCallPanelFailedEvent,
+ "response.fusion_call.panel.reasoning.delta": FusionCallPanelReasoningDeltaEvent,
+ "response.image_generation_call.completed": ImageGenCallCompletedEvent,
+ "response.image_generation_call.generating": ImageGenCallGeneratingEvent,
+ "response.image_generation_call.in_progress": ImageGenCallInProgressEvent,
+ "response.image_generation_call.partial_image": ImageGenCallPartialImageEvent,
+ "response.in_progress": OpenResponsesInProgressEvent,
+ "response.incomplete": StreamEventsResponseIncomplete,
+ "response.output_item.added": StreamEventsResponseOutputItemAdded,
+ "response.output_item.done": StreamEventsResponseOutputItemDone,
+ "response.output_text.annotation.added": AnnotationAddedEvent,
+ "response.output_text.delta": TextDeltaEvent,
+ "response.output_text.done": TextDoneEvent,
+ "response.reasoning_summary_part.added": ReasoningSummaryPartAddedEvent,
+ "response.reasoning_summary_part.done": ReasoningSummaryPartDoneEvent,
+ "response.reasoning_summary_text.delta": ReasoningSummaryTextDeltaEvent,
+ "response.reasoning_summary_text.done": ReasoningSummaryTextDoneEvent,
+ "response.reasoning_text.delta": ReasoningDeltaEvent,
+ "response.reasoning_text.done": ReasoningDoneEvent,
+ "response.refusal.delta": RefusalDeltaEvent,
+ "response.refusal.done": RefusalDoneEvent,
+ "response.web_search_call.completed": WebSearchCallCompletedEvent,
+ "response.web_search_call.in_progress": WebSearchCallInProgressEvent,
+ "response.web_search_call.searching": WebSearchCallSearchingEvent,
+}
+
+
StreamEvents = Annotated[
Union[
- Annotated[ErrorEvent, Tag("error")],
- Annotated[
- ApplyPatchCallOperationDiffDeltaEvent,
- Tag("response.apply_patch_call_operation_diff.delta"),
- ],
- Annotated[
- ApplyPatchCallOperationDiffDoneEvent,
- Tag("response.apply_patch_call_operation_diff.done"),
- ],
- Annotated[StreamEventsResponseCompleted, Tag("response.completed")],
- Annotated[ContentPartAddedEvent, Tag("response.content_part.added")],
- Annotated[ContentPartDoneEvent, Tag("response.content_part.done")],
- Annotated[OpenResponsesCreatedEvent, Tag("response.created")],
- Annotated[
- CustomToolCallInputDeltaEvent, Tag("response.custom_tool_call_input.delta")
- ],
- Annotated[
- CustomToolCallInputDoneEvent, Tag("response.custom_tool_call_input.done")
- ],
- Annotated[DebugEvent, Tag("response.debug")],
- Annotated[StreamEventsResponseFailed, Tag("response.failed")],
- Annotated[
- FunctionCallArgsDeltaEvent, Tag("response.function_call_arguments.delta")
- ],
- Annotated[
- FunctionCallArgsDoneEvent, Tag("response.function_call_arguments.done")
- ],
- Annotated[
- FusionCallAnalysisCompletedEvent,
- Tag("response.fusion_call.analysis.completed"),
- ],
- Annotated[
- FusionCallAnalysisInProgressEvent,
- Tag("response.fusion_call.analysis.in_progress"),
- ],
- Annotated[FusionCallCompletedEvent, Tag("response.fusion_call.completed")],
- Annotated[FusionCallInProgressEvent, Tag("response.fusion_call.in_progress")],
- Annotated[FusionCallPanelAddedEvent, Tag("response.fusion_call.panel.added")],
- Annotated[
- FusionCallPanelCompletedEvent, Tag("response.fusion_call.panel.completed")
- ],
- Annotated[FusionCallPanelDeltaEvent, Tag("response.fusion_call.panel.delta")],
- Annotated[FusionCallPanelFailedEvent, Tag("response.fusion_call.panel.failed")],
- Annotated[
- FusionCallPanelReasoningDeltaEvent,
- Tag("response.fusion_call.panel.reasoning.delta"),
- ],
- Annotated[
- ImageGenCallCompletedEvent, Tag("response.image_generation_call.completed")
- ],
- Annotated[
- ImageGenCallGeneratingEvent,
- Tag("response.image_generation_call.generating"),
- ],
- Annotated[
- ImageGenCallInProgressEvent,
- Tag("response.image_generation_call.in_progress"),
- ],
- Annotated[
- ImageGenCallPartialImageEvent,
- Tag("response.image_generation_call.partial_image"),
- ],
- Annotated[OpenResponsesInProgressEvent, Tag("response.in_progress")],
- Annotated[StreamEventsResponseIncomplete, Tag("response.incomplete")],
- Annotated[
- StreamEventsResponseOutputItemAdded, Tag("response.output_item.added")
- ],
- Annotated[StreamEventsResponseOutputItemDone, Tag("response.output_item.done")],
- Annotated[AnnotationAddedEvent, Tag("response.output_text.annotation.added")],
- Annotated[TextDeltaEvent, Tag("response.output_text.delta")],
- Annotated[TextDoneEvent, Tag("response.output_text.done")],
- Annotated[
- ReasoningSummaryPartAddedEvent, Tag("response.reasoning_summary_part.added")
- ],
- Annotated[
- ReasoningSummaryPartDoneEvent, Tag("response.reasoning_summary_part.done")
- ],
- Annotated[
- ReasoningSummaryTextDeltaEvent, Tag("response.reasoning_summary_text.delta")
- ],
- Annotated[
- ReasoningSummaryTextDoneEvent, Tag("response.reasoning_summary_text.done")
- ],
- Annotated[ReasoningDeltaEvent, Tag("response.reasoning_text.delta")],
- Annotated[ReasoningDoneEvent, Tag("response.reasoning_text.done")],
- Annotated[RefusalDeltaEvent, Tag("response.refusal.delta")],
- Annotated[RefusalDoneEvent, Tag("response.refusal.done")],
- Annotated[
- WebSearchCallCompletedEvent, Tag("response.web_search_call.completed")
- ],
- Annotated[
- WebSearchCallInProgressEvent, Tag("response.web_search_call.in_progress")
- ],
- Annotated[
- WebSearchCallSearchingEvent, Tag("response.web_search_call.searching")
- ],
+ ErrorEvent,
+ ApplyPatchCallOperationDiffDeltaEvent,
+ ApplyPatchCallOperationDiffDoneEvent,
+ StreamEventsResponseCompleted,
+ ContentPartAddedEvent,
+ ContentPartDoneEvent,
+ OpenResponsesCreatedEvent,
+ CustomToolCallInputDeltaEvent,
+ CustomToolCallInputDoneEvent,
+ DebugEvent,
+ StreamEventsResponseFailed,
+ FunctionCallArgsDeltaEvent,
+ FunctionCallArgsDoneEvent,
+ FusionCallAnalysisCompletedEvent,
+ FusionCallAnalysisInProgressEvent,
+ FusionCallCompletedEvent,
+ FusionCallInProgressEvent,
+ FusionCallPanelAddedEvent,
+ FusionCallPanelCompletedEvent,
+ FusionCallPanelDeltaEvent,
+ FusionCallPanelFailedEvent,
+ FusionCallPanelReasoningDeltaEvent,
+ ImageGenCallCompletedEvent,
+ ImageGenCallGeneratingEvent,
+ ImageGenCallInProgressEvent,
+ ImageGenCallPartialImageEvent,
+ OpenResponsesInProgressEvent,
+ StreamEventsResponseIncomplete,
+ StreamEventsResponseOutputItemAdded,
+ StreamEventsResponseOutputItemDone,
+ AnnotationAddedEvent,
+ TextDeltaEvent,
+ TextDoneEvent,
+ ReasoningSummaryPartAddedEvent,
+ ReasoningSummaryPartDoneEvent,
+ ReasoningSummaryTextDeltaEvent,
+ ReasoningSummaryTextDoneEvent,
+ ReasoningDeltaEvent,
+ ReasoningDoneEvent,
+ RefusalDeltaEvent,
+ RefusalDoneEvent,
+ WebSearchCallCompletedEvent,
+ WebSearchCallInProgressEvent,
+ WebSearchCallSearchingEvent,
+ UnknownStreamEvents,
],
- Discriminator(lambda m: get_discriminator(m, "type", "type")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="type",
+ variants=_STREAM_EVENTS_VARIANTS,
+ unknown_cls=UnknownStreamEvents,
+ union_name="StreamEvents",
+ )
+ ),
]
r"""Union of all possible event types emitted during response streaming"""
diff --git a/src/openrouter/components/streamlogprob.py b/src/openrouter/components/streamlogprob.py
index 44e3760..7c0cb66 100644
--- a/src/openrouter/components/streamlogprob.py
+++ b/src/openrouter/components/streamlogprob.py
@@ -5,8 +5,9 @@ from .streamlogprobtoplogprob import (
StreamLogprobTopLogprob,
StreamLogprobTopLogprobTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
+from pydantic import model_serializer
from typing import List, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -30,3 +31,25 @@ class StreamLogprob(BaseModel):
bytes_: Annotated[Optional[List[int]], pydantic.Field(alias="bytes")] = None
top_logprobs: Optional[List[StreamLogprobTopLogprob]] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["bytes", "top_logprobs"])
+ 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
+
+
+try:
+ StreamLogprob.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/streamlogprobtoplogprob.py b/src/openrouter/components/streamlogprobtoplogprob.py
index 49f4ae2..79b6d34 100644
--- a/src/openrouter/components/streamlogprobtoplogprob.py
+++ b/src/openrouter/components/streamlogprobtoplogprob.py
@@ -1,8 +1,9 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
import pydantic
+from pydantic import model_serializer
from typing import List, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -23,3 +24,25 @@ class StreamLogprobTopLogprob(BaseModel):
logprob: Optional[float] = None
token: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["bytes", "logprob", "token"])
+ 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
+
+
+try:
+ StreamLogprobTopLogprob.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/sttinputaudio.py b/src/openrouter/components/sttinputaudio.py
index d1b15b4..76c4b46 100644
--- a/src/openrouter/components/sttinputaudio.py
+++ b/src/openrouter/components/sttinputaudio.py
@@ -23,3 +23,9 @@ class STTInputAudio(BaseModel):
format_: Annotated[str, pydantic.Field(alias="format")]
r"""Audio format (e.g., wav, mp3, flac, m4a, ogg, webm, aac). Supported formats vary by provider."""
+
+
+try:
+ STTInputAudio.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/sttrequest.py b/src/openrouter/components/sttrequest.py
index 7900460..d5497b9 100644
--- a/src/openrouter/components/sttrequest.py
+++ b/src/openrouter/components/sttrequest.py
@@ -3,7 +3,8 @@
from __future__ import annotations
from .provideroptions import ProviderOptions, ProviderOptionsTypedDict
from .sttinputaudio import STTInputAudio, STTInputAudioTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import NotRequired, TypedDict
@@ -21,6 +22,22 @@ class STTRequestProvider(BaseModel):
options: Optional[ProviderOptions] = None
r"""Provider-specific options keyed by provider slug. Only options for the matched provider are forwarded; the rest are ignored. Unrecognized keys are silently dropped."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["options"])
+ 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
+
class STTRequestTypedDict(TypedDict):
r"""Speech-to-text request input. Accepts a JSON body with input_audio containing base64-encoded audio."""
@@ -54,3 +71,19 @@ class STTRequest(BaseModel):
temperature: Optional[float] = None
r"""Sampling temperature for transcription"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["language", "provider", "temperature"])
+ 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/sttresponse.py b/src/openrouter/components/sttresponse.py
index d50a8c4..19ff065 100644
--- a/src/openrouter/components/sttresponse.py
+++ b/src/openrouter/components/sttresponse.py
@@ -2,7 +2,8 @@
from __future__ import annotations
from .sttusage import STTUsage, STTUsageTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import NotRequired, TypedDict
@@ -24,3 +25,19 @@ class STTResponse(BaseModel):
usage: Optional[STTUsage] = None
r"""Aggregated usage statistics for the request"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["usage"])
+ 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/sttusage.py b/src/openrouter/components/sttusage.py
index c7661d1..1feb5db 100644
--- a/src/openrouter/components/sttusage.py
+++ b/src/openrouter/components/sttusage.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import NotRequired, TypedDict
@@ -38,3 +39,21 @@ class STTUsage(BaseModel):
total_tokens: Optional[int] = None
r"""Total number of tokens used (input + output)"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["cost", "input_tokens", "output_tokens", "seconds", "total_tokens"]
+ )
+ 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/subagentnestedtool.py b/src/openrouter/components/subagentnestedtool.py
index 8e1417b..4a62a2c 100644
--- a/src/openrouter/components/subagentnestedtool.py
+++ b/src/openrouter/components/subagentnestedtool.py
@@ -1,9 +1,9 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, Nullable
+from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
import pydantic
-from pydantic import ConfigDict
+from pydantic import ConfigDict, model_serializer
from typing import Any, Dict, Optional
from typing_extensions import NotRequired, TypedDict
@@ -34,3 +34,22 @@ class SubagentNestedTool(BaseModel):
@additional_properties.setter
def additional_properties(self, value):
self.__pydantic_extra__ = value # pyright: ignore[reportIncompatibleVariableOverride]
+
+ @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))
+ serialized.pop(k, serialized.pop(n, None))
+
+ if val != UNSET_SENTINEL:
+ if val is not None or k not in optional_fields:
+ m[k] = val
+ for k, v in serialized.items():
+ m[k] = v
+
+ return m
diff --git a/src/openrouter/components/subagentreasoning.py b/src/openrouter/components/subagentreasoning.py
index d2d5081..d34c619 100644
--- a/src/openrouter/components/subagentreasoning.py
+++ b/src/openrouter/components/subagentreasoning.py
@@ -1,11 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from pydantic import model_serializer
from typing import Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
SubagentReasoningEffort = Union[
@@ -35,10 +34,24 @@ class SubagentReasoningTypedDict(TypedDict):
class SubagentReasoning(BaseModel):
r"""Reasoning configuration forwarded to the subagent call. Use this to control reasoning effort and token budget for models that support extended thinking."""
- effort: Annotated[
- Optional[SubagentReasoningEffort], PlainValidator(validate_open_enum(False))
- ] = None
+ effort: Optional[SubagentReasoningEffort] = None
r"""Reasoning effort level for the subagent call."""
max_tokens: Optional[int] = None
r"""Maximum number of reasoning tokens the subagent may use. Accepted and validated but not yet forwarded to the subagent call."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["effort", "max_tokens"])
+ 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/subagentservertool_openrouter.py b/src/openrouter/components/subagentservertool_openrouter.py
index a33e769..51cf1e2 100644
--- a/src/openrouter/components/subagentservertool_openrouter.py
+++ b/src/openrouter/components/subagentservertool_openrouter.py
@@ -5,7 +5,8 @@ from .subagentservertoolconfig import (
SubagentServerToolConfig,
SubagentServerToolConfigTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -28,3 +29,19 @@ class SubagentServerToolOpenRouter(BaseModel):
parameters: Optional[SubagentServerToolConfig] = None
r"""Configuration for the openrouter:subagent 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/subagentservertoolconfig.py b/src/openrouter/components/subagentservertoolconfig.py
index 27bb1e4..eb9f276 100644
--- a/src/openrouter/components/subagentservertoolconfig.py
+++ b/src/openrouter/components/subagentservertoolconfig.py
@@ -3,7 +3,8 @@
from __future__ import annotations
from .subagentnestedtool import SubagentNestedTool, SubagentNestedToolTypedDict
from .subagentreasoning import SubagentReasoning, SubagentReasoningTypedDict
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Optional
from typing_extensions import NotRequired, TypedDict
@@ -50,3 +51,29 @@ class SubagentServerToolConfig(BaseModel):
tools: Optional[List[SubagentNestedTool]] = None
r"""Tools the subagent may use while executing a delegated task. The subagent runs as an agentic sub-agent over these tools, then returns its outcome. Only OpenRouter server tools are supported — function tools are rejected — and the list must not include the subagent tool itself."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "instructions",
+ "max_completion_tokens",
+ "max_tool_calls",
+ "model",
+ "reasoning",
+ "temperature",
+ "tools",
+ ]
+ )
+ 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/textextendedconfig.py b/src/openrouter/components/textextendedconfig.py
index 89224c7..ffae736 100644
--- a/src/openrouter/components/textextendedconfig.py
+++ b/src/openrouter/components/textextendedconfig.py
@@ -10,10 +10,8 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -44,36 +42,35 @@ class TextExtendedConfig(BaseModel):
format_: Annotated[Optional[Formats], pydantic.Field(alias="format")] = None
r"""Text response format configuration"""
- verbosity: Annotated[
- OptionalNullable[Verbosity], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ verbosity: OptionalNullable[Verbosity] = UNSET
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["format", "verbosity"]
- nullable_fields = ["verbosity"]
- null_default_fields = []
-
+ optional_fields = set(["format", "verbosity"])
+ nullable_fields = set(["verbosity"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
+
+
+try:
+ TextExtendedConfig.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/toomanyrequestsresponseerrordata.py b/src/openrouter/components/toomanyrequestsresponseerrordata.py
index 19fda10..2446e96 100644
--- a/src/openrouter/components/toomanyrequestsresponseerrordata.py
+++ b/src/openrouter/components/toomanyrequestsresponseerrordata.py
@@ -32,30 +32,25 @@ class TooManyRequestsResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/topproviderinfo.py b/src/openrouter/components/topproviderinfo.py
index 475bda8..6e119e6 100644
--- a/src/openrouter/components/topproviderinfo.py
+++ b/src/openrouter/components/topproviderinfo.py
@@ -37,30 +37,25 @@ class TopProviderInfo(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["context_length", "max_completion_tokens"]
- nullable_fields = ["context_length", "max_completion_tokens"]
- null_default_fields = []
-
+ optional_fields = set(["context_length", "max_completion_tokens"])
+ nullable_fields = set(["context_length", "max_completion_tokens"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/traceconfig.py b/src/openrouter/components/traceconfig.py
index 644b9be..5ef25d6 100644
--- a/src/openrouter/components/traceconfig.py
+++ b/src/openrouter/components/traceconfig.py
@@ -1,9 +1,9 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, Nullable
+from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL
import pydantic
-from pydantic import ConfigDict
+from pydantic import ConfigDict, model_serializer
from typing import Any, Dict, Optional
from typing_extensions import NotRequired, TypedDict
@@ -43,3 +43,24 @@ class TraceConfig(BaseModel):
@additional_properties.setter
def additional_properties(self, value):
self.__pydantic_extra__ = value # pyright: ignore[reportIncompatibleVariableOverride]
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["generation_name", "parent_span_id", "span_name", "trace_id", "trace_name"]
+ )
+ 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))
+ serialized.pop(k, serialized.pop(n, None))
+
+ if val != UNSET_SENTINEL:
+ if val is not None or k not in optional_fields:
+ m[k] = val
+ for k, v in serialized.items():
+ m[k] = v
+
+ return m
diff --git a/src/openrouter/components/unauthorizedresponseerrordata.py b/src/openrouter/components/unauthorizedresponseerrordata.py
index 0fc3c7c..b1fee6c 100644
--- a/src/openrouter/components/unauthorizedresponseerrordata.py
+++ b/src/openrouter/components/unauthorizedresponseerrordata.py
@@ -32,30 +32,25 @@ class UnauthorizedResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/unifiedbenchmarksaaitem.py b/src/openrouter/components/unifiedbenchmarksaaitem.py
index a01518d..9e6db28 100644
--- a/src/openrouter/components/unifiedbenchmarksaaitem.py
+++ b/src/openrouter/components/unifiedbenchmarksaaitem.py
@@ -56,35 +56,14 @@ class UnifiedBenchmarksAAItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = [
- "agentic_index",
- "coding_index",
- "intelligence_index",
- "pricing",
- ]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/unifiedbenchmarksdaitem.py b/src/openrouter/components/unifiedbenchmarksdaitem.py
index 0bb8159..bc4d5b6 100644
--- a/src/openrouter/components/unifiedbenchmarksdaitem.py
+++ b/src/openrouter/components/unifiedbenchmarksdaitem.py
@@ -40,36 +40,14 @@ class TournamentStats(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = [
- "first_place",
- "fourth_place",
- "second_place",
- "third_place",
- "total",
- ]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
@@ -131,30 +109,14 @@ class UnifiedBenchmarksDAItem(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["avg_generation_time_ms", "pricing"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/unifiedbenchmarksmeta.py b/src/openrouter/components/unifiedbenchmarksmeta.py
index 6106104..36d695e 100644
--- a/src/openrouter/components/unifiedbenchmarksmeta.py
+++ b/src/openrouter/components/unifiedbenchmarksmeta.py
@@ -2,11 +2,9 @@
from __future__ import annotations
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
UnifiedBenchmarksMetaSource = Union[
@@ -50,9 +48,7 @@ class UnifiedBenchmarksMeta(BaseModel):
model_count: int
r"""Number of unique models in the response."""
- source: Annotated[
- Nullable[UnifiedBenchmarksMetaSource], PlainValidator(validate_open_enum(False))
- ]
+ source: Nullable[UnifiedBenchmarksMetaSource]
r"""The source filter applied, or null when all sources are returned."""
source_url: Nullable[str]
@@ -66,30 +62,14 @@ class UnifiedBenchmarksMeta(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["citation", "source", "source_url", "task_type"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/unifiedbenchmarksresponse.py b/src/openrouter/components/unifiedbenchmarksresponse.py
index 8f06422..7145a08 100644
--- a/src/openrouter/components/unifiedbenchmarksresponse.py
+++ b/src/openrouter/components/unifiedbenchmarksresponse.py
@@ -10,10 +10,12 @@ from .unifiedbenchmarksdaitem import (
UnifiedBenchmarksDAItemTypedDict,
)
from .unifiedbenchmarksmeta import UnifiedBenchmarksMeta, UnifiedBenchmarksMetaTypedDict
+from functools import partial
from openrouter.types import BaseModel
-from openrouter.utils import get_discriminator
-from pydantic import Discriminator, Tag
-from typing import List, Union
+from openrouter.utils.unions import parse_open_union
+from pydantic import ConfigDict
+from pydantic.functional_validators import BeforeValidator
+from typing import Any, List, Literal, Union
from typing_extensions import Annotated, TypeAliasType, TypedDict
@@ -23,12 +25,37 @@ UnifiedBenchmarksResponseDataTypedDict = TypeAliasType(
)
+class UnknownUnifiedBenchmarksResponseData(BaseModel):
+ r"""A UnifiedBenchmarksResponseData variant the SDK doesn't recognize. Preserves the raw payload."""
+
+ source: Literal["UNKNOWN"] = "UNKNOWN"
+ raw: Any
+ is_unknown: Literal[True] = True
+
+ model_config = ConfigDict(frozen=True)
+
+
+_UNIFIED_BENCHMARKS_RESPONSE_DATA_VARIANTS: dict[str, Any] = {
+ "artificial-analysis": UnifiedBenchmarksAAItem,
+ "design-arena": UnifiedBenchmarksDAItem,
+}
+
+
UnifiedBenchmarksResponseData = Annotated[
Union[
- Annotated[UnifiedBenchmarksAAItem, Tag("artificial-analysis")],
- Annotated[UnifiedBenchmarksDAItem, Tag("design-arena")],
+ UnifiedBenchmarksAAItem,
+ UnifiedBenchmarksDAItem,
+ UnknownUnifiedBenchmarksResponseData,
],
- Discriminator(lambda m: get_discriminator(m, "source", "source")),
+ BeforeValidator(
+ partial(
+ parse_open_union,
+ disc_key="source",
+ variants=_UNIFIED_BENCHMARKS_RESPONSE_DATA_VARIANTS,
+ unknown_cls=UnknownUnifiedBenchmarksResponseData,
+ union_name="UnifiedBenchmarksResponseData",
+ )
+ ),
]
diff --git a/src/openrouter/components/unprocessableentityresponseerrordata.py b/src/openrouter/components/unprocessableentityresponseerrordata.py
index 1c70ab3..72a7e1d 100644
--- a/src/openrouter/components/unprocessableentityresponseerrordata.py
+++ b/src/openrouter/components/unprocessableentityresponseerrordata.py
@@ -32,30 +32,25 @@ class UnprocessableEntityResponseErrorData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["metadata"]
- nullable_fields = ["metadata"]
- null_default_fields = []
-
+ optional_fields = set(["metadata"])
+ nullable_fields = set(["metadata"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/updatebyokkeyrequest.py b/src/openrouter/components/updatebyokkeyrequest.py
index 9fa7cf6..865262a 100644
--- a/src/openrouter/components/updatebyokkeyrequest.py
+++ b/src/openrouter/components/updatebyokkeyrequest.py
@@ -49,37 +49,34 @@ class UpdateBYOKKeyRequest(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "allowed_models",
- "allowed_user_ids",
- "disabled",
- "is_fallback",
- "key",
- "name",
- ]
- nullable_fields = ["allowed_models", "allowed_user_ids", "name"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "allowed_models",
+ "allowed_user_ids",
+ "disabled",
+ "is_fallback",
+ "key",
+ "name",
+ ]
+ )
+ nullable_fields = set(["allowed_models", "allowed_user_ids", "name"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/updateguardrailrequest.py b/src/openrouter/components/updateguardrailrequest.py
index ec5240a..d80389a 100644
--- a/src/openrouter/components/updateguardrailrequest.py
+++ b/src/openrouter/components/updateguardrailrequest.py
@@ -14,10 +14,8 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -107,68 +105,65 @@ class UpdateGuardrailRequest(BaseModel):
name: Optional[str] = None
r"""New name for the guardrail"""
- reset_interval: Annotated[
- OptionalNullable[GuardrailInterval], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ reset_interval: OptionalNullable[GuardrailInterval] = UNSET
r"""Interval at which the limit resets (daily, weekly, monthly)"""
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "allowed_models",
- "allowed_providers",
- "content_filter_builtins",
- "content_filters",
- "description",
- "enforce_zdr",
- "enforce_zdr_anthropic",
- "enforce_zdr_google",
- "enforce_zdr_openai",
- "enforce_zdr_other",
- "ignored_models",
- "ignored_providers",
- "limit_usd",
- "name",
- "reset_interval",
- ]
- nullable_fields = [
- "allowed_models",
- "allowed_providers",
- "content_filter_builtins",
- "content_filters",
- "description",
- "enforce_zdr",
- "enforce_zdr_anthropic",
- "enforce_zdr_google",
- "enforce_zdr_openai",
- "enforce_zdr_other",
- "ignored_models",
- "ignored_providers",
- "limit_usd",
- "reset_interval",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "allowed_models",
+ "allowed_providers",
+ "content_filter_builtins",
+ "content_filters",
+ "description",
+ "enforce_zdr",
+ "enforce_zdr_anthropic",
+ "enforce_zdr_google",
+ "enforce_zdr_openai",
+ "enforce_zdr_other",
+ "ignored_models",
+ "ignored_providers",
+ "limit_usd",
+ "name",
+ "reset_interval",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "allowed_models",
+ "allowed_providers",
+ "content_filter_builtins",
+ "content_filters",
+ "description",
+ "enforce_zdr",
+ "enforce_zdr_anthropic",
+ "enforce_zdr_google",
+ "enforce_zdr_openai",
+ "enforce_zdr_other",
+ "ignored_models",
+ "ignored_providers",
+ "limit_usd",
+ "reset_interval",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/updateobservabilitydestinationrequest.py b/src/openrouter/components/updateobservabilitydestinationrequest.py
index 1709ecf..a344284 100644
--- a/src/openrouter/components/updateobservabilitydestinationrequest.py
+++ b/src/openrouter/components/updateobservabilitydestinationrequest.py
@@ -56,38 +56,35 @@ class UpdateObservabilityDestinationRequest(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "api_key_hashes",
- "config",
- "enabled",
- "filter_rules",
- "name",
- "privacy_mode",
- "sampling_rate",
- ]
- nullable_fields = ["api_key_hashes", "filter_rules"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "api_key_hashes",
+ "config",
+ "enabled",
+ "filter_rules",
+ "name",
+ "privacy_mode",
+ "sampling_rate",
+ ]
+ )
+ nullable_fields = set(["api_key_hashes", "filter_rules"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/updateworkspacerequest.py b/src/openrouter/components/updateworkspacerequest.py
index 8271be1..f1569fc 100644
--- a/src/openrouter/components/updateworkspacerequest.py
+++ b/src/openrouter/components/updateworkspacerequest.py
@@ -74,48 +74,47 @@ class UpdateWorkspaceRequest(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "default_image_model",
- "default_provider_sort",
- "default_text_model",
- "description",
- "io_logging_api_key_ids",
- "io_logging_sampling_rate",
- "is_data_discount_logging_enabled",
- "is_observability_broadcast_enabled",
- "is_observability_io_logging_enabled",
- "name",
- "slug",
- ]
- nullable_fields = [
- "default_image_model",
- "default_provider_sort",
- "default_text_model",
- "description",
- "io_logging_api_key_ids",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "default_image_model",
+ "default_provider_sort",
+ "default_text_model",
+ "description",
+ "io_logging_api_key_ids",
+ "io_logging_sampling_rate",
+ "is_data_discount_logging_enabled",
+ "is_observability_broadcast_enabled",
+ "is_observability_io_logging_enabled",
+ "name",
+ "slug",
+ ]
+ )
+ nullable_fields = set(
+ [
+ "default_image_model",
+ "default_provider_sort",
+ "default_text_model",
+ "description",
+ "io_logging_api_key_ids",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/urlcitation.py b/src/openrouter/components/urlcitation.py
index 04aa99c..a0491cc 100644
--- a/src/openrouter/components/urlcitation.py
+++ b/src/openrouter/components/urlcitation.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -30,3 +31,19 @@ class URLCitation(BaseModel):
url: str
content: Optional[str] = None
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["content"])
+ 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/usage.py b/src/openrouter/components/usage.py
index b140a02..62c5e14 100644
--- a/src/openrouter/components/usage.py
+++ b/src/openrouter/components/usage.py
@@ -44,31 +44,26 @@ class UsageCostDetails(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["upstream_inference_cost"]
- nullable_fields = ["upstream_inference_cost"]
- null_default_fields = []
-
+ optional_fields = set(["upstream_inference_cost"])
+ nullable_fields = set(["upstream_inference_cost"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -111,30 +106,25 @@ class Usage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["cost", "cost_details", "is_byok"]
- nullable_fields = ["cost"]
- null_default_fields = []
-
+ optional_fields = set(["cost", "cost_details", "is_byok"])
+ nullable_fields = set(["cost"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/videogenerationrequest.py b/src/openrouter/components/videogenerationrequest.py
index 230d487..1f383a9 100644
--- a/src/openrouter/components/videogenerationrequest.py
+++ b/src/openrouter/components/videogenerationrequest.py
@@ -3,10 +3,9 @@
from __future__ import annotations
from .frameimage import FrameImage, FrameImageTypedDict
from .inputreference import InputReference, InputReferenceTypedDict
-from openrouter.types import BaseModel, Nullable, UnrecognizedStr
-from openrouter.utils import validate_open_enum
+from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Any, Dict, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -444,6 +443,145 @@ class VideoGenerationRequestOptions(BaseModel):
Optional[Dict[str, Nullable[Any]]], pydantic.Field(alias="z-ai")
] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "01ai",
+ "ai21",
+ "aion-labs",
+ "akashml",
+ "alibaba",
+ "amazon-bedrock",
+ "amazon-nova",
+ "ambient",
+ "anthropic",
+ "anyscale",
+ "arcee-ai",
+ "atlas-cloud",
+ "atoma",
+ "avian",
+ "azure",
+ "baidu",
+ "baseten",
+ "black-forest-labs",
+ "byteplus",
+ "centml",
+ "cerebras",
+ "chutes",
+ "cirrascale",
+ "clarifai",
+ "cloudflare",
+ "cohere",
+ "crofai",
+ "crucible",
+ "crusoe",
+ "darkbloom",
+ "decart",
+ "deepinfra",
+ "deepseek",
+ "dekallm",
+ "digitalocean",
+ "enfer",
+ "fake-provider",
+ "featherless",
+ "fireworks",
+ "friendli",
+ "gmicloud",
+ "google-ai-studio",
+ "google-vertex",
+ "gopomelo",
+ "groq",
+ "heygen",
+ "huggingface",
+ "hyperbolic",
+ "hyperbolic-quantized",
+ "inception",
+ "inceptron",
+ "inferact-vllm",
+ "inference-net",
+ "infermatic",
+ "inflection",
+ "inocloud",
+ "io-net",
+ "ionstream",
+ "klusterai",
+ "lambda",
+ "lepton",
+ "liquid",
+ "lynn",
+ "lynn-private",
+ "mancer",
+ "mancer-old",
+ "mara",
+ "meta",
+ "minimax",
+ "mistral",
+ "modal",
+ "modelrun",
+ "modular",
+ "moonshotai",
+ "morph",
+ "ncompass",
+ "nebius",
+ "nex-agi",
+ "nextbit",
+ "nineteen",
+ "novita",
+ "nvidia",
+ "octoai",
+ "open-inference",
+ "openai",
+ "parasail",
+ "perceptron",
+ "perplexity",
+ "phala",
+ "poolside",
+ "quiver",
+ "recraft",
+ "recursal",
+ "reflection",
+ "reka",
+ "relace",
+ "replicate",
+ "sakana-ai",
+ "sambanova",
+ "sambanova-cloaked",
+ "seed",
+ "sf-compute",
+ "siliconflow",
+ "sourceful",
+ "stealth",
+ "stepfun",
+ "streamlake",
+ "switchpoint",
+ "targon",
+ "tenstorrent",
+ "together",
+ "together-lite",
+ "ubicloud",
+ "upstage",
+ "venice",
+ "wafer",
+ "wandb",
+ "xai",
+ "xiaomi",
+ "z-ai",
+ ]
+ )
+ 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
+
class VideoGenerationRequestProviderTypedDict(TypedDict):
r"""Provider-specific passthrough configuration"""
@@ -456,6 +594,22 @@ class VideoGenerationRequestProvider(BaseModel):
options: Optional[VideoGenerationRequestOptions] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["options"])
+ 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
+
VideoGenerationRequestResolution = Union[
Literal[
@@ -501,10 +655,7 @@ class VideoGenerationRequest(BaseModel):
prompt: str
- aspect_ratio: Annotated[
- Optional[VideoGenerationRequestAspectRatio],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ aspect_ratio: Optional[VideoGenerationRequestAspectRatio] = None
r"""Aspect ratio of the generated video"""
callback_url: Optional[str] = None
@@ -525,10 +676,7 @@ class VideoGenerationRequest(BaseModel):
provider: Optional[VideoGenerationRequestProvider] = None
r"""Provider-specific passthrough configuration"""
- resolution: Annotated[
- Optional[VideoGenerationRequestResolution],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ resolution: Optional[VideoGenerationRequestResolution] = None
r"""Resolution of the generated video"""
seed: Optional[int] = None
@@ -536,3 +684,38 @@ class VideoGenerationRequest(BaseModel):
size: Optional[str] = None
r"""Exact pixel dimensions of the generated video in \"WIDTHxHEIGHT\" format (e.g. \"1280x720\"). Interchangeable with resolution + aspect_ratio."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "aspect_ratio",
+ "callback_url",
+ "duration",
+ "frame_images",
+ "generate_audio",
+ "input_references",
+ "provider",
+ "resolution",
+ "seed",
+ "size",
+ ]
+ )
+ 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
+
+
+try:
+ VideoGenerationRequestOptions.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/components/videogenerationresponse.py b/src/openrouter/components/videogenerationresponse.py
index ab182a8..2b0301b 100644
--- a/src/openrouter/components/videogenerationresponse.py
+++ b/src/openrouter/components/videogenerationresponse.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .videogenerationusage import VideoGenerationUsage, VideoGenerationUsageTypedDict
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from pydantic import model_serializer
from typing import List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
VideoGenerationResponseStatus = Union[
@@ -39,9 +38,7 @@ class VideoGenerationResponse(BaseModel):
polling_url: str
- status: Annotated[
- VideoGenerationResponseStatus, PlainValidator(validate_open_enum(False))
- ]
+ status: VideoGenerationResponseStatus
error: Optional[str] = None
@@ -52,3 +49,19 @@ class VideoGenerationResponse(BaseModel):
usage: Optional[VideoGenerationUsage] = None
r"""Usage and cost information for the video generation. Available once the job has completed."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["error", "generation_id", "unsigned_urls", "usage"])
+ 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/videogenerationusage.py b/src/openrouter/components/videogenerationusage.py
index 2b555be..c6f80ef 100644
--- a/src/openrouter/components/videogenerationusage.py
+++ b/src/openrouter/components/videogenerationusage.py
@@ -33,30 +33,25 @@ class VideoGenerationUsage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["cost", "is_byok"]
- nullable_fields = ["cost"]
- null_default_fields = []
-
+ optional_fields = set(["cost", "is_byok"])
+ nullable_fields = set(["cost"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/videomodel.py b/src/openrouter/components/videomodel.py
index 04170e1..b5760b3 100644
--- a/src/openrouter/components/videomodel.py
+++ b/src/openrouter/components/videomodel.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Dict, List, Literal, Optional, Union
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
SupportedAspectRatio = Union[
@@ -152,27 +150,19 @@ class VideoModel(BaseModel):
seed: Nullable[bool]
r"""Whether the model supports deterministic generation via seed parameter"""
- supported_aspect_ratios: Nullable[
- List[Annotated[SupportedAspectRatio, PlainValidator(validate_open_enum(False))]]
- ]
+ supported_aspect_ratios: Nullable[List[SupportedAspectRatio]]
r"""Supported output aspect ratios"""
supported_durations: Nullable[List[int]]
r"""Supported video durations in seconds"""
- supported_frame_images: Nullable[
- List[Annotated[SupportedFrameImage, PlainValidator(validate_open_enum(False))]]
- ]
+ supported_frame_images: Nullable[List[SupportedFrameImage]]
r"""Supported frame image types (e.g. first_frame, last_frame)"""
- supported_resolutions: Nullable[
- List[Annotated[SupportedResolution, PlainValidator(validate_open_enum(False))]]
- ]
+ supported_resolutions: Nullable[List[SupportedResolution]]
r"""Supported output resolutions"""
- supported_sizes: Nullable[
- List[Annotated[SupportedSize, PlainValidator(validate_open_enum(False))]]
- ]
+ supported_sizes: Nullable[List[SupportedSize]]
r"""Supported output sizes (width x height)"""
description: Optional[str] = None
@@ -186,40 +176,37 @@ class VideoModel(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["description", "hugging_face_id", "pricing_skus"]
- nullable_fields = [
- "generate_audio",
- "hugging_face_id",
- "pricing_skus",
- "seed",
- "supported_aspect_ratios",
- "supported_durations",
- "supported_frame_images",
- "supported_resolutions",
- "supported_sizes",
- ]
- null_default_fields = []
-
+ optional_fields = set(["description", "hugging_face_id", "pricing_skus"])
+ nullable_fields = set(
+ [
+ "generate_audio",
+ "hugging_face_id",
+ "pricing_skus",
+ "seed",
+ "supported_aspect_ratios",
+ "supported_durations",
+ "supported_frame_images",
+ "supported_resolutions",
+ "supported_sizes",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/webfetchplugin.py b/src/openrouter/components/webfetchplugin.py
index 51bb7ff..b5b9fd4 100644
--- a/src/openrouter/components/webfetchplugin.py
+++ b/src/openrouter/components/webfetchplugin.py
@@ -1,7 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -35,3 +36,21 @@ class WebFetchPlugin(BaseModel):
max_uses: Optional[int] = None
r"""Maximum number of web fetches per request. Once exceeded, the tool returns an error."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["allowed_domains", "blocked_domains", "max_content_tokens", "max_uses"]
+ )
+ 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/webfetchservertool.py b/src/openrouter/components/webfetchservertool.py
index cbd34b3..41281b8 100644
--- a/src/openrouter/components/webfetchservertool.py
+++ b/src/openrouter/components/webfetchservertool.py
@@ -5,7 +5,8 @@ from .webfetchservertoolconfig import (
WebFetchServerToolConfig,
WebFetchServerToolConfigTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -28,3 +29,19 @@ class WebFetchServerTool(BaseModel):
parameters: Optional[WebFetchServerToolConfig] = None
r"""Configuration for the openrouter:web_fetch 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/webfetchservertoolconfig.py b/src/openrouter/components/webfetchservertoolconfig.py
index 9b8cc5c..ba34507 100644
--- a/src/openrouter/components/webfetchservertoolconfig.py
+++ b/src/openrouter/components/webfetchservertoolconfig.py
@@ -2,11 +2,10 @@
from __future__ import annotations
from .webfetchengineenum import WebFetchEngineEnum
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class WebFetchServerToolConfigTypedDict(TypedDict):
@@ -33,9 +32,7 @@ class WebFetchServerToolConfig(BaseModel):
blocked_domains: Optional[List[str]] = None
r"""Never fetch from these domains."""
- engine: Annotated[
- Optional[WebFetchEngineEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ engine: Optional[WebFetchEngineEnum] = None
r"""Which fetch engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in fetch. \"exa\" uses Exa Contents API. \"openrouter\" uses direct HTTP fetch. \"firecrawl\" uses Firecrawl scrape (requires BYOK). \"parallel\" uses the Parallel extract API."""
max_content_tokens: Optional[int] = None
@@ -43,3 +40,27 @@ class WebFetchServerToolConfig(BaseModel):
max_uses: Optional[int] = None
r"""Maximum number of web fetches per request. Once exceeded, the tool returns an error."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "allowed_domains",
+ "blocked_domains",
+ "engine",
+ "max_content_tokens",
+ "max_uses",
+ ]
+ )
+ 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/websearchconfig.py b/src/openrouter/components/websearchconfig.py
index 1732661..7478eed 100644
--- a/src/openrouter/components/websearchconfig.py
+++ b/src/openrouter/components/websearchconfig.py
@@ -7,11 +7,10 @@ from .websearchuserlocationservertool import (
WebSearchUserLocationServerTool,
WebSearchUserLocationServerToolTypedDict,
)
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class WebSearchConfigTypedDict(TypedDict):
@@ -37,9 +36,7 @@ class WebSearchConfig(BaseModel):
allowed_domains: Optional[List[str]] = None
r"""Limit search results to these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, and most native providers (Anthropic, OpenAI, xAI). Cannot be used with excluded_domains."""
- engine: Annotated[
- Optional[WebSearchEngineEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ engine: Optional[WebSearchEngineEnum] = None
r"""Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API. \"perplexity\" uses the Perplexity Search API (raw ranked results)."""
excluded_domains: Optional[List[str]] = None
@@ -54,10 +51,35 @@ class WebSearchConfig(BaseModel):
max_total_results: Optional[int] = None
r"""Maximum total number of search results across all search calls in a single request. Once this limit is reached, the tool will stop returning new results. Useful for controlling cost and context size in agentic loops. Defaults to 50 when not specified."""
- search_context_size: Annotated[
- Optional[SearchQualityLevel], PlainValidator(validate_open_enum(False))
- ] = None
+ search_context_size: Optional[SearchQualityLevel] = None
r"""How much context to retrieve per result. Applies to Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, pins a fixed per-result character cap (low=5,000, medium=15,000, high=30,000); when omitted, Exa picks an adaptive size per query and document (typically ~2,000–4,000 characters per result). For Parallel, controls the total characters across all results; when omitted, Parallel uses its own default size. For Perplexity, maps directly to the Search API's native search_context_size parameter. Overridden by `max_characters` when both are set."""
user_location: Optional[WebSearchUserLocationServerTool] = None
r"""Approximate user location for location-biased results."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "allowed_domains",
+ "engine",
+ "excluded_domains",
+ "max_characters",
+ "max_results",
+ "max_total_results",
+ "search_context_size",
+ "user_location",
+ ]
+ )
+ 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/websearchdomainfilter.py b/src/openrouter/components/websearchdomainfilter.py
index 64d3c5f..20bd1b8 100644
--- a/src/openrouter/components/websearchdomainfilter.py
+++ b/src/openrouter/components/websearchdomainfilter.py
@@ -25,30 +25,25 @@ class WebSearchDomainFilter(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["allowed_domains", "excluded_domains"]
- nullable_fields = ["allowed_domains", "excluded_domains"]
- null_default_fields = []
-
+ optional_fields = set(["allowed_domains", "excluded_domains"])
+ nullable_fields = set(["allowed_domains", "excluded_domains"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/websearchplugin.py b/src/openrouter/components/websearchplugin.py
index 3c8e46d..3240378 100644
--- a/src/openrouter/components/websearchplugin.py
+++ b/src/openrouter/components/websearchplugin.py
@@ -9,11 +9,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
WebSearchPluginID = Literal["web",]
@@ -47,31 +45,26 @@ class UserLocation(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["city", "country", "region", "timezone"]
- nullable_fields = ["city", "country", "region", "timezone"]
- null_default_fields = []
-
+ optional_fields = set(["city", "country", "region", "timezone"])
+ nullable_fields = set(["city", "country", "region", "timezone"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -99,9 +92,7 @@ class WebSearchPlugin(BaseModel):
enabled: Optional[bool] = None
r"""Set to false to disable the web-search plugin for this request. Defaults to true."""
- engine: Annotated[
- Optional[WebSearchEngine], PlainValidator(validate_open_enum(False))
- ] = None
+ engine: Optional[WebSearchEngine] = None
r"""The search engine to use for web search."""
exclude_domains: Optional[List[str]] = None
@@ -121,39 +112,36 @@ class WebSearchPlugin(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "enabled",
- "engine",
- "exclude_domains",
- "include_domains",
- "max_results",
- "max_uses",
- "search_prompt",
- "user_location",
- ]
- nullable_fields = ["user_location"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "enabled",
+ "engine",
+ "exclude_domains",
+ "include_domains",
+ "max_results",
+ "max_uses",
+ "search_prompt",
+ "user_location",
+ ]
+ )
+ nullable_fields = set(["user_location"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/websearchservertool.py b/src/openrouter/components/websearchservertool.py
index bd0d3e0..353136f 100644
--- a/src/openrouter/components/websearchservertool.py
+++ b/src/openrouter/components/websearchservertool.py
@@ -12,11 +12,9 @@ from openrouter.types import (
UNSET,
UNSET_SENTINEL,
)
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
WebSearchServerToolType = Literal["web_search_2025_08_26",]
@@ -42,9 +40,7 @@ class WebSearchServerTool(BaseModel):
type: WebSearchServerToolType
- engine: Annotated[
- Optional[WebSearchEngineEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ engine: Optional[WebSearchEngineEnum] = None
r"""Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API. \"perplexity\" uses the Perplexity Search API (raw ranked results)."""
filters: OptionalNullable[WebSearchDomainFilter] = UNSET
@@ -52,9 +48,7 @@ class WebSearchServerTool(BaseModel):
max_results: Optional[int] = None
r"""Maximum number of search results to return per search call. Defaults to 5. Applies to Exa, Firecrawl, Parallel, and Perplexity engines; ignored with native provider search. Perplexity supports a maximum of 20; values above 20 are clamped."""
- search_context_size: Annotated[
- Optional[SearchContextSizeEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ search_context_size: Optional[SearchContextSizeEnum] = None
r"""Size of the search context for web search tools"""
user_location: OptionalNullable[WebSearchUserLocation] = UNSET
@@ -62,36 +56,27 @@ class WebSearchServerTool(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "engine",
- "filters",
- "max_results",
- "search_context_size",
- "user_location",
- ]
- nullable_fields = ["filters", "user_location"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["engine", "filters", "max_results", "search_context_size", "user_location"]
+ )
+ nullable_fields = set(["filters", "user_location"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/websearchservertool_openrouter.py b/src/openrouter/components/websearchservertool_openrouter.py
index c5717ed..cac816d 100644
--- a/src/openrouter/components/websearchservertool_openrouter.py
+++ b/src/openrouter/components/websearchservertool_openrouter.py
@@ -5,7 +5,8 @@ from .websearchservertoolconfig import (
WebSearchServerToolConfig,
WebSearchServerToolConfigTypedDict,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import NotRequired, TypedDict
@@ -28,3 +29,19 @@ class WebSearchServerToolOpenRouter(BaseModel):
parameters: Optional[WebSearchServerToolConfig] = None
r"""Configuration for the openrouter:web_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/websearchservertoolconfig.py b/src/openrouter/components/websearchservertoolconfig.py
index f48839e..8928f49 100644
--- a/src/openrouter/components/websearchservertoolconfig.py
+++ b/src/openrouter/components/websearchservertoolconfig.py
@@ -7,11 +7,10 @@ from .websearchuserlocationservertool import (
WebSearchUserLocationServerTool,
WebSearchUserLocationServerToolTypedDict,
)
-from openrouter.types import BaseModel
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from pydantic import model_serializer
from typing import List, Optional
-from typing_extensions import Annotated, NotRequired, TypedDict
+from typing_extensions import NotRequired, TypedDict
class WebSearchServerToolConfigTypedDict(TypedDict):
@@ -41,9 +40,7 @@ class WebSearchServerToolConfig(BaseModel):
allowed_domains: Optional[List[str]] = None
r"""Limit search results to these domains. Supported by Exa, Firecrawl, Parallel, Perplexity, and most native providers (Anthropic, OpenAI, xAI). Cannot be used with excluded_domains."""
- engine: Annotated[
- Optional[WebSearchEngineEnum], PlainValidator(validate_open_enum(False))
- ] = None
+ engine: Optional[WebSearchEngineEnum] = None
r"""Which search engine to use. \"auto\" (default) uses native if the provider supports it, otherwise Exa. \"native\" forces the provider's built-in search. \"exa\" forces the Exa search API. \"firecrawl\" uses Firecrawl (requires BYOK). \"parallel\" uses the Parallel search API. \"perplexity\" uses the Perplexity Search API (raw ranked results)."""
excluded_domains: Optional[List[str]] = None
@@ -58,10 +55,35 @@ class WebSearchServerToolConfig(BaseModel):
max_total_results: Optional[int] = None
r"""Maximum total number of search results across all search calls in a single request. Once this limit is reached, the tool will stop returning new results. Useful for controlling cost and context size in agentic loops. Defaults to 50 when not specified."""
- search_context_size: Annotated[
- Optional[SearchQualityLevel], PlainValidator(validate_open_enum(False))
- ] = None
+ search_context_size: Optional[SearchQualityLevel] = None
r"""How much context to retrieve per result. Applies to Exa, Parallel, and Perplexity engines; ignored with native provider search and Firecrawl. For Exa, pins a fixed per-result character cap (low=5,000, medium=15,000, high=30,000); when omitted, Exa picks an adaptive size per query and document (typically ~2,000–4,000 characters per result). For Parallel, controls the total characters across all results; when omitted, Parallel uses its own default size. For Perplexity, maps directly to the Search API's native search_context_size parameter. Overridden by `max_characters` when both are set."""
user_location: Optional[WebSearchUserLocationServerTool] = None
r"""Approximate user location for location-biased results."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "allowed_domains",
+ "engine",
+ "excluded_domains",
+ "max_characters",
+ "max_results",
+ "max_total_results",
+ "search_context_size",
+ "user_location",
+ ]
+ )
+ 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/websearchuserlocation.py b/src/openrouter/components/websearchuserlocation.py
index bdb5b03..c2eacfc 100644
--- a/src/openrouter/components/websearchuserlocation.py
+++ b/src/openrouter/components/websearchuserlocation.py
@@ -41,30 +41,25 @@ class WebSearchUserLocation(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["city", "country", "region", "timezone", "type"]
- nullable_fields = ["city", "country", "region", "timezone"]
- null_default_fields = []
-
+ optional_fields = set(["city", "country", "region", "timezone", "type"])
+ nullable_fields = set(["city", "country", "region", "timezone"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/websearchuserlocationservertool.py b/src/openrouter/components/websearchuserlocationservertool.py
index bf4bb70..fda00eb 100644
--- a/src/openrouter/components/websearchuserlocationservertool.py
+++ b/src/openrouter/components/websearchuserlocationservertool.py
@@ -41,30 +41,25 @@ class WebSearchUserLocationServerTool(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["city", "country", "region", "timezone", "type"]
- nullable_fields = ["city", "country", "region", "timezone"]
- null_default_fields = []
-
+ optional_fields = set(["city", "country", "region", "timezone", "type"])
+ nullable_fields = set(["city", "country", "region", "timezone"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/components/workspace.py b/src/openrouter/components/workspace.py
index 583db0c..14a3bf1 100644
--- a/src/openrouter/components/workspace.py
+++ b/src/openrouter/components/workspace.py
@@ -88,38 +88,14 @@ class Workspace(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = [
- "created_by",
- "default_image_model",
- "default_provider_sort",
- "default_text_model",
- "description",
- "io_logging_api_key_ids",
- "updated_at",
- ]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/workspacebudget.py b/src/openrouter/components/workspacebudget.py
index 4f7d479..f5b0bc9 100644
--- a/src/openrouter/components/workspacebudget.py
+++ b/src/openrouter/components/workspacebudget.py
@@ -2,11 +2,9 @@
from __future__ import annotations
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
-from openrouter.utils import validate_open_enum
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
ResetInterval = Union[
@@ -45,9 +43,7 @@ class WorkspaceBudget(BaseModel):
limit_usd: float
r"""Spending limit in USD for this interval"""
- reset_interval: Annotated[
- Nullable[ResetInterval], PlainValidator(validate_open_enum(False))
- ]
+ reset_interval: Nullable[ResetInterval]
r"""Interval at which spend resets. Null means a lifetime (one-time) budget."""
updated_at: str
@@ -58,30 +54,14 @@ class WorkspaceBudget(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["reset_interval"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/components/workspacemember.py b/src/openrouter/components/workspacemember.py
index 9ece878..ad78361 100644
--- a/src/openrouter/components/workspacemember.py
+++ b/src/openrouter/components/workspacemember.py
@@ -2,10 +2,8 @@
from __future__ import annotations
from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import validate_open_enum
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Union
-from typing_extensions import Annotated, TypedDict
+from typing_extensions import TypedDict
WorkspaceMemberRole = Union[
@@ -38,7 +36,7 @@ class WorkspaceMember(BaseModel):
id: str
r"""Unique identifier for the workspace membership"""
- role: Annotated[WorkspaceMemberRole, PlainValidator(validate_open_enum(False))]
+ role: WorkspaceMemberRole
r"""Role of the member in the workspace"""
user_id: str
diff --git a/src/openrouter/credits.py b/src/openrouter/credits.py
index 0a376fb..791cdeb 100644
--- a/src/openrouter/credits.py
+++ b/src/openrouter/credits.py
@@ -98,9 +98,11 @@ class Credits(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Credits"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "403", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -221,9 +223,11 @@ class Credits(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Credits"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "403", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/datasets.py b/src/openrouter/datasets.py
index c483912..0420058 100644
--- a/src/openrouter/datasets.py
+++ b/src/openrouter/datasets.py
@@ -142,24 +142,26 @@ class Datasets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Datasets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.GetAppRankingsResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
- limit = request.limit if not request.limit is None else 50
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 50
+ if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
@@ -175,6 +177,9 @@ class Datasets(BaseSDK):
limit=limit,
offset=next_offset,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -347,9 +352,11 @@ class Datasets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Datasets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -359,15 +366,15 @@ class Datasets(BaseSDK):
async def empty_result():
return None
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
- limit = request.limit if not request.limit is None else 50
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 50
+ if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
@@ -383,6 +390,9 @@ class Datasets(BaseSDK):
limit=limit,
offset=next_offset,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -536,9 +546,11 @@ class Datasets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Datasets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -688,9 +700,11 @@ class Datasets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Datasets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/embeddings.py b/src/openrouter/embeddings.py
index d842652..9f0b5ce 100644
--- a/src/openrouter/embeddings.py
+++ b/src/openrouter/embeddings.py
@@ -37,8 +37,8 @@ class Embeddings(BaseSDK):
user: Optional[str] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
- timeout_ms: Optional[int] = None,
accept_header_override: Optional[GenerateAcceptEnum] = None,
+ timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
) -> operations.CreateEmbeddingsResponse:
r"""Submit an embedding request
@@ -144,22 +144,11 @@ class Embeddings(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Embeddings"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "503",
- "524",
- "529",
- "5XX",
- ],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -252,8 +241,8 @@ class Embeddings(BaseSDK):
user: Optional[str] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
- timeout_ms: Optional[int] = None,
accept_header_override: Optional[GenerateAcceptEnum] = None,
+ timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
) -> operations.CreateEmbeddingsResponse:
r"""Submit an embedding request
@@ -359,22 +348,11 @@ class Embeddings(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Embeddings"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "503",
- "524",
- "529",
- "5XX",
- ],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -534,9 +512,11 @@ class Embeddings(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Embeddings"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -652,9 +632,11 @@ class Embeddings(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Embeddings"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/endpoints.py b/src/openrouter/endpoints.py
index 871bd5b..f9537f6 100644
--- a/src/openrouter/endpoints.py
+++ b/src/openrouter/endpoints.py
@@ -96,9 +96,11 @@ class Endpoints(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Endpoints"],
+ extensions=None,
),
request=req,
- error_status_codes=["4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -209,9 +211,11 @@ class Endpoints(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Endpoints"],
+ extensions=None,
),
request=req,
- error_status_codes=["4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -328,9 +332,11 @@ class Endpoints(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Endpoints"],
+ extensions=None,
),
request=req,
- error_status_codes=["404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -450,9 +456,11 @@ class Endpoints(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Endpoints"],
+ extensions=None,
),
request=req,
- error_status_codes=["404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/errors/__init__.py b/src/openrouter/errors/__init__.py
index dc5ef68..cfe7cbb 100644
--- a/src/openrouter/errors/__init__.py
+++ b/src/openrouter/errors/__init__.py
@@ -1,10 +1,9 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from .openroutererror import OpenRouterError
-from typing import TYPE_CHECKING
-from importlib import import_module
-import builtins
-import sys
+from typing import Any, TYPE_CHECKING
+
+from openrouter.utils.dynamic_imports import lazy_getattr, lazy_dir
if TYPE_CHECKING:
from .badgatewayresponse_error import (
@@ -139,39 +138,11 @@ _dynamic_imports: dict[str, str] = {
}
-def dynamic_import(modname, retries=3):
- for attempt in range(retries):
- try:
- return import_module(modname, __package__)
- except KeyError:
- # Clear any half-initialized module and retry
- sys.modules.pop(modname, None)
- if attempt == retries - 1:
- break
- raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
-
-
-def __getattr__(attr_name: str) -> object:
- module_name = _dynamic_imports.get(attr_name)
- if module_name is None:
- raise AttributeError(
- f"No {attr_name} found in _dynamic_imports for module name -> {__name__} "
- )
-
- try:
- module = dynamic_import(module_name)
- result = getattr(module, attr_name)
- return result
- except ImportError as e:
- raise ImportError(
- f"Failed to import {attr_name} from {module_name}: {e}"
- ) from e
- except AttributeError as e:
- raise AttributeError(
- f"Failed to get {attr_name} from {module_name}: {e}"
- ) from e
+def __getattr__(attr_name: str) -> Any:
+ return lazy_getattr(
+ attr_name, package=__package__, dynamic_imports=_dynamic_imports
+ )
def __dir__():
- lazy_attrs = builtins.list(_dynamic_imports.keys())
- return builtins.sorted(lazy_attrs)
+ return lazy_dir(dynamic_imports=_dynamic_imports)
diff --git a/src/openrouter/files.py b/src/openrouter/files.py
index 6af040b..0c46d08 100644
--- a/src/openrouter/files.py
+++ b/src/openrouter/files.py
@@ -109,9 +109,11 @@ class Files(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Files"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -138,6 +140,9 @@ class Files(BaseSDK):
cursor=next_cursor,
workspace_id=workspace_id,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -274,9 +279,11 @@ class Files(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Files"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -306,6 +313,9 @@ class Files(BaseSDK):
cursor=next_cursor,
workspace_id=workspace_id,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -448,9 +458,11 @@ class Files(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Files"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "413", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -601,9 +613,11 @@ class Files(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Files"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "413", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -745,9 +759,11 @@ class Files(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Files"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -879,9 +895,11 @@ class Files(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Files"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1013,9 +1031,11 @@ class Files(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Files"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1147,9 +1167,11 @@ class Files(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Files"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1281,9 +1303,11 @@ class Files(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Files"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
stream=True,
retry_config=retry_config,
)
@@ -1435,9 +1459,11 @@ class Files(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Files"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
stream=True,
retry_config=retry_config,
)
diff --git a/src/openrouter/generations.py b/src/openrouter/generations.py
index 409e169..cecdd21 100644
--- a/src/openrouter/generations.py
+++ b/src/openrouter/generations.py
@@ -99,20 +99,11 @@ class Generations(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Generations"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "401",
- "402",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "524",
- "529",
- "5XX",
- ],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -259,20 +250,11 @@ class Generations(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Generations"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "401",
- "402",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "524",
- "529",
- "5XX",
- ],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -419,20 +401,11 @@ class Generations(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Generations"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "401",
- "403",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "524",
- "529",
- "5XX",
- ],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -581,20 +554,11 @@ class Generations(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Generations"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "401",
- "403",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "524",
- "529",
- "5XX",
- ],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/guardrails.py b/src/openrouter/guardrails.py
index 50249a3..4add1c7 100644
--- a/src/openrouter/guardrails.py
+++ b/src/openrouter/guardrails.py
@@ -7,7 +7,7 @@ from openrouter._hooks import HookContext
from openrouter.types import OptionalNullable, UNSET
from openrouter.utils import get_security_from_env
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
-from typing import Any, Awaitable, Dict, List, Mapping, Optional, Union
+from typing import Any, Awaitable, Dict, Iterable, List, Mapping, Optional, Union
class Guardrails(BaseSDK):
@@ -108,24 +108,26 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.ListGuardrailsResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
@@ -137,6 +139,9 @@ class Guardrails(BaseSDK):
limit=limit,
workspace_id=workspace_id,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -265,9 +270,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -277,15 +284,15 @@ class Guardrails(BaseSDK):
async def empty_result():
return None
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
@@ -297,6 +304,9 @@ class Guardrails(BaseSDK):
limit=limit,
workspace_id=workspace_id,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -337,18 +347,18 @@ class Guardrails(BaseSDK):
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- allowed_models: OptionalNullable[List[str]] = UNSET,
- allowed_providers: OptionalNullable[List[str]] = UNSET,
+ allowed_models: OptionalNullable[Iterable[str]] = UNSET,
+ allowed_providers: OptionalNullable[Iterable[str]] = UNSET,
content_filter_builtins: OptionalNullable[
Union[
- List[components.ContentFilterBuiltinEntryInput],
- List[components.ContentFilterBuiltinEntryInputTypedDict],
+ Iterable[components.ContentFilterBuiltinEntryInput],
+ Iterable[components.ContentFilterBuiltinEntryInputTypedDict],
]
] = UNSET,
content_filters: OptionalNullable[
Union[
- List[components.ContentFilterEntry],
- List[components.ContentFilterEntryTypedDict],
+ Iterable[components.ContentFilterEntry],
+ Iterable[components.ContentFilterEntryTypedDict],
]
] = UNSET,
description: OptionalNullable[str] = UNSET,
@@ -357,8 +367,8 @@ class Guardrails(BaseSDK):
enforce_zdr_google: OptionalNullable[bool] = UNSET,
enforce_zdr_openai: OptionalNullable[bool] = UNSET,
enforce_zdr_other: OptionalNullable[bool] = UNSET,
- ignored_models: OptionalNullable[List[str]] = UNSET,
- ignored_providers: OptionalNullable[List[str]] = UNSET,
+ ignored_models: OptionalNullable[Iterable[str]] = UNSET,
+ ignored_providers: OptionalNullable[Iterable[str]] = UNSET,
limit_usd: OptionalNullable[float] = UNSET,
reset_interval: OptionalNullable[components.GuardrailInterval] = UNSET,
workspace_id: Optional[str] = None,
@@ -414,8 +424,12 @@ class Guardrails(BaseSDK):
x_open_router_title=x_open_router_title,
x_open_router_categories=x_open_router_categories,
create_guardrail_request=components.CreateGuardrailRequest(
- allowed_models=allowed_models,
- allowed_providers=allowed_providers,
+ allowed_models=utils.unmarshal(
+ allowed_models, OptionalNullable[List[str]]
+ ),
+ allowed_providers=utils.unmarshal(
+ allowed_providers, OptionalNullable[List[str]]
+ ),
content_filter_builtins=utils.get_pydantic_model(
content_filter_builtins,
OptionalNullable[List[components.ContentFilterBuiltinEntryInput]],
@@ -430,8 +444,12 @@ class Guardrails(BaseSDK):
enforce_zdr_google=enforce_zdr_google,
enforce_zdr_openai=enforce_zdr_openai,
enforce_zdr_other=enforce_zdr_other,
- ignored_models=ignored_models,
- ignored_providers=ignored_providers,
+ ignored_models=utils.unmarshal(
+ ignored_models, OptionalNullable[List[str]]
+ ),
+ ignored_providers=utils.unmarshal(
+ ignored_providers, OptionalNullable[List[str]]
+ ),
limit_usd=limit_usd,
name=name,
reset_interval=reset_interval,
@@ -489,9 +507,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -538,18 +558,18 @@ class Guardrails(BaseSDK):
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- allowed_models: OptionalNullable[List[str]] = UNSET,
- allowed_providers: OptionalNullable[List[str]] = UNSET,
+ allowed_models: OptionalNullable[Iterable[str]] = UNSET,
+ allowed_providers: OptionalNullable[Iterable[str]] = UNSET,
content_filter_builtins: OptionalNullable[
Union[
- List[components.ContentFilterBuiltinEntryInput],
- List[components.ContentFilterBuiltinEntryInputTypedDict],
+ Iterable[components.ContentFilterBuiltinEntryInput],
+ Iterable[components.ContentFilterBuiltinEntryInputTypedDict],
]
] = UNSET,
content_filters: OptionalNullable[
Union[
- List[components.ContentFilterEntry],
- List[components.ContentFilterEntryTypedDict],
+ Iterable[components.ContentFilterEntry],
+ Iterable[components.ContentFilterEntryTypedDict],
]
] = UNSET,
description: OptionalNullable[str] = UNSET,
@@ -558,8 +578,8 @@ class Guardrails(BaseSDK):
enforce_zdr_google: OptionalNullable[bool] = UNSET,
enforce_zdr_openai: OptionalNullable[bool] = UNSET,
enforce_zdr_other: OptionalNullable[bool] = UNSET,
- ignored_models: OptionalNullable[List[str]] = UNSET,
- ignored_providers: OptionalNullable[List[str]] = UNSET,
+ ignored_models: OptionalNullable[Iterable[str]] = UNSET,
+ ignored_providers: OptionalNullable[Iterable[str]] = UNSET,
limit_usd: OptionalNullable[float] = UNSET,
reset_interval: OptionalNullable[components.GuardrailInterval] = UNSET,
workspace_id: Optional[str] = None,
@@ -615,8 +635,12 @@ class Guardrails(BaseSDK):
x_open_router_title=x_open_router_title,
x_open_router_categories=x_open_router_categories,
create_guardrail_request=components.CreateGuardrailRequest(
- allowed_models=allowed_models,
- allowed_providers=allowed_providers,
+ allowed_models=utils.unmarshal(
+ allowed_models, OptionalNullable[List[str]]
+ ),
+ allowed_providers=utils.unmarshal(
+ allowed_providers, OptionalNullable[List[str]]
+ ),
content_filter_builtins=utils.get_pydantic_model(
content_filter_builtins,
OptionalNullable[List[components.ContentFilterBuiltinEntryInput]],
@@ -631,8 +655,12 @@ class Guardrails(BaseSDK):
enforce_zdr_google=enforce_zdr_google,
enforce_zdr_openai=enforce_zdr_openai,
enforce_zdr_other=enforce_zdr_other,
- ignored_models=ignored_models,
- ignored_providers=ignored_providers,
+ ignored_models=utils.unmarshal(
+ ignored_models, OptionalNullable[List[str]]
+ ),
+ ignored_providers=utils.unmarshal(
+ ignored_providers, OptionalNullable[List[str]]
+ ),
limit_usd=limit_usd,
name=name,
reset_interval=reset_interval,
@@ -690,9 +718,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -821,9 +851,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -947,9 +979,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1073,9 +1107,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1199,9 +1235,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1243,18 +1281,18 @@ class Guardrails(BaseSDK):
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- allowed_models: OptionalNullable[List[str]] = UNSET,
- allowed_providers: OptionalNullable[List[str]] = UNSET,
+ allowed_models: OptionalNullable[Iterable[str]] = UNSET,
+ allowed_providers: OptionalNullable[Iterable[str]] = UNSET,
content_filter_builtins: OptionalNullable[
Union[
- List[components.ContentFilterBuiltinEntryInput],
- List[components.ContentFilterBuiltinEntryInputTypedDict],
+ Iterable[components.ContentFilterBuiltinEntryInput],
+ Iterable[components.ContentFilterBuiltinEntryInputTypedDict],
]
] = UNSET,
content_filters: OptionalNullable[
Union[
- List[components.ContentFilterEntry],
- List[components.ContentFilterEntryTypedDict],
+ Iterable[components.ContentFilterEntry],
+ Iterable[components.ContentFilterEntryTypedDict],
]
] = UNSET,
description: OptionalNullable[str] = UNSET,
@@ -1263,8 +1301,8 @@ class Guardrails(BaseSDK):
enforce_zdr_google: OptionalNullable[bool] = UNSET,
enforce_zdr_openai: OptionalNullable[bool] = UNSET,
enforce_zdr_other: OptionalNullable[bool] = UNSET,
- ignored_models: OptionalNullable[List[str]] = UNSET,
- ignored_providers: OptionalNullable[List[str]] = UNSET,
+ ignored_models: OptionalNullable[Iterable[str]] = UNSET,
+ ignored_providers: OptionalNullable[Iterable[str]] = UNSET,
limit_usd: OptionalNullable[float] = UNSET,
name: Optional[str] = None,
reset_interval: OptionalNullable[components.GuardrailInterval] = UNSET,
@@ -1321,8 +1359,12 @@ class Guardrails(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
update_guardrail_request=components.UpdateGuardrailRequest(
- allowed_models=allowed_models,
- allowed_providers=allowed_providers,
+ allowed_models=utils.unmarshal(
+ allowed_models, OptionalNullable[List[str]]
+ ),
+ allowed_providers=utils.unmarshal(
+ allowed_providers, OptionalNullable[List[str]]
+ ),
content_filter_builtins=utils.get_pydantic_model(
content_filter_builtins,
OptionalNullable[List[components.ContentFilterBuiltinEntryInput]],
@@ -1337,8 +1379,12 @@ class Guardrails(BaseSDK):
enforce_zdr_google=enforce_zdr_google,
enforce_zdr_openai=enforce_zdr_openai,
enforce_zdr_other=enforce_zdr_other,
- ignored_models=ignored_models,
- ignored_providers=ignored_providers,
+ ignored_models=utils.unmarshal(
+ ignored_models, OptionalNullable[List[str]]
+ ),
+ ignored_providers=utils.unmarshal(
+ ignored_providers, OptionalNullable[List[str]]
+ ),
limit_usd=limit_usd,
name=name,
reset_interval=reset_interval,
@@ -1395,9 +1441,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1444,18 +1492,18 @@ class Guardrails(BaseSDK):
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- allowed_models: OptionalNullable[List[str]] = UNSET,
- allowed_providers: OptionalNullable[List[str]] = UNSET,
+ allowed_models: OptionalNullable[Iterable[str]] = UNSET,
+ allowed_providers: OptionalNullable[Iterable[str]] = UNSET,
content_filter_builtins: OptionalNullable[
Union[
- List[components.ContentFilterBuiltinEntryInput],
- List[components.ContentFilterBuiltinEntryInputTypedDict],
+ Iterable[components.ContentFilterBuiltinEntryInput],
+ Iterable[components.ContentFilterBuiltinEntryInputTypedDict],
]
] = UNSET,
content_filters: OptionalNullable[
Union[
- List[components.ContentFilterEntry],
- List[components.ContentFilterEntryTypedDict],
+ Iterable[components.ContentFilterEntry],
+ Iterable[components.ContentFilterEntryTypedDict],
]
] = UNSET,
description: OptionalNullable[str] = UNSET,
@@ -1464,8 +1512,8 @@ class Guardrails(BaseSDK):
enforce_zdr_google: OptionalNullable[bool] = UNSET,
enforce_zdr_openai: OptionalNullable[bool] = UNSET,
enforce_zdr_other: OptionalNullable[bool] = UNSET,
- ignored_models: OptionalNullable[List[str]] = UNSET,
- ignored_providers: OptionalNullable[List[str]] = UNSET,
+ ignored_models: OptionalNullable[Iterable[str]] = UNSET,
+ ignored_providers: OptionalNullable[Iterable[str]] = UNSET,
limit_usd: OptionalNullable[float] = UNSET,
name: Optional[str] = None,
reset_interval: OptionalNullable[components.GuardrailInterval] = UNSET,
@@ -1522,8 +1570,12 @@ class Guardrails(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
update_guardrail_request=components.UpdateGuardrailRequest(
- allowed_models=allowed_models,
- allowed_providers=allowed_providers,
+ allowed_models=utils.unmarshal(
+ allowed_models, OptionalNullable[List[str]]
+ ),
+ allowed_providers=utils.unmarshal(
+ allowed_providers, OptionalNullable[List[str]]
+ ),
content_filter_builtins=utils.get_pydantic_model(
content_filter_builtins,
OptionalNullable[List[components.ContentFilterBuiltinEntryInput]],
@@ -1538,8 +1590,12 @@ class Guardrails(BaseSDK):
enforce_zdr_google=enforce_zdr_google,
enforce_zdr_openai=enforce_zdr_openai,
enforce_zdr_other=enforce_zdr_other,
- ignored_models=ignored_models,
- ignored_providers=ignored_providers,
+ ignored_models=utils.unmarshal(
+ ignored_models, OptionalNullable[List[str]]
+ ),
+ ignored_providers=utils.unmarshal(
+ ignored_providers, OptionalNullable[List[str]]
+ ),
limit_usd=limit_usd,
name=name,
reset_interval=reset_interval,
@@ -1596,9 +1652,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1733,24 +1791,26 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.ListGuardrailKeyAssignmentsResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
@@ -1762,6 +1822,9 @@ class Guardrails(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -1895,9 +1958,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1909,15 +1974,15 @@ class Guardrails(BaseSDK):
async def empty_result():
return None
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
@@ -1929,6 +1994,9 @@ class Guardrails(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -1971,7 +2039,7 @@ class Guardrails(BaseSDK):
self,
*,
id: str,
- key_hashes: List[str],
+ key_hashes: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
@@ -2014,7 +2082,7 @@ class Guardrails(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
bulk_assign_keys_request=components.BulkAssignKeysRequest(
- key_hashes=key_hashes,
+ key_hashes=utils.unmarshal(key_hashes, List[str]),
),
)
@@ -2068,9 +2136,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2114,7 +2184,7 @@ class Guardrails(BaseSDK):
self,
*,
id: str,
- key_hashes: List[str],
+ key_hashes: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
@@ -2157,7 +2227,7 @@ class Guardrails(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
bulk_assign_keys_request=components.BulkAssignKeysRequest(
- key_hashes=key_hashes,
+ key_hashes=utils.unmarshal(key_hashes, List[str]),
),
)
@@ -2211,9 +2281,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2257,7 +2329,7 @@ class Guardrails(BaseSDK):
self,
*,
id: str,
- key_hashes: List[str],
+ key_hashes: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
@@ -2300,7 +2372,7 @@ class Guardrails(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
bulk_unassign_keys_request=components.BulkUnassignKeysRequest(
- key_hashes=key_hashes,
+ key_hashes=utils.unmarshal(key_hashes, List[str]),
),
)
@@ -2354,9 +2426,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2402,7 +2476,7 @@ class Guardrails(BaseSDK):
self,
*,
id: str,
- key_hashes: List[str],
+ key_hashes: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
@@ -2445,7 +2519,7 @@ class Guardrails(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
bulk_unassign_keys_request=components.BulkUnassignKeysRequest(
- key_hashes=key_hashes,
+ key_hashes=utils.unmarshal(key_hashes, List[str]),
),
)
@@ -2499,9 +2573,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2638,24 +2714,26 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.ListGuardrailMemberAssignmentsResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
@@ -2667,6 +2745,9 @@ class Guardrails(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -2800,9 +2881,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2814,15 +2897,15 @@ class Guardrails(BaseSDK):
async def empty_result():
return None
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
@@ -2834,6 +2917,9 @@ class Guardrails(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -2876,7 +2962,7 @@ class Guardrails(BaseSDK):
self,
*,
id: str,
- member_user_ids: List[str],
+ member_user_ids: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
@@ -2919,7 +3005,7 @@ class Guardrails(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
bulk_assign_members_request=components.BulkAssignMembersRequest(
- member_user_ids=member_user_ids,
+ member_user_ids=utils.unmarshal(member_user_ids, List[str]),
),
)
@@ -2973,9 +3059,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -3021,7 +3109,7 @@ class Guardrails(BaseSDK):
self,
*,
id: str,
- member_user_ids: List[str],
+ member_user_ids: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
@@ -3064,7 +3152,7 @@ class Guardrails(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
bulk_assign_members_request=components.BulkAssignMembersRequest(
- member_user_ids=member_user_ids,
+ member_user_ids=utils.unmarshal(member_user_ids, List[str]),
),
)
@@ -3118,9 +3206,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -3166,7 +3256,7 @@ class Guardrails(BaseSDK):
self,
*,
id: str,
- member_user_ids: List[str],
+ member_user_ids: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
@@ -3209,7 +3299,7 @@ class Guardrails(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
bulk_unassign_members_request=components.BulkUnassignMembersRequest(
- member_user_ids=member_user_ids,
+ member_user_ids=utils.unmarshal(member_user_ids, List[str]),
),
)
@@ -3263,9 +3353,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -3311,7 +3403,7 @@ class Guardrails(BaseSDK):
self,
*,
id: str,
- member_user_ids: List[str],
+ member_user_ids: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
@@ -3354,7 +3446,7 @@ class Guardrails(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
bulk_unassign_members_request=components.BulkUnassignMembersRequest(
- member_user_ids=member_user_ids,
+ member_user_ids=utils.unmarshal(member_user_ids, List[str]),
),
)
@@ -3408,9 +3500,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -3544,24 +3638,26 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.ListKeyAssignmentsResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
@@ -3572,6 +3668,9 @@ class Guardrails(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -3697,9 +3796,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -3709,15 +3810,15 @@ class Guardrails(BaseSDK):
async def empty_result():
return None
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
@@ -3728,6 +3829,9 @@ class Guardrails(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -3853,24 +3957,26 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.ListMemberAssignmentsResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
@@ -3881,6 +3987,9 @@ class Guardrails(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -4006,9 +4115,11 @@ class Guardrails(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Guardrails"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -4020,15 +4131,15 @@ class Guardrails(BaseSDK):
async def empty_result():
return None
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
@@ -4039,6 +4150,9 @@ class Guardrails(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
diff --git a/src/openrouter/images.py b/src/openrouter/images.py
index e96036f..ebdec2d 100644
--- a/src/openrouter/images.py
+++ b/src/openrouter/images.py
@@ -1,18 +1,12 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from .basesdk import BaseSDK
-from enum import Enum
from openrouter import components, errors, operations, utils
from openrouter._hooks import HookContext
from openrouter.types import OptionalNullable, UNSET
from openrouter.utils import eventstreaming, get_security_from_env
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
-from typing import Any, List, Literal, Mapping, Optional, Union, overload
-
-
-class GenerateAcceptEnum(str, Enum):
- APPLICATION_JSON = "application/json"
- TEXT_EVENT_STREAM = "text/event-stream"
+from typing import Any, Iterable, List, Literal, Mapping, Optional, Union, overload
class Images(BaseSDK):
@@ -31,8 +25,8 @@ class Images(BaseSDK):
background: Optional[components.ImageGenerationRequestBackground] = None,
input_references: Optional[
Union[
- List[components.ContentPartImage],
- List[components.ContentPartImageTypedDict],
+ Iterable[components.ContentPartImage],
+ Iterable[components.ContentPartImageTypedDict],
]
] = None,
n: Optional[int] = None,
@@ -82,7 +76,6 @@ class Images(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
@@ -99,8 +92,8 @@ class Images(BaseSDK):
background: Optional[components.ImageGenerationRequestBackground] = None,
input_references: Optional[
Union[
- List[components.ContentPartImage],
- List[components.ContentPartImageTypedDict],
+ Iterable[components.ContentPartImage],
+ Iterable[components.ContentPartImageTypedDict],
]
] = None,
n: Optional[int] = None,
@@ -150,10 +143,10 @@ class Images(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
+ @overload
def generate(
self,
*,
@@ -166,8 +159,8 @@ class Images(BaseSDK):
background: Optional[components.ImageGenerationRequestBackground] = None,
input_references: Optional[
Union[
- List[components.ContentPartImage],
- List[components.ContentPartImageTypedDict],
+ Iterable[components.ContentPartImage],
+ Iterable[components.ContentPartImageTypedDict],
]
] = None,
n: Optional[int] = None,
@@ -183,12 +176,84 @@ class Images(BaseSDK):
resolution: Optional[components.ImageGenerationRequestResolution] = None,
seed: Optional[int] = None,
size: Optional[str] = None,
- stream: Optional[bool] = None,
+ stream: bool,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
- ) -> operations.CreateImagesResponse:
+ ) -> Union[
+ components.ImageGenerationResponse,
+ eventstreaming.EventStream[components.ImageStreamingResponseData],
+ ]:
+ r"""Generate an image
+
+ Generates an image from a text prompt via the image generation router
+
+ :param model: The image generation model to use
+ :param prompt: Text description of the desired image
+ :param http_referer: 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.
+
+ :param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+
+ :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+
+ :param aspect_ratio: Normalized aspect ratio of the generated image. Providers clamp to their supported subset.
+ :param background: Background treatment. `transparent` requires an output_format that supports alpha (png or webp).
+ :param input_references: Reference images to guide image-to-image generation, as base64 data URLs or HTTP(S) URLs.
+ :param n: Number of images to generate (1-10). Providers that only support single-image generation reject n > 1.
+ :param output_compression: Compression level (0-100) for webp/jpeg output. Ignored for png and by providers without a compression knob.
+ :param output_format: Encoding of the returned image bytes. Most models produce raster formats (png, jpeg, webp). SVG is supported by vectorization models (e.g. Quiver) — the SVG markup is UTF-8 base64-encoded in `b64_json`.
+ :param provider: Provider-specific passthrough configuration
+ :param quality: Rendering quality. Providers without a quality knob ignore this.
+ :param resolution: Normalized resolution tier of the generated image. Concrete pixel dimensions are derived per-provider.
+ :param seed: If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers.
+ :param size: Optional. A convenience shorthand for output dimensions — pass a tier (\"2K\", \"4K\") or explicit pixels (\"2048x2048\") and we normalize it to the right dimensions for the chosen provider. Interchangeable with resolution + aspect_ratio; use those directly for enumerated, per-model discoverable values. Conflicting size + resolution/aspect_ratio is rejected.
+ :param stream: If true, partial images are streamed as SSE events as they become available. Only supported by providers with native streaming (currently OpenAI). Non-streaming providers ignore this flag and return a buffered response.
+ :param retries: Override the default retry configuration for this method
+ :param server_url: Override the default server URL for this method
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
+ :param http_headers: Additional headers to set or replace on requests.
+ """
+
+ def generate(
+ self,
+ *,
+ model: str,
+ prompt: str,
+ http_referer: Optional[str] = None,
+ x_open_router_title: Optional[str] = None,
+ x_open_router_categories: Optional[str] = None,
+ aspect_ratio: Optional[components.ImageGenerationRequestAspectRatio] = None,
+ background: Optional[components.ImageGenerationRequestBackground] = None,
+ input_references: Optional[
+ Union[
+ Iterable[components.ContentPartImage],
+ Iterable[components.ContentPartImageTypedDict],
+ ]
+ ] = None,
+ n: Optional[int] = None,
+ output_compression: Optional[int] = None,
+ output_format: Optional[components.ImageGenerationRequestOutputFormat] = None,
+ provider: Optional[
+ Union[
+ components.ImageGenerationRequestProvider,
+ components.ImageGenerationRequestProviderTypedDict,
+ ]
+ ] = None,
+ quality: Optional[components.ImageGenerationRequestQuality] = None,
+ resolution: Optional[components.ImageGenerationRequestResolution] = None,
+ seed: Optional[int] = None,
+ size: Optional[str] = None,
+ stream: Optional[bool] = None,
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
+ server_url: Optional[str] = None,
+ timeout_ms: Optional[int] = None,
+ http_headers: Optional[Mapping[str, str]] = None,
+ ) -> Union[
+ components.ImageGenerationResponse,
+ eventstreaming.EventStream[components.ImageStreamingResponseData],
+ ]:
r"""Generate an image
Generates an image from a text prompt via the image generation router
@@ -217,7 +282,6 @@ class Images(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
base_url = None
@@ -266,7 +330,9 @@ class Images(BaseSDK):
request_has_path_params=False,
request_has_query_params=True,
user_agent_header="user-agent",
- accept_header_value="text/event-stream" if stream else "application/json",
+ accept_header_value="text/event-stream"
+ if stream is True
+ else "application/json",
http_headers=http_headers,
_globals=operations.CreateImagesGlobals(
http_referer=self.sdk_configuration.globals.http_referer,
@@ -306,23 +372,12 @@ class Images(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Images"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "403",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "524",
- "529",
- "5XX",
- ],
- stream=True,
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
+ stream=stream is True,
retry_config=retry_config,
)
@@ -335,8 +390,8 @@ class Images(BaseSDK):
if utils.match_response(http_res, "200", "text/event-stream"):
return eventstreaming.EventStream(
http_res,
- lambda raw: utils.unmarshal_json(
- raw, components.ImageStreamingResponse
+ lambda raw: unmarshal_json_response(
+ components.ImageStreamingResponse, http_res, raw
).data,
sentinel="[DONE]",
client_ref=self,
@@ -442,8 +497,8 @@ class Images(BaseSDK):
background: Optional[components.ImageGenerationRequestBackground] = None,
input_references: Optional[
Union[
- List[components.ContentPartImage],
- List[components.ContentPartImageTypedDict],
+ Iterable[components.ContentPartImage],
+ Iterable[components.ContentPartImageTypedDict],
]
] = None,
n: Optional[int] = None,
@@ -493,7 +548,6 @@ class Images(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
@@ -510,8 +564,8 @@ class Images(BaseSDK):
background: Optional[components.ImageGenerationRequestBackground] = None,
input_references: Optional[
Union[
- List[components.ContentPartImage],
- List[components.ContentPartImageTypedDict],
+ Iterable[components.ContentPartImage],
+ Iterable[components.ContentPartImageTypedDict],
]
] = None,
n: Optional[int] = None,
@@ -561,10 +615,10 @@ class Images(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
+ @overload
async def generate_async(
self,
*,
@@ -577,8 +631,8 @@ class Images(BaseSDK):
background: Optional[components.ImageGenerationRequestBackground] = None,
input_references: Optional[
Union[
- List[components.ContentPartImage],
- List[components.ContentPartImageTypedDict],
+ Iterable[components.ContentPartImage],
+ Iterable[components.ContentPartImageTypedDict],
]
] = None,
n: Optional[int] = None,
@@ -594,12 +648,84 @@ class Images(BaseSDK):
resolution: Optional[components.ImageGenerationRequestResolution] = None,
seed: Optional[int] = None,
size: Optional[str] = None,
- stream: Optional[bool] = None,
+ stream: bool,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
- ) -> operations.CreateImagesResponse:
+ ) -> Union[
+ components.ImageGenerationResponse,
+ eventstreaming.EventStreamAsync[components.ImageStreamingResponseData],
+ ]:
+ r"""Generate an image
+
+ Generates an image from a text prompt via the image generation router
+
+ :param model: The image generation model to use
+ :param prompt: Text description of the desired image
+ :param http_referer: 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.
+
+ :param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+
+ :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+
+ :param aspect_ratio: Normalized aspect ratio of the generated image. Providers clamp to their supported subset.
+ :param background: Background treatment. `transparent` requires an output_format that supports alpha (png or webp).
+ :param input_references: Reference images to guide image-to-image generation, as base64 data URLs or HTTP(S) URLs.
+ :param n: Number of images to generate (1-10). Providers that only support single-image generation reject n > 1.
+ :param output_compression: Compression level (0-100) for webp/jpeg output. Ignored for png and by providers without a compression knob.
+ :param output_format: Encoding of the returned image bytes. Most models produce raster formats (png, jpeg, webp). SVG is supported by vectorization models (e.g. Quiver) — the SVG markup is UTF-8 base64-encoded in `b64_json`.
+ :param provider: Provider-specific passthrough configuration
+ :param quality: Rendering quality. Providers without a quality knob ignore this.
+ :param resolution: Normalized resolution tier of the generated image. Concrete pixel dimensions are derived per-provider.
+ :param seed: If specified, the generation will sample deterministically, such that repeated requests with the same seed and parameters should return the same result. Determinism is not guaranteed for all providers.
+ :param size: Optional. A convenience shorthand for output dimensions — pass a tier (\"2K\", \"4K\") or explicit pixels (\"2048x2048\") and we normalize it to the right dimensions for the chosen provider. Interchangeable with resolution + aspect_ratio; use those directly for enumerated, per-model discoverable values. Conflicting size + resolution/aspect_ratio is rejected.
+ :param stream: If true, partial images are streamed as SSE events as they become available. Only supported by providers with native streaming (currently OpenAI). Non-streaming providers ignore this flag and return a buffered response.
+ :param retries: Override the default retry configuration for this method
+ :param server_url: Override the default server URL for this method
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
+ :param http_headers: Additional headers to set or replace on requests.
+ """
+
+ async def generate_async(
+ self,
+ *,
+ model: str,
+ prompt: str,
+ http_referer: Optional[str] = None,
+ x_open_router_title: Optional[str] = None,
+ x_open_router_categories: Optional[str] = None,
+ aspect_ratio: Optional[components.ImageGenerationRequestAspectRatio] = None,
+ background: Optional[components.ImageGenerationRequestBackground] = None,
+ input_references: Optional[
+ Union[
+ Iterable[components.ContentPartImage],
+ Iterable[components.ContentPartImageTypedDict],
+ ]
+ ] = None,
+ n: Optional[int] = None,
+ output_compression: Optional[int] = None,
+ output_format: Optional[components.ImageGenerationRequestOutputFormat] = None,
+ provider: Optional[
+ Union[
+ components.ImageGenerationRequestProvider,
+ components.ImageGenerationRequestProviderTypedDict,
+ ]
+ ] = None,
+ quality: Optional[components.ImageGenerationRequestQuality] = None,
+ resolution: Optional[components.ImageGenerationRequestResolution] = None,
+ seed: Optional[int] = None,
+ size: Optional[str] = None,
+ stream: Optional[bool] = None,
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
+ server_url: Optional[str] = None,
+ timeout_ms: Optional[int] = None,
+ http_headers: Optional[Mapping[str, str]] = None,
+ ) -> Union[
+ components.ImageGenerationResponse,
+ eventstreaming.EventStreamAsync[components.ImageStreamingResponseData],
+ ]:
r"""Generate an image
Generates an image from a text prompt via the image generation router
@@ -628,7 +754,6 @@ class Images(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
base_url = None
@@ -677,7 +802,9 @@ class Images(BaseSDK):
request_has_path_params=False,
request_has_query_params=True,
user_agent_header="user-agent",
- accept_header_value="text/event-stream" if stream else "application/json",
+ accept_header_value="text/event-stream"
+ if stream is True
+ else "application/json",
http_headers=http_headers,
_globals=operations.CreateImagesGlobals(
http_referer=self.sdk_configuration.globals.http_referer,
@@ -717,23 +844,12 @@ class Images(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Images"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "403",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "524",
- "529",
- "5XX",
- ],
- stream=True,
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
+ stream=stream is True,
retry_config=retry_config,
)
@@ -746,8 +862,8 @@ class Images(BaseSDK):
if utils.match_response(http_res, "200", "text/event-stream"):
return eventstreaming.EventStreamAsync(
http_res,
- lambda raw: utils.unmarshal_json(
- raw, components.ImageStreamingResponse
+ lambda raw: unmarshal_json_response(
+ components.ImageStreamingResponse, http_res, raw
).data,
sentinel="[DONE]",
client_ref=self,
@@ -926,9 +1042,11 @@ class Images(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Images"],
+ extensions=None,
),
request=req,
- error_status_codes=["4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1039,9 +1157,11 @@ class Images(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Images"],
+ extensions=None,
),
request=req,
- error_status_codes=["4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1158,9 +1278,11 @@ class Images(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Images"],
+ extensions=None,
),
request=req,
- error_status_codes=["404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1284,9 +1406,11 @@ class Images(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Images"],
+ extensions=None,
),
request=req,
- error_status_codes=["404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/models/__init__.py b/src/openrouter/models/__init__.py
index 726fc5e..77e06a0 100644
--- a/src/openrouter/models/__init__.py
+++ b/src/openrouter/models/__init__.py
@@ -1,3 +1,23 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+from typing import Any, TYPE_CHECKING
+
+from openrouter.utils.dynamic_imports import lazy_getattr, lazy_dir
+
+if TYPE_CHECKING:
+ from . import internal
+
# package
+
+
+_sub_packages = ["internal"]
+
+
+def __getattr__(attr_name: str) -> Any:
+ return lazy_getattr(
+ attr_name, package=__package__, dynamic_imports={}, sub_packages=_sub_packages
+ )
+
+
+def __dir__():
+ return lazy_dir(dynamic_imports={}, sub_packages=_sub_packages)
diff --git a/src/openrouter/models/internal/__init__.py b/src/openrouter/models/internal/__init__.py
index e7070a1..a661631 100644
--- a/src/openrouter/models/internal/__init__.py
+++ b/src/openrouter/models/internal/__init__.py
@@ -1,9 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
-from typing import TYPE_CHECKING
-from importlib import import_module
-import builtins
-import sys
+from typing import Any, TYPE_CHECKING
+
+from openrouter.utils.dynamic_imports import lazy_getattr, lazy_dir
if TYPE_CHECKING:
from .globals import Globals, GlobalsTypedDict
@@ -16,39 +15,11 @@ _dynamic_imports: dict[str, str] = {
}
-def dynamic_import(modname, retries=3):
- for attempt in range(retries):
- try:
- return import_module(modname, __package__)
- except KeyError:
- # Clear any half-initialized module and retry
- sys.modules.pop(modname, None)
- if attempt == retries - 1:
- break
- raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
-
-
-def __getattr__(attr_name: str) -> object:
- module_name = _dynamic_imports.get(attr_name)
- if module_name is None:
- raise AttributeError(
- f"No {attr_name} found in _dynamic_imports for module name -> {__name__} "
- )
-
- try:
- module = dynamic_import(module_name)
- result = getattr(module, attr_name)
- return result
- except ImportError as e:
- raise ImportError(
- f"Failed to import {attr_name} from {module_name}: {e}"
- ) from e
- except AttributeError as e:
- raise AttributeError(
- f"Failed to get {attr_name} from {module_name}: {e}"
- ) from e
+def __getattr__(attr_name: str) -> Any:
+ return lazy_getattr(
+ attr_name, package=__package__, dynamic_imports=_dynamic_imports
+ )
def __dir__():
- lazy_attrs = builtins.list(_dynamic_imports.keys())
- return builtins.sorted(lazy_attrs)
+ return lazy_dir(dynamic_imports=_dynamic_imports)
diff --git a/src/openrouter/models/internal/globals.py b/src/openrouter/models/internal/globals.py
index 701741b..5b74145 100644
--- a/src/openrouter/models/internal/globals.py
+++ b/src/openrouter/models/internal/globals.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -52,3 +53,21 @@ class Globals(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/models_.py b/src/openrouter/models_.py
index fa1d343..02dd1c2 100644
--- a/src/openrouter/models_.py
+++ b/src/openrouter/models_.py
@@ -104,9 +104,11 @@ class Models(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Models"],
+ extensions=None,
),
request=req,
- error_status_codes=["404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -228,9 +230,11 @@ class Models(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Models"],
+ extensions=None,
),
request=req,
- error_status_codes=["404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -389,9 +393,11 @@ class Models(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Models"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -550,9 +556,11 @@ class Models(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Models"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -669,9 +677,11 @@ class Models(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Models"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -788,9 +798,11 @@ class Models(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Models"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -911,9 +923,11 @@ class Models(BaseSDK):
operation_id="listModelsUser",
oauth2_scopes=None,
security_source=get_security_from_env(security, components.Security),
+ tags=["Models"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1039,9 +1053,11 @@ class Models(BaseSDK):
operation_id="listModelsUser",
oauth2_scopes=None,
security_source=get_security_from_env(security, components.Security),
+ tags=["Models"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/oauth.py b/src/openrouter/oauth.py
index 185de12..d6a9384 100644
--- a/src/openrouter/oauth.py
+++ b/src/openrouter/oauth.py
@@ -119,9 +119,11 @@ class OAuth(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["OAuth"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "403", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -264,9 +266,11 @@ class OAuth(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["OAuth"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "403", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -424,9 +428,11 @@ class OAuth(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["OAuth"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "409", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -594,9 +600,11 @@ class OAuth(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["OAuth"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "409", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/observability.py b/src/openrouter/observability.py
index 37ee42a..a1dea9b 100644
--- a/src/openrouter/observability.py
+++ b/src/openrouter/observability.py
@@ -7,7 +7,7 @@ from openrouter._hooks import HookContext
from openrouter.types import Nullable, OptionalNullable, UNSET
from openrouter.utils import get_security_from_env
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
-from typing import Any, Awaitable, Dict, List, Mapping, Optional, Union
+from typing import Any, Awaitable, Dict, Iterable, List, Mapping, Optional, Union
class Observability(BaseSDK):
@@ -108,24 +108,26 @@ class Observability(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Observability"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.ListObservabilityDestinationsResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
@@ -137,6 +139,9 @@ class Observability(BaseSDK):
limit=limit,
workspace_id=workspace_id,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -265,9 +270,11 @@ class Observability(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Observability"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -279,15 +286,15 @@ class Observability(BaseSDK):
async def empty_result():
return None
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
@@ -299,6 +306,9 @@ class Observability(BaseSDK):
limit=limit,
workspace_id=workspace_id,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -335,13 +345,13 @@ class Observability(BaseSDK):
def create(
self,
*,
- config: Dict[str, Nullable[Any]],
+ config: Mapping[str, Nullable[Any]],
name: str,
type_: components.CreateObservabilityDestinationRequestType,
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- api_key_hashes: OptionalNullable[List[str]] = UNSET,
+ api_key_hashes: OptionalNullable[Iterable[str]] = UNSET,
enabled: Optional[bool] = True,
filter_rules: OptionalNullable[
Union[
@@ -397,8 +407,10 @@ class Observability(BaseSDK):
x_open_router_title=x_open_router_title,
x_open_router_categories=x_open_router_categories,
create_observability_destination_request=components.CreateObservabilityDestinationRequest(
- api_key_hashes=api_key_hashes,
- config=config,
+ api_key_hashes=utils.unmarshal(
+ api_key_hashes, OptionalNullable[List[str]]
+ ),
+ config=utils.unmarshal(config, Dict[str, Nullable[Any]]),
enabled=enabled,
filter_rules=utils.get_pydantic_model(
filter_rules,
@@ -462,9 +474,11 @@ class Observability(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Observability"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "409", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -514,13 +528,13 @@ class Observability(BaseSDK):
async def create_async(
self,
*,
- config: Dict[str, Nullable[Any]],
+ config: Mapping[str, Nullable[Any]],
name: str,
type_: components.CreateObservabilityDestinationRequestType,
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- api_key_hashes: OptionalNullable[List[str]] = UNSET,
+ api_key_hashes: OptionalNullable[Iterable[str]] = UNSET,
enabled: Optional[bool] = True,
filter_rules: OptionalNullable[
Union[
@@ -576,8 +590,10 @@ class Observability(BaseSDK):
x_open_router_title=x_open_router_title,
x_open_router_categories=x_open_router_categories,
create_observability_destination_request=components.CreateObservabilityDestinationRequest(
- api_key_hashes=api_key_hashes,
- config=config,
+ api_key_hashes=utils.unmarshal(
+ api_key_hashes, OptionalNullable[List[str]]
+ ),
+ config=utils.unmarshal(config, Dict[str, Nullable[Any]]),
enabled=enabled,
filter_rules=utils.get_pydantic_model(
filter_rules,
@@ -641,9 +657,11 @@ class Observability(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Observability"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "409", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -779,9 +797,11 @@ class Observability(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Observability"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -907,9 +927,11 @@ class Observability(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Observability"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1035,9 +1057,11 @@ class Observability(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Observability"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1163,9 +1187,11 @@ class Observability(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Observability"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1209,8 +1235,8 @@ class Observability(BaseSDK):
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- api_key_hashes: OptionalNullable[List[str]] = UNSET,
- config: Optional[Dict[str, Nullable[Any]]] = None,
+ api_key_hashes: OptionalNullable[Iterable[str]] = UNSET,
+ config: Optional[Mapping[str, Nullable[Any]]] = None,
enabled: Optional[bool] = None,
filter_rules: OptionalNullable[
Union[
@@ -1266,8 +1292,10 @@ class Observability(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
update_observability_destination_request=components.UpdateObservabilityDestinationRequest(
- api_key_hashes=api_key_hashes,
- config=config,
+ api_key_hashes=utils.unmarshal(
+ api_key_hashes, OptionalNullable[List[str]]
+ ),
+ config=utils.unmarshal(config, Optional[Dict[str, Nullable[Any]]]),
enabled=enabled,
filter_rules=utils.get_pydantic_model(
filter_rules,
@@ -1329,9 +1357,11 @@ class Observability(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Observability"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "409", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1385,8 +1415,8 @@ class Observability(BaseSDK):
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
- api_key_hashes: OptionalNullable[List[str]] = UNSET,
- config: Optional[Dict[str, Nullable[Any]]] = None,
+ api_key_hashes: OptionalNullable[Iterable[str]] = UNSET,
+ config: Optional[Mapping[str, Nullable[Any]]] = None,
enabled: Optional[bool] = None,
filter_rules: OptionalNullable[
Union[
@@ -1442,8 +1472,10 @@ class Observability(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
update_observability_destination_request=components.UpdateObservabilityDestinationRequest(
- api_key_hashes=api_key_hashes,
- config=config,
+ api_key_hashes=utils.unmarshal(
+ api_key_hashes, OptionalNullable[List[str]]
+ ),
+ config=utils.unmarshal(config, Optional[Dict[str, Nullable[Any]]]),
enabled=enabled,
filter_rules=utils.get_pydantic_model(
filter_rules,
@@ -1505,9 +1537,11 @@ class Observability(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Observability"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "409", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/operations/__init__.py b/src/openrouter/operations/__init__.py
index 8bc044f..fc51690 100644
--- a/src/openrouter/operations/__init__.py
+++ b/src/openrouter/operations/__init__.py
@@ -1,9 +1,8 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
-from typing import TYPE_CHECKING
-from importlib import import_module
-import builtins
-import sys
+from typing import Any, TYPE_CHECKING
+
+from openrouter.utils.dynamic_imports import lazy_getattr, lazy_dir
if TYPE_CHECKING:
from .bulkaddworkspacemembers import (
@@ -619,6 +618,14 @@ if TYPE_CHECKING:
ListWorkspaceBudgetsRequest,
ListWorkspaceBudgetsRequestTypedDict,
)
+ from .listworkspacemembers import (
+ ListWorkspaceMembersGlobals,
+ ListWorkspaceMembersGlobalsTypedDict,
+ ListWorkspaceMembersRequest,
+ ListWorkspaceMembersRequestTypedDict,
+ ListWorkspaceMembersResponse,
+ ListWorkspaceMembersResponseTypedDict,
+ )
from .listworkspaces import (
ListWorkspacesGlobals,
ListWorkspacesGlobalsTypedDict,
@@ -1160,6 +1167,12 @@ __all__ = [
"ListWorkspaceBudgetsGlobalsTypedDict",
"ListWorkspaceBudgetsRequest",
"ListWorkspaceBudgetsRequestTypedDict",
+ "ListWorkspaceMembersGlobals",
+ "ListWorkspaceMembersGlobalsTypedDict",
+ "ListWorkspaceMembersRequest",
+ "ListWorkspaceMembersRequestTypedDict",
+ "ListWorkspaceMembersResponse",
+ "ListWorkspaceMembersResponseTypedDict",
"ListWorkspacesGlobals",
"ListWorkspacesGlobalsTypedDict",
"ListWorkspacesRequest",
@@ -1722,6 +1735,12 @@ _dynamic_imports: dict[str, str] = {
"ListWorkspaceBudgetsGlobalsTypedDict": ".listworkspacebudgets",
"ListWorkspaceBudgetsRequest": ".listworkspacebudgets",
"ListWorkspaceBudgetsRequestTypedDict": ".listworkspacebudgets",
+ "ListWorkspaceMembersGlobals": ".listworkspacemembers",
+ "ListWorkspaceMembersGlobalsTypedDict": ".listworkspacemembers",
+ "ListWorkspaceMembersRequest": ".listworkspacemembers",
+ "ListWorkspaceMembersRequestTypedDict": ".listworkspacemembers",
+ "ListWorkspaceMembersResponse": ".listworkspacemembers",
+ "ListWorkspaceMembersResponseTypedDict": ".listworkspacemembers",
"ListWorkspacesGlobals": ".listworkspaces",
"ListWorkspacesGlobalsTypedDict": ".listworkspaces",
"ListWorkspacesRequest": ".listworkspaces",
@@ -1801,39 +1820,11 @@ _dynamic_imports: dict[str, str] = {
}
-def dynamic_import(modname, retries=3):
- for attempt in range(retries):
- try:
- return import_module(modname, __package__)
- except KeyError:
- # Clear any half-initialized module and retry
- sys.modules.pop(modname, None)
- if attempt == retries - 1:
- break
- raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
-
-
-def __getattr__(attr_name: str) -> object:
- module_name = _dynamic_imports.get(attr_name)
- if module_name is None:
- raise AttributeError(
- f"No {attr_name} found in _dynamic_imports for module name -> {__name__} "
- )
-
- try:
- module = dynamic_import(module_name)
- result = getattr(module, attr_name)
- return result
- except ImportError as e:
- raise ImportError(
- f"Failed to import {attr_name} from {module_name}: {e}"
- ) from e
- except AttributeError as e:
- raise AttributeError(
- f"Failed to get {attr_name} from {module_name}: {e}"
- ) from e
+def __getattr__(attr_name: str) -> Any:
+ return lazy_getattr(
+ attr_name, package=__package__, dynamic_imports=_dynamic_imports
+ )
def __dir__():
- lazy_attrs = builtins.list(_dynamic_imports.keys())
- return builtins.sorted(lazy_attrs)
+ return lazy_dir(dynamic_imports=_dynamic_imports)
diff --git a/src/openrouter/operations/bulkaddworkspacemembers.py b/src/openrouter/operations/bulkaddworkspacemembers.py
index 32dcfea..daa5e7d 100644
--- a/src/openrouter/operations/bulkaddworkspacemembers.py
+++ b/src/openrouter/operations/bulkaddworkspacemembers.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
bulkaddworkspacemembersrequest as components_bulkaddworkspacemembersrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class BulkAddWorkspaceMembersGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class BulkAddWorkspaceMembersRequestTypedDict(TypedDict):
id: str
@@ -119,3 +138,21 @@ class BulkAddWorkspaceMembersRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/bulkassignkeystoguardrail.py b/src/openrouter/operations/bulkassignkeystoguardrail.py
index e0401f5..72a2a89 100644
--- a/src/openrouter/operations/bulkassignkeystoguardrail.py
+++ b/src/openrouter/operations/bulkassignkeystoguardrail.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
bulkassignkeysrequest as components_bulkassignkeysrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class BulkAssignKeysToGuardrailGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class BulkAssignKeysToGuardrailRequestTypedDict(TypedDict):
id: str
@@ -121,3 +140,21 @@ class BulkAssignKeysToGuardrailRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/bulkassignmemberstoguardrail.py b/src/openrouter/operations/bulkassignmemberstoguardrail.py
index 80a1cb7..e3a4c90 100644
--- a/src/openrouter/operations/bulkassignmemberstoguardrail.py
+++ b/src/openrouter/operations/bulkassignmemberstoguardrail.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
bulkassignmembersrequest as components_bulkassignmembersrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class BulkAssignMembersToGuardrailGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class BulkAssignMembersToGuardrailRequestTypedDict(TypedDict):
id: str
@@ -121,3 +140,21 @@ class BulkAssignMembersToGuardrailRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/bulkremoveworkspacemembers.py b/src/openrouter/operations/bulkremoveworkspacemembers.py
index fe0ebfd..f9a80e6 100644
--- a/src/openrouter/operations/bulkremoveworkspacemembers.py
+++ b/src/openrouter/operations/bulkremoveworkspacemembers.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
bulkremoveworkspacemembersrequest as components_bulkremoveworkspacemembersrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class BulkRemoveWorkspaceMembersGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class BulkRemoveWorkspaceMembersRequestTypedDict(TypedDict):
id: str
@@ -119,3 +138,21 @@ class BulkRemoveWorkspaceMembersRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/bulkunassignkeysfromguardrail.py b/src/openrouter/operations/bulkunassignkeysfromguardrail.py
index 4f48623..d01945a 100644
--- a/src/openrouter/operations/bulkunassignkeysfromguardrail.py
+++ b/src/openrouter/operations/bulkunassignkeysfromguardrail.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
bulkunassignkeysrequest as components_bulkunassignkeysrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class BulkUnassignKeysFromGuardrailGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class BulkUnassignKeysFromGuardrailRequestTypedDict(TypedDict):
id: str
@@ -121,3 +140,21 @@ class BulkUnassignKeysFromGuardrailRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/bulkunassignmembersfromguardrail.py b/src/openrouter/operations/bulkunassignmembersfromguardrail.py
index 3613dcf..ff2fc0c 100644
--- a/src/openrouter/operations/bulkunassignmembersfromguardrail.py
+++ b/src/openrouter/operations/bulkunassignmembersfromguardrail.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
bulkunassignmembersrequest as components_bulkunassignmembersrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class BulkUnassignMembersFromGuardrailGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class BulkUnassignMembersFromGuardrailRequestTypedDict(TypedDict):
id: str
@@ -121,3 +140,21 @@ class BulkUnassignMembersFromGuardrailRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/createaudiospeech.py b/src/openrouter/operations/createaudiospeech.py
index dae7b28..fe1cbc4 100644
--- a/src/openrouter/operations/createaudiospeech.py
+++ b/src/openrouter/operations/createaudiospeech.py
@@ -2,9 +2,10 @@
from __future__ import annotations
from openrouter.components import speechrequest as components_speechrequest
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, RequestMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -54,6 +55,24 @@ class CreateAudioSpeechGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreateAudioSpeechRequestTypedDict(TypedDict):
speech_request: components_speechrequest.SpeechRequestTypedDict
@@ -105,3 +124,21 @@ class CreateAudioSpeechRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/createaudiotranscriptions.py b/src/openrouter/operations/createaudiotranscriptions.py
index 0144114..4e8414f 100644
--- a/src/openrouter/operations/createaudiotranscriptions.py
+++ b/src/openrouter/operations/createaudiotranscriptions.py
@@ -2,9 +2,10 @@
from __future__ import annotations
from openrouter.components import sttrequest as components_sttrequest
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, RequestMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -54,6 +55,24 @@ class CreateAudioTranscriptionsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreateAudioTranscriptionsRequestTypedDict(TypedDict):
stt_request: components_sttrequest.STTRequestTypedDict
@@ -105,3 +124,21 @@ class CreateAudioTranscriptionsRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/createauthkeyscode.py b/src/openrouter/operations/createauthkeyscode.py
index 344b269..84a5dc9 100644
--- a/src/openrouter/operations/createauthkeyscode.py
+++ b/src/openrouter/operations/createauthkeyscode.py
@@ -10,15 +10,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import (
- FieldMetadata,
- HeaderMetadata,
- RequestMetadata,
- validate_open_enum,
-)
+from openrouter.utils import FieldMetadata, HeaderMetadata, RequestMetadata
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -68,6 +62,24 @@ class CreateAuthKeysCodeGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
CreateAuthKeysCodeCodeChallengeMethod = Union[
Literal[
@@ -116,10 +128,7 @@ class CreateAuthKeysCodeRequestBody(BaseModel):
code_challenge: Optional[str] = None
r"""PKCE code challenge for enhanced security"""
- code_challenge_method: Annotated[
- Optional[CreateAuthKeysCodeCodeChallengeMethod],
- PlainValidator(validate_open_enum(False)),
- ] = None
+ code_challenge_method: Optional[CreateAuthKeysCodeCodeChallengeMethod] = None
r"""The method used to generate the code challenge"""
expires_at: OptionalNullable[datetime] = UNSET
@@ -131,9 +140,7 @@ class CreateAuthKeysCodeRequestBody(BaseModel):
limit: Optional[float] = None
r"""Credit limit for the API key to be created"""
- usage_limit_type: Annotated[
- Optional[UsageLimitType], PlainValidator(validate_open_enum(False))
- ] = None
+ usage_limit_type: Optional[UsageLimitType] = None
r"""Optional credit limit reset interval. When set, the credit limit resets on this interval."""
workspace_id: Optional[str] = None
@@ -141,39 +148,36 @@ class CreateAuthKeysCodeRequestBody(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "code_challenge",
- "code_challenge_method",
- "expires_at",
- "key_label",
- "limit",
- "usage_limit_type",
- "workspace_id",
- ]
- nullable_fields = ["expires_at"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "code_challenge",
+ "code_challenge_method",
+ "expires_at",
+ "key_label",
+ "limit",
+ "usage_limit_type",
+ "workspace_id",
+ ]
+ )
+ nullable_fields = set(["expires_at"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -229,6 +233,24 @@ class CreateAuthKeysCodeRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreateAuthKeysCodeDataTypedDict(TypedDict):
r"""Auth code data"""
diff --git a/src/openrouter/operations/createbyokkey.py b/src/openrouter/operations/createbyokkey.py
index 523d24e..d96c756 100644
--- a/src/openrouter/operations/createbyokkey.py
+++ b/src/openrouter/operations/createbyokkey.py
@@ -4,9 +4,10 @@ from __future__ import annotations
from openrouter.components import (
createbyokkeyrequest as components_createbyokkeyrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, RequestMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -56,6 +57,24 @@ class CreateBYOKKeyGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreateBYOKKeyRequestTypedDict(TypedDict):
create_byok_key_request: (
@@ -109,3 +128,21 @@ class CreateBYOKKeyRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/createembeddings.py b/src/openrouter/operations/createembeddings.py
index 6459cab..699e986 100644
--- a/src/openrouter/operations/createembeddings.py
+++ b/src/openrouter/operations/createembeddings.py
@@ -20,11 +20,9 @@ from openrouter.utils import (
HeaderMetadata,
RequestMetadata,
get_discriminator,
- validate_open_enum,
)
import pydantic
from pydantic import Discriminator, Tag, model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -74,6 +72,24 @@ class CreateEmbeddingsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
EncodingFormat = Union[
Literal[
@@ -204,9 +220,7 @@ class CreateEmbeddingsRequestBody(BaseModel):
dimensions: Optional[int] = None
r"""The number of dimensions for the output embeddings"""
- encoding_format: Annotated[
- Optional[EncodingFormat], PlainValidator(validate_open_enum(False))
- ] = None
+ encoding_format: Optional[EncodingFormat] = None
r"""The format of the output embeddings"""
input_type: Optional[str] = None
@@ -221,37 +235,28 @@ class CreateEmbeddingsRequestBody(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "dimensions",
- "encoding_format",
- "input_type",
- "provider",
- "user",
- ]
- nullable_fields = ["provider"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["dimensions", "encoding_format", "input_type", "provider", "user"]
+ )
+ nullable_fields = set(["provider"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -307,6 +312,24 @@ class CreateEmbeddingsRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
EmbeddingTypedDict = TypeAliasType("EmbeddingTypedDict", Union[List[float], str])
r"""Embedding vector as an array of floats or a base64 string"""
@@ -340,6 +363,22 @@ class CreateEmbeddingsData(BaseModel):
index: Optional[int] = None
r"""Index of the embedding in the input list"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["index"])
+ 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
+
Object = Literal["list",]
@@ -363,31 +402,26 @@ class CostDetails(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["upstream_inference_cost"]
- nullable_fields = ["upstream_inference_cost"]
- null_default_fields = []
-
+ optional_fields = set(["upstream_inference_cost"])
+ nullable_fields = set(["upstream_inference_cost"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -425,6 +459,30 @@ class PromptTokensDetails(BaseModel):
video_tokens: Optional[int] = None
r"""Number of video tokens in the input"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "audio_tokens",
+ "file_tokens",
+ "image_tokens",
+ "text_tokens",
+ "video_tokens",
+ ]
+ )
+ 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
+
class CreateEmbeddingsUsageTypedDict(TypedDict):
r"""Token usage statistics"""
@@ -466,31 +524,28 @@ class CreateEmbeddingsUsage(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["cost", "cost_details", "is_byok", "prompt_tokens_details"]
- nullable_fields = ["cost_details"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["cost", "cost_details", "is_byok", "prompt_tokens_details"]
+ )
+ nullable_fields = set(["cost_details"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -526,6 +581,22 @@ class CreateEmbeddingsResponseBody(BaseModel):
usage: Optional[CreateEmbeddingsUsage] = None
r"""Token usage statistics"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id", "usage"])
+ 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
+
CreateEmbeddingsResponseTypedDict = TypeAliasType(
"CreateEmbeddingsResponseTypedDict",
diff --git a/src/openrouter/operations/createguardrail.py b/src/openrouter/operations/createguardrail.py
index 75b9661..15a2748 100644
--- a/src/openrouter/operations/createguardrail.py
+++ b/src/openrouter/operations/createguardrail.py
@@ -4,9 +4,10 @@ from __future__ import annotations
from openrouter.components import (
createguardrailrequest as components_createguardrailrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, RequestMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -56,6 +57,24 @@ class CreateGuardrailGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreateGuardrailRequestTypedDict(TypedDict):
create_guardrail_request: (
@@ -109,3 +128,21 @@ class CreateGuardrailRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/createimages.py b/src/openrouter/operations/createimages.py
index dcc89c2..8216a65 100644
--- a/src/openrouter/operations/createimages.py
+++ b/src/openrouter/operations/createimages.py
@@ -6,7 +6,7 @@ from openrouter.components import (
imagegenerationresponse as components_imagegenerationresponse,
imagestreamingresponse as components_imagestreamingresponse,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -14,6 +14,7 @@ from openrouter.utils import (
eventstreaming,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -63,6 +64,24 @@ class CreateImagesGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreateImagesRequestTypedDict(TypedDict):
image_generation_request: (
@@ -117,6 +136,24 @@ class CreateImagesRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
CreateImagesResponseTypedDict = TypeAliasType(
"CreateImagesResponseTypedDict",
diff --git a/src/openrouter/operations/createkeys.py b/src/openrouter/operations/createkeys.py
index 6d18cf7..aea3bdb 100644
--- a/src/openrouter/operations/createkeys.py
+++ b/src/openrouter/operations/createkeys.py
@@ -10,15 +10,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import (
- FieldMetadata,
- HeaderMetadata,
- RequestMetadata,
- validate_open_enum,
-)
+from openrouter.utils import FieldMetadata, HeaderMetadata, RequestMetadata
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -68,6 +62,24 @@ class CreateKeysGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
CreateKeysLimitReset = Union[
Literal[
@@ -113,10 +125,7 @@ class CreateKeysRequestBody(BaseModel):
limit: OptionalNullable[float] = UNSET
r"""Optional spending limit for the API key in USD"""
- limit_reset: Annotated[
- OptionalNullable[CreateKeysLimitReset],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ limit_reset: OptionalNullable[CreateKeysLimitReset] = UNSET
r"""Type of limit reset for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday."""
workspace_id: Optional[str] = None
@@ -124,38 +133,35 @@ class CreateKeysRequestBody(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "creator_user_id",
- "expires_at",
- "include_byok_in_limit",
- "limit",
- "limit_reset",
- "workspace_id",
- ]
- nullable_fields = ["creator_user_id", "expires_at", "limit", "limit_reset"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "creator_user_id",
+ "expires_at",
+ "include_byok_in_limit",
+ "limit",
+ "limit_reset",
+ "workspace_id",
+ ]
+ )
+ nullable_fields = set(["creator_user_id", "expires_at", "limit", "limit_reset"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -211,6 +217,24 @@ class CreateKeysRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreateKeysDataTypedDict(TypedDict):
r"""The created API key information"""
@@ -327,38 +351,35 @@ class CreateKeysData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["expires_at"]
- nullable_fields = [
- "creator_user_id",
- "expires_at",
- "limit",
- "limit_remaining",
- "limit_reset",
- "updated_at",
- ]
- null_default_fields = []
-
+ optional_fields = set(["expires_at"])
+ nullable_fields = set(
+ [
+ "creator_user_id",
+ "expires_at",
+ "limit",
+ "limit_remaining",
+ "limit_reset",
+ "updated_at",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/operations/createobservabilitydestination.py b/src/openrouter/operations/createobservabilitydestination.py
index 3f22b57..debb287 100644
--- a/src/openrouter/operations/createobservabilitydestination.py
+++ b/src/openrouter/operations/createobservabilitydestination.py
@@ -4,9 +4,10 @@ from __future__ import annotations
from openrouter.components import (
createobservabilitydestinationrequest as components_createobservabilitydestinationrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, RequestMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -56,6 +57,24 @@ class CreateObservabilityDestinationGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreateObservabilityDestinationRequestTypedDict(TypedDict):
create_observability_destination_request: components_createobservabilitydestinationrequest.CreateObservabilityDestinationRequestTypedDict
@@ -107,3 +126,21 @@ class CreateObservabilityDestinationRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/createpresetschatcompletions.py b/src/openrouter/operations/createpresetschatcompletions.py
index e1ae37e..2bcf91e 100644
--- a/src/openrouter/operations/createpresetschatcompletions.py
+++ b/src/openrouter/operations/createpresetschatcompletions.py
@@ -2,7 +2,7 @@
from __future__ import annotations
from openrouter.components import chatrequest as components_chatrequest
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -10,6 +10,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -59,6 +60,24 @@ class CreatePresetsChatCompletionsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreatePresetsChatCompletionsRequestTypedDict(TypedDict):
slug: str
@@ -117,3 +136,21 @@ class CreatePresetsChatCompletionsRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/createpresetsmessages.py b/src/openrouter/operations/createpresetsmessages.py
index 0b7172f..90392c9 100644
--- a/src/openrouter/operations/createpresetsmessages.py
+++ b/src/openrouter/operations/createpresetsmessages.py
@@ -2,7 +2,7 @@
from __future__ import annotations
from openrouter.components import messagesrequest as components_messagesrequest
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -10,6 +10,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -59,6 +60,24 @@ class CreatePresetsMessagesGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreatePresetsMessagesRequestTypedDict(TypedDict):
slug: str
@@ -117,3 +136,21 @@ class CreatePresetsMessagesRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/createpresetsresponses.py b/src/openrouter/operations/createpresetsresponses.py
index 7dce093..becc8c5 100644
--- a/src/openrouter/operations/createpresetsresponses.py
+++ b/src/openrouter/operations/createpresetsresponses.py
@@ -2,7 +2,7 @@
from __future__ import annotations
from openrouter.components import responsesrequest as components_responsesrequest
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -10,6 +10,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -59,6 +60,24 @@ class CreatePresetsResponsesGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreatePresetsResponsesRequestTypedDict(TypedDict):
slug: str
@@ -117,3 +136,21 @@ class CreatePresetsResponsesRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/creatererank.py b/src/openrouter/operations/creatererank.py
index 3e701dc..3786a97 100644
--- a/src/openrouter/operations/creatererank.py
+++ b/src/openrouter/operations/creatererank.py
@@ -61,6 +61,24 @@ class CreateRerankGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class DocumentRequestTypedDict(TypedDict):
r"""A structured document with optional text and/or image content. At least one of `text` or `image` must be provided."""
@@ -80,6 +98,22 @@ class DocumentRequest(BaseModel):
text: Optional[str] = None
r"""The document text"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["image", "text"])
+ 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
+
DocumentTypedDict = TypeAliasType(
"DocumentTypedDict", Union[DocumentRequestTypedDict, str]
@@ -128,31 +162,26 @@ class CreateRerankRequestBody(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["provider", "top_n"]
- nullable_fields = ["provider"]
- null_default_fields = []
-
+ optional_fields = set(["provider", "top_n"])
+ nullable_fields = set(["provider"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -208,6 +237,24 @@ class CreateRerankRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class DocumentResponseTypedDict(TypedDict):
r"""The document object echoing the original input (text and/or image)"""
@@ -227,6 +274,22 @@ class DocumentResponse(BaseModel):
text: Optional[str] = None
r"""The document text"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["image", "text"])
+ 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
+
class ResultTypedDict(TypedDict):
r"""A single rerank result"""
@@ -275,6 +338,22 @@ class CreateRerankUsage(BaseModel):
total_tokens: Optional[int] = None
r"""Total number of tokens used"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["cost", "search_units", "total_tokens"])
+ 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
+
class CreateRerankResponseBodyTypedDict(TypedDict):
r"""Rerank response containing ranked results"""
@@ -309,6 +388,22 @@ class CreateRerankResponseBody(BaseModel):
usage: Optional[CreateRerankUsage] = None
r"""Usage statistics"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["id", "provider", "usage"])
+ 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
+
CreateRerankResponseTypedDict = TypeAliasType(
"CreateRerankResponseTypedDict", Union[CreateRerankResponseBodyTypedDict, str]
diff --git a/src/openrouter/operations/createresponses.py b/src/openrouter/operations/createresponses.py
index 8f95daa..a0925b1 100644
--- a/src/openrouter/operations/createresponses.py
+++ b/src/openrouter/operations/createresponses.py
@@ -7,16 +7,15 @@ from openrouter.components import (
responsesrequest as components_responsesrequest,
streamevents as components_streamevents,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
RequestMetadata,
eventstreaming,
- validate_open_enum,
)
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -66,6 +65,24 @@ class CreateResponsesGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreateResponsesRequestTypedDict(TypedDict):
responses_request: components_responsesrequest.ResponsesRequestTypedDict
@@ -121,15 +138,35 @@ class CreateResponsesRequest(BaseModel):
"""
x_open_router_metadata: Annotated[
- Annotated[
- Optional[components_metadatalevel.MetadataLevel],
- PlainValidator(validate_open_enum(False)),
- ],
+ Optional[components_metadatalevel.MetadataLevel],
pydantic.Field(alias="X-OpenRouter-Metadata"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = None
r"""Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "X-OpenRouter-Metadata",
+ ]
+ )
+ 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
+
CreateResponsesResponseTypedDict = TypeAliasType(
"CreateResponsesResponseTypedDict",
diff --git a/src/openrouter/operations/createvideos.py b/src/openrouter/operations/createvideos.py
index 3892fc7..237b8eb 100644
--- a/src/openrouter/operations/createvideos.py
+++ b/src/openrouter/operations/createvideos.py
@@ -4,9 +4,10 @@ from __future__ import annotations
from openrouter.components import (
videogenerationrequest as components_videogenerationrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, RequestMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -56,6 +57,24 @@ class CreateVideosGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreateVideosRequestTypedDict(TypedDict):
video_generation_request: (
@@ -109,3 +128,21 @@ class CreateVideosRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/createworkspace.py b/src/openrouter/operations/createworkspace.py
index 1757be8..15b96d1 100644
--- a/src/openrouter/operations/createworkspace.py
+++ b/src/openrouter/operations/createworkspace.py
@@ -4,9 +4,10 @@ from __future__ import annotations
from openrouter.components import (
createworkspacerequest as components_createworkspacerequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, RequestMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -56,6 +57,24 @@ class CreateWorkspaceGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class CreateWorkspaceRequestTypedDict(TypedDict):
create_workspace_request: (
@@ -109,3 +128,21 @@ class CreateWorkspaceRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/deletebyokkey.py b/src/openrouter/operations/deletebyokkey.py
index 08c3b34..2148ca9 100644
--- a/src/openrouter/operations/deletebyokkey.py
+++ b/src/openrouter/operations/deletebyokkey.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class DeleteBYOKKeyGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class DeleteBYOKKeyRequestTypedDict(TypedDict):
id: str
@@ -105,3 +124,21 @@ class DeleteBYOKKeyRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/deletefile.py b/src/openrouter/operations/deletefile.py
index 961175c..ea64b3b 100644
--- a/src/openrouter/operations/deletefile.py
+++ b/src/openrouter/operations/deletefile.py
@@ -1,7 +1,7 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -9,6 +9,7 @@ from openrouter.utils import (
QueryParamMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -58,6 +59,24 @@ class DeleteFileGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class DeleteFileRequestTypedDict(TypedDict):
file_id: str
@@ -116,3 +135,26 @@ class DeleteFileRequest(BaseModel):
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Workspace to scope the request to. Defaults to the caller’s default workspace."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "workspace_id",
+ ]
+ )
+ 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/operations/deleteguardrail.py b/src/openrouter/operations/deleteguardrail.py
index c69e9ce..a8c58e7 100644
--- a/src/openrouter/operations/deleteguardrail.py
+++ b/src/openrouter/operations/deleteguardrail.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class DeleteGuardrailGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class DeleteGuardrailRequestTypedDict(TypedDict):
id: str
@@ -105,3 +124,21 @@ class DeleteGuardrailRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/deletekeys.py b/src/openrouter/operations/deletekeys.py
index 51d4881..998021c 100644
--- a/src/openrouter/operations/deletekeys.py
+++ b/src/openrouter/operations/deletekeys.py
@@ -1,7 +1,7 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -9,6 +9,7 @@ from openrouter.utils import (
validate_const,
)
import pydantic
+from pydantic import model_serializer
from pydantic.functional_validators import AfterValidator
from typing import Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -59,6 +60,24 @@ class DeleteKeysGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class DeleteKeysRequestTypedDict(TypedDict):
hash: str
@@ -112,6 +131,24 @@ class DeleteKeysRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class DeleteKeysResponseTypedDict(TypedDict):
r"""API key deleted successfully"""
@@ -128,3 +165,9 @@ class DeleteKeysResponse(BaseModel):
pydantic.Field(alias="deleted"),
] = True
r"""Confirmation that the API key was deleted"""
+
+
+try:
+ DeleteKeysResponse.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/operations/deleteobservabilitydestination.py b/src/openrouter/operations/deleteobservabilitydestination.py
index 865b4d1..92560ae 100644
--- a/src/openrouter/operations/deleteobservabilitydestination.py
+++ b/src/openrouter/operations/deleteobservabilitydestination.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class DeleteObservabilityDestinationGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class DeleteObservabilityDestinationRequestTypedDict(TypedDict):
id: str
@@ -105,3 +124,21 @@ class DeleteObservabilityDestinationRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/deleteworkspace.py b/src/openrouter/operations/deleteworkspace.py
index fbfef88..b27b1bc 100644
--- a/src/openrouter/operations/deleteworkspace.py
+++ b/src/openrouter/operations/deleteworkspace.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class DeleteWorkspaceGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class DeleteWorkspaceRequestTypedDict(TypedDict):
id: str
@@ -105,3 +124,21 @@ class DeleteWorkspaceRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/deleteworkspacebudget.py b/src/openrouter/operations/deleteworkspacebudget.py
index 7b8d62d..b61191d 100644
--- a/src/openrouter/operations/deleteworkspacebudget.py
+++ b/src/openrouter/operations/deleteworkspacebudget.py
@@ -4,15 +4,10 @@ from __future__ import annotations
from openrouter.components import (
workspacebudgetinterval as components_workspacebudgetinterval,
)
-from openrouter.types import BaseModel
-from openrouter.utils import (
- FieldMetadata,
- HeaderMetadata,
- PathParamMetadata,
- validate_open_enum,
-)
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -62,6 +57,24 @@ class DeleteWorkspaceBudgetGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class DeleteWorkspaceBudgetRequestTypedDict(TypedDict):
id: str
@@ -90,10 +103,7 @@ class DeleteWorkspaceBudgetRequest(BaseModel):
r"""The workspace ID (UUID) or slug"""
interval: Annotated[
- Annotated[
- components_workspacebudgetinterval.WorkspaceBudgetInterval,
- PlainValidator(validate_open_enum(False)),
- ],
+ components_workspacebudgetinterval.WorkspaceBudgetInterval,
FieldMetadata(path=PathParamMetadata(style="simple", explode=False)),
]
r"""Budget reset interval. Use \"lifetime\" for a one-time budget that never resets."""
@@ -125,3 +135,21 @@ class DeleteWorkspaceBudgetRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/downloadfilecontent.py b/src/openrouter/operations/downloadfilecontent.py
index 3d4be3f..8da6ef0 100644
--- a/src/openrouter/operations/downloadfilecontent.py
+++ b/src/openrouter/operations/downloadfilecontent.py
@@ -1,7 +1,7 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -9,6 +9,7 @@ from openrouter.utils import (
QueryParamMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -58,6 +59,24 @@ class DownloadFileContentGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class DownloadFileContentRequestTypedDict(TypedDict):
file_id: str
@@ -116,3 +135,26 @@ class DownloadFileContentRequest(BaseModel):
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Workspace to scope the request to. Defaults to the caller’s default workspace."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "workspace_id",
+ ]
+ )
+ 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/operations/exchangeauthcodeforapikey.py b/src/openrouter/operations/exchangeauthcodeforapikey.py
index 4e4295d..b6895f4 100644
--- a/src/openrouter/operations/exchangeauthcodeforapikey.py
+++ b/src/openrouter/operations/exchangeauthcodeforapikey.py
@@ -9,15 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import (
- FieldMetadata,
- HeaderMetadata,
- RequestMetadata,
- validate_open_enum,
-)
+from openrouter.utils import FieldMetadata, HeaderMetadata, RequestMetadata
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -67,6 +61,24 @@ class ExchangeAuthCodeForAPIKeyGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
ExchangeAuthCodeForAPIKeyCodeChallengeMethod = Union[
Literal[
@@ -93,9 +105,8 @@ class ExchangeAuthCodeForAPIKeyRequestBody(BaseModel):
code: str
r"""The authorization code received from the OAuth redirect"""
- code_challenge_method: Annotated[
- OptionalNullable[ExchangeAuthCodeForAPIKeyCodeChallengeMethod],
- PlainValidator(validate_open_enum(False)),
+ code_challenge_method: OptionalNullable[
+ ExchangeAuthCodeForAPIKeyCodeChallengeMethod
] = UNSET
r"""The method used to generate the code challenge"""
@@ -104,31 +115,26 @@ class ExchangeAuthCodeForAPIKeyRequestBody(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["code_challenge_method", "code_verifier"]
- nullable_fields = ["code_challenge_method"]
- null_default_fields = []
-
+ optional_fields = set(["code_challenge_method", "code_verifier"])
+ nullable_fields = set(["code_challenge_method"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -184,6 +190,24 @@ class ExchangeAuthCodeForAPIKeyRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ExchangeAuthCodeForAPIKeyResponseTypedDict(TypedDict):
r"""Successfully exchanged code for an API key"""
@@ -205,30 +229,14 @@ class ExchangeAuthCodeForAPIKeyResponse(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["user_id"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/operations/getanalyticsmeta.py b/src/openrouter/operations/getanalyticsmeta.py
index bdec790..dc728a0 100644
--- a/src/openrouter/operations/getanalyticsmeta.py
+++ b/src/openrouter/operations/getanalyticsmeta.py
@@ -1,10 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import FieldMetadata, HeaderMetadata, validate_open_enum
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from openrouter.utils import FieldMetadata, HeaderMetadata
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -54,6 +54,24 @@ class GetAnalyticsMetaGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetAnalyticsMetaRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -100,6 +118,24 @@ class GetAnalyticsMetaRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class DimensionTypedDict(TypedDict):
display_label: str
@@ -140,7 +176,7 @@ class Granularity(BaseModel):
display_label: str
r"""Human-readable label"""
- name: Annotated[GranularityName, PlainValidator(validate_open_enum(False))]
+ name: GranularityName
r"""Granularity identifier"""
@@ -169,7 +205,7 @@ class MetricTypedDict(TypedDict):
class Metric(BaseModel):
- display_format: Annotated[DisplayFormat, PlainValidator(validate_open_enum(False))]
+ display_format: DisplayFormat
r"""How this metric value should be formatted for display (e.g. percent → multiply by 100 and append %, currency → prefix with $)"""
display_label: str
@@ -216,10 +252,10 @@ class OperatorTypedDict(TypedDict):
class Operator(BaseModel):
- name: Annotated[OperatorName, PlainValidator(validate_open_enum(False))]
+ name: OperatorName
r"""Operator identifier used in filter definitions"""
- value_type: Annotated[ValueType, PlainValidator(validate_open_enum(False))]
+ value_type: ValueType
r"""Whether the operator expects a single value or an array"""
diff --git a/src/openrouter/operations/getapprankings.py b/src/openrouter/operations/getapprankings.py
index d19ef64..e5f42ea 100644
--- a/src/openrouter/operations/getapprankings.py
+++ b/src/openrouter/operations/getapprankings.py
@@ -2,15 +2,10 @@
from __future__ import annotations
from openrouter.components import apprankingsresponse as components_apprankingsresponse
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import (
- FieldMetadata,
- HeaderMetadata,
- QueryParamMetadata,
- validate_open_enum,
-)
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Awaitable, Callable, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -60,6 +55,24 @@ class GetAppRankingsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
GetAppRankingsCategory = Union[
Literal[
@@ -166,23 +179,19 @@ class GetAppRankingsRequest(BaseModel):
"""
category: Annotated[
- Annotated[
- Optional[GetAppRankingsCategory], PlainValidator(validate_open_enum(False))
- ],
+ Optional[GetAppRankingsCategory],
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Marketplace category group to filter by (e.g. `coding`). Only apps tagged with a subcategory inside this group are returned. Mutually combinable with `subcategory` — when both are supplied the `subcategory` must belong to the `category` group."""
subcategory: Annotated[
- Annotated[Optional[Subcategory], PlainValidator(validate_open_enum(False))],
+ Optional[Subcategory],
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Marketplace subcategory to filter by (e.g. `cli-agent`). Takes precedence over `category` for the actual filter; when `category` is also supplied the pair must be consistent."""
sort: Annotated[
- Annotated[
- Optional[GetAppRankingsSort], PlainValidator(validate_open_enum(False))
- ],
+ Optional[GetAppRankingsSort],
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = "popular"
r"""`popular` ranks apps by total token volume inside the date window. `trending` ranks apps by absolute excess token growth: window volume minus the average volume of the three equal-length periods immediately preceding the window. Apps with no excess growth are omitted from `trending` results."""
@@ -211,6 +220,35 @@ class GetAppRankingsRequest(BaseModel):
] = 0
r"""Number of ranked apps to skip before the first returned row (0-100). Defaults to 0. `rank` stays absolute, so the first row of `offset=50` is `rank: 51`."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "category",
+ "subcategory",
+ "sort",
+ "start_date",
+ "end_date",
+ "limit",
+ "offset",
+ ]
+ )
+ 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
+
class GetAppRankingsResponseTypedDict(TypedDict):
result: components_apprankingsresponse.AppRankingsResponseTypedDict
diff --git a/src/openrouter/operations/getbenchmarks.py b/src/openrouter/operations/getbenchmarks.py
index 480c2f3..493d52d 100644
--- a/src/openrouter/operations/getbenchmarks.py
+++ b/src/openrouter/operations/getbenchmarks.py
@@ -1,15 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import (
- FieldMetadata,
- HeaderMetadata,
- QueryParamMetadata,
- validate_open_enum,
-)
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -59,6 +54,24 @@ class GetBenchmarksGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
Source = Union[
Literal[
@@ -148,19 +161,19 @@ class GetBenchmarksRequest(BaseModel):
"""
source: Annotated[
- Annotated[Optional[Source], PlainValidator(validate_open_enum(False))],
+ Optional[Source],
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Benchmark source to query. Determines the shape of the returned items. When omitted, returns results from all sources."""
task_type: Annotated[
- Annotated[Optional[TaskType], PlainValidator(validate_open_enum(False))],
+ Optional[TaskType],
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Filter results by task type. For Artificial Analysis, maps to the corresponding index. For Design Arena, maps to the matching category."""
arena: Annotated[
- Annotated[Optional[Arena], PlainValidator(validate_open_enum(False))],
+ Optional[Arena],
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Design Arena only: arena to query. Defaults to `models` when source is `design-arena`."""
@@ -176,3 +189,30 @@ class GetBenchmarksRequest(BaseModel):
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Maximum number of items to return. When omitted, all matching results are returned."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "source",
+ "task_type",
+ "arena",
+ "category",
+ "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/src/openrouter/operations/getbyokkey.py b/src/openrouter/operations/getbyokkey.py
index 04945fd..6021faa 100644
--- a/src/openrouter/operations/getbyokkey.py
+++ b/src/openrouter/operations/getbyokkey.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetBYOKKeyGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetBYOKKeyRequestTypedDict(TypedDict):
id: str
@@ -105,3 +124,21 @@ class GetBYOKKeyRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/getcredits.py b/src/openrouter/operations/getcredits.py
index 54ebfd6..0c48cd8 100644
--- a/src/openrouter/operations/getcredits.py
+++ b/src/openrouter/operations/getcredits.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetCreditsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetCreditsRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -99,6 +118,24 @@ class GetCreditsRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetCreditsDataTypedDict(TypedDict):
total_credits: float
diff --git a/src/openrouter/operations/getcurrentkey.py b/src/openrouter/operations/getcurrentkey.py
index 2d26173..d006237 100644
--- a/src/openrouter/operations/getcurrentkey.py
+++ b/src/openrouter/operations/getcurrentkey.py
@@ -61,6 +61,24 @@ class GetCurrentKeyGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetCurrentKeyRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -107,6 +125,24 @@ class GetCurrentKeyRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
@deprecated(
"warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible."
@@ -253,37 +289,28 @@ class GetCurrentKeyData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["expires_at"]
- nullable_fields = [
- "creator_user_id",
- "expires_at",
- "limit",
- "limit_remaining",
- "limit_reset",
- ]
- null_default_fields = []
-
+ optional_fields = set(["expires_at"])
+ nullable_fields = set(
+ ["creator_user_id", "expires_at", "limit", "limit_remaining", "limit_reset"]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/operations/getfilemetadata.py b/src/openrouter/operations/getfilemetadata.py
index 6a7ddf0..4614554 100644
--- a/src/openrouter/operations/getfilemetadata.py
+++ b/src/openrouter/operations/getfilemetadata.py
@@ -1,7 +1,7 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -9,6 +9,7 @@ from openrouter.utils import (
QueryParamMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -58,6 +59,24 @@ class GetFileMetadataGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetFileMetadataRequestTypedDict(TypedDict):
file_id: str
@@ -116,3 +135,26 @@ class GetFileMetadataRequest(BaseModel):
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Workspace to scope the request to. Defaults to the caller’s default workspace."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "workspace_id",
+ ]
+ )
+ 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/operations/getgeneration.py b/src/openrouter/operations/getgeneration.py
index bf21d05..2799b1f 100644
--- a/src/openrouter/operations/getgeneration.py
+++ b/src/openrouter/operations/getgeneration.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetGenerationGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetGenerationRequestTypedDict(TypedDict):
id: str
@@ -105,3 +124,21 @@ class GetGenerationRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/getguardrail.py b/src/openrouter/operations/getguardrail.py
index e3a2ca2..3d69c16 100644
--- a/src/openrouter/operations/getguardrail.py
+++ b/src/openrouter/operations/getguardrail.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetGuardrailGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetGuardrailRequestTypedDict(TypedDict):
id: str
@@ -105,3 +124,21 @@ class GetGuardrailRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/getkey.py b/src/openrouter/operations/getkey.py
index d2370a9..a614dfb 100644
--- a/src/openrouter/operations/getkey.py
+++ b/src/openrouter/operations/getkey.py
@@ -61,6 +61,24 @@ class GetKeyGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetKeyRequestTypedDict(TypedDict):
hash: str
@@ -114,6 +132,24 @@ class GetKeyRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetKeyDataTypedDict(TypedDict):
r"""The API key information"""
@@ -230,38 +266,35 @@ class GetKeyData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["expires_at"]
- nullable_fields = [
- "creator_user_id",
- "expires_at",
- "limit",
- "limit_remaining",
- "limit_reset",
- "updated_at",
- ]
- null_default_fields = []
-
+ optional_fields = set(["expires_at"])
+ nullable_fields = set(
+ [
+ "creator_user_id",
+ "expires_at",
+ "limit",
+ "limit_remaining",
+ "limit_reset",
+ "updated_at",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/operations/getmodel.py b/src/openrouter/operations/getmodel.py
index e450562..d5a47b0 100644
--- a/src/openrouter/operations/getmodel.py
+++ b/src/openrouter/operations/getmodel.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetModelGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetModelRequestTypedDict(TypedDict):
author: str
@@ -112,3 +131,21 @@ class GetModelRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/getmodels.py b/src/openrouter/operations/getmodels.py
index eb0f955..af887b9 100644
--- a/src/openrouter/operations/getmodels.py
+++ b/src/openrouter/operations/getmodels.py
@@ -9,15 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import (
- FieldMetadata,
- HeaderMetadata,
- QueryParamMetadata,
- validate_open_enum,
-)
+from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -67,6 +61,24 @@ class GetModelsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
GetModelsCategory = Union[
Literal[
@@ -200,9 +212,7 @@ class GetModelsRequest(BaseModel):
"""
category: Annotated[
- Annotated[
- Optional[GetModelsCategory], PlainValidator(validate_open_enum(False))
- ],
+ Optional[GetModelsCategory],
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Filter models by use case category"""
@@ -220,7 +230,7 @@ class GetModelsRequest(BaseModel):
r"""Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or \"all\" to include all models. Defaults to \"text\"."""
sort: Annotated[
- Annotated[Optional[GetModelsSort], PlainValidator(validate_open_enum(False))],
+ Optional[GetModelsSort],
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Sort the returned models server-side. Prefer this over fetching the full list and sorting client-side. Options: pricing-low-to-high, pricing-high-to-low (average prompt/completion price), context-high-to-low (context length), throughput-high-to-low, latency-low-to-high (recent median performance), most-popular, top-weekly (tokens processed in the last week), newest (creation date), intelligence-high-to-low (Artificial Analysis intelligence index), design-arena-elo-high-to-low (best Design Arena ELO across arenas). Models without a score for the chosen benchmark are placed last. When omitted, the existing default ordering is preserved."""
@@ -274,7 +284,7 @@ class GetModelsRequest(BaseModel):
r"""Filter models by hosting provider. Comma-separated list of provider names."""
distillable: Annotated[
- Annotated[Optional[Distillable], PlainValidator(validate_open_enum(False))],
+ Optional[Distillable],
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Filter by distillation capability. \"true\" returns only distillable models, \"false\" excludes them."""
@@ -293,49 +303,46 @@ class GetModelsRequest(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "HTTP-Referer",
- "X-OpenRouter-Title",
- "X-OpenRouter-Categories",
- "category",
- "supported_parameters",
- "output_modalities",
- "sort",
- "q",
- "input_modalities",
- "context",
- "min_price",
- "max_price",
- "arch",
- "model_authors",
- "providers",
- "distillable",
- "zdr",
- "region",
- ]
- nullable_fields = ["min_price", "max_price"]
- null_default_fields = []
-
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "category",
+ "supported_parameters",
+ "output_modalities",
+ "sort",
+ "q",
+ "input_modalities",
+ "context",
+ "min_price",
+ "max_price",
+ "arch",
+ "model_authors",
+ "providers",
+ "distillable",
+ "zdr",
+ "region",
+ ]
+ )
+ nullable_fields = set(["min_price", "max_price"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/operations/getobservabilitydestination.py b/src/openrouter/operations/getobservabilitydestination.py
index 3a79bcb..cb8301d 100644
--- a/src/openrouter/operations/getobservabilitydestination.py
+++ b/src/openrouter/operations/getobservabilitydestination.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetObservabilityDestinationGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetObservabilityDestinationRequestTypedDict(TypedDict):
id: str
@@ -105,3 +124,21 @@ class GetObservabilityDestinationRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/getpreset.py b/src/openrouter/operations/getpreset.py
index d088913..95dbd5c 100644
--- a/src/openrouter/operations/getpreset.py
+++ b/src/openrouter/operations/getpreset.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetPresetGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetPresetRequestTypedDict(TypedDict):
slug: str
@@ -105,3 +124,21 @@ class GetPresetRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/getpresetversion.py b/src/openrouter/operations/getpresetversion.py
index b76d22d..cbcc9ab 100644
--- a/src/openrouter/operations/getpresetversion.py
+++ b/src/openrouter/operations/getpresetversion.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetPresetVersionGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetPresetVersionRequestTypedDict(TypedDict):
slug: str
@@ -112,3 +131,21 @@ class GetPresetVersionRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/getrankingsdaily.py b/src/openrouter/operations/getrankingsdaily.py
index 2e3cf71..efa494f 100644
--- a/src/openrouter/operations/getrankingsdaily.py
+++ b/src/openrouter/operations/getrankingsdaily.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetRankingsDailyGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetRankingsDailyRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -114,3 +133,27 @@ class GetRankingsDailyRequest(BaseModel):
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""End of the date window in YYYY-MM-DD (UTC), inclusive. Defaults to the most recent completed UTC day. Must be on or after 2025-01-01; earlier values are rejected with a 400."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "start_date",
+ "end_date",
+ ]
+ )
+ 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/operations/gettaskclassifications.py b/src/openrouter/operations/gettaskclassifications.py
index 793d2ca..a8b610c 100644
--- a/src/openrouter/operations/gettaskclassifications.py
+++ b/src/openrouter/operations/gettaskclassifications.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Literal, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetTaskClassificationsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
Window = Literal["7d",]
r"""Trailing time window for the classification data. Currently only `7d` (trailing 7 days) is supported."""
@@ -110,3 +129,21 @@ class GetTaskClassificationsRequest(BaseModel):
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = "7d"
r"""Trailing time window for the classification data. Currently only `7d` (trailing 7 days) is supported."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories", "window"]
+ )
+ 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/operations/getuseractivity.py b/src/openrouter/operations/getuseractivity.py
index 3e29cdf..35ab9ca 100644
--- a/src/openrouter/operations/getuseractivity.py
+++ b/src/openrouter/operations/getuseractivity.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetUserActivityGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetUserActivityRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -123,3 +142,28 @@ class GetUserActivityRequest(BaseModel):
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Filter by org member user ID. Only applicable for organization accounts."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "date",
+ "api_key_hash",
+ "user_id",
+ ]
+ )
+ 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/operations/getvideos.py b/src/openrouter/operations/getvideos.py
index 3a120ed..33c1a69 100644
--- a/src/openrouter/operations/getvideos.py
+++ b/src/openrouter/operations/getvideos.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetVideosGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetVideosRequestTypedDict(TypedDict):
job_id: str
@@ -105,3 +124,21 @@ class GetVideosRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/getworkspace.py b/src/openrouter/operations/getworkspace.py
index f4d279e..1075e4c 100644
--- a/src/openrouter/operations/getworkspace.py
+++ b/src/openrouter/operations/getworkspace.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class GetWorkspaceGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class GetWorkspaceRequestTypedDict(TypedDict):
id: str
@@ -105,3 +124,21 @@ class GetWorkspaceRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/list.py b/src/openrouter/operations/list.py
index bf9965a..cc90375 100644
--- a/src/openrouter/operations/list.py
+++ b/src/openrouter/operations/list.py
@@ -61,6 +61,24 @@ class ListGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -131,6 +149,31 @@ class ListRequest(BaseModel):
] = None
r"""Filter API keys by workspace ID. By default, keys in the default workspace are returned."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "include_disabled",
+ "offset",
+ "workspace_id",
+ ]
+ )
+ 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
+
class ListDataTypedDict(TypedDict):
byok_usage: float
@@ -243,38 +286,35 @@ class ListData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["expires_at"]
- nullable_fields = [
- "creator_user_id",
- "expires_at",
- "limit",
- "limit_remaining",
- "limit_reset",
- "updated_at",
- ]
- null_default_fields = []
-
+ optional_fields = set(["expires_at"])
+ nullable_fields = set(
+ [
+ "creator_user_id",
+ "expires_at",
+ "limit",
+ "limit_remaining",
+ "limit_reset",
+ "updated_at",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/operations/listbyokkeys.py b/src/openrouter/operations/listbyokkeys.py
index dcbff9f..2ec0772 100644
--- a/src/openrouter/operations/listbyokkeys.py
+++ b/src/openrouter/operations/listbyokkeys.py
@@ -4,15 +4,10 @@ from __future__ import annotations
from openrouter.components import (
listbyokkeysresponse as components_listbyokkeysresponse,
)
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import (
- FieldMetadata,
- HeaderMetadata,
- QueryParamMetadata,
- validate_open_enum,
-)
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Awaitable, Callable, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -62,6 +57,24 @@ class ListBYOKKeysGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
Provider = Union[
Literal[
@@ -231,11 +244,37 @@ class ListBYOKKeysRequest(BaseModel):
r"""Optional workspace ID to filter by. Defaults to the authenticated entity's default workspace."""
provider: Annotated[
- Annotated[Optional[Provider], PlainValidator(validate_open_enum(False))],
+ Optional[Provider],
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Optional provider slug to filter by (e.g. `openai`, `anthropic`, `amazon-bedrock`)."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "offset",
+ "limit",
+ "workspace_id",
+ "provider",
+ ]
+ )
+ 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
+
class ListBYOKKeysResponseTypedDict(TypedDict):
result: components_listbyokkeysresponse.ListBYOKKeysResponseTypedDict
diff --git a/src/openrouter/operations/listembeddingsmodels.py b/src/openrouter/operations/listembeddingsmodels.py
index a4042ee..a019232 100644
--- a/src/openrouter/operations/listembeddingsmodels.py
+++ b/src/openrouter/operations/listembeddingsmodels.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class ListEmbeddingsModelsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListEmbeddingsModelsRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -98,3 +117,21 @@ class ListEmbeddingsModelsRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/listendpoints.py b/src/openrouter/operations/listendpoints.py
index e1cef6f..6f25eff 100644
--- a/src/openrouter/operations/listendpoints.py
+++ b/src/openrouter/operations/listendpoints.py
@@ -4,9 +4,10 @@ from __future__ import annotations
from openrouter.components import (
listendpointsresponse as components_listendpointsresponse,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -56,6 +57,24 @@ class ListEndpointsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListEndpointsRequestTypedDict(TypedDict):
author: str
@@ -116,6 +135,24 @@ class ListEndpointsRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListEndpointsResponseTypedDict(TypedDict):
r"""Returns a list of endpoints"""
diff --git a/src/openrouter/operations/listendpointszdr.py b/src/openrouter/operations/listendpointszdr.py
index 23e735d..f5bd1f6 100644
--- a/src/openrouter/operations/listendpointszdr.py
+++ b/src/openrouter/operations/listendpointszdr.py
@@ -2,9 +2,10 @@
from __future__ import annotations
from openrouter.components import publicendpoint as components_publicendpoint
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata
import pydantic
+from pydantic import model_serializer
from typing import List, Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -54,6 +55,24 @@ class ListEndpointsZdrGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListEndpointsZdrRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -100,6 +119,24 @@ class ListEndpointsZdrRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListEndpointsZdrResponseTypedDict(TypedDict):
r"""Returns a list of endpoints"""
diff --git a/src/openrouter/operations/listfiles.py b/src/openrouter/operations/listfiles.py
index 834ff78..75fdf62 100644
--- a/src/openrouter/operations/listfiles.py
+++ b/src/openrouter/operations/listfiles.py
@@ -2,9 +2,10 @@
from __future__ import annotations
from openrouter.components import filelistresponse as components_filelistresponse
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Awaitable, Callable, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -54,6 +55,24 @@ class ListFilesGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListFilesRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -124,6 +143,31 @@ class ListFilesRequest(BaseModel):
] = None
r"""Workspace to scope the request to. Defaults to the caller’s default workspace."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "limit",
+ "cursor",
+ "workspace_id",
+ ]
+ )
+ 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
+
class ListFilesResponseTypedDict(TypedDict):
result: components_filelistresponse.FileListResponseTypedDict
diff --git a/src/openrouter/operations/listgenerationcontent.py b/src/openrouter/operations/listgenerationcontent.py
index 8d19500..d57feee 100644
--- a/src/openrouter/operations/listgenerationcontent.py
+++ b/src/openrouter/operations/listgenerationcontent.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class ListGenerationContentGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListGenerationContentRequestTypedDict(TypedDict):
id: str
@@ -105,3 +124,21 @@ class ListGenerationContentRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/listguardrailkeyassignments.py b/src/openrouter/operations/listguardrailkeyassignments.py
index 1278683..e7a2c31 100644
--- a/src/openrouter/operations/listguardrailkeyassignments.py
+++ b/src/openrouter/operations/listguardrailkeyassignments.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
listkeyassignmentsresponse as components_listkeyassignmentsresponse,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
QueryParamMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Awaitable, Callable, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class ListGuardrailKeyAssignmentsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListGuardrailKeyAssignmentsRequestTypedDict(TypedDict):
id: str
@@ -130,6 +149,30 @@ class ListGuardrailKeyAssignmentsRequest(BaseModel):
] = None
r"""Maximum number of records to return (max 100)"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "offset",
+ "limit",
+ ]
+ )
+ 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
+
class ListGuardrailKeyAssignmentsResponseTypedDict(TypedDict):
result: components_listkeyassignmentsresponse.ListKeyAssignmentsResponseTypedDict
diff --git a/src/openrouter/operations/listguardrailmemberassignments.py b/src/openrouter/operations/listguardrailmemberassignments.py
index c9c8c3e..84076b7 100644
--- a/src/openrouter/operations/listguardrailmemberassignments.py
+++ b/src/openrouter/operations/listguardrailmemberassignments.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
listmemberassignmentsresponse as components_listmemberassignmentsresponse,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
QueryParamMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Awaitable, Callable, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class ListGuardrailMemberAssignmentsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListGuardrailMemberAssignmentsRequestTypedDict(TypedDict):
id: str
@@ -130,6 +149,30 @@ class ListGuardrailMemberAssignmentsRequest(BaseModel):
] = None
r"""Maximum number of records to return (max 100)"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "offset",
+ "limit",
+ ]
+ )
+ 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
+
class ListGuardrailMemberAssignmentsResponseTypedDict(TypedDict):
result: (
diff --git a/src/openrouter/operations/listguardrails.py b/src/openrouter/operations/listguardrails.py
index f91db9e..461e691 100644
--- a/src/openrouter/operations/listguardrails.py
+++ b/src/openrouter/operations/listguardrails.py
@@ -4,9 +4,10 @@ from __future__ import annotations
from openrouter.components import (
listguardrailsresponse as components_listguardrailsresponse,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Awaitable, Callable, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -56,6 +57,24 @@ class ListGuardrailsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListGuardrailsRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -126,6 +145,31 @@ class ListGuardrailsRequest(BaseModel):
] = None
r"""Filter guardrails by workspace ID. By default, guardrails in the default workspace are returned."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "offset",
+ "limit",
+ "workspace_id",
+ ]
+ )
+ 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
+
class ListGuardrailsResponseTypedDict(TypedDict):
result: components_listguardrailsresponse.ListGuardrailsResponseTypedDict
diff --git a/src/openrouter/operations/listimagemodelendpoints.py b/src/openrouter/operations/listimagemodelendpoints.py
index 15c606c..900b5b6 100644
--- a/src/openrouter/operations/listimagemodelendpoints.py
+++ b/src/openrouter/operations/listimagemodelendpoints.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class ListImageModelEndpointsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListImageModelEndpointsRequestTypedDict(TypedDict):
author: str
@@ -112,3 +131,21 @@ class ListImageModelEndpointsRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/listimagemodels.py b/src/openrouter/operations/listimagemodels.py
index e5c89ce..01655ae 100644
--- a/src/openrouter/operations/listimagemodels.py
+++ b/src/openrouter/operations/listimagemodels.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class ListImageModelsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListImageModelsRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -98,3 +117,21 @@ class ListImageModelsRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/listkeyassignments.py b/src/openrouter/operations/listkeyassignments.py
index ae0bfca..2aee3fc 100644
--- a/src/openrouter/operations/listkeyassignments.py
+++ b/src/openrouter/operations/listkeyassignments.py
@@ -4,9 +4,10 @@ from __future__ import annotations
from openrouter.components import (
listkeyassignmentsresponse as components_listkeyassignmentsresponse,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Awaitable, Callable, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -56,6 +57,24 @@ class ListKeyAssignmentsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListKeyAssignmentsRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -118,6 +137,30 @@ class ListKeyAssignmentsRequest(BaseModel):
] = None
r"""Maximum number of records to return (max 100)"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "offset",
+ "limit",
+ ]
+ )
+ 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
+
class ListKeyAssignmentsResponseTypedDict(TypedDict):
result: components_listkeyassignmentsresponse.ListKeyAssignmentsResponseTypedDict
diff --git a/src/openrouter/operations/listmemberassignments.py b/src/openrouter/operations/listmemberassignments.py
index 55c93ba..f8e0b65 100644
--- a/src/openrouter/operations/listmemberassignments.py
+++ b/src/openrouter/operations/listmemberassignments.py
@@ -4,9 +4,10 @@ from __future__ import annotations
from openrouter.components import (
listmemberassignmentsresponse as components_listmemberassignmentsresponse,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Awaitable, Callable, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -56,6 +57,24 @@ class ListMemberAssignmentsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListMemberAssignmentsRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -118,6 +137,30 @@ class ListMemberAssignmentsRequest(BaseModel):
] = None
r"""Maximum number of records to return (max 100)"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "offset",
+ "limit",
+ ]
+ )
+ 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
+
class ListMemberAssignmentsResponseTypedDict(TypedDict):
result: (
diff --git a/src/openrouter/operations/listmodelscount.py b/src/openrouter/operations/listmodelscount.py
index 3d8a59a..797af26 100644
--- a/src/openrouter/operations/listmodelscount.py
+++ b/src/openrouter/operations/listmodelscount.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class ListModelsCountGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListModelsCountRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -106,3 +125,26 @@ class ListModelsCountRequest(BaseModel):
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Filter models by output modality. Accepts a comma-separated list of modalities (text, image, audio, embeddings) or \"all\" to include all models. Defaults to \"text\"."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "output_modalities",
+ ]
+ )
+ 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/operations/listmodelsuser.py b/src/openrouter/operations/listmodelsuser.py
index d25eea8..6070772 100644
--- a/src/openrouter/operations/listmodelsuser.py
+++ b/src/openrouter/operations/listmodelsuser.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, SecurityMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class ListModelsUserGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListModelsUserSecurityTypedDict(TypedDict):
bearer: str
@@ -116,3 +135,21 @@ class ListModelsUserRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/listobservabilitydestinations.py b/src/openrouter/operations/listobservabilitydestinations.py
index 02233af..465e357 100644
--- a/src/openrouter/operations/listobservabilitydestinations.py
+++ b/src/openrouter/operations/listobservabilitydestinations.py
@@ -4,9 +4,10 @@ from __future__ import annotations
from openrouter.components import (
listobservabilitydestinationsresponse as components_listobservabilitydestinationsresponse,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Awaitable, Callable, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -56,6 +57,24 @@ class ListObservabilityDestinationsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListObservabilityDestinationsRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -126,6 +145,31 @@ class ListObservabilityDestinationsRequest(BaseModel):
] = None
r"""Optional workspace ID to filter by. Defaults to the authenticated entity's default workspace."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "offset",
+ "limit",
+ "workspace_id",
+ ]
+ )
+ 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
+
class ListObservabilityDestinationsResponseTypedDict(TypedDict):
result: components_listobservabilitydestinationsresponse.ListObservabilityDestinationsResponseTypedDict
diff --git a/src/openrouter/operations/listorganizationmembers.py b/src/openrouter/operations/listorganizationmembers.py
index 6d918f6..15662f4 100644
--- a/src/openrouter/operations/listorganizationmembers.py
+++ b/src/openrouter/operations/listorganizationmembers.py
@@ -2,15 +2,9 @@
from __future__ import annotations
from openrouter.types import BaseModel, Nullable, UNSET_SENTINEL, UnrecognizedStr
-from openrouter.utils import (
- FieldMetadata,
- HeaderMetadata,
- QueryParamMetadata,
- validate_open_enum,
-)
+from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Awaitable, Callable, List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -60,6 +54,24 @@ class ListOrganizationMembersGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListOrganizationMembersRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -122,6 +134,30 @@ class ListOrganizationMembersRequest(BaseModel):
] = None
r"""Maximum number of records to return (max 100)"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "offset",
+ "limit",
+ ]
+ )
+ 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
+
Role = Union[
Literal[
@@ -159,35 +195,19 @@ class ListOrganizationMembersData(BaseModel):
last_name: Nullable[str]
r"""Last name of the member"""
- role: Annotated[Role, PlainValidator(validate_open_enum(False))]
+ role: Role
r"""Role of the member in the organization"""
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = []
- nullable_fields = ["first_name", "last_name"]
- null_default_fields = []
-
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
+ if val != UNSET_SENTINEL:
m[k] = val
return m
diff --git a/src/openrouter/operations/listpresets.py b/src/openrouter/operations/listpresets.py
index faa98f1..bf21a24 100644
--- a/src/openrouter/operations/listpresets.py
+++ b/src/openrouter/operations/listpresets.py
@@ -2,9 +2,10 @@
from __future__ import annotations
from openrouter.components import listpresetsresponse as components_listpresetsresponse
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Awaitable, Callable, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -54,6 +55,24 @@ class ListPresetsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListPresetsRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -116,6 +135,30 @@ class ListPresetsRequest(BaseModel):
] = None
r"""Maximum number of records to return (max 100)"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "offset",
+ "limit",
+ ]
+ )
+ 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
+
class ListPresetsResponseTypedDict(TypedDict):
result: components_listpresetsresponse.ListPresetsResponseTypedDict
diff --git a/src/openrouter/operations/listpresetversions.py b/src/openrouter/operations/listpresetversions.py
index 48185b7..36052fb 100644
--- a/src/openrouter/operations/listpresetversions.py
+++ b/src/openrouter/operations/listpresetversions.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
listpresetversionsresponse as components_listpresetversionsresponse,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
QueryParamMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Awaitable, Callable, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class ListPresetVersionsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListPresetVersionsRequestTypedDict(TypedDict):
slug: str
@@ -130,6 +149,30 @@ class ListPresetVersionsRequest(BaseModel):
] = None
r"""Maximum number of records to return (max 100)"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "offset",
+ "limit",
+ ]
+ )
+ 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
+
class ListPresetVersionsResponseTypedDict(TypedDict):
result: components_listpresetversionsresponse.ListPresetVersionsResponseTypedDict
diff --git a/src/openrouter/operations/listproviders.py b/src/openrouter/operations/listproviders.py
index c4e5180..80bcd4b 100644
--- a/src/openrouter/operations/listproviders.py
+++ b/src/openrouter/operations/listproviders.py
@@ -9,10 +9,9 @@ from openrouter.types import (
UNSET_SENTINEL,
UnrecognizedStr,
)
-from openrouter.utils import FieldMetadata, HeaderMetadata, validate_open_enum
+from openrouter.utils import FieldMetadata, HeaderMetadata
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -62,6 +61,24 @@ class ListProvidersGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListProvidersRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -108,6 +125,24 @@ class ListProvidersRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
Datacenter = Union[
Literal[
@@ -649,14 +684,10 @@ class ListProvidersData(BaseModel):
slug: str
r"""URL-friendly identifier for the provider"""
- datacenters: OptionalNullable[
- List[Annotated[Datacenter, PlainValidator(validate_open_enum(False))]]
- ] = UNSET
+ datacenters: OptionalNullable[List[Datacenter]] = UNSET
r"""ISO 3166-1 Alpha-2 country codes of the provider datacenter locations"""
- headquarters: Annotated[
- OptionalNullable[Headquarters], PlainValidator(validate_open_enum(False))
- ] = UNSET
+ headquarters: OptionalNullable[Headquarters] = UNSET
r"""ISO 3166-1 Alpha-2 country code of the provider headquarters"""
status_page_url: OptionalNullable[str] = UNSET
@@ -667,42 +698,36 @@ class ListProvidersData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "datacenters",
- "headquarters",
- "status_page_url",
- "terms_of_service_url",
- ]
- nullable_fields = [
- "datacenters",
- "headquarters",
- "privacy_policy_url",
- "status_page_url",
- "terms_of_service_url",
- ]
- null_default_fields = []
-
+ optional_fields = set(
+ ["datacenters", "headquarters", "status_page_url", "terms_of_service_url"]
+ )
+ nullable_fields = set(
+ [
+ "datacenters",
+ "headquarters",
+ "privacy_policy_url",
+ "status_page_url",
+ "terms_of_service_url",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/operations/listvideoscontent.py b/src/openrouter/operations/listvideoscontent.py
index 5ca3eef..410bfaa 100644
--- a/src/openrouter/operations/listvideoscontent.py
+++ b/src/openrouter/operations/listvideoscontent.py
@@ -59,6 +59,24 @@ class ListVideosContentGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListVideosContentRequestTypedDict(TypedDict):
job_id: str
@@ -120,35 +138,27 @@ class ListVideosContentRequest(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "HTTP-Referer",
- "X-OpenRouter-Title",
- "X-OpenRouter-Categories",
- "index",
- ]
- nullable_fields = ["index"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories", "index"]
+ )
+ nullable_fields = set(["index"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/operations/listvideosmodels.py b/src/openrouter/operations/listvideosmodels.py
index d1497b8..8ba436e 100644
--- a/src/openrouter/operations/listvideosmodels.py
+++ b/src/openrouter/operations/listvideosmodels.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class ListVideosModelsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListVideosModelsRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -98,3 +117,21 @@ class ListVideosModelsRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/listworkspacebudgets.py b/src/openrouter/operations/listworkspacebudgets.py
index 266dc8c..a65454d 100644
--- a/src/openrouter/operations/listworkspacebudgets.py
+++ b/src/openrouter/operations/listworkspacebudgets.py
@@ -1,9 +1,10 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from __future__ import annotations
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, PathParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -53,6 +54,24 @@ class ListWorkspaceBudgetsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListWorkspaceBudgetsRequestTypedDict(TypedDict):
id: str
@@ -105,3 +124,21 @@ class ListWorkspaceBudgetsRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/listworkspacemembers.py b/src/openrouter/operations/listworkspacemembers.py
new file mode 100644
index 0000000..9a8706f
--- /dev/null
+++ b/src/openrouter/operations/listworkspacemembers.py
@@ -0,0 +1,189 @@
+"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+
+from __future__ import annotations
+from openrouter.components import (
+ listworkspacemembersresponse as components_listworkspacemembersresponse,
+)
+from openrouter.types import BaseModel, UNSET_SENTINEL
+from openrouter.utils import (
+ FieldMetadata,
+ HeaderMetadata,
+ PathParamMetadata,
+ QueryParamMetadata,
+)
+import pydantic
+from pydantic import model_serializer
+from typing import Awaitable, Callable, Optional, Union
+from typing_extensions import Annotated, NotRequired, TypedDict
+
+
+class ListWorkspaceMembersGlobalsTypedDict(TypedDict):
+ http_referer: NotRequired[str]
+ r"""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: NotRequired[str]
+ r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+
+ """
+ x_open_router_categories: NotRequired[str]
+ r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+
+ """
+
+
+class ListWorkspaceMembersGlobals(BaseModel):
+ http_referer: Annotated[
+ Optional[str],
+ pydantic.Field(alias="HTTP-Referer"),
+ FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
+ ] = None
+ r"""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: Annotated[
+ Optional[str],
+ pydantic.Field(alias="X-OpenRouter-Title"),
+ FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
+ ] = None
+ r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+
+ """
+
+ x_open_router_categories: Annotated[
+ Optional[str],
+ pydantic.Field(alias="X-OpenRouter-Categories"),
+ FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
+ ] = None
+ r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+
+ """
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
+
+class ListWorkspaceMembersRequestTypedDict(TypedDict):
+ id: str
+ r"""The workspace ID (UUID) or slug"""
+ http_referer: NotRequired[str]
+ r"""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: NotRequired[str]
+ r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+
+ """
+ x_open_router_categories: NotRequired[str]
+ r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+
+ """
+ offset: NotRequired[int]
+ r"""Number of records to skip for pagination"""
+ limit: NotRequired[int]
+ r"""Maximum number of records to return (max 100)"""
+
+
+class ListWorkspaceMembersRequest(BaseModel):
+ id: Annotated[
+ str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False))
+ ]
+ r"""The workspace ID (UUID) or slug"""
+
+ http_referer: Annotated[
+ Optional[str],
+ pydantic.Field(alias="HTTP-Referer"),
+ FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
+ ] = None
+ r"""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: Annotated[
+ Optional[str],
+ pydantic.Field(alias="X-OpenRouter-Title"),
+ FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
+ ] = None
+ r"""The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+
+ """
+
+ x_open_router_categories: Annotated[
+ Optional[str],
+ pydantic.Field(alias="X-OpenRouter-Categories"),
+ FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
+ ] = None
+ r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+
+ """
+
+ offset: Annotated[
+ Optional[int],
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
+ ] = None
+ r"""Number of records to skip for pagination"""
+
+ limit: Annotated[
+ Optional[int],
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
+ ] = None
+ r"""Maximum number of records to return (max 100)"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "offset",
+ "limit",
+ ]
+ )
+ 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
+
+
+class ListWorkspaceMembersResponseTypedDict(TypedDict):
+ result: (
+ components_listworkspacemembersresponse.ListWorkspaceMembersResponseTypedDict
+ )
+
+
+class ListWorkspaceMembersResponse(BaseModel):
+ next: Union[
+ Callable[[], Optional[ListWorkspaceMembersResponse]],
+ Callable[[], Awaitable[Optional[ListWorkspaceMembersResponse]]],
+ ]
+
+ result: components_listworkspacemembersresponse.ListWorkspaceMembersResponse
diff --git a/src/openrouter/operations/listworkspaces.py b/src/openrouter/operations/listworkspaces.py
index 236dc18..a242ff3 100644
--- a/src/openrouter/operations/listworkspaces.py
+++ b/src/openrouter/operations/listworkspaces.py
@@ -4,9 +4,10 @@ from __future__ import annotations
from openrouter.components import (
listworkspacesresponse as components_listworkspacesresponse,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import FieldMetadata, HeaderMetadata, QueryParamMetadata
import pydantic
+from pydantic import model_serializer
from typing import Awaitable, Callable, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -56,6 +57,24 @@ class ListWorkspacesGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class ListWorkspacesRequestTypedDict(TypedDict):
http_referer: NotRequired[str]
@@ -118,6 +137,30 @@ class ListWorkspacesRequest(BaseModel):
] = None
r"""Maximum number of records to return (max 100)"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "offset",
+ "limit",
+ ]
+ )
+ 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
+
class ListWorkspacesResponseTypedDict(TypedDict):
result: components_listworkspacesresponse.ListWorkspacesResponseTypedDict
diff --git a/src/openrouter/operations/queryanalytics.py b/src/openrouter/operations/queryanalytics.py
index d994e55..705a3ea 100644
--- a/src/openrouter/operations/queryanalytics.py
+++ b/src/openrouter/operations/queryanalytics.py
@@ -2,15 +2,10 @@
from __future__ import annotations
from datetime import datetime
-from openrouter.types import BaseModel, UnrecognizedStr
-from openrouter.utils import (
- FieldMetadata,
- HeaderMetadata,
- RequestMetadata,
- validate_open_enum,
-)
+from openrouter.types import BaseModel, UNSET_SENTINEL, UnrecognizedStr
+from openrouter.utils import FieldMetadata, HeaderMetadata, RequestMetadata
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import List, Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -60,6 +55,24 @@ class QueryAnalyticsGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
Value2TypedDict = TypeAliasType("Value2TypedDict", Union[str, float])
@@ -113,7 +126,7 @@ class OrderByTypedDict(TypedDict):
class OrderBy(BaseModel):
- direction: Annotated[Direction, PlainValidator(validate_open_enum(False))]
+ direction: Direction
field: str
r"""Field to order by"""
@@ -164,6 +177,32 @@ class QueryAnalyticsRequestBody(BaseModel):
time_range: Optional[TimeRange] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "dimensions",
+ "filters",
+ "granularity",
+ "group_limit",
+ "limit",
+ "order_by",
+ "time_range",
+ ]
+ )
+ 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
+
class QueryAnalyticsRequestTypedDict(TypedDict):
request_body: QueryAnalyticsRequestBodyTypedDict
@@ -216,6 +255,24 @@ class QueryAnalyticsRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class QueryAnalyticsData1TypedDict(TypedDict):
r"""A row of analytics data with metric/dimension values"""
@@ -257,6 +314,22 @@ class QueryAnalyticsData2(BaseModel):
warnings: Optional[List[str]] = None
r"""Warnings about filter resolution issues (e.g. unresolvable api_key_id hashes). The query still runs normally; these inform the caller that some filter values could not be resolved."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["cachedAt", "warnings"])
+ 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
+
class QueryAnalyticsResponseTypedDict(TypedDict):
r"""Analytics query results"""
@@ -268,3 +341,9 @@ class QueryAnalyticsResponse(BaseModel):
r"""Analytics query results"""
data: QueryAnalyticsData2
+
+
+try:
+ QueryAnalyticsData2.model_rebuild()
+except NameError:
+ pass
diff --git a/src/openrouter/operations/sendchatcompletionrequest.py b/src/openrouter/operations/sendchatcompletionrequest.py
index cb1c3b3..b065e38 100644
--- a/src/openrouter/operations/sendchatcompletionrequest.py
+++ b/src/openrouter/operations/sendchatcompletionrequest.py
@@ -7,16 +7,15 @@ from openrouter.components import (
chatstreamchunk as components_chatstreamchunk,
metadatalevel as components_metadatalevel,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
RequestMetadata,
eventstreaming,
- validate_open_enum,
)
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Optional, Union
from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
@@ -66,6 +65,24 @@ class SendChatCompletionRequestGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class SendChatCompletionRequestRequestTypedDict(TypedDict):
chat_request: components_chatrequest.ChatRequestTypedDict
@@ -121,15 +138,35 @@ class SendChatCompletionRequestRequest(BaseModel):
"""
x_open_router_metadata: Annotated[
- Annotated[
- Optional[components_metadatalevel.MetadataLevel],
- PlainValidator(validate_open_enum(False)),
- ],
+ Optional[components_metadatalevel.MetadataLevel],
pydantic.Field(alias="X-OpenRouter-Metadata"),
FieldMetadata(header=HeaderMetadata(style="simple", explode=False)),
] = None
r"""Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility."""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "X-OpenRouter-Metadata",
+ ]
+ )
+ 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
+
SendChatCompletionRequestResponseTypedDict = TypeAliasType(
"SendChatCompletionRequestResponseTypedDict",
diff --git a/src/openrouter/operations/updatebyokkey.py b/src/openrouter/operations/updatebyokkey.py
index 1bf28a9..cf8b4ee 100644
--- a/src/openrouter/operations/updatebyokkey.py
+++ b/src/openrouter/operations/updatebyokkey.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
updatebyokkeyrequest as components_updatebyokkeyrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class UpdateBYOKKeyGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class UpdateBYOKKeyRequestTypedDict(TypedDict):
id: str
@@ -121,3 +140,21 @@ class UpdateBYOKKeyRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/updateguardrail.py b/src/openrouter/operations/updateguardrail.py
index b3675a1..3787f0c 100644
--- a/src/openrouter/operations/updateguardrail.py
+++ b/src/openrouter/operations/updateguardrail.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
updateguardrailrequest as components_updateguardrailrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class UpdateGuardrailGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class UpdateGuardrailRequestTypedDict(TypedDict):
id: str
@@ -121,3 +140,21 @@ class UpdateGuardrailRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/updatekeys.py b/src/openrouter/operations/updatekeys.py
index 8ea2365..61a0eee 100644
--- a/src/openrouter/operations/updatekeys.py
+++ b/src/openrouter/operations/updatekeys.py
@@ -15,11 +15,9 @@ from openrouter.utils import (
HeaderMetadata,
PathParamMetadata,
RequestMetadata,
- validate_open_enum,
)
import pydantic
from pydantic import model_serializer
-from pydantic.functional_validators import PlainValidator
from typing import Literal, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -69,6 +67,24 @@ class UpdateKeysGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
UpdateKeysLimitReset = Union[
Literal[
@@ -104,10 +120,7 @@ class UpdateKeysRequestBody(BaseModel):
limit: OptionalNullable[float] = UNSET
r"""New spending limit for the API key in USD"""
- limit_reset: Annotated[
- OptionalNullable[UpdateKeysLimitReset],
- PlainValidator(validate_open_enum(False)),
- ] = UNSET
+ limit_reset: OptionalNullable[UpdateKeysLimitReset] = UNSET
r"""New limit reset type for the API key (daily, weekly, monthly, or null for no reset). Resets happen automatically at midnight UTC, and weeks are Monday through Sunday."""
name: Optional[str] = None
@@ -115,37 +128,28 @@ class UpdateKeysRequestBody(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = [
- "disabled",
- "include_byok_in_limit",
- "limit",
- "limit_reset",
- "name",
- ]
- nullable_fields = ["limit", "limit_reset"]
- null_default_fields = []
-
+ optional_fields = set(
+ ["disabled", "include_byok_in_limit", "limit", "limit_reset", "name"]
+ )
+ nullable_fields = set(["limit", "limit_reset"])
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
@@ -208,6 +212,24 @@ class UpdateKeysRequest(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class UpdateKeysDataTypedDict(TypedDict):
r"""The updated API key information"""
@@ -324,38 +346,35 @@ class UpdateKeysData(BaseModel):
@model_serializer(mode="wrap")
def serialize_model(self, handler):
- optional_fields = ["expires_at"]
- nullable_fields = [
- "creator_user_id",
- "expires_at",
- "limit",
- "limit_remaining",
- "limit_reset",
- "updated_at",
- ]
- null_default_fields = []
-
+ optional_fields = set(["expires_at"])
+ nullable_fields = set(
+ [
+ "creator_user_id",
+ "expires_at",
+ "limit",
+ "limit_remaining",
+ "limit_reset",
+ "updated_at",
+ ]
+ )
serialized = handler(self)
-
m = {}
for n, f in type(self).model_fields.items():
k = f.alias or n
- val = serialized.get(k)
- serialized.pop(k, None)
+ val = serialized.get(k, serialized.get(n))
+ is_nullable_and_explicitly_set = (
+ k in nullable_fields
+ and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member
+ )
- optional_nullable = k in optional_fields and k in nullable_fields
- is_set = (
- self.__pydantic_fields_set__.intersection({n})
- or k in null_default_fields
- ) # pylint: disable=no-member
-
- if val is not None and val != UNSET_SENTINEL:
- m[k] = val
- elif val != UNSET_SENTINEL and (
- not k in optional_fields or (optional_nullable and is_set)
- ):
- m[k] = val
+ if val != UNSET_SENTINEL:
+ if (
+ val is not None
+ or k not in optional_fields
+ or is_nullable_and_explicitly_set
+ ):
+ m[k] = val
return m
diff --git a/src/openrouter/operations/updateobservabilitydestination.py b/src/openrouter/operations/updateobservabilitydestination.py
index 749f0f7..e2819c9 100644
--- a/src/openrouter/operations/updateobservabilitydestination.py
+++ b/src/openrouter/operations/updateobservabilitydestination.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
updateobservabilitydestinationrequest as components_updateobservabilitydestinationrequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class UpdateObservabilityDestinationGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class UpdateObservabilityDestinationRequestTypedDict(TypedDict):
id: str
@@ -119,3 +138,21 @@ class UpdateObservabilityDestinationRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/updateworkspace.py b/src/openrouter/operations/updateworkspace.py
index 4ab7929..4441056 100644
--- a/src/openrouter/operations/updateworkspace.py
+++ b/src/openrouter/operations/updateworkspace.py
@@ -4,7 +4,7 @@ from __future__ import annotations
from openrouter.components import (
updateworkspacerequest as components_updateworkspacerequest,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -12,6 +12,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -61,6 +62,24 @@ class UpdateWorkspaceGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class UpdateWorkspaceRequestTypedDict(TypedDict):
id: str
@@ -121,3 +140,21 @@ class UpdateWorkspaceRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/operations/uploadfile.py b/src/openrouter/operations/uploadfile.py
index 579e1df..29a37b9 100644
--- a/src/openrouter/operations/uploadfile.py
+++ b/src/openrouter/operations/uploadfile.py
@@ -2,7 +2,7 @@
from __future__ import annotations
import io
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
@@ -11,6 +11,7 @@ from openrouter.utils import (
RequestMetadata,
)
import pydantic
+from pydantic import model_serializer
from typing import IO, Optional, Union
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -60,10 +61,28 @@ class UploadFileGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class FileTypedDict(TypedDict):
file_name: str
- content: Union[bytes, IO[bytes], io.BufferedReader]
+ content: Union[bytes, IO[bytes], io.IOBase]
content_type: NotRequired[str]
@@ -73,7 +92,7 @@ class File(BaseModel):
]
content: Annotated[
- Union[bytes, IO[bytes], io.BufferedReader],
+ Union[bytes, IO[bytes], io.IOBase],
pydantic.Field(alias=""),
FieldMetadata(multipart=MultipartFormMetadata(content=True)),
]
@@ -84,6 +103,22 @@ class File(BaseModel):
FieldMetadata(multipart=True),
] = None
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(["contentType"])
+ 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
+
class UploadFileRequestBodyTypedDict(TypedDict):
file: FileTypedDict
@@ -151,3 +186,26 @@ class UploadFileRequest(BaseModel):
FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
] = None
r"""Workspace to scope the request to. Defaults to the caller’s default workspace."""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ [
+ "HTTP-Referer",
+ "X-OpenRouter-Title",
+ "X-OpenRouter-Categories",
+ "workspace_id",
+ ]
+ )
+ 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/operations/upsertworkspacebudget.py b/src/openrouter/operations/upsertworkspacebudget.py
index 9e55fa4..228942b 100644
--- a/src/openrouter/operations/upsertworkspacebudget.py
+++ b/src/openrouter/operations/upsertworkspacebudget.py
@@ -5,16 +5,15 @@ from openrouter.components import (
upsertworkspacebudgetrequest as components_upsertworkspacebudgetrequest,
workspacebudgetinterval as components_workspacebudgetinterval,
)
-from openrouter.types import BaseModel
+from openrouter.types import BaseModel, UNSET_SENTINEL
from openrouter.utils import (
FieldMetadata,
HeaderMetadata,
PathParamMetadata,
RequestMetadata,
- validate_open_enum,
)
import pydantic
-from pydantic.functional_validators import PlainValidator
+from pydantic import model_serializer
from typing import Optional
from typing_extensions import Annotated, NotRequired, TypedDict
@@ -64,6 +63,24 @@ class UpsertWorkspaceBudgetGlobals(BaseModel):
"""
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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
+
class UpsertWorkspaceBudgetRequestTypedDict(TypedDict):
id: str
@@ -95,10 +112,7 @@ class UpsertWorkspaceBudgetRequest(BaseModel):
r"""The workspace ID (UUID) or slug"""
interval: Annotated[
- Annotated[
- components_workspacebudgetinterval.WorkspaceBudgetInterval,
- PlainValidator(validate_open_enum(False)),
- ],
+ components_workspacebudgetinterval.WorkspaceBudgetInterval,
FieldMetadata(path=PathParamMetadata(style="simple", explode=False)),
]
r"""Budget reset interval. Use \"lifetime\" for a one-time budget that never resets."""
@@ -135,3 +149,21 @@ class UpsertWorkspaceBudgetRequest(BaseModel):
r"""Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
"""
+
+ @model_serializer(mode="wrap")
+ def serialize_model(self, handler):
+ optional_fields = set(
+ ["HTTP-Referer", "X-OpenRouter-Title", "X-OpenRouter-Categories"]
+ )
+ 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/organization.py b/src/openrouter/organization.py
index ad2e7f8..d24bfa8 100644
--- a/src/openrouter/organization.py
+++ b/src/openrouter/organization.py
@@ -105,24 +105,26 @@ class Organization(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Organization"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.ListOrganizationMembersResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
@@ -133,6 +135,9 @@ class Organization(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -263,9 +268,11 @@ class Organization(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Organization"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -277,15 +284,15 @@ class Organization(BaseSDK):
async def empty_result():
return None
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
@@ -296,6 +303,9 @@ class Organization(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
diff --git a/src/openrouter/presets.py b/src/openrouter/presets.py
index 4ab1b9c..83085f6 100644
--- a/src/openrouter/presets.py
+++ b/src/openrouter/presets.py
@@ -7,7 +7,7 @@ from openrouter._hooks import HookContext
from openrouter.types import Nullable, OptionalNullable, UNSET
from openrouter.utils import get_security_from_env
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
-from typing import Any, Awaitable, Dict, List, Mapping, Optional, Union
+from typing import Any, Awaitable, Dict, Iterable, List, Mapping, Optional, Union
class Presets(BaseSDK):
@@ -30,6 +30,8 @@ class Presets(BaseSDK):
Lists all presets for the authenticated user, ordered by most recently updated first.
+ If set, this operation will use `api_key` from the global security.
+
:param http_referer: 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.
@@ -81,6 +83,7 @@ class Presets(BaseSDK):
),
security=self.sdk_configuration.security,
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -105,24 +108,26 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.ListPresetsResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
@@ -133,6 +138,9 @@ class Presets(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -188,6 +196,8 @@ class Presets(BaseSDK):
Lists all presets for the authenticated user, ordered by most recently updated first.
+ If set, this operation will use `api_key` from the global security.
+
:param http_referer: 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.
@@ -239,6 +249,7 @@ class Presets(BaseSDK):
),
security=self.sdk_configuration.security,
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -263,9 +274,11 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -275,15 +288,15 @@ class Presets(BaseSDK):
async def empty_result():
return None
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
@@ -294,6 +307,9 @@ class Presets(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -348,6 +364,8 @@ class Presets(BaseSDK):
Retrieves a preset by its slug with its currently designated version inline.
+ If set, this operation will use `api_key` from the global security.
+
:param slug: URL-safe slug identifying the preset.
:param http_referer: 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.
@@ -397,6 +415,7 @@ class Presets(BaseSDK):
),
security=self.sdk_configuration.security,
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -421,9 +440,11 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -479,6 +500,8 @@ class Presets(BaseSDK):
Retrieves a preset by its slug with its currently designated version inline.
+ If set, this operation will use `api_key` from the global security.
+
:param slug: URL-safe slug identifying the preset.
:param http_referer: 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.
@@ -528,6 +551,7 @@ class Presets(BaseSDK):
),
security=self.sdk_configuration.security,
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -552,9 +576,11 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -599,7 +625,8 @@ class Presets(BaseSDK):
*,
slug: str,
messages: Union[
- List[components.ChatMessages], List[components.ChatMessagesTypedDict]
+ Iterable[components.ChatMessages],
+ Iterable[components.ChatMessagesTypedDict],
],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
@@ -616,24 +643,24 @@ class Presets(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- logit_bias: OptionalNullable[Dict[str, float]] = UNSET,
+ logit_bias: OptionalNullable[Mapping[str, float]] = UNSET,
logprobs: OptionalNullable[bool] = UNSET,
max_completion_tokens: OptionalNullable[int] = UNSET,
max_tokens: OptionalNullable[int] = UNSET,
- metadata: Optional[Dict[str, str]] = None,
+ metadata: Optional[Mapping[str, str]] = None,
min_p: OptionalNullable[float] = UNSET,
- modalities: Optional[List[components.Modality]] = None,
+ modalities: Optional[Iterable[components.Modality]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ChatRequestPlugin],
- List[components.ChatRequestPluginTypedDict],
+ Iterable[components.ChatRequestPlugin],
+ Iterable[components.ChatRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -663,8 +690,8 @@ class Presets(BaseSDK):
] = UNSET,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Optional[bool] = False,
@@ -677,8 +704,8 @@ class Presets(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ChatFunctionTool],
- List[components.ChatFunctionToolTypedDict],
+ Iterable[components.ChatFunctionTool],
+ Iterable[components.ChatFunctionToolTypedDict],
]
] = None,
top_a: OptionalNullable[float] = UNSET,
@@ -698,6 +725,8 @@ class Presets(BaseSDK):
Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.
+ If set, this operation will use `api_key` from the global security.
+
:param slug: URL-safe slug identifying the preset. Created if it does not exist.
:param messages: List of messages for the conversation
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
@@ -772,19 +801,25 @@ class Presets(BaseSDK):
debug, Optional[components.ChatDebugOptions]
),
frequency_penalty=frequency_penalty,
- image_config=image_config,
- logit_bias=logit_bias,
+ image_config=utils.unmarshal(
+ image_config, Optional[Dict[str, components.ImageConfig]]
+ ),
+ logit_bias=utils.unmarshal(
+ logit_bias, OptionalNullable[Dict[str, float]]
+ ),
logprobs=logprobs,
max_completion_tokens=max_completion_tokens,
max_tokens=max_tokens,
messages=utils.get_pydantic_model(
messages, List[components.ChatMessages]
),
- metadata=metadata,
+ metadata=utils.unmarshal(metadata, Optional[Dict[str, str]]),
min_p=min_p,
- modalities=modalities,
+ modalities=utils.unmarshal(
+ modalities, Optional[List[components.Modality]]
+ ),
model=model,
- models=models,
+ models=utils.unmarshal(models, Optional[List[str]]),
parallel_tool_calls=parallel_tool_calls,
plugins=utils.get_pydantic_model(
plugins, Optional[List[components.ChatRequestPlugin]]
@@ -804,7 +839,7 @@ class Presets(BaseSDK):
seed=seed,
service_tier=service_tier,
session_id=session_id,
- stop=stop,
+ stop=utils.unmarshal(stop, OptionalNullable[components.Stop]),
stop_server_tools_when=utils.get_pydantic_model(
stop_server_tools_when,
Optional[List[components.StopServerToolsWhenCondition]],
@@ -851,6 +886,7 @@ class Presets(BaseSDK):
request.chat_request, False, False, "json", components.ChatRequest
),
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -875,9 +911,11 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "409", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -934,7 +972,8 @@ class Presets(BaseSDK):
*,
slug: str,
messages: Union[
- List[components.ChatMessages], List[components.ChatMessagesTypedDict]
+ Iterable[components.ChatMessages],
+ Iterable[components.ChatMessagesTypedDict],
],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
@@ -951,24 +990,24 @@ class Presets(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- logit_bias: OptionalNullable[Dict[str, float]] = UNSET,
+ logit_bias: OptionalNullable[Mapping[str, float]] = UNSET,
logprobs: OptionalNullable[bool] = UNSET,
max_completion_tokens: OptionalNullable[int] = UNSET,
max_tokens: OptionalNullable[int] = UNSET,
- metadata: Optional[Dict[str, str]] = None,
+ metadata: Optional[Mapping[str, str]] = None,
min_p: OptionalNullable[float] = UNSET,
- modalities: Optional[List[components.Modality]] = None,
+ modalities: Optional[Iterable[components.Modality]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ChatRequestPlugin],
- List[components.ChatRequestPluginTypedDict],
+ Iterable[components.ChatRequestPlugin],
+ Iterable[components.ChatRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -998,8 +1037,8 @@ class Presets(BaseSDK):
] = UNSET,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Optional[bool] = False,
@@ -1012,8 +1051,8 @@ class Presets(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ChatFunctionTool],
- List[components.ChatFunctionToolTypedDict],
+ Iterable[components.ChatFunctionTool],
+ Iterable[components.ChatFunctionToolTypedDict],
]
] = None,
top_a: OptionalNullable[float] = UNSET,
@@ -1033,6 +1072,8 @@ class Presets(BaseSDK):
Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.
+ If set, this operation will use `api_key` from the global security.
+
:param slug: URL-safe slug identifying the preset. Created if it does not exist.
:param messages: List of messages for the conversation
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
@@ -1107,19 +1148,25 @@ class Presets(BaseSDK):
debug, Optional[components.ChatDebugOptions]
),
frequency_penalty=frequency_penalty,
- image_config=image_config,
- logit_bias=logit_bias,
+ image_config=utils.unmarshal(
+ image_config, Optional[Dict[str, components.ImageConfig]]
+ ),
+ logit_bias=utils.unmarshal(
+ logit_bias, OptionalNullable[Dict[str, float]]
+ ),
logprobs=logprobs,
max_completion_tokens=max_completion_tokens,
max_tokens=max_tokens,
messages=utils.get_pydantic_model(
messages, List[components.ChatMessages]
),
- metadata=metadata,
+ metadata=utils.unmarshal(metadata, Optional[Dict[str, str]]),
min_p=min_p,
- modalities=modalities,
+ modalities=utils.unmarshal(
+ modalities, Optional[List[components.Modality]]
+ ),
model=model,
- models=models,
+ models=utils.unmarshal(models, Optional[List[str]]),
parallel_tool_calls=parallel_tool_calls,
plugins=utils.get_pydantic_model(
plugins, Optional[List[components.ChatRequestPlugin]]
@@ -1139,7 +1186,7 @@ class Presets(BaseSDK):
seed=seed,
service_tier=service_tier,
session_id=session_id,
- stop=stop,
+ stop=utils.unmarshal(stop, OptionalNullable[components.Stop]),
stop_server_tools_when=utils.get_pydantic_model(
stop_server_tools_when,
Optional[List[components.StopServerToolsWhenCondition]],
@@ -1186,6 +1233,7 @@ class Presets(BaseSDK):
request.chat_request, False, False, "json", components.ChatRequest
),
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -1210,9 +1258,11 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "409", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1270,8 +1320,8 @@ class Presets(BaseSDK):
slug: str,
messages: Nullable[
Union[
- List[components.MessagesMessageParam],
- List[components.MessagesMessageParamTypedDict],
+ Iterable[components.MessagesMessageParam],
+ Iterable[components.MessagesMessageParamTypedDict],
]
],
model: str,
@@ -1289,8 +1339,8 @@ class Presets(BaseSDK):
] = UNSET,
fallbacks: OptionalNullable[
Union[
- List[components.MessagesFallbackParam],
- List[components.MessagesFallbackParamTypedDict],
+ Iterable[components.MessagesFallbackParam],
+ Iterable[components.MessagesFallbackParamTypedDict],
]
] = UNSET,
max_tokens: Optional[int] = None,
@@ -1300,7 +1350,7 @@ class Presets(BaseSDK):
components.MessagesRequestMetadataTypedDict,
]
] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
output_config: Optional[
Union[
components.MessagesOutputConfig,
@@ -1309,8 +1359,8 @@ class Presets(BaseSDK):
] = None,
plugins: Optional[
Union[
- List[components.MessagesRequestPlugin],
- List[components.MessagesRequestPluginTypedDict],
+ Iterable[components.MessagesRequestPlugin],
+ Iterable[components.MessagesRequestPluginTypedDict],
]
] = None,
provider: OptionalNullable[
@@ -1321,11 +1371,11 @@ class Presets(BaseSDK):
service_tier: Optional[str] = None,
session_id: Optional[str] = None,
speed: OptionalNullable[components.Speed] = UNSET,
- stop_sequences: Optional[List[str]] = None,
+ stop_sequences: Optional[Iterable[str]] = None,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Optional[bool] = None,
@@ -1339,8 +1389,8 @@ class Presets(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.MessagesRequestToolUnion],
- List[components.MessagesRequestToolUnionTypedDict],
+ Iterable[components.MessagesRequestToolUnion],
+ Iterable[components.MessagesRequestToolUnionTypedDict],
]
] = None,
top_k: Optional[int] = None,
@@ -1358,6 +1408,8 @@ class Presets(BaseSDK):
Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.
+ If set, this operation will use `api_key` from the global security.
+
:param slug: URL-safe slug identifying the preset. Created if it does not exist.
:param messages:
:param model:
@@ -1430,7 +1482,7 @@ class Presets(BaseSDK):
metadata, Optional[components.MessagesRequestMetadata]
),
model=model,
- models=models,
+ models=utils.unmarshal(models, Optional[List[str]]),
output_config=utils.get_pydantic_model(
output_config, Optional[components.MessagesOutputConfig]
),
@@ -1443,7 +1495,7 @@ class Presets(BaseSDK):
service_tier=service_tier,
session_id=session_id,
speed=speed,
- stop_sequences=stop_sequences,
+ stop_sequences=utils.unmarshal(stop_sequences, Optional[List[str]]),
stop_server_tools_when=utils.get_pydantic_model(
stop_server_tools_when,
Optional[List[components.StopServerToolsWhenCondition]],
@@ -1493,6 +1545,7 @@ class Presets(BaseSDK):
components.MessagesRequest,
),
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -1517,9 +1570,11 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "409", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1577,8 +1632,8 @@ class Presets(BaseSDK):
slug: str,
messages: Nullable[
Union[
- List[components.MessagesMessageParam],
- List[components.MessagesMessageParamTypedDict],
+ Iterable[components.MessagesMessageParam],
+ Iterable[components.MessagesMessageParamTypedDict],
]
],
model: str,
@@ -1596,8 +1651,8 @@ class Presets(BaseSDK):
] = UNSET,
fallbacks: OptionalNullable[
Union[
- List[components.MessagesFallbackParam],
- List[components.MessagesFallbackParamTypedDict],
+ Iterable[components.MessagesFallbackParam],
+ Iterable[components.MessagesFallbackParamTypedDict],
]
] = UNSET,
max_tokens: Optional[int] = None,
@@ -1607,7 +1662,7 @@ class Presets(BaseSDK):
components.MessagesRequestMetadataTypedDict,
]
] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
output_config: Optional[
Union[
components.MessagesOutputConfig,
@@ -1616,8 +1671,8 @@ class Presets(BaseSDK):
] = None,
plugins: Optional[
Union[
- List[components.MessagesRequestPlugin],
- List[components.MessagesRequestPluginTypedDict],
+ Iterable[components.MessagesRequestPlugin],
+ Iterable[components.MessagesRequestPluginTypedDict],
]
] = None,
provider: OptionalNullable[
@@ -1628,11 +1683,11 @@ class Presets(BaseSDK):
service_tier: Optional[str] = None,
session_id: Optional[str] = None,
speed: OptionalNullable[components.Speed] = UNSET,
- stop_sequences: Optional[List[str]] = None,
+ stop_sequences: Optional[Iterable[str]] = None,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Optional[bool] = None,
@@ -1646,8 +1701,8 @@ class Presets(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.MessagesRequestToolUnion],
- List[components.MessagesRequestToolUnionTypedDict],
+ Iterable[components.MessagesRequestToolUnion],
+ Iterable[components.MessagesRequestToolUnionTypedDict],
]
] = None,
top_k: Optional[int] = None,
@@ -1665,6 +1720,8 @@ class Presets(BaseSDK):
Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.
+ If set, this operation will use `api_key` from the global security.
+
:param slug: URL-safe slug identifying the preset. Created if it does not exist.
:param messages:
:param model:
@@ -1737,7 +1794,7 @@ class Presets(BaseSDK):
metadata, Optional[components.MessagesRequestMetadata]
),
model=model,
- models=models,
+ models=utils.unmarshal(models, Optional[List[str]]),
output_config=utils.get_pydantic_model(
output_config, Optional[components.MessagesOutputConfig]
),
@@ -1750,7 +1807,7 @@ class Presets(BaseSDK):
service_tier=service_tier,
session_id=session_id,
speed=speed,
- stop_sequences=stop_sequences,
+ stop_sequences=utils.unmarshal(stop_sequences, Optional[List[str]]),
stop_server_tools_when=utils.get_pydantic_model(
stop_server_tools_when,
Optional[List[components.StopServerToolsWhenCondition]],
@@ -1800,6 +1857,7 @@ class Presets(BaseSDK):
components.MessagesRequest,
),
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -1824,9 +1882,11 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "409", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1898,26 +1958,26 @@ class Presets(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- include: OptionalNullable[List[components.ResponseIncludesEnum]] = UNSET,
+ include: OptionalNullable[Iterable[components.ResponseIncludesEnum]] = UNSET,
input: Optional[
Union[components.InputsUnion, components.InputsUnionTypedDict]
] = None,
instructions: OptionalNullable[str] = UNSET,
max_output_tokens: OptionalNullable[int] = UNSET,
max_tool_calls: OptionalNullable[int] = UNSET,
- metadata: OptionalNullable[Dict[str, str]] = UNSET,
- modalities: Optional[List[components.OutputModalityEnum]] = None,
+ metadata: OptionalNullable[Mapping[str, str]] = UNSET,
+ modalities: Optional[Iterable[components.OutputModalityEnum]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ResponsesRequestPlugin],
- List[components.ResponsesRequestPluginTypedDict],
+ Iterable[components.ResponsesRequestPlugin],
+ Iterable[components.ResponsesRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -1942,8 +2002,8 @@ class Presets(BaseSDK):
session_id: Optional[str] = None,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Optional[bool] = False,
@@ -1959,8 +2019,8 @@ class Presets(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ResponsesRequestToolUnion],
- List[components.ResponsesRequestToolUnionTypedDict],
+ Iterable[components.ResponsesRequestToolUnion],
+ Iterable[components.ResponsesRequestToolUnionTypedDict],
]
] = None,
top_k: Optional[int] = None,
@@ -1980,6 +2040,8 @@ class Presets(BaseSDK):
Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.
+ If set, this operation will use `api_key` from the global security.
+
:param slug: URL-safe slug identifying the preset. Created if it does not exist.
:param http_referer: 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.
@@ -2054,16 +2116,22 @@ class Presets(BaseSDK):
debug, Optional[components.ChatDebugOptions]
),
frequency_penalty=frequency_penalty,
- image_config=image_config,
- include=include,
+ image_config=utils.unmarshal(
+ image_config, Optional[Dict[str, components.ImageConfig]]
+ ),
+ include=utils.unmarshal(
+ include, OptionalNullable[List[components.ResponseIncludesEnum]]
+ ),
input=utils.get_pydantic_model(input, Optional[components.InputsUnion]),
instructions=instructions,
max_output_tokens=max_output_tokens,
max_tool_calls=max_tool_calls,
- metadata=metadata,
- modalities=modalities,
+ metadata=utils.unmarshal(metadata, OptionalNullable[Dict[str, str]]),
+ modalities=utils.unmarshal(
+ modalities, Optional[List[components.OutputModalityEnum]]
+ ),
model=model,
- models=models,
+ models=utils.unmarshal(models, Optional[List[str]]),
parallel_tool_calls=parallel_tool_calls,
plugins=utils.get_pydantic_model(
plugins, Optional[List[components.ResponsesRequestPlugin]]
@@ -2133,6 +2201,7 @@ class Presets(BaseSDK):
components.ResponsesRequest,
),
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -2157,9 +2226,11 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "409", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2231,26 +2302,26 @@ class Presets(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- include: OptionalNullable[List[components.ResponseIncludesEnum]] = UNSET,
+ include: OptionalNullable[Iterable[components.ResponseIncludesEnum]] = UNSET,
input: Optional[
Union[components.InputsUnion, components.InputsUnionTypedDict]
] = None,
instructions: OptionalNullable[str] = UNSET,
max_output_tokens: OptionalNullable[int] = UNSET,
max_tool_calls: OptionalNullable[int] = UNSET,
- metadata: OptionalNullable[Dict[str, str]] = UNSET,
- modalities: Optional[List[components.OutputModalityEnum]] = None,
+ metadata: OptionalNullable[Mapping[str, str]] = UNSET,
+ modalities: Optional[Iterable[components.OutputModalityEnum]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ResponsesRequestPlugin],
- List[components.ResponsesRequestPluginTypedDict],
+ Iterable[components.ResponsesRequestPlugin],
+ Iterable[components.ResponsesRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -2275,8 +2346,8 @@ class Presets(BaseSDK):
session_id: Optional[str] = None,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Optional[bool] = False,
@@ -2292,8 +2363,8 @@ class Presets(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ResponsesRequestToolUnion],
- List[components.ResponsesRequestToolUnionTypedDict],
+ Iterable[components.ResponsesRequestToolUnion],
+ Iterable[components.ResponsesRequestToolUnionTypedDict],
]
] = None,
top_k: Optional[int] = None,
@@ -2313,6 +2384,8 @@ class Presets(BaseSDK):
Creates a preset (or a new version of an existing one) from an inference request body. Only fields that overlap with the preset config are persisted; other fields (e.g. `messages`, `stream`, `prompt`) are silently ignored.
+ If set, this operation will use `api_key` from the global security.
+
:param slug: URL-safe slug identifying the preset. Created if it does not exist.
:param http_referer: 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.
@@ -2387,16 +2460,22 @@ class Presets(BaseSDK):
debug, Optional[components.ChatDebugOptions]
),
frequency_penalty=frequency_penalty,
- image_config=image_config,
- include=include,
+ image_config=utils.unmarshal(
+ image_config, Optional[Dict[str, components.ImageConfig]]
+ ),
+ include=utils.unmarshal(
+ include, OptionalNullable[List[components.ResponseIncludesEnum]]
+ ),
input=utils.get_pydantic_model(input, Optional[components.InputsUnion]),
instructions=instructions,
max_output_tokens=max_output_tokens,
max_tool_calls=max_tool_calls,
- metadata=metadata,
- modalities=modalities,
+ metadata=utils.unmarshal(metadata, OptionalNullable[Dict[str, str]]),
+ modalities=utils.unmarshal(
+ modalities, Optional[List[components.OutputModalityEnum]]
+ ),
model=model,
- models=models,
+ models=utils.unmarshal(models, Optional[List[str]]),
parallel_tool_calls=parallel_tool_calls,
plugins=utils.get_pydantic_model(
plugins, Optional[List[components.ResponsesRequestPlugin]]
@@ -2466,6 +2545,7 @@ class Presets(BaseSDK):
components.ResponsesRequest,
),
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -2490,9 +2570,11 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "409", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2562,6 +2644,8 @@ class Presets(BaseSDK):
Lists all versions of a preset, ordered by version number ascending (oldest first).
+ If set, this operation will use `api_key` from the global security.
+
:param slug: URL-safe slug identifying the preset.
:param http_referer: 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.
@@ -2615,6 +2699,7 @@ class Presets(BaseSDK):
),
security=self.sdk_configuration.security,
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -2639,24 +2724,26 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.ListPresetVersionsResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
@@ -2668,6 +2755,9 @@ class Presets(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -2729,6 +2819,8 @@ class Presets(BaseSDK):
Lists all versions of a preset, ordered by version number ascending (oldest first).
+ If set, this operation will use `api_key` from the global security.
+
:param slug: URL-safe slug identifying the preset.
:param http_referer: 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.
@@ -2782,6 +2874,7 @@ class Presets(BaseSDK):
),
security=self.sdk_configuration.security,
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -2806,9 +2899,11 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2818,15 +2913,15 @@ class Presets(BaseSDK):
async def empty_result():
return None
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
@@ -2838,6 +2933,9 @@ class Presets(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -2898,6 +2996,8 @@ class Presets(BaseSDK):
Retrieves a specific version of a preset by its slug and version number.
+ If set, this operation will use `api_key` from the global security.
+
:param slug: URL-safe slug identifying the preset.
:param version: Version number of the preset.
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
@@ -2949,6 +3049,7 @@ class Presets(BaseSDK):
),
security=self.sdk_configuration.security,
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -2973,9 +3074,11 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -3034,6 +3137,8 @@ class Presets(BaseSDK):
Retrieves a specific version of a preset by its slug and version number.
+ If set, this operation will use `api_key` from the global security.
+
:param slug: URL-safe slug identifying the preset.
:param version: Version number of the preset.
:param http_referer: The app identifier should be your app's URL and is used as the primary identifier for rankings.
@@ -3085,6 +3190,7 @@ class Presets(BaseSDK):
),
security=self.sdk_configuration.security,
allow_empty_value=None,
+ allowed_fields=["api_key"],
timeout_ms=timeout_ms,
)
@@ -3109,9 +3215,11 @@ class Presets(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Presets"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/providers.py b/src/openrouter/providers.py
index 1c94064..c1fd708 100644
--- a/src/openrouter/providers.py
+++ b/src/openrouter/providers.py
@@ -96,9 +96,11 @@ class Providers(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Providers"],
+ extensions=None,
),
request=req,
- error_status_codes=["4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -207,9 +209,11 @@ class Providers(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Providers"],
+ extensions=None,
),
request=req,
- error_status_codes=["4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/rerank.py b/src/openrouter/rerank.py
index 96401a2..76378ff 100644
--- a/src/openrouter/rerank.py
+++ b/src/openrouter/rerank.py
@@ -7,7 +7,7 @@ from openrouter._hooks import HookContext
from openrouter.types import OptionalNullable, UNSET
from openrouter.utils import get_security_from_env
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
-from typing import Any, List, Mapping, Optional, Union
+from typing import Any, Iterable, List, Mapping, Optional, Union
class RerankAcceptEnum(str, Enum):
@@ -21,7 +21,9 @@ class Rerank(BaseSDK):
def rerank(
self,
*,
- documents: Union[List[operations.Document], List[operations.DocumentTypedDict]],
+ documents: Union[
+ Iterable[operations.Document], Iterable[operations.DocumentTypedDict]
+ ],
model: str,
query: str,
http_referer: Optional[str] = None,
@@ -35,8 +37,8 @@ class Rerank(BaseSDK):
top_n: Optional[int] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
- timeout_ms: Optional[int] = None,
accept_header_override: Optional[RerankAcceptEnum] = None,
+ timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
) -> operations.CreateRerankResponse:
r"""Submit a rerank request
@@ -140,22 +142,11 @@ class Rerank(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Rerank"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "503",
- "524",
- "529",
- "5XX",
- ],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -232,7 +223,9 @@ class Rerank(BaseSDK):
async def rerank_async(
self,
*,
- documents: Union[List[operations.Document], List[operations.DocumentTypedDict]],
+ documents: Union[
+ Iterable[operations.Document], Iterable[operations.DocumentTypedDict]
+ ],
model: str,
query: str,
http_referer: Optional[str] = None,
@@ -246,8 +239,8 @@ class Rerank(BaseSDK):
top_n: Optional[int] = None,
retries: OptionalNullable[utils.RetryConfig] = UNSET,
server_url: Optional[str] = None,
- timeout_ms: Optional[int] = None,
accept_header_override: Optional[RerankAcceptEnum] = None,
+ timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
) -> operations.CreateRerankResponse:
r"""Submit a rerank request
@@ -351,22 +344,11 @@ class Rerank(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Rerank"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "503",
- "524",
- "529",
- "5XX",
- ],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/responses.py b/src/openrouter/responses.py
index e80404c..28b31f4 100644
--- a/src/openrouter/responses.py
+++ b/src/openrouter/responses.py
@@ -1,18 +1,22 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from .basesdk import BaseSDK
-from enum import Enum
from openrouter import components, errors, operations, utils
from openrouter._hooks import HookContext
from openrouter.types import OptionalNullable, UNSET
from openrouter.utils import eventstreaming, get_security_from_env
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
-from typing import Any, Dict, List, Literal, Mapping, Optional, Union, overload
-
-
-class SendAcceptEnum(str, Enum):
- APPLICATION_JSON = "application/json"
- TEXT_EVENT_STREAM = "text/event-stream"
+from typing import (
+ Any,
+ Dict,
+ Iterable,
+ List,
+ Literal,
+ Mapping,
+ Optional,
+ Union,
+ overload,
+)
class Responses(BaseSDK):
@@ -39,26 +43,26 @@ class Responses(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- include: OptionalNullable[List[components.ResponseIncludesEnum]] = UNSET,
+ include: OptionalNullable[Iterable[components.ResponseIncludesEnum]] = UNSET,
input: Optional[
Union[components.InputsUnion, components.InputsUnionTypedDict]
] = None,
instructions: OptionalNullable[str] = UNSET,
max_output_tokens: OptionalNullable[int] = UNSET,
max_tool_calls: OptionalNullable[int] = UNSET,
- metadata: OptionalNullable[Dict[str, str]] = UNSET,
- modalities: Optional[List[components.OutputModalityEnum]] = None,
+ metadata: OptionalNullable[Mapping[str, str]] = UNSET,
+ modalities: Optional[Iterable[components.OutputModalityEnum]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ResponsesRequestPlugin],
- List[components.ResponsesRequestPluginTypedDict],
+ Iterable[components.ResponsesRequestPlugin],
+ Iterable[components.ResponsesRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -83,8 +87,8 @@ class Responses(BaseSDK):
session_id: Optional[str] = None,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Union[Literal[False], None] = None,
@@ -100,8 +104,8 @@ class Responses(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ResponsesRequestToolUnion],
- List[components.ResponsesRequestToolUnionTypedDict],
+ Iterable[components.ResponsesRequestToolUnion],
+ Iterable[components.ResponsesRequestToolUnionTypedDict],
]
] = None,
top_k: Optional[int] = None,
@@ -169,7 +173,6 @@ class Responses(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
@@ -194,26 +197,26 @@ class Responses(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- include: OptionalNullable[List[components.ResponseIncludesEnum]] = UNSET,
+ include: OptionalNullable[Iterable[components.ResponseIncludesEnum]] = UNSET,
input: Optional[
Union[components.InputsUnion, components.InputsUnionTypedDict]
] = None,
instructions: OptionalNullable[str] = UNSET,
max_output_tokens: OptionalNullable[int] = UNSET,
max_tool_calls: OptionalNullable[int] = UNSET,
- metadata: OptionalNullable[Dict[str, str]] = UNSET,
- modalities: Optional[List[components.OutputModalityEnum]] = None,
+ metadata: OptionalNullable[Mapping[str, str]] = UNSET,
+ modalities: Optional[Iterable[components.OutputModalityEnum]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ResponsesRequestPlugin],
- List[components.ResponsesRequestPluginTypedDict],
+ Iterable[components.ResponsesRequestPlugin],
+ Iterable[components.ResponsesRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -238,8 +241,8 @@ class Responses(BaseSDK):
session_id: Optional[str] = None,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Literal[True],
@@ -255,8 +258,8 @@ class Responses(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ResponsesRequestToolUnion],
- List[components.ResponsesRequestToolUnionTypedDict],
+ Iterable[components.ResponsesRequestToolUnion],
+ Iterable[components.ResponsesRequestToolUnionTypedDict],
]
] = None,
top_k: Optional[int] = None,
@@ -324,10 +327,10 @@ class Responses(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
+ @overload
def send(
self,
*,
@@ -348,26 +351,26 @@ class Responses(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- include: OptionalNullable[List[components.ResponseIncludesEnum]] = UNSET,
+ include: OptionalNullable[Iterable[components.ResponseIncludesEnum]] = UNSET,
input: Optional[
Union[components.InputsUnion, components.InputsUnionTypedDict]
] = None,
instructions: OptionalNullable[str] = UNSET,
max_output_tokens: OptionalNullable[int] = UNSET,
max_tool_calls: OptionalNullable[int] = UNSET,
- metadata: OptionalNullable[Dict[str, str]] = UNSET,
- modalities: Optional[List[components.OutputModalityEnum]] = None,
+ metadata: OptionalNullable[Mapping[str, str]] = UNSET,
+ modalities: Optional[Iterable[components.OutputModalityEnum]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ResponsesRequestPlugin],
- List[components.ResponsesRequestPluginTypedDict],
+ Iterable[components.ResponsesRequestPlugin],
+ Iterable[components.ResponsesRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -392,11 +395,11 @@ class Responses(BaseSDK):
session_id: Optional[str] = None,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
- stream: Optional[bool] = False,
+ stream: bool,
temperature: OptionalNullable[float] = UNSET,
text: Optional[
Union[components.TextExtendedConfig, components.TextExtendedConfigTypedDict]
@@ -409,8 +412,8 @@ class Responses(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ResponsesRequestToolUnion],
- List[components.ResponsesRequestToolUnionTypedDict],
+ Iterable[components.ResponsesRequestToolUnion],
+ Iterable[components.ResponsesRequestToolUnionTypedDict],
]
] = None,
top_k: Optional[int] = None,
@@ -425,7 +428,166 @@ class Responses(BaseSDK):
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
- ) -> operations.CreateResponsesResponse:
+ ) -> Union[
+ components.OpenResponsesResult,
+ eventstreaming.EventStream[components.StreamEvents],
+ ]:
+ r"""Create a response
+
+ Creates a streaming or non-streaming response using OpenResponses API format
+
+ :param http_referer: 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.
+
+ :param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+
+ :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+
+ :param x_open_router_metadata: Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.
+ :param background:
+ :param cache_control: Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
+ :param debug: Debug options for inspecting request transformations (streaming only)
+ :param frequency_penalty:
+ :param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.
+ :param include:
+ :param input: Input for a response request - can be a string or array of items
+ :param instructions:
+ :param max_output_tokens:
+ :param max_tool_calls:
+ :param metadata: Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed.
+ :param modalities: Output modalities for the response. Supported values are \"text\" and \"image\".
+ :param model:
+ :param models:
+ :param parallel_tool_calls:
+ :param plugins: Plugins you want to enable for this request, including their settings.
+ :param presence_penalty:
+ :param previous_response_id:
+ :param prompt:
+ :param prompt_cache_key:
+ :param provider: When multiple model providers are available, optionally indicate your routing preference.
+ :param reasoning: Configuration for reasoning mode in the response
+ :param safety_identifier:
+ :param service_tier:
+ :param session_id: A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters.
+ :param stop_server_tools_when: Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`.
+ :param stream:
+ :param temperature:
+ :param text: Text output configuration including format and verbosity
+ :param tool_choice:
+ :param tools:
+ :param top_k:
+ :param top_logprobs:
+ :param top_p:
+ :param trace: Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations.
+ :param truncation:
+ :param user: A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 256 characters.
+ :param retries: Override the default retry configuration for this method
+ :param server_url: Override the default server URL for this method
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
+ :param http_headers: Additional headers to set or replace on requests.
+ """
+
+ def send(
+ self,
+ *,
+ http_referer: Optional[str] = None,
+ x_open_router_title: Optional[str] = None,
+ x_open_router_categories: Optional[str] = None,
+ x_open_router_metadata: Optional[components.MetadataLevel] = None,
+ background: OptionalNullable[bool] = UNSET,
+ cache_control: Optional[
+ Union[
+ components.AnthropicCacheControlDirective,
+ components.AnthropicCacheControlDirectiveTypedDict,
+ ]
+ ] = None,
+ debug: Optional[
+ Union[components.ChatDebugOptions, components.ChatDebugOptionsTypedDict]
+ ] = None,
+ frequency_penalty: OptionalNullable[float] = UNSET,
+ image_config: Optional[
+ Union[
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
+ ]
+ ] = None,
+ include: OptionalNullable[Iterable[components.ResponseIncludesEnum]] = UNSET,
+ input: Optional[
+ Union[components.InputsUnion, components.InputsUnionTypedDict]
+ ] = None,
+ instructions: OptionalNullable[str] = UNSET,
+ max_output_tokens: OptionalNullable[int] = UNSET,
+ max_tool_calls: OptionalNullable[int] = UNSET,
+ metadata: OptionalNullable[Mapping[str, str]] = UNSET,
+ modalities: Optional[Iterable[components.OutputModalityEnum]] = None,
+ model: Optional[str] = None,
+ models: Optional[Iterable[str]] = None,
+ parallel_tool_calls: OptionalNullable[bool] = UNSET,
+ plugins: Optional[
+ Union[
+ Iterable[components.ResponsesRequestPlugin],
+ Iterable[components.ResponsesRequestPluginTypedDict],
+ ]
+ ] = None,
+ presence_penalty: OptionalNullable[float] = UNSET,
+ previous_response_id: OptionalNullable[str] = UNSET,
+ prompt: OptionalNullable[
+ Union[
+ components.StoredPromptTemplate,
+ components.StoredPromptTemplateTypedDict,
+ ]
+ ] = UNSET,
+ prompt_cache_key: OptionalNullable[str] = UNSET,
+ provider: OptionalNullable[
+ Union[
+ components.ProviderPreferences, components.ProviderPreferencesTypedDict
+ ]
+ ] = UNSET,
+ reasoning: OptionalNullable[
+ Union[components.ReasoningConfig, components.ReasoningConfigTypedDict]
+ ] = UNSET,
+ safety_identifier: OptionalNullable[str] = UNSET,
+ service_tier: OptionalNullable[components.ResponsesRequestServiceTier] = "auto",
+ session_id: Optional[str] = None,
+ stop_server_tools_when: Optional[
+ Union[
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
+ ]
+ ] = None,
+ stream: Optional[bool] = False,
+ temperature: OptionalNullable[float] = UNSET,
+ text: Optional[
+ Union[components.TextExtendedConfig, components.TextExtendedConfigTypedDict]
+ ] = None,
+ tool_choice: Optional[
+ Union[
+ components.OpenAIResponsesToolChoiceUnion,
+ components.OpenAIResponsesToolChoiceUnionTypedDict,
+ ]
+ ] = None,
+ tools: Optional[
+ Union[
+ Iterable[components.ResponsesRequestToolUnion],
+ Iterable[components.ResponsesRequestToolUnionTypedDict],
+ ]
+ ] = None,
+ top_k: Optional[int] = None,
+ top_logprobs: OptionalNullable[int] = UNSET,
+ top_p: OptionalNullable[float] = UNSET,
+ trace: Optional[
+ Union[components.TraceConfig, components.TraceConfigTypedDict]
+ ] = None,
+ truncation: OptionalNullable[components.OpenAIResponsesTruncation] = UNSET,
+ user: Optional[str] = None,
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
+ server_url: Optional[str] = None,
+ timeout_ms: Optional[int] = None,
+ http_headers: Optional[Mapping[str, str]] = None,
+ ) -> Union[
+ components.OpenResponsesResult,
+ eventstreaming.EventStream[components.StreamEvents],
+ ]:
r"""Create a response
Creates a streaming or non-streaming response using OpenResponses API format
@@ -478,7 +640,6 @@ class Responses(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
base_url = None
@@ -505,16 +666,22 @@ class Responses(BaseSDK):
debug, Optional[components.ChatDebugOptions]
),
frequency_penalty=frequency_penalty,
- image_config=image_config,
- include=include,
+ image_config=utils.unmarshal(
+ image_config, Optional[Dict[str, components.ImageConfig]]
+ ),
+ include=utils.unmarshal(
+ include, OptionalNullable[List[components.ResponseIncludesEnum]]
+ ),
input=utils.get_pydantic_model(input, Optional[components.InputsUnion]),
instructions=instructions,
max_output_tokens=max_output_tokens,
max_tool_calls=max_tool_calls,
- metadata=metadata,
- modalities=modalities,
+ metadata=utils.unmarshal(metadata, OptionalNullable[Dict[str, str]]),
+ modalities=utils.unmarshal(
+ modalities, Optional[List[components.OutputModalityEnum]]
+ ),
model=model,
- models=models,
+ models=utils.unmarshal(models, Optional[List[str]]),
parallel_tool_calls=parallel_tool_calls,
plugins=utils.get_pydantic_model(
plugins, Optional[List[components.ResponsesRequestPlugin]]
@@ -568,7 +735,9 @@ class Responses(BaseSDK):
request_has_path_params=False,
request_has_query_params=True,
user_agent_header="user-agent",
- accept_header_value="text/event-stream" if stream else "application/json",
+ accept_header_value="text/event-stream"
+ if stream is True
+ else "application/json",
http_headers=http_headers,
_globals=operations.CreateResponsesGlobals(
http_referer=self.sdk_configuration.globals.http_referer,
@@ -608,27 +777,12 @@ class Responses(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["beta.responses"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "403",
- "404",
- "408",
- "413",
- "422",
- "429",
- "4XX",
- "500",
- "502",
- "503",
- "524",
- "529",
- "5XX",
- ],
- stream=True,
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
+ stream=stream is True,
retry_config=retry_config,
)
@@ -641,8 +795,8 @@ class Responses(BaseSDK):
if utils.match_response(http_res, "200", "text/event-stream"):
return eventstreaming.EventStream(
http_res,
- lambda raw: utils.unmarshal_json(
- raw, components.ResponsesStreamingResponse
+ lambda raw: unmarshal_json_response(
+ components.ResponsesStreamingResponse, http_res, raw
).data,
sentinel="[DONE]",
client_ref=self,
@@ -788,26 +942,26 @@ class Responses(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- include: OptionalNullable[List[components.ResponseIncludesEnum]] = UNSET,
+ include: OptionalNullable[Iterable[components.ResponseIncludesEnum]] = UNSET,
input: Optional[
Union[components.InputsUnion, components.InputsUnionTypedDict]
] = None,
instructions: OptionalNullable[str] = UNSET,
max_output_tokens: OptionalNullable[int] = UNSET,
max_tool_calls: OptionalNullable[int] = UNSET,
- metadata: OptionalNullable[Dict[str, str]] = UNSET,
- modalities: Optional[List[components.OutputModalityEnum]] = None,
+ metadata: OptionalNullable[Mapping[str, str]] = UNSET,
+ modalities: Optional[Iterable[components.OutputModalityEnum]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ResponsesRequestPlugin],
- List[components.ResponsesRequestPluginTypedDict],
+ Iterable[components.ResponsesRequestPlugin],
+ Iterable[components.ResponsesRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -832,8 +986,8 @@ class Responses(BaseSDK):
session_id: Optional[str] = None,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Union[Literal[False], None] = None,
@@ -849,8 +1003,8 @@ class Responses(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ResponsesRequestToolUnion],
- List[components.ResponsesRequestToolUnionTypedDict],
+ Iterable[components.ResponsesRequestToolUnion],
+ Iterable[components.ResponsesRequestToolUnionTypedDict],
]
] = None,
top_k: Optional[int] = None,
@@ -918,7 +1072,6 @@ class Responses(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
@@ -943,26 +1096,26 @@ class Responses(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- include: OptionalNullable[List[components.ResponseIncludesEnum]] = UNSET,
+ include: OptionalNullable[Iterable[components.ResponseIncludesEnum]] = UNSET,
input: Optional[
Union[components.InputsUnion, components.InputsUnionTypedDict]
] = None,
instructions: OptionalNullable[str] = UNSET,
max_output_tokens: OptionalNullable[int] = UNSET,
max_tool_calls: OptionalNullable[int] = UNSET,
- metadata: OptionalNullable[Dict[str, str]] = UNSET,
- modalities: Optional[List[components.OutputModalityEnum]] = None,
+ metadata: OptionalNullable[Mapping[str, str]] = UNSET,
+ modalities: Optional[Iterable[components.OutputModalityEnum]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ResponsesRequestPlugin],
- List[components.ResponsesRequestPluginTypedDict],
+ Iterable[components.ResponsesRequestPlugin],
+ Iterable[components.ResponsesRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -987,8 +1140,8 @@ class Responses(BaseSDK):
session_id: Optional[str] = None,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
stream: Literal[True],
@@ -1004,8 +1157,8 @@ class Responses(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ResponsesRequestToolUnion],
- List[components.ResponsesRequestToolUnionTypedDict],
+ Iterable[components.ResponsesRequestToolUnion],
+ Iterable[components.ResponsesRequestToolUnionTypedDict],
]
] = None,
top_k: Optional[int] = None,
@@ -1073,10 +1226,10 @@ class Responses(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
+ @overload
async def send_async(
self,
*,
@@ -1097,26 +1250,26 @@ class Responses(BaseSDK):
frequency_penalty: OptionalNullable[float] = UNSET,
image_config: Optional[
Union[
- Dict[str, components.ImageConfig],
- Dict[str, components.ImageConfigTypedDict],
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
]
] = None,
- include: OptionalNullable[List[components.ResponseIncludesEnum]] = UNSET,
+ include: OptionalNullable[Iterable[components.ResponseIncludesEnum]] = UNSET,
input: Optional[
Union[components.InputsUnion, components.InputsUnionTypedDict]
] = None,
instructions: OptionalNullable[str] = UNSET,
max_output_tokens: OptionalNullable[int] = UNSET,
max_tool_calls: OptionalNullable[int] = UNSET,
- metadata: OptionalNullable[Dict[str, str]] = UNSET,
- modalities: Optional[List[components.OutputModalityEnum]] = None,
+ metadata: OptionalNullable[Mapping[str, str]] = UNSET,
+ modalities: Optional[Iterable[components.OutputModalityEnum]] = None,
model: Optional[str] = None,
- models: Optional[List[str]] = None,
+ models: Optional[Iterable[str]] = None,
parallel_tool_calls: OptionalNullable[bool] = UNSET,
plugins: Optional[
Union[
- List[components.ResponsesRequestPlugin],
- List[components.ResponsesRequestPluginTypedDict],
+ Iterable[components.ResponsesRequestPlugin],
+ Iterable[components.ResponsesRequestPluginTypedDict],
]
] = None,
presence_penalty: OptionalNullable[float] = UNSET,
@@ -1141,11 +1294,11 @@ class Responses(BaseSDK):
session_id: Optional[str] = None,
stop_server_tools_when: Optional[
Union[
- List[components.StopServerToolsWhenCondition],
- List[components.StopServerToolsWhenConditionTypedDict],
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
]
] = None,
- stream: Optional[bool] = False,
+ stream: bool,
temperature: OptionalNullable[float] = UNSET,
text: Optional[
Union[components.TextExtendedConfig, components.TextExtendedConfigTypedDict]
@@ -1158,8 +1311,8 @@ class Responses(BaseSDK):
] = None,
tools: Optional[
Union[
- List[components.ResponsesRequestToolUnion],
- List[components.ResponsesRequestToolUnionTypedDict],
+ Iterable[components.ResponsesRequestToolUnion],
+ Iterable[components.ResponsesRequestToolUnionTypedDict],
]
] = None,
top_k: Optional[int] = None,
@@ -1174,7 +1327,166 @@ class Responses(BaseSDK):
server_url: Optional[str] = None,
timeout_ms: Optional[int] = None,
http_headers: Optional[Mapping[str, str]] = None,
- ) -> operations.CreateResponsesResponse:
+ ) -> Union[
+ components.OpenResponsesResult,
+ eventstreaming.EventStreamAsync[components.StreamEvents],
+ ]:
+ r"""Create a response
+
+ Creates a streaming or non-streaming response using OpenResponses API format
+
+ :param http_referer: 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.
+
+ :param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+
+ :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+
+ :param x_open_router_metadata: Opt-in to surface routing metadata on the response under `openrouter_metadata`. Defaults to `disabled`. The legacy header `X-OpenRouter-Experimental-Metadata` is also accepted for backward compatibility.
+ :param background:
+ :param cache_control: Enable automatic prompt caching. When set at the top level, the system automatically applies cache breakpoints to the last cacheable block in the request. Currently supported for Anthropic Claude models.
+ :param debug: Debug options for inspecting request transformations (streaming only)
+ :param frequency_penalty:
+ :param image_config: Provider-specific image configuration options. Keys and values vary by model/provider. See https://openrouter.ai/docs/guides/overview/multimodal/image-generation for more details.
+ :param include:
+ :param input: Input for a response request - can be a string or array of items
+ :param instructions:
+ :param max_output_tokens:
+ :param max_tool_calls:
+ :param metadata: Metadata key-value pairs for the request. Keys must be ≤64 characters and cannot contain brackets. Values must be ≤512 characters. Maximum 16 pairs allowed.
+ :param modalities: Output modalities for the response. Supported values are \"text\" and \"image\".
+ :param model:
+ :param models:
+ :param parallel_tool_calls:
+ :param plugins: Plugins you want to enable for this request, including their settings.
+ :param presence_penalty:
+ :param previous_response_id:
+ :param prompt:
+ :param prompt_cache_key:
+ :param provider: When multiple model providers are available, optionally indicate your routing preference.
+ :param reasoning: Configuration for reasoning mode in the response
+ :param safety_identifier:
+ :param service_tier:
+ :param session_id: A unique identifier for grouping related requests (e.g., a conversation or agent workflow). When provided, OpenRouter uses it as the sticky routing key, routing all requests in the session to the same provider to maximize prompt cache hits. Also used for observability grouping. If provided in both the request body and the x-session-id header, the body value takes precedence. Maximum of 256 characters.
+ :param stop_server_tools_when: Stop conditions for the server-tool agent loop. Any condition firing halts the loop (OR logic). When set, this overrides `max_tool_calls`.
+ :param stream:
+ :param temperature:
+ :param text: Text output configuration including format and verbosity
+ :param tool_choice:
+ :param tools:
+ :param top_k:
+ :param top_logprobs:
+ :param top_p:
+ :param trace: Metadata for observability and tracing. Known keys (trace_id, trace_name, span_name, generation_name, parent_span_id) have special handling. Additional keys are passed through as custom metadata to configured broadcast destinations.
+ :param truncation:
+ :param user: A unique identifier representing your end-user, which helps distinguish between different users of your app. This allows your app to identify specific users in case of abuse reports, preventing your entire app from being affected by the actions of individual users. Maximum of 256 characters.
+ :param retries: Override the default retry configuration for this method
+ :param server_url: Override the default server URL for this method
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
+ :param http_headers: Additional headers to set or replace on requests.
+ """
+
+ async def send_async(
+ self,
+ *,
+ http_referer: Optional[str] = None,
+ x_open_router_title: Optional[str] = None,
+ x_open_router_categories: Optional[str] = None,
+ x_open_router_metadata: Optional[components.MetadataLevel] = None,
+ background: OptionalNullable[bool] = UNSET,
+ cache_control: Optional[
+ Union[
+ components.AnthropicCacheControlDirective,
+ components.AnthropicCacheControlDirectiveTypedDict,
+ ]
+ ] = None,
+ debug: Optional[
+ Union[components.ChatDebugOptions, components.ChatDebugOptionsTypedDict]
+ ] = None,
+ frequency_penalty: OptionalNullable[float] = UNSET,
+ image_config: Optional[
+ Union[
+ Mapping[str, components.ImageConfig],
+ Mapping[str, components.ImageConfigTypedDict],
+ ]
+ ] = None,
+ include: OptionalNullable[Iterable[components.ResponseIncludesEnum]] = UNSET,
+ input: Optional[
+ Union[components.InputsUnion, components.InputsUnionTypedDict]
+ ] = None,
+ instructions: OptionalNullable[str] = UNSET,
+ max_output_tokens: OptionalNullable[int] = UNSET,
+ max_tool_calls: OptionalNullable[int] = UNSET,
+ metadata: OptionalNullable[Mapping[str, str]] = UNSET,
+ modalities: Optional[Iterable[components.OutputModalityEnum]] = None,
+ model: Optional[str] = None,
+ models: Optional[Iterable[str]] = None,
+ parallel_tool_calls: OptionalNullable[bool] = UNSET,
+ plugins: Optional[
+ Union[
+ Iterable[components.ResponsesRequestPlugin],
+ Iterable[components.ResponsesRequestPluginTypedDict],
+ ]
+ ] = None,
+ presence_penalty: OptionalNullable[float] = UNSET,
+ previous_response_id: OptionalNullable[str] = UNSET,
+ prompt: OptionalNullable[
+ Union[
+ components.StoredPromptTemplate,
+ components.StoredPromptTemplateTypedDict,
+ ]
+ ] = UNSET,
+ prompt_cache_key: OptionalNullable[str] = UNSET,
+ provider: OptionalNullable[
+ Union[
+ components.ProviderPreferences, components.ProviderPreferencesTypedDict
+ ]
+ ] = UNSET,
+ reasoning: OptionalNullable[
+ Union[components.ReasoningConfig, components.ReasoningConfigTypedDict]
+ ] = UNSET,
+ safety_identifier: OptionalNullable[str] = UNSET,
+ service_tier: OptionalNullable[components.ResponsesRequestServiceTier] = "auto",
+ session_id: Optional[str] = None,
+ stop_server_tools_when: Optional[
+ Union[
+ Iterable[components.StopServerToolsWhenCondition],
+ Iterable[components.StopServerToolsWhenConditionTypedDict],
+ ]
+ ] = None,
+ stream: Optional[bool] = False,
+ temperature: OptionalNullable[float] = UNSET,
+ text: Optional[
+ Union[components.TextExtendedConfig, components.TextExtendedConfigTypedDict]
+ ] = None,
+ tool_choice: Optional[
+ Union[
+ components.OpenAIResponsesToolChoiceUnion,
+ components.OpenAIResponsesToolChoiceUnionTypedDict,
+ ]
+ ] = None,
+ tools: Optional[
+ Union[
+ Iterable[components.ResponsesRequestToolUnion],
+ Iterable[components.ResponsesRequestToolUnionTypedDict],
+ ]
+ ] = None,
+ top_k: Optional[int] = None,
+ top_logprobs: OptionalNullable[int] = UNSET,
+ top_p: OptionalNullable[float] = UNSET,
+ trace: Optional[
+ Union[components.TraceConfig, components.TraceConfigTypedDict]
+ ] = None,
+ truncation: OptionalNullable[components.OpenAIResponsesTruncation] = UNSET,
+ user: Optional[str] = None,
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
+ server_url: Optional[str] = None,
+ timeout_ms: Optional[int] = None,
+ http_headers: Optional[Mapping[str, str]] = None,
+ ) -> Union[
+ components.OpenResponsesResult,
+ eventstreaming.EventStreamAsync[components.StreamEvents],
+ ]:
r"""Create a response
Creates a streaming or non-streaming response using OpenResponses API format
@@ -1227,7 +1539,6 @@ class Responses(BaseSDK):
:param retries: Override the default retry configuration for this method
:param server_url: Override the default server URL for this method
:param timeout_ms: Override the default request timeout configuration for this method in milliseconds
- :param accept_header_override: Override the default accept header for this method
:param http_headers: Additional headers to set or replace on requests.
"""
base_url = None
@@ -1254,16 +1565,22 @@ class Responses(BaseSDK):
debug, Optional[components.ChatDebugOptions]
),
frequency_penalty=frequency_penalty,
- image_config=image_config,
- include=include,
+ image_config=utils.unmarshal(
+ image_config, Optional[Dict[str, components.ImageConfig]]
+ ),
+ include=utils.unmarshal(
+ include, OptionalNullable[List[components.ResponseIncludesEnum]]
+ ),
input=utils.get_pydantic_model(input, Optional[components.InputsUnion]),
instructions=instructions,
max_output_tokens=max_output_tokens,
max_tool_calls=max_tool_calls,
- metadata=metadata,
- modalities=modalities,
+ metadata=utils.unmarshal(metadata, OptionalNullable[Dict[str, str]]),
+ modalities=utils.unmarshal(
+ modalities, Optional[List[components.OutputModalityEnum]]
+ ),
model=model,
- models=models,
+ models=utils.unmarshal(models, Optional[List[str]]),
parallel_tool_calls=parallel_tool_calls,
plugins=utils.get_pydantic_model(
plugins, Optional[List[components.ResponsesRequestPlugin]]
@@ -1317,7 +1634,9 @@ class Responses(BaseSDK):
request_has_path_params=False,
request_has_query_params=True,
user_agent_header="user-agent",
- accept_header_value="text/event-stream" if stream else "application/json",
+ accept_header_value="text/event-stream"
+ if stream is True
+ else "application/json",
http_headers=http_headers,
_globals=operations.CreateResponsesGlobals(
http_referer=self.sdk_configuration.globals.http_referer,
@@ -1357,27 +1676,12 @@ class Responses(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["beta.responses"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "403",
- "404",
- "408",
- "413",
- "422",
- "429",
- "4XX",
- "500",
- "502",
- "503",
- "524",
- "529",
- "5XX",
- ],
- stream=True,
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
+ stream=stream is True,
retry_config=retry_config,
)
@@ -1390,8 +1694,8 @@ class Responses(BaseSDK):
if utils.match_response(http_res, "200", "text/event-stream"):
return eventstreaming.EventStreamAsync(
http_res,
- lambda raw: utils.unmarshal_json(
- raw, components.ResponsesStreamingResponse
+ lambda raw: unmarshal_json_response(
+ components.ResponsesStreamingResponse, http_res, raw
).data,
sentinel="[DONE]",
client_ref=self,
diff --git a/src/openrouter/sdk.py b/src/openrouter/sdk.py
index 8fe36b2..a6a9afd 100644
--- a/src/openrouter/sdk.py
+++ b/src/openrouter/sdk.py
@@ -135,8 +135,8 @@ class OpenRouter(BaseSDK):
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
server: Optional[str] = None,
- server_url: Optional[str] = None,
url_params: Optional[Dict[str, str]] = None,
+ server_url: Optional[str] = None,
client: Optional[HttpClient] = None,
async_client: Optional[AsyncHttpClient] = None,
retry_config: OptionalNullable[RetryConfig] = UNSET,
@@ -179,7 +179,9 @@ class OpenRouter(BaseSDK):
), "The provided async_client must implement the AsyncHttpClient protocol."
security: Any = None
- if callable(api_key):
+ if api_key is None:
+ security = None
+ elif callable(api_key):
# pylint: disable=unnecessary-lambda-assignment
security = lambda: components.Security(api_key=api_key())
else:
diff --git a/src/openrouter/stt.py b/src/openrouter/stt.py
index 3b12f69..a5f03a7 100644
--- a/src/openrouter/stt.py
+++ b/src/openrouter/stt.py
@@ -124,22 +124,11 @@ class Stt(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["STT"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "503",
- "524",
- "529",
- "5XX",
- ],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -321,22 +310,11 @@ class Stt(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["STT"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "503",
- "524",
- "529",
- "5XX",
- ],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/tts.py b/src/openrouter/tts.py
index 66886a4..68ae54d 100644
--- a/src/openrouter/tts.py
+++ b/src/openrouter/tts.py
@@ -129,22 +129,11 @@ class Tts(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["TTS"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "503",
- "524",
- "529",
- "5XX",
- ],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
stream=True,
retry_config=retry_config,
)
@@ -358,22 +347,11 @@ class Tts(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["TTS"],
+ extensions=None,
),
request=req,
- error_status_codes=[
- "400",
- "401",
- "402",
- "404",
- "429",
- "4XX",
- "500",
- "502",
- "503",
- "524",
- "529",
- "5XX",
- ],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
stream=True,
retry_config=retry_config,
)
diff --git a/src/openrouter/types/__init__.py b/src/openrouter/types/__init__.py
index fc76fe0..faa2681 100644
--- a/src/openrouter/types/__init__.py
+++ b/src/openrouter/types/__init__.py
@@ -1,5 +1,6 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+from .base64fileinput import Base64EncodedString, Base64FileInput
from .basemodel import (
BaseModel,
Nullable,
@@ -11,6 +12,8 @@ from .basemodel import (
)
__all__ = [
+ "Base64EncodedString",
+ "Base64FileInput",
"BaseModel",
"Nullable",
"OptionalNullable",
diff --git a/src/openrouter/types/base64fileinput.py b/src/openrouter/types/base64fileinput.py
new file mode 100644
index 0000000..862566f
--- /dev/null
+++ b/src/openrouter/types/base64fileinput.py
@@ -0,0 +1,43 @@
+"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+
+from __future__ import annotations
+
+import base64
+import io
+from os import PathLike
+from typing import IO, Any, Union
+
+from pydantic.functional_validators import BeforeValidator
+from typing_extensions import Annotated
+
+
+Base64FileInput = Union[IO[bytes], PathLike[str]]
+
+
+def encode_base64_file_input(value: Any) -> Any:
+ """Convert PathLike or IO[bytes] inputs to a base64 string. All standard binary streams
+ that inherit from io.IOBase are handled. Other values pass through.
+ """
+ if isinstance(value, (PathLike, io.IOBase)):
+ if isinstance(value, PathLike):
+ with open(value, "rb") as fh:
+ binary = fh.read()
+ else:
+ # Restore position after reading: pydantic may validate the same stream more than once.
+ position = value.tell() if value.seekable() else None
+ binary = value.read()
+ if position is not None:
+ value.seek(position)
+ if isinstance(binary, str):
+ binary = binary.encode()
+ if not isinstance(binary, (bytes, bytearray)):
+ raise TypeError(
+ f"Base64FileInput expected binary IO returning bytes; got {type(binary).__name__}"
+ )
+ return base64.b64encode(binary).decode("ascii")
+ return value
+
+
+# Non-str inputs are converted to base64 by the BeforeValidator at construction time.
+# Callers can also pass a pre-encoded base64 str.
+Base64EncodedString = Annotated[str, BeforeValidator(encode_base64_file_input)]
diff --git a/src/openrouter/types/basemodel.py b/src/openrouter/types/basemodel.py
index 231c2e3..a9a640a 100644
--- a/src/openrouter/types/basemodel.py
+++ b/src/openrouter/types/basemodel.py
@@ -2,7 +2,8 @@
from pydantic import ConfigDict, model_serializer
from pydantic import BaseModel as PydanticBaseModel
-from typing import TYPE_CHECKING, Literal, Optional, TypeVar, Union
+from pydantic_core import core_schema
+from typing import TYPE_CHECKING, Any, Literal, Optional, TypeVar, Union
from typing_extensions import TypeAliasType, TypeAlias
@@ -35,5 +36,42 @@ else:
"OptionalNullable", Union[Optional[Nullable[T]], Unset], type_params=(T,)
)
-UnrecognizedInt: TypeAlias = int
-UnrecognizedStr: TypeAlias = str
+
+class UnrecognizedStr(str):
+ @classmethod
+ def __get_pydantic_core_schema__(cls, _source_type: Any, _handler: Any) -> core_schema.CoreSchema:
+ # Make UnrecognizedStr only work in lax mode, not strict mode
+ # This makes it a "fallback" option when more specific types (like Literals) don't match
+ def validate_lax(v: Any) -> 'UnrecognizedStr':
+ if isinstance(v, cls):
+ return v
+ return cls(str(v))
+
+ # Use lax_or_strict_schema where strict always fails
+ # This forces Pydantic to prefer other union members in strict mode
+ # and only fall back to UnrecognizedStr in lax mode
+ return core_schema.lax_or_strict_schema(
+ lax_schema=core_schema.chain_schema([
+ core_schema.str_schema(),
+ core_schema.no_info_plain_validator_function(validate_lax)
+ ]),
+ strict_schema=core_schema.none_schema(), # Always fails in strict mode
+ )
+
+
+class UnrecognizedInt(int):
+ @classmethod
+ def __get_pydantic_core_schema__(cls, _source_type: Any, _handler: Any) -> core_schema.CoreSchema:
+ # Make UnrecognizedInt only work in lax mode, not strict mode
+ # This makes it a "fallback" option when more specific types (like Literals) don't match
+ def validate_lax(v: Any) -> 'UnrecognizedInt':
+ if isinstance(v, cls):
+ return v
+ return cls(int(v))
+ return core_schema.lax_or_strict_schema(
+ lax_schema=core_schema.chain_schema([
+ core_schema.int_schema(),
+ core_schema.no_info_plain_validator_function(validate_lax)
+ ]),
+ strict_schema=core_schema.none_schema(), # Always fails in strict mode
+ )
diff --git a/src/openrouter/utils/__init__.py b/src/openrouter/utils/__init__.py
index 87192dd..7d59884 100644
--- a/src/openrouter/utils/__init__.py
+++ b/src/openrouter/utils/__init__.py
@@ -1,14 +1,23 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
-from typing import TYPE_CHECKING
-from importlib import import_module
-import builtins
-import sys
+from typing import Any, TYPE_CHECKING, Callable, TypeVar
+import asyncio
+
+from .dynamic_imports import lazy_getattr, lazy_dir
+
+_T = TypeVar("_T")
+
+
+async def run_sync_in_thread(func: Callable[..., _T], *args) -> _T:
+ """Run a synchronous function in a thread pool to avoid blocking the event loop."""
+ return await asyncio.to_thread(func, *args)
+
if TYPE_CHECKING:
from .annotations import get_discriminator
from .datetimes import parse_datetime
from .enums import OpenEnumMeta
+ from .unions import parse_open_union
from .headers import get_headers, get_response_headers
from .metadata import (
FieldMetadata,
@@ -42,7 +51,6 @@ if TYPE_CHECKING:
validate_decimal,
validate_float,
validate_int,
- validate_open_enum,
)
from .url import generate_url, template_url, remove_suffix
from .values import (
@@ -79,6 +87,7 @@ __all__ = [
"match_response",
"MultipartFormMetadata",
"OpenEnumMeta",
+ "parse_open_union",
"PathParamMetadata",
"QueryParamMetadata",
"remove_suffix",
@@ -104,7 +113,6 @@ __all__ = [
"validate_const",
"validate_float",
"validate_int",
- "validate_open_enum",
"cast_partial",
]
@@ -133,6 +141,7 @@ _dynamic_imports: dict[str, str] = {
"match_response": ".values",
"MultipartFormMetadata": ".metadata",
"OpenEnumMeta": ".enums",
+ "parse_open_union": ".unions",
"PathParamMetadata": ".metadata",
"QueryParamMetadata": ".metadata",
"remove_suffix": ".url",
@@ -158,43 +167,15 @@ _dynamic_imports: dict[str, str] = {
"validate_const": ".serializers",
"validate_float": ".serializers",
"validate_int": ".serializers",
- "validate_open_enum": ".serializers",
"cast_partial": ".values",
}
-def dynamic_import(modname, retries=3):
- for attempt in range(retries):
- try:
- return import_module(modname, __package__)
- except KeyError:
- # Clear any half-initialized module and retry
- sys.modules.pop(modname, None)
- if attempt == retries - 1:
- break
- raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
-
-
-def __getattr__(attr_name: str) -> object:
- module_name = _dynamic_imports.get(attr_name)
- if module_name is None:
- raise AttributeError(
- f"no {attr_name} found in _dynamic_imports, module name -> {__name__} "
- )
-
- try:
- module = dynamic_import(module_name)
- return getattr(module, attr_name)
- except ImportError as e:
- raise ImportError(
- f"Failed to import {attr_name} from {module_name}: {e}"
- ) from e
- except AttributeError as e:
- raise AttributeError(
- f"Failed to get {attr_name} from {module_name}: {e}"
- ) from e
+def __getattr__(attr_name: str) -> Any:
+ return lazy_getattr(
+ attr_name, package=__package__, dynamic_imports=_dynamic_imports
+ )
def __dir__():
- lazy_attrs = builtins.list(_dynamic_imports.keys())
- return builtins.sorted(lazy_attrs)
+ return lazy_dir(dynamic_imports=_dynamic_imports)
diff --git a/src/openrouter/utils/dynamic_imports.py b/src/openrouter/utils/dynamic_imports.py
new file mode 100644
index 0000000..673edf8
--- /dev/null
+++ b/src/openrouter/utils/dynamic_imports.py
@@ -0,0 +1,54 @@
+"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+
+from importlib import import_module
+import builtins
+import sys
+
+
+def dynamic_import(package, modname, retries=3):
+ """Import a module relative to package, retrying on KeyError from half-initialized modules."""
+ for attempt in range(retries):
+ try:
+ return import_module(modname, package)
+ except KeyError:
+ sys.modules.pop(modname, None)
+ if attempt == retries - 1:
+ break
+ raise KeyError(f"Failed to import module '{modname}' after {retries} attempts")
+
+
+def lazy_getattr(attr_name, *, package, dynamic_imports, sub_packages=None):
+ """Module-level __getattr__ that lazily loads from a dynamic_imports mapping.
+
+ Args:
+ attr_name: The attribute being looked up.
+ package: The caller's __package__ (for relative imports).
+ dynamic_imports: Dict mapping attribute names to relative module paths.
+ sub_packages: Optional list of subpackage names to lazy-load.
+ """
+ module_name = dynamic_imports.get(attr_name)
+ if module_name is not None:
+ try:
+ module = dynamic_import(package, module_name)
+ return getattr(module, attr_name)
+ except ImportError as e:
+ raise ImportError(
+ f"Failed to import {attr_name} from {module_name}: {e}"
+ ) from e
+ except AttributeError as e:
+ raise AttributeError(
+ f"Failed to get {attr_name} from {module_name}: {e}"
+ ) from e
+
+ if sub_packages and attr_name in sub_packages:
+ return import_module(f".{attr_name}", package)
+
+ raise AttributeError(f"module '{package}' has no attribute '{attr_name}'")
+
+
+def lazy_dir(*, dynamic_imports, sub_packages=None):
+ """Module-level __dir__ that lists lazily-loadable attributes."""
+ lazy_attrs = builtins.list(dynamic_imports.keys())
+ if sub_packages:
+ lazy_attrs.extend(sub_packages)
+ return builtins.sorted(lazy_attrs)
diff --git a/src/openrouter/utils/enums.py b/src/openrouter/utils/enums.py
index c3bc13c..3324e1b 100644
--- a/src/openrouter/utils/enums.py
+++ b/src/openrouter/utils/enums.py
@@ -2,6 +2,10 @@
import enum
import sys
+from typing import Any
+
+from pydantic_core import core_schema
+
class OpenEnumMeta(enum.EnumMeta):
# The __call__ method `boundary` kwarg was added in 3.11 and must be present
@@ -72,3 +76,59 @@ class OpenEnumMeta(enum.EnumMeta):
)
except ValueError:
return value
+
+ def __new__(mcs, name, bases, namespace, **kwargs):
+ cls = super().__new__(mcs, name, bases, namespace, **kwargs)
+
+ # Add __get_pydantic_core_schema__ to make open enums work correctly
+ # in union discrimination. In strict mode (used by Pydantic for unions),
+ # only known enum values match. In lax mode, unknown values are accepted.
+ def __get_pydantic_core_schema__(
+ cls_inner: Any, _source_type: Any, _handler: Any
+ ) -> core_schema.CoreSchema:
+ # Create a validator that only accepts known enum values (for strict mode)
+ def validate_strict(v: Any) -> Any:
+ if isinstance(v, cls_inner):
+ return v
+ # Use the parent EnumMeta's __call__ which raises ValueError for unknown values
+ return enum.EnumMeta.__call__(cls_inner, v)
+
+ # Create a lax validator that accepts unknown values
+ def validate_lax(v: Any) -> Any:
+ if isinstance(v, cls_inner):
+ return v
+ try:
+ return enum.EnumMeta.__call__(cls_inner, v)
+ except ValueError:
+ # Return the raw value for unknown enum values
+ return v
+
+ # Determine the base type schema (str or int)
+ is_int_enum = False
+ for base in cls_inner.__mro__:
+ if base is int:
+ is_int_enum = True
+ break
+ if base is str:
+ break
+
+ base_schema = (
+ core_schema.int_schema()
+ if is_int_enum
+ else core_schema.str_schema()
+ )
+
+ # Use lax_or_strict_schema:
+ # - strict mode: only known enum values match (raises ValueError for unknown)
+ # - lax mode: accept any value, return enum member or raw value
+ return core_schema.lax_or_strict_schema(
+ lax_schema=core_schema.chain_schema(
+ [base_schema, core_schema.no_info_plain_validator_function(validate_lax)]
+ ),
+ strict_schema=core_schema.chain_schema(
+ [base_schema, core_schema.no_info_plain_validator_function(validate_strict)]
+ ),
+ )
+
+ setattr(cls, "__get_pydantic_core_schema__", classmethod(__get_pydantic_core_schema__))
+ return cls
diff --git a/src/openrouter/utils/eventstreaming.py b/src/openrouter/utils/eventstreaming.py
index 0969899..a8d4fe5 100644
--- a/src/openrouter/utils/eventstreaming.py
+++ b/src/openrouter/utils/eventstreaming.py
@@ -2,9 +2,12 @@
import re
import json
+from dataclasses import dataclass, asdict
from typing import (
+ Any,
Callable,
Generic,
+ List,
TypeVar,
Optional,
Generator,
@@ -22,6 +25,7 @@ class EventStream(Generic[T]):
client_ref: Optional[object]
response: httpx.Response
generator: Generator[T, None, None]
+ _closed: bool
def __init__(
self,
@@ -29,21 +33,31 @@ class EventStream(Generic[T]):
decoder: Callable[[str], T],
sentinel: Optional[str] = None,
client_ref: Optional[object] = None,
+ data_required: bool = True,
):
self.response = response
- self.generator = stream_events(response, decoder, sentinel)
+ self.generator = stream_events(
+ response, decoder, sentinel, data_required=data_required
+ )
self.client_ref = client_ref
+ self._closed = False
def __iter__(self):
return self
def __next__(self):
+ if self._closed:
+ raise StopIteration
return next(self.generator)
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
+ self.close()
+
+ def close(self):
+ self._closed = True
self.response.close()
@@ -53,6 +67,7 @@ class EventStreamAsync(Generic[T]):
client_ref: Optional[object]
response: httpx.Response
generator: AsyncGenerator[T, None]
+ _closed: bool
def __init__(
self,
@@ -60,181 +75,244 @@ class EventStreamAsync(Generic[T]):
decoder: Callable[[str], T],
sentinel: Optional[str] = None,
client_ref: Optional[object] = None,
+ data_required: bool = True,
):
self.response = response
- self.generator = stream_events_async(response, decoder, sentinel)
+ self.generator = stream_events_async(
+ response, decoder, sentinel, data_required=data_required
+ )
self.client_ref = client_ref
+ self._closed = False
def __aiter__(self):
return self
async def __anext__(self):
+ if self._closed:
+ raise StopAsyncIteration
return await self.generator.__anext__()
async def __aenter__(self):
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
+ await self.close()
+
+ async def close(self):
+ self._closed = True
await self.response.aclose()
+@dataclass
class ServerEvent:
id: Optional[str] = None
event: Optional[str] = None
- data: Optional[str] = None
+ data: Any = None
retry: Optional[int] = None
MESSAGE_BOUNDARIES = [
b"\r\n\r\n",
- b"\n\n",
+ b"\r\n\r",
+ b"\r\n\n",
+ b"\r\r\n",
+ b"\n\r\n",
b"\r\r",
+ b"\n\r",
+ b"\n\n",
]
+MAX_BOUNDARY_LEN = max(len(b) for b in MESSAGE_BOUNDARIES)
+
+UTF8_BOM = b"\xef\xbb\xbf"
async def stream_events_async(
response: httpx.Response,
decoder: Callable[[str], T],
sentinel: Optional[str] = None,
+ data_required: bool = True,
) -> AsyncGenerator[T, None]:
- buffer = bytearray()
- position = 0
- discard = False
- async for chunk in response.aiter_bytes():
- # We've encountered the sentinel value and should no longer process
- # incoming data. Instead we throw new data away until the server closes
- # the connection.
- if discard:
- continue
+ try:
+ buffer = bytearray()
+ position = 0
+ event_id: Optional[str] = None
+ async for chunk in response.aiter_bytes():
+ if len(buffer) == 0 and chunk.startswith(UTF8_BOM):
+ chunk = chunk[len(UTF8_BOM) :]
+ old_len = len(buffer)
+ buffer += chunk
+ search_start = max(position, old_len - MAX_BOUNDARY_LEN + 1)
+ for i in range(search_start, len(buffer)):
+ char = buffer[i : i + 1]
+ seq: Optional[bytes] = None
+ if char in [b"\r", b"\n"]:
+ for boundary in MESSAGE_BOUNDARIES:
+ seq = _peek_sequence(i, buffer, boundary)
+ if seq is not None:
+ break
+ if seq is None:
+ continue
- buffer += chunk
- for i in range(position, len(buffer)):
- char = buffer[i : i + 1]
- seq: Optional[bytes] = None
- if char in [b"\r", b"\n"]:
- for boundary in MESSAGE_BOUNDARIES:
- seq = _peek_sequence(i, buffer, boundary)
- if seq is not None:
- break
- if seq is None:
- continue
+ block = buffer[position:i]
+ position = i + len(seq)
+ event, discard, event_id = _parse_event(
+ raw=block,
+ decoder=decoder,
+ sentinel=sentinel,
+ event_id=event_id,
+ data_required=data_required,
+ )
+ if event is not None:
+ yield event
+ if discard:
+ return
- block = buffer[position:i]
- position = i + len(seq)
- event, discard = _parse_event(block, decoder, sentinel)
- if event is not None:
- yield event
+ if position > 0:
+ buffer = buffer[position:]
+ position = 0
- if position > 0:
- buffer = buffer[position:]
- position = 0
-
- event, discard = _parse_event(buffer, decoder, sentinel)
- if event is not None:
- yield event
+ event, discard, _ = _parse_event(
+ raw=buffer,
+ decoder=decoder,
+ sentinel=sentinel,
+ event_id=event_id,
+ data_required=data_required,
+ )
+ if event is not None:
+ yield event
+ finally:
+ await response.aclose()
def stream_events(
response: httpx.Response,
decoder: Callable[[str], T],
sentinel: Optional[str] = None,
+ data_required: bool = True,
) -> Generator[T, None, None]:
- buffer = bytearray()
- position = 0
- discard = False
- for chunk in response.iter_bytes():
- # We've encountered the sentinel value and should no longer process
- # incoming data. Instead we throw new data away until the server closes
- # the connection.
- if discard:
- continue
+ try:
+ buffer = bytearray()
+ position = 0
+ event_id: Optional[str] = None
+ for chunk in response.iter_bytes():
+ if len(buffer) == 0 and chunk.startswith(UTF8_BOM):
+ chunk = chunk[len(UTF8_BOM) :]
+ old_len = len(buffer)
+ buffer += chunk
+ search_start = max(position, old_len - MAX_BOUNDARY_LEN + 1)
+ for i in range(search_start, len(buffer)):
+ char = buffer[i : i + 1]
+ seq: Optional[bytes] = None
+ if char in [b"\r", b"\n"]:
+ for boundary in MESSAGE_BOUNDARIES:
+ seq = _peek_sequence(i, buffer, boundary)
+ if seq is not None:
+ break
+ if seq is None:
+ continue
- buffer += chunk
- for i in range(position, len(buffer)):
- char = buffer[i : i + 1]
- seq: Optional[bytes] = None
- if char in [b"\r", b"\n"]:
- for boundary in MESSAGE_BOUNDARIES:
- seq = _peek_sequence(i, buffer, boundary)
- if seq is not None:
- break
- if seq is None:
- continue
+ block = buffer[position:i]
+ position = i + len(seq)
+ event, discard, event_id = _parse_event(
+ raw=block,
+ decoder=decoder,
+ sentinel=sentinel,
+ event_id=event_id,
+ data_required=data_required,
+ )
+ if event is not None:
+ yield event
+ if discard:
+ return
- block = buffer[position:i]
- position = i + len(seq)
- event, discard = _parse_event(block, decoder, sentinel)
- if event is not None:
- yield event
+ if position > 0:
+ buffer = buffer[position:]
+ position = 0
- if position > 0:
- buffer = buffer[position:]
- position = 0
-
- event, discard = _parse_event(buffer, decoder, sentinel)
- if event is not None:
- yield event
+ event, discard, _ = _parse_event(
+ raw=buffer,
+ decoder=decoder,
+ sentinel=sentinel,
+ event_id=event_id,
+ data_required=data_required,
+ )
+ if event is not None:
+ yield event
+ finally:
+ response.close()
def _parse_event(
- raw: bytearray, decoder: Callable[[str], T], sentinel: Optional[str] = None
-) -> Tuple[Optional[T], bool]:
+ *,
+ raw: bytearray,
+ decoder: Callable[[str], T],
+ sentinel: Optional[str] = None,
+ event_id: Optional[str] = None,
+ data_required: bool = True,
+) -> Tuple[Optional[T], bool, Optional[str]]:
block = raw.decode()
lines = re.split(r"\r?\n|\r", block)
publish = False
event = ServerEvent()
- data = ""
+ data_parts: List[str] = []
for line in lines:
if not line:
continue
delim = line.find(":")
- if delim <= 0:
+ if delim == 0:
continue
- field = line[0:delim]
- value = line[delim + 1 :] if delim < len(line) - 1 else ""
- if len(value) and value[0] == " ":
- value = value[1:]
+ field = line
+ value = ""
+ if delim > 0:
+ field = line[0:delim]
+ value = line[delim + 1 :] if delim < len(line) - 1 else ""
+ if len(value) and value[0] == " ":
+ value = value[1:]
if field == "event":
event.event = value
publish = True
elif field == "data":
- data += value + "\n"
+ data_parts.append(value)
publish = True
elif field == "id":
- event.id = value
publish = True
+ if "\x00" not in value:
+ event_id = value
elif field == "retry":
- event.retry = int(value) if value.isdigit() else None
+ if value.isdigit():
+ event.retry = int(value)
publish = True
- if sentinel and data == f"{sentinel}\n":
- return None, True
+ event.id = event_id
+ has_data = bool(data_parts)
+ data = "\n".join(data_parts)
- if data:
- data = data[:-1]
- event.data = data
+ if sentinel and has_data and data == sentinel:
+ return None, True, event_id
- data_is_primitive = (
- data.isnumeric() or data == "true" or data == "false" or data == "null"
- )
- data_is_json = (
- data.startswith("{") or data.startswith("[") or data.startswith('"')
- )
+ # Skip data-less events when data is required
+ if not has_data and publish and data_required:
+ return None, False, event_id
- if data_is_primitive or data_is_json:
- try:
- event.data = json.loads(data)
- except Exception:
- pass
+ if has_data:
+ try:
+ event.data = json.loads(data)
+ except json.JSONDecodeError:
+ event.data = data
out = None
if publish:
- out = decoder(json.dumps(event.__dict__))
+ out_dict = {
+ k: v
+ for k, v in asdict(event).items()
+ if v is not None or (k == "data" and has_data)
+ }
+ out = decoder(json.dumps(out_dict))
- return out, False
+ return out, False, event_id
def _peek_sequence(position: int, buffer: bytearray, sequence: bytes):
diff --git a/src/openrouter/utils/forms.py b/src/openrouter/utils/forms.py
index f961e76..fdf0dc9 100644
--- a/src/openrouter/utils/forms.py
+++ b/src/openrouter/utils/forms.py
@@ -1,5 +1,6 @@
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+import io
from typing import (
Any,
Dict,
@@ -103,6 +104,10 @@ def _extract_file_properties(file_obj: Any) -> Tuple[str, Any, Any]:
if file_metadata.content:
content = getattr(file_obj, file_field_name, None)
+ if isinstance(content, io.TextIOBase):
+ content = content.read().encode(
+ getattr(content, "encoding", None) or "utf-8"
+ )
elif file_field_name == "content_type":
content_type = getattr(file_obj, file_field_name, None)
else:
diff --git a/src/openrouter/utils/metadata.py b/src/openrouter/utils/metadata.py
index 173b3e5..5abddd5 100644
--- a/src/openrouter/utils/metadata.py
+++ b/src/openrouter/utils/metadata.py
@@ -15,6 +15,7 @@ class SecurityMetadata:
scheme_type: Optional[str] = None
sub_type: Optional[str] = None
field_name: Optional[str] = None
+ composite: bool = False
def get_field_name(self, default: str) -> str:
return self.field_name or default
diff --git a/src/openrouter/utils/requestbodies.py b/src/openrouter/utils/requestbodies.py
index d5240dd..591415a 100644
--- a/src/openrouter/utils/requestbodies.py
+++ b/src/openrouter/utils/requestbodies.py
@@ -44,15 +44,16 @@ def serialize_request_body(
serialized_request_body = SerializedRequestBody(media_type)
- if re.match(r"(application|text)\/.*?\+*json.*", media_type) is not None:
+ if re.match(r"^(application|text)\/([^+]+\+)*json.*", media_type) is not None:
serialized_request_body.content = marshal_json(request_body, request_body_type)
- elif re.match(r"multipart\/.*", media_type) is not None:
+
+ elif re.match(r"^multipart\/.*", media_type) is not None:
(
serialized_request_body.media_type,
serialized_request_body.data,
serialized_request_body.files,
) = serialize_multipart_form(media_type, request_body)
- elif re.match(r"application\/x-www-form-urlencoded.*", media_type) is not None:
+ elif re.match(r"^application\/x-www-form-urlencoded.*", media_type) is not None:
serialized_request_body.data = serialize_form_data(request_body)
elif isinstance(request_body, (bytes, bytearray, io.BytesIO, io.BufferedReader)):
serialized_request_body.content = request_body
diff --git a/src/openrouter/utils/retries.py b/src/openrouter/utils/retries.py
index 626256e..9bd7bb4 100644
--- a/src/openrouter/utils/retries.py
+++ b/src/openrouter/utils/retries.py
@@ -12,10 +12,13 @@ import httpx
class BackoffStrategy:
+ """Exponential backoff strategy configuration."""
+
initial_interval: int
max_interval: int
exponent: float
max_elapsed_time: int
+ jitter_ms: Optional[int]
def __init__(
self,
@@ -23,24 +26,63 @@ class BackoffStrategy:
max_interval: int,
exponent: float,
max_elapsed_time: int,
+ jitter_ms: Optional[int] = None,
):
+ """Initialize a backoff strategy.
+
+ Args:
+ initial_interval: Initial retry interval in milliseconds.
+ max_interval: Maximum retry interval in milliseconds.
+ exponent: Base of the exponential backoff; the interval grows as
+ ``initial_interval * exponent ** retries``.
+ max_elapsed_time: Maximum total elapsed time in milliseconds.
+ jitter_ms: Additive jitter bound in milliseconds. When set, adds a random
+ value in ``[0, jitter_ms]`` to each computed backoff interval (default
+ ``+[0, 1s]``).
+
+ Note:
+ When a response carries a ``Retry-After`` or ``retry-after-ms`` header,
+ that delay is used as-is and the sleep-shaping parameters
+ (``initial_interval``, ``max_interval``, ``exponent``, ``jitter_ms``) are
+ ignored for that attempt.
+ """
+ if jitter_ms is not None and jitter_ms < 0:
+ raise ValueError("jitter_ms must be >= 0")
self.initial_interval = initial_interval
self.max_interval = max_interval
self.exponent = exponent
self.max_elapsed_time = max_elapsed_time
+ self.jitter_ms = jitter_ms
class RetryConfig:
+ """Runtime retry configuration."""
+
strategy: str
backoff: BackoffStrategy
retry_connection_errors: bool
+ status_codes_override: Optional[List[str]]
def __init__(
- self, strategy: str, backoff: BackoffStrategy, retry_connection_errors: bool
+ self,
+ strategy: str,
+ backoff: BackoffStrategy,
+ retry_connection_errors: bool,
+ status_codes_override: Optional[List[str]] = None,
):
+ """Initialize a retry configuration.
+
+ Args:
+ strategy: Retry strategy: ``"none"`` or ``"backoff"``.
+ backoff: Backoff parameters.
+ retry_connection_errors: Whether to also retry transport-level connection errors.
+ status_codes_override: Retryable HTTP status codes that take precedence over the
+ per-operation defaults when non-empty.
+ """
self.strategy = strategy
self.backoff = backoff
self.retry_connection_errors = retry_connection_errors
+ self.status_codes_override = status_codes_override
class Retries:
@@ -49,7 +91,7 @@ class Retries:
def __init__(self, config: RetryConfig, status_codes: List[str]):
self.config = config
- self.status_codes = status_codes
+ self.status_codes = config.status_codes_override or status_codes
class TemporaryError(Exception):
@@ -129,6 +171,21 @@ def _error_code_from_json_body(response: httpx.Response) -> Optional[int]:
return None
+def _parse_retry_after_ms_header(response: httpx.Response) -> Optional[int]:
+ retry_after_ms_header = response.headers.get("retry-after-ms")
+ if not retry_after_ms_header:
+ return None
+
+ try:
+ milliseconds = float(retry_after_ms_header)
+ if milliseconds >= 0:
+ return round(milliseconds)
+ except (OverflowError, ValueError):
+ pass
+
+ return None
+
+
def _is_retryable_response(response: httpx.Response, status_codes: List[str]) -> bool:
if response.status_code in TRANSIENT_STATUS_CODES:
return True
@@ -173,6 +230,7 @@ def _get_sleep_interval(
max_interval: int,
exponent: float,
retries: int,
+ jitter_ms: Optional[int] = None,
) -> float:
"""Get sleep interval for retry with exponential backoff.
@@ -182,6 +240,7 @@ def _get_sleep_interval(
max_interval: Maximum retry interval in milliseconds.
exponent: Base for exponential backoff calculation.
retries: Current retry attempt count.
+ jitter_ms: Additive jitter bound in ms; see ``BackoffStrategy.jitter_ms``.
Returns:
Sleep interval in seconds.
@@ -193,7 +252,11 @@ def _get_sleep_interval(
):
return exception.retry_after / 1000
- sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1)
+ sleep = (initial_interval / 1000) * exponent**retries
+ if jitter_ms is not None:
+ sleep += random.uniform(0, jitter_ms / 1000)
+ else:
+ sleep += random.uniform(0, 1)
return min(sleep, max_interval / 1000)
@@ -207,12 +270,7 @@ def retry(func, retries: Retries):
if _is_retryable_response(res, retries.status_codes):
raise TemporaryError(res)
- except httpx.ConnectError as exception:
- if retries.config.retry_connection_errors:
- raise
-
- raise PermanentError(exception) from exception
- except httpx.TimeoutException as exception:
+ except (httpx.NetworkError, httpx.TimeoutException) as exception:
if retries.config.retry_connection_errors:
raise
@@ -230,6 +288,7 @@ def retry(func, retries: Retries):
retries.config.backoff.max_interval,
retries.config.backoff.exponent,
retries.config.backoff.max_elapsed_time,
+ retries.config.backoff.jitter_ms,
)
return func()
@@ -245,12 +304,7 @@ async def retry_async(func, retries: Retries):
if await _is_retryable_response_async(res, retries.status_codes):
raise TemporaryError(res)
- except httpx.ConnectError as exception:
- if retries.config.retry_connection_errors:
- raise
-
- raise PermanentError(exception) from exception
- except httpx.TimeoutException as exception:
+ except (httpx.NetworkError, httpx.TimeoutException) as exception:
if retries.config.retry_connection_errors:
raise
@@ -268,6 +322,7 @@ async def retry_async(func, retries: Retries):
retries.config.backoff.max_interval,
retries.config.backoff.exponent,
retries.config.backoff.max_elapsed_time,
+ retries.config.backoff.jitter_ms,
)
return await func()
@@ -279,6 +334,7 @@ def retry_with_backoff(
max_interval=60000,
exponent=1.5,
max_elapsed_time=3600000,
+ jitter_ms=None,
):
start = round(time.time() * 1000)
retries = 0
@@ -296,8 +352,17 @@ def retry_with_backoff(
raise
+ if isinstance(exception, TemporaryError):
+ retry_after_ms = _parse_retry_after_ms_header(exception.response)
+ if retry_after_ms is not None:
+ exception.retry_after = retry_after_ms
sleep = _get_sleep_interval(
- exception, initial_interval, max_interval, exponent, retries
+ exception,
+ initial_interval,
+ max_interval,
+ exponent,
+ retries,
+ jitter_ms=jitter_ms,
)
time.sleep(sleep)
retries += 1
@@ -309,6 +374,7 @@ async def retry_with_backoff_async(
max_interval=60000,
exponent=1.5,
max_elapsed_time=3600000,
+ jitter_ms=None,
):
start = round(time.time() * 1000)
retries = 0
@@ -326,8 +392,17 @@ async def retry_with_backoff_async(
raise
+ if isinstance(exception, TemporaryError):
+ retry_after_ms = _parse_retry_after_ms_header(exception.response)
+ if retry_after_ms is not None:
+ exception.retry_after = retry_after_ms
sleep = _get_sleep_interval(
- exception, initial_interval, max_interval, exponent, retries
+ exception,
+ initial_interval,
+ max_interval,
+ exponent,
+ retries,
+ jitter_ms=jitter_ms,
)
await asyncio.sleep(sleep)
retries += 1
diff --git a/src/openrouter/utils/security.py b/src/openrouter/utils/security.py
index 6996c79..35a59a6 100644
--- a/src/openrouter/utils/security.py
+++ b/src/openrouter/utils/security.py
@@ -19,7 +19,9 @@ from .metadata import (
import os
-def get_security(security: Any) -> Tuple[Dict[str, str], Dict[str, List[str]]]:
+def get_security(
+ security: Any, allowed_fields: Optional[List[str]] = None
+) -> Tuple[Dict[str, str], Dict[str, List[str]]]:
headers: Dict[str, str] = {}
query_params: Dict[str, List[str]] = {}
@@ -30,7 +32,14 @@ def get_security(security: Any) -> Tuple[Dict[str, str], Dict[str, List[str]]]:
raise TypeError("security must be a pydantic model")
sec_fields: Dict[str, FieldInfo] = security.__class__.model_fields
- for name in sec_fields:
+ sec_field_names = (
+ list(sec_fields.keys()) if allowed_fields is None else allowed_fields
+ )
+
+ for name in sec_field_names:
+ if name not in sec_fields:
+ continue
+
sec_field = sec_fields[name]
value = getattr(security, name)
@@ -52,6 +61,9 @@ def get_security(security: Any) -> Tuple[Dict[str, str], Dict[str, List[str]]]:
else:
_parse_security_scheme(headers, query_params, metadata, name, value)
+ if not metadata.composite:
+ return headers, query_params
+
return headers, query_params
@@ -77,15 +89,24 @@ def _parse_security_option(
raise TypeError("security option must be a pydantic model")
opt_fields: Dict[str, FieldInfo] = option.__class__.model_fields
+
for name in opt_fields:
opt_field = opt_fields[name]
metadata = find_field_metadata(opt_field, SecurityMetadata)
if metadata is None or not metadata.scheme:
continue
- _parse_security_scheme(
- headers, query_params, metadata, name, getattr(option, name)
- )
+
+ value = getattr(option, name)
+ if (
+ metadata.scheme_type == "http"
+ and metadata.sub_type == "basic"
+ and not isinstance(value, BaseModel)
+ ):
+ _parse_basic_auth_scheme(headers, option)
+ return
+
+ _parse_security_scheme(headers, query_params, metadata, name, value)
def _parse_security_scheme(
@@ -153,6 +174,8 @@ def _parse_security_scheme_value(
elif scheme_type == "http":
if sub_type == "bearer":
headers[header_name] = _apply_bearer(value)
+ elif sub_type == "basic":
+ headers[header_name] = value
elif sub_type == "custom":
return
else:
diff --git a/src/openrouter/utils/serializers.py b/src/openrouter/utils/serializers.py
index 378a14c..1031ed9 100644
--- a/src/openrouter/utils/serializers.py
+++ b/src/openrouter/utils/serializers.py
@@ -4,7 +4,7 @@ from decimal import Decimal
import functools
import json
import typing
-from typing import Any, Dict, List, Tuple, Union, get_args
+from typing import Any, Dict, Iterable, List, Mapping, Tuple, Union, get_args
import typing_extensions
from typing_extensions import get_origin
@@ -17,8 +17,7 @@ from ..types.basemodel import BaseModel, Nullable, OptionalNullable, Unset
def serialize_decimal(as_str: bool):
def serialize(d):
- # Optional[T] is a Union[T, None]
- if is_union(type(d)) and type(None) in get_args(type(d)) and d is None:
+ if d is None:
return None
if isinstance(d, Unset):
return d
@@ -46,8 +45,7 @@ def validate_decimal(d):
def serialize_float(as_str: bool):
def serialize(f):
- # Optional[T] is a Union[T, None]
- if is_union(type(f)) and type(None) in get_args(type(f)) and f is None:
+ if f is None:
return None
if isinstance(f, Unset):
return f
@@ -75,8 +73,7 @@ def validate_float(f):
def serialize_int(as_str: bool):
def serialize(i):
- # Optional[T] is a Union[T, None]
- if is_union(type(i)) and type(None) in get_args(type(i)) and i is None:
+ if i is None:
return None
if isinstance(i, Unset):
return i
@@ -102,30 +99,9 @@ def validate_int(b):
return int(b)
-def validate_open_enum(is_int: bool):
- def validate(e):
- if e is None:
- return None
-
- if isinstance(e, Unset):
- return e
-
- if is_int:
- if not isinstance(e, int):
- raise ValueError("Expected int")
- else:
- if not isinstance(e, str):
- raise ValueError("Expected string")
-
- return e
-
- return validate
-
-
def validate_const(v):
def validate(c):
- # Optional[T] is a Union[T, None]
- if is_union(type(c)) and type(None) in get_args(type(c)) and c is None:
+ if c is None:
return None
if v != c:
@@ -137,10 +113,12 @@ def validate_const(v):
def unmarshal_json(raw, typ: Any) -> Any:
- return unmarshal(from_json(raw), typ)
+ return unmarshal(from_json(raw), typ, coerce_iterables=False)
-def unmarshal(val, typ: Any) -> Any:
+def unmarshal(val, typ: Any, coerce_iterables: bool = True) -> Any:
+ if coerce_iterables:
+ val = _coerce_iterables_for_type(val, typ)
unmarshaller = create_model(
"Unmarshaller",
body=(typ, ...),
@@ -217,9 +195,88 @@ def get_pydantic_model(data: Any, typ: Any) -> Any:
if not _contains_pydantic_model(data):
return unmarshal(data, typ)
+ return _coerce_iterables_for_type(data, typ)
+
+
+def _coerce_iterables_for_type(data: Any, typ: Any) -> Any:
+ if data is None or isinstance(data, (BaseModel, Unset)):
+ return data
+
+ typ = _resolve_type_alias(typ)
+ origin = get_origin(typ)
+
+ if _is_annotated_type(origin):
+ args = get_args(typ)
+ return _coerce_iterables_for_type(data, args[0]) if args else data
+
+ if is_union(origin):
+ for arg in (arg for arg in get_args(typ) if arg is not type(None)):
+ coerced = _coerce_iterables_for_type(data, arg)
+ if coerced is not data:
+ return coerced
+ return data
+
+ if _is_list_type(typ):
+ item_type = get_args(typ)[0] if get_args(typ) else Any
+ if isinstance(data, (str, bytes, bytearray, Mapping)):
+ return data
+ if isinstance(data, Iterable):
+ return [_coerce_iterables_for_type(item, item_type) for item in data]
+ return data
+
+ if _is_mapping_type(typ):
+ value_type = get_args(typ)[1] if len(get_args(typ)) > 1 else Any
+ if isinstance(data, Mapping):
+ return {
+ key: _coerce_iterables_for_type(value, value_type)
+ for key, value in data.items()
+ }
+ return data
+
+ if _is_pydantic_model_type(typ) and isinstance(data, Mapping):
+ coerced = None
+ for field_name, field in typ.model_fields.items():
+ field_type = field.annotation
+ for key in (field_name, field.alias):
+ if key is not None and key in data:
+ value = data[key] if coerced is None else coerced[key]
+ coerced_value = _coerce_iterables_for_type(value, field_type)
+ if coerced_value is not value:
+ if coerced is None:
+ coerced = dict(data)
+ coerced[key] = coerced_value
+ return coerced if coerced is not None else data
+
return data
+def _resolve_type_alias(typ: Any) -> Any:
+ return getattr(typ, "__value__", typ)
+
+
+def _is_annotated_type(origin: Any) -> bool:
+ return any(
+ origin is typing_obj
+ for typing_obj in _get_typing_objects_by_name_of("Annotated")
+ )
+
+
+def _is_list_type(typ: Any) -> bool:
+ typ = _resolve_type_alias(typ)
+ return typ is list or get_origin(typ) is list
+
+
+def _is_mapping_type(typ: Any) -> bool:
+ typ = _resolve_type_alias(typ)
+ origin = get_origin(typ)
+ mapping_origin = get_origin(Mapping[Any, Any])
+ return typ in (dict, Dict, Mapping) or origin in (dict, Mapping, mapping_origin)
+
+
+def _is_pydantic_model_type(typ: Any) -> bool:
+ return isinstance(typ, type) and issubclass(typ, BaseModel)
+
+
def _contains_pydantic_model(data: Any) -> bool:
if isinstance(data, BaseModel):
return True
diff --git a/src/openrouter/utils/unions.py b/src/openrouter/utils/unions.py
new file mode 100644
index 0000000..2434640
--- /dev/null
+++ b/src/openrouter/utils/unions.py
@@ -0,0 +1,41 @@
+"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
+
+from typing import Any
+
+from pydantic import BaseModel, TypeAdapter, ValidationError
+
+
+def parse_open_union(
+ v: Any,
+ *,
+ disc_key: str,
+ variants: dict[str, Any],
+ unknown_cls: type,
+ union_name: str,
+) -> Any:
+ """Parse an open discriminated union value with forward-compatibility.
+
+ Known discriminator values are dispatched to their variant types.
+ Unknown discriminator values — or known discriminator values whose
+ payload fails variant validation (e.g. a partial variant emitted by a
+ newer server) — produce an instance of the fallback class, preserving
+ the raw payload for inspection.
+
+ Non-dict values and dicts missing the discriminator deliberately raise
+ instead of falling back, so pydantic can try sibling branches of an
+ enclosing union (e.g. None in Optional[...]).
+ """
+ if isinstance(v, BaseModel):
+ return v
+ if not isinstance(v, dict) or disc_key not in v:
+ raise ValueError(f"{union_name}: expected object with '{disc_key}' field")
+ disc = v[disc_key]
+ variant_cls = variants.get(disc)
+ if variant_cls is not None:
+ try:
+ if isinstance(variant_cls, type) and issubclass(variant_cls, BaseModel):
+ return variant_cls.model_validate(v)
+ return TypeAdapter(variant_cls).validate_python(v)
+ except ValidationError:
+ return unknown_cls(raw=v)
+ return unknown_cls(raw=v)
diff --git a/src/openrouter/video_generation.py b/src/openrouter/video_generation.py
index 14d0c5e..4a82cde 100644
--- a/src/openrouter/video_generation.py
+++ b/src/openrouter/video_generation.py
@@ -7,7 +7,7 @@ from openrouter._hooks import HookContext
from openrouter.types import OptionalNullable, UNSET
from openrouter.utils import get_security_from_env
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
-from typing import Any, List, Mapping, Optional, Union
+from typing import Any, Iterable, List, Mapping, Optional, Union
class VideoGeneration(BaseSDK):
@@ -25,13 +25,16 @@ class VideoGeneration(BaseSDK):
callback_url: Optional[str] = None,
duration: Optional[int] = None,
frame_images: Optional[
- Union[List[components.FrameImage], List[components.FrameImageTypedDict]]
+ Union[
+ Iterable[components.FrameImage],
+ Iterable[components.FrameImageTypedDict],
+ ]
] = None,
generate_audio: Optional[bool] = None,
input_references: Optional[
Union[
- List[components.InputReference],
- List[components.InputReferenceTypedDict],
+ Iterable[components.InputReference],
+ Iterable[components.InputReferenceTypedDict],
]
] = None,
provider: Optional[
@@ -162,9 +165,11 @@ class VideoGeneration(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Video Generation"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "402", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -226,13 +231,16 @@ class VideoGeneration(BaseSDK):
callback_url: Optional[str] = None,
duration: Optional[int] = None,
frame_images: Optional[
- Union[List[components.FrameImage], List[components.FrameImageTypedDict]]
+ Union[
+ Iterable[components.FrameImage],
+ Iterable[components.FrameImageTypedDict],
+ ]
] = None,
generate_audio: Optional[bool] = None,
input_references: Optional[
Union[
- List[components.InputReference],
- List[components.InputReferenceTypedDict],
+ Iterable[components.InputReference],
+ Iterable[components.InputReferenceTypedDict],
]
] = None,
provider: Optional[
@@ -363,9 +371,11 @@ class VideoGeneration(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Video Generation"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "402", "404", "429", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -504,9 +514,11 @@ class VideoGeneration(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Video Generation"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -630,9 +642,11 @@ class VideoGeneration(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Video Generation"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -759,9 +773,11 @@ class VideoGeneration(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Video Generation"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "502", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
stream=True,
retry_config=retry_config,
)
@@ -911,9 +927,11 @@ class VideoGeneration(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Video Generation"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "502", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
stream=True,
retry_config=retry_config,
)
@@ -1057,9 +1075,11 @@ class VideoGeneration(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Video Generation"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1175,9 +1195,11 @@ class VideoGeneration(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Video Generation"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/src/openrouter/workspaces.py b/src/openrouter/workspaces.py
index 1b82a93..f3cf390 100644
--- a/src/openrouter/workspaces.py
+++ b/src/openrouter/workspaces.py
@@ -7,7 +7,7 @@ from openrouter._hooks import HookContext
from openrouter.types import OptionalNullable, UNSET
from openrouter.utils import get_security_from_env
from openrouter.utils.unmarshal_json_response import unmarshal_json_response
-from typing import Any, Awaitable, Dict, List, Mapping, Optional, Union
+from typing import Any, Awaitable, Dict, Iterable, List, Mapping, Optional, Union
class Workspaces(BaseSDK):
@@ -105,24 +105,26 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
def next_func() -> Optional[operations.ListWorkspacesResponse]:
body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return None
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return None
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return None
next_offset = offset + len(results[0])
@@ -133,6 +135,9 @@ class Workspaces(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -258,9 +263,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -270,15 +277,15 @@ class Workspaces(BaseSDK):
async def empty_result():
return None
- offset = request.offset if not request.offset is None else 0
+ offset = request.offset if isinstance(request.offset, int) else 0
if not http_res.text:
return empty_result()
results = JSONPath("$.data").parse(body)
if len(results) == 0 or len(results[0]) == 0:
return empty_result()
- limit = request.limit if not request.limit is None else 0
- if len(results[0]) < limit:
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
return empty_result()
next_offset = offset + len(results[0])
@@ -289,6 +296,9 @@ class Workspaces(BaseSDK):
offset=next_offset,
limit=limit,
retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
)
response_data: Any = None
@@ -334,7 +344,7 @@ class Workspaces(BaseSDK):
default_provider_sort: OptionalNullable[str] = UNSET,
default_text_model: OptionalNullable[str] = UNSET,
description: OptionalNullable[str] = UNSET,
- io_logging_api_key_ids: OptionalNullable[List[int]] = UNSET,
+ io_logging_api_key_ids: OptionalNullable[Iterable[int]] = UNSET,
io_logging_sampling_rate: Optional[float] = None,
is_data_discount_logging_enabled: Optional[bool] = None,
is_observability_broadcast_enabled: Optional[bool] = None,
@@ -390,7 +400,9 @@ class Workspaces(BaseSDK):
default_provider_sort=default_provider_sort,
default_text_model=default_text_model,
description=description,
- io_logging_api_key_ids=io_logging_api_key_ids,
+ io_logging_api_key_ids=utils.unmarshal(
+ io_logging_api_key_ids, OptionalNullable[List[int]]
+ ),
io_logging_sampling_rate=io_logging_sampling_rate,
is_data_discount_logging_enabled=is_data_discount_logging_enabled,
is_observability_broadcast_enabled=is_observability_broadcast_enabled,
@@ -450,9 +462,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -504,7 +518,7 @@ class Workspaces(BaseSDK):
default_provider_sort: OptionalNullable[str] = UNSET,
default_text_model: OptionalNullable[str] = UNSET,
description: OptionalNullable[str] = UNSET,
- io_logging_api_key_ids: OptionalNullable[List[int]] = UNSET,
+ io_logging_api_key_ids: OptionalNullable[Iterable[int]] = UNSET,
io_logging_sampling_rate: Optional[float] = None,
is_data_discount_logging_enabled: Optional[bool] = None,
is_observability_broadcast_enabled: Optional[bool] = None,
@@ -560,7 +574,9 @@ class Workspaces(BaseSDK):
default_provider_sort=default_provider_sort,
default_text_model=default_text_model,
description=description,
- io_logging_api_key_ids=io_logging_api_key_ids,
+ io_logging_api_key_ids=utils.unmarshal(
+ io_logging_api_key_ids, OptionalNullable[List[int]]
+ ),
io_logging_sampling_rate=io_logging_sampling_rate,
is_data_discount_logging_enabled=is_data_discount_logging_enabled,
is_observability_broadcast_enabled=is_observability_broadcast_enabled,
@@ -620,9 +636,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -751,9 +769,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -887,9 +907,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1023,9 +1045,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1149,9 +1173,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1197,7 +1223,7 @@ class Workspaces(BaseSDK):
default_provider_sort: OptionalNullable[str] = UNSET,
default_text_model: OptionalNullable[str] = UNSET,
description: OptionalNullable[str] = UNSET,
- io_logging_api_key_ids: OptionalNullable[List[int]] = UNSET,
+ io_logging_api_key_ids: OptionalNullable[Iterable[int]] = UNSET,
io_logging_sampling_rate: Optional[float] = None,
is_data_discount_logging_enabled: Optional[bool] = None,
is_observability_broadcast_enabled: Optional[bool] = None,
@@ -1257,7 +1283,9 @@ class Workspaces(BaseSDK):
default_provider_sort=default_provider_sort,
default_text_model=default_text_model,
description=description,
- io_logging_api_key_ids=io_logging_api_key_ids,
+ io_logging_api_key_ids=utils.unmarshal(
+ io_logging_api_key_ids, OptionalNullable[List[int]]
+ ),
io_logging_sampling_rate=io_logging_sampling_rate,
is_data_discount_logging_enabled=is_data_discount_logging_enabled,
is_observability_broadcast_enabled=is_observability_broadcast_enabled,
@@ -1317,9 +1345,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1375,7 +1405,7 @@ class Workspaces(BaseSDK):
default_provider_sort: OptionalNullable[str] = UNSET,
default_text_model: OptionalNullable[str] = UNSET,
description: OptionalNullable[str] = UNSET,
- io_logging_api_key_ids: OptionalNullable[List[int]] = UNSET,
+ io_logging_api_key_ids: OptionalNullable[Iterable[int]] = UNSET,
io_logging_sampling_rate: Optional[float] = None,
is_data_discount_logging_enabled: Optional[bool] = None,
is_observability_broadcast_enabled: Optional[bool] = None,
@@ -1435,7 +1465,9 @@ class Workspaces(BaseSDK):
default_provider_sort=default_provider_sort,
default_text_model=default_text_model,
description=description,
- io_logging_api_key_ids=io_logging_api_key_ids,
+ io_logging_api_key_ids=utils.unmarshal(
+ io_logging_api_key_ids, OptionalNullable[List[int]]
+ ),
io_logging_sampling_rate=io_logging_sampling_rate,
is_data_discount_logging_enabled=is_data_discount_logging_enabled,
is_observability_broadcast_enabled=is_observability_broadcast_enabled,
@@ -1495,9 +1527,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1631,9 +1665,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1759,9 +1795,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -1890,9 +1928,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2021,9 +2061,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2164,9 +2206,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2312,9 +2356,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2356,11 +2402,358 @@ class Workspaces(BaseSDK):
raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
+ def list_members(
+ self,
+ *,
+ id: str,
+ http_referer: Optional[str] = None,
+ x_open_router_title: Optional[str] = None,
+ x_open_router_categories: Optional[str] = None,
+ offset: Optional[int] = None,
+ limit: Optional[int] = None,
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
+ server_url: Optional[str] = None,
+ timeout_ms: Optional[int] = None,
+ http_headers: Optional[Mapping[str, str]] = None,
+ ) -> Optional[operations.ListWorkspaceMembersResponse]:
+ r"""List workspace members
+
+ List all members of a workspace. Returns paginated results. For the default workspace, returns all organization members (implicit membership). [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+ :param id: The workspace ID (UUID) or slug
+ :param http_referer: 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.
+
+ :param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+
+ :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+
+ :param offset: Number of records to skip for pagination
+ :param limit: Maximum number of records to return (max 100)
+ :param retries: Override the default retry configuration for this method
+ :param server_url: Override the default server URL for this method
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
+ :param http_headers: Additional headers to set or replace on requests.
+ """
+ base_url = None
+ url_variables = None
+ if timeout_ms is None:
+ timeout_ms = self.sdk_configuration.timeout_ms
+
+ if server_url is not None:
+ base_url = server_url
+ else:
+ base_url = self._get_url(base_url, url_variables)
+
+ request = operations.ListWorkspaceMembersRequest(
+ http_referer=http_referer,
+ x_open_router_title=x_open_router_title,
+ x_open_router_categories=x_open_router_categories,
+ id=id,
+ offset=offset,
+ limit=limit,
+ )
+
+ req = self._build_request(
+ method="GET",
+ path="/workspaces/{id}/members",
+ base_url=base_url,
+ url_variables=url_variables,
+ request=request,
+ request_body_required=False,
+ request_has_path_params=True,
+ request_has_query_params=True,
+ user_agent_header="user-agent",
+ accept_header_value="application/json",
+ http_headers=http_headers,
+ _globals=operations.ListWorkspaceMembersGlobals(
+ http_referer=self.sdk_configuration.globals.http_referer,
+ x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
+ x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
+ ),
+ security=self.sdk_configuration.security,
+ allow_empty_value=None,
+ timeout_ms=timeout_ms,
+ )
+
+ if retries == UNSET:
+ if self.sdk_configuration.retry_config is not UNSET:
+ retries = self.sdk_configuration.retry_config
+ else:
+ retries = utils.RetryConfig(
+ "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
+ )
+
+ retry_config = None
+ if isinstance(retries, utils.RetryConfig):
+ retry_config = (retries, ["5XX"])
+
+ http_res = self.do_request(
+ hook_ctx=HookContext(
+ config=self.sdk_configuration,
+ base_url=base_url or "",
+ operation_id="listWorkspaceMembers",
+ oauth2_scopes=None,
+ security_source=get_security_from_env(
+ self.sdk_configuration.security, components.Security
+ ),
+ tags=["Workspaces"],
+ extensions=None,
+ ),
+ request=req,
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
+ retry_config=retry_config,
+ )
+
+ def next_func() -> Optional[operations.ListWorkspaceMembersResponse]:
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
+
+ offset = request.offset if isinstance(request.offset, int) else 0
+
+ if not http_res.text:
+ return None
+ results = JSONPath("$.data").parse(body)
+ if len(results) == 0 or len(results[0]) == 0:
+ return None
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
+ return None
+ next_offset = offset + len(results[0])
+
+ return self.list_members(
+ id=id,
+ http_referer=http_referer,
+ x_open_router_title=x_open_router_title,
+ x_open_router_categories=x_open_router_categories,
+ offset=next_offset,
+ limit=limit,
+ retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
+ )
+
+ response_data: Any = None
+ if utils.match_response(http_res, "200", "application/json"):
+ return operations.ListWorkspaceMembersResponse(
+ result=unmarshal_json_response(
+ components.ListWorkspaceMembersResponse, http_res
+ ),
+ next=next_func,
+ )
+ if utils.match_response(http_res, "401", "application/json"):
+ response_data = unmarshal_json_response(
+ errors.UnauthorizedResponseErrorData, http_res
+ )
+ raise errors.UnauthorizedResponseError(response_data, http_res)
+ if utils.match_response(http_res, "403", "application/json"):
+ response_data = unmarshal_json_response(
+ errors.ForbiddenResponseErrorData, http_res
+ )
+ raise errors.ForbiddenResponseError(response_data, http_res)
+ if utils.match_response(http_res, "404", "application/json"):
+ response_data = unmarshal_json_response(
+ errors.NotFoundResponseErrorData, http_res
+ )
+ raise errors.NotFoundResponseError(response_data, http_res)
+ if utils.match_response(http_res, "500", "application/json"):
+ response_data = unmarshal_json_response(
+ errors.InternalServerResponseErrorData, http_res
+ )
+ raise errors.InternalServerResponseError(response_data, http_res)
+ if utils.match_response(http_res, "4XX", "*"):
+ http_res_text = utils.stream_to_text(http_res)
+ raise errors.OpenRouterDefaultError(
+ "API error occurred", http_res, http_res_text
+ )
+ if utils.match_response(http_res, "5XX", "*"):
+ http_res_text = utils.stream_to_text(http_res)
+ raise errors.OpenRouterDefaultError(
+ "API error occurred", http_res, http_res_text
+ )
+
+ raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
+
+ async def list_members_async(
+ self,
+ *,
+ id: str,
+ http_referer: Optional[str] = None,
+ x_open_router_title: Optional[str] = None,
+ x_open_router_categories: Optional[str] = None,
+ offset: Optional[int] = None,
+ limit: Optional[int] = None,
+ retries: OptionalNullable[utils.RetryConfig] = UNSET,
+ server_url: Optional[str] = None,
+ timeout_ms: Optional[int] = None,
+ http_headers: Optional[Mapping[str, str]] = None,
+ ) -> Optional[operations.ListWorkspaceMembersResponse]:
+ r"""List workspace members
+
+ List all members of a workspace. Returns paginated results. For the default workspace, returns all organization members (implicit membership). [Management key](/docs/guides/overview/auth/management-api-keys) required.
+
+ :param id: The workspace ID (UUID) or slug
+ :param http_referer: 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.
+
+ :param x_open_router_title: The app display name allows you to customize how your app appears in OpenRouter's dashboard.
+
+ :param x_open_router_categories: Comma-separated list of app categories (e.g. \"cli-agent,cloud-agent\"). Used for marketplace rankings.
+
+ :param offset: Number of records to skip for pagination
+ :param limit: Maximum number of records to return (max 100)
+ :param retries: Override the default retry configuration for this method
+ :param server_url: Override the default server URL for this method
+ :param timeout_ms: Override the default request timeout configuration for this method in milliseconds
+ :param http_headers: Additional headers to set or replace on requests.
+ """
+ base_url = None
+ url_variables = None
+ if timeout_ms is None:
+ timeout_ms = self.sdk_configuration.timeout_ms
+
+ if server_url is not None:
+ base_url = server_url
+ else:
+ base_url = self._get_url(base_url, url_variables)
+
+ request = operations.ListWorkspaceMembersRequest(
+ http_referer=http_referer,
+ x_open_router_title=x_open_router_title,
+ x_open_router_categories=x_open_router_categories,
+ id=id,
+ offset=offset,
+ limit=limit,
+ )
+
+ req = self._build_request_async(
+ method="GET",
+ path="/workspaces/{id}/members",
+ base_url=base_url,
+ url_variables=url_variables,
+ request=request,
+ request_body_required=False,
+ request_has_path_params=True,
+ request_has_query_params=True,
+ user_agent_header="user-agent",
+ accept_header_value="application/json",
+ http_headers=http_headers,
+ _globals=operations.ListWorkspaceMembersGlobals(
+ http_referer=self.sdk_configuration.globals.http_referer,
+ x_open_router_title=self.sdk_configuration.globals.x_open_router_title,
+ x_open_router_categories=self.sdk_configuration.globals.x_open_router_categories,
+ ),
+ security=self.sdk_configuration.security,
+ allow_empty_value=None,
+ timeout_ms=timeout_ms,
+ )
+
+ if retries == UNSET:
+ if self.sdk_configuration.retry_config is not UNSET:
+ retries = self.sdk_configuration.retry_config
+ else:
+ retries = utils.RetryConfig(
+ "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True
+ )
+
+ retry_config = None
+ if isinstance(retries, utils.RetryConfig):
+ retry_config = (retries, ["5XX"])
+
+ http_res = await self.do_request_async(
+ hook_ctx=HookContext(
+ config=self.sdk_configuration,
+ base_url=base_url or "",
+ operation_id="listWorkspaceMembers",
+ oauth2_scopes=None,
+ security_source=get_security_from_env(
+ self.sdk_configuration.security, components.Security
+ ),
+ tags=["Workspaces"],
+ extensions=None,
+ ),
+ request=req,
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
+ retry_config=retry_config,
+ )
+
+ def next_func() -> Awaitable[Optional[operations.ListWorkspaceMembersResponse]]:
+ body = utils.unmarshal_json(http_res.text, Union[Dict[Any, Any], List[Any]])
+
+ async def empty_result():
+ return None
+
+ offset = request.offset if isinstance(request.offset, int) else 0
+
+ if not http_res.text:
+ return empty_result()
+ results = JSONPath("$.data").parse(body)
+ if len(results) == 0 or len(results[0]) == 0:
+ return empty_result()
+ limit_ = request.limit if isinstance(request.limit, int) else 0
+ if len(results[0]) < limit_:
+ return empty_result()
+ next_offset = offset + len(results[0])
+
+ return self.list_members_async(
+ id=id,
+ http_referer=http_referer,
+ x_open_router_title=x_open_router_title,
+ x_open_router_categories=x_open_router_categories,
+ offset=next_offset,
+ limit=limit,
+ retries=retries,
+ server_url=server_url,
+ timeout_ms=timeout_ms,
+ http_headers=http_headers,
+ )
+
+ response_data: Any = None
+ if utils.match_response(http_res, "200", "application/json"):
+ return operations.ListWorkspaceMembersResponse(
+ result=unmarshal_json_response(
+ components.ListWorkspaceMembersResponse, http_res
+ ),
+ next=next_func,
+ )
+ if utils.match_response(http_res, "401", "application/json"):
+ response_data = unmarshal_json_response(
+ errors.UnauthorizedResponseErrorData, http_res
+ )
+ raise errors.UnauthorizedResponseError(response_data, http_res)
+ if utils.match_response(http_res, "403", "application/json"):
+ response_data = unmarshal_json_response(
+ errors.ForbiddenResponseErrorData, http_res
+ )
+ raise errors.ForbiddenResponseError(response_data, http_res)
+ if utils.match_response(http_res, "404", "application/json"):
+ response_data = unmarshal_json_response(
+ errors.NotFoundResponseErrorData, http_res
+ )
+ raise errors.NotFoundResponseError(response_data, http_res)
+ if utils.match_response(http_res, "500", "application/json"):
+ response_data = unmarshal_json_response(
+ errors.InternalServerResponseErrorData, http_res
+ )
+ raise errors.InternalServerResponseError(response_data, http_res)
+ if utils.match_response(http_res, "4XX", "*"):
+ http_res_text = await utils.stream_to_text_async(http_res)
+ raise errors.OpenRouterDefaultError(
+ "API error occurred", http_res, http_res_text
+ )
+ if utils.match_response(http_res, "5XX", "*"):
+ http_res_text = await utils.stream_to_text_async(http_res)
+ raise errors.OpenRouterDefaultError(
+ "API error occurred", http_res, http_res_text
+ )
+
+ raise errors.OpenRouterDefaultError("Unexpected response received", http_res)
+
def bulk_add_members(
self,
*,
id: str,
- user_ids: List[str],
+ user_ids: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
@@ -2403,7 +2796,7 @@ class Workspaces(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
bulk_add_workspace_members_request=components.BulkAddWorkspaceMembersRequest(
- user_ids=user_ids,
+ user_ids=utils.unmarshal(user_ids, List[str]),
),
)
@@ -2457,9 +2850,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2510,7 +2905,7 @@ class Workspaces(BaseSDK):
self,
*,
id: str,
- user_ids: List[str],
+ user_ids: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
@@ -2553,7 +2948,7 @@ class Workspaces(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
bulk_add_workspace_members_request=components.BulkAddWorkspaceMembersRequest(
- user_ids=user_ids,
+ user_ids=utils.unmarshal(user_ids, List[str]),
),
)
@@ -2607,9 +3002,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2660,7 +3057,7 @@ class Workspaces(BaseSDK):
self,
*,
id: str,
- user_ids: List[str],
+ user_ids: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
@@ -2703,7 +3100,7 @@ class Workspaces(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
bulk_remove_workspace_members_request=components.BulkRemoveWorkspaceMembersRequest(
- user_ids=user_ids,
+ user_ids=utils.unmarshal(user_ids, List[str]),
),
)
@@ -2757,9 +3154,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
@@ -2810,7 +3209,7 @@ class Workspaces(BaseSDK):
self,
*,
id: str,
- user_ids: List[str],
+ user_ids: Iterable[str],
http_referer: Optional[str] = None,
x_open_router_title: Optional[str] = None,
x_open_router_categories: Optional[str] = None,
@@ -2853,7 +3252,7 @@ class Workspaces(BaseSDK):
x_open_router_categories=x_open_router_categories,
id=id,
bulk_remove_workspace_members_request=components.BulkRemoveWorkspaceMembersRequest(
- user_ids=user_ids,
+ user_ids=utils.unmarshal(user_ids, List[str]),
),
)
@@ -2907,9 +3306,11 @@ class Workspaces(BaseSDK):
security_source=get_security_from_env(
self.sdk_configuration.security, components.Security
),
+ tags=["Workspaces"],
+ extensions=None,
),
request=req,
- error_status_codes=["400", "401", "403", "404", "4XX", "500", "5XX"],
+ is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c),
retry_config=retry_config,
)
diff --git a/uv.lock b/uv.lock
index 3359fdc..9f421ae 100644
--- a/uv.lock
+++ b/uv.lock
@@ -1,11 +1,10 @@
version = 1
revision = 3
-requires-python = ">=3.9.2"
+requires-python = ">=3.10"
resolution-markers = [
"python_full_version >= '3.12'",
"python_full_version == '3.11.*'",
- "python_full_version == '3.10.*'",
- "python_full_version < '3.10'",
+ "python_full_version < '3.11'",
]
[[package]]
@@ -191,12 +190,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d2/8b/801aa06445d2de3895f59e476f38f3f8d610ef5d6908245f07d002676cbf/mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036", size = 12402541, upload-time = "2025-02-05T03:49:57.623Z" },
{ url = "https://files.pythonhosted.org/packages/c7/67/5a4268782eb77344cc613a4cf23540928e41f018a9a1ec4c6882baf20ab8/mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357", size = 12494348, upload-time = "2025-02-05T03:48:52.361Z" },
{ url = "https://files.pythonhosted.org/packages/83/3e/57bb447f7bbbfaabf1712d96f9df142624a386d98fb026a761532526057e/mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf", size = 9373648, upload-time = "2025-02-05T03:49:11.395Z" },
- { url = "https://files.pythonhosted.org/packages/5a/fa/79cf41a55b682794abe71372151dbbf856e3008f6767057229e6649d294a/mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078", size = 10737129, upload-time = "2025-02-05T03:50:24.509Z" },
- { url = "https://files.pythonhosted.org/packages/d3/33/dd8feb2597d648de29e3da0a8bf4e1afbda472964d2a4a0052203a6f3594/mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba", size = 9856335, upload-time = "2025-02-05T03:49:36.398Z" },
- { url = "https://files.pythonhosted.org/packages/e4/b5/74508959c1b06b96674b364ffeb7ae5802646b32929b7701fc6b18447592/mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5", size = 11611935, upload-time = "2025-02-05T03:49:14.154Z" },
- { url = "https://files.pythonhosted.org/packages/6c/53/da61b9d9973efcd6507183fdad96606996191657fe79701b2c818714d573/mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b", size = 12365827, upload-time = "2025-02-05T03:48:59.458Z" },
- { url = "https://files.pythonhosted.org/packages/c1/72/965bd9ee89540c79a25778cc080c7e6ef40aa1eeac4d52cec7eae6eb5228/mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2", size = 12541924, upload-time = "2025-02-05T03:50:03.12Z" },
- { url = "https://files.pythonhosted.org/packages/46/d0/f41645c2eb263e6c77ada7d76f894c580c9ddb20d77f0c24d34273a4dab2/mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980", size = 9271176, upload-time = "2025-02-05T03:50:10.86Z" },
{ url = "https://files.pythonhosted.org/packages/09/4e/a7d65c7322c510de2c409ff3828b03354a7c43f5a8ed458a7a131b41c7b9/mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e", size = 2221777, upload-time = "2025-02-05T03:50:08.348Z" },
]
@@ -220,7 +213,7 @@ wheels = [
[[package]]
name = "openrouter"
-version = "0.10.8"
+version = "0.11.3"
source = { editable = "." }
dependencies = [
{ name = "httpcore" },
@@ -241,7 +234,7 @@ requires-dist = [
{ name = "httpcore", specifier = ">=1.0.9" },
{ name = "httpx", specifier = ">=0.28.1" },
{ name = "jsonpath-python", specifier = ">=1.0.6" },
- { name = "pydantic", specifier = ">=2.11.2" },
+ { name = "pydantic", specifier = ">=2.11.2,<2.13" },
]
[package.metadata.requires-dev]
@@ -251,27 +244,10 @@ dev = [
{ name = "pyright", specifier = "==1.1.398" },
]
-[[package]]
-name = "platformdirs"
-version = "4.4.0"
-source = { registry = "https://pypi.org/simple" }
-resolution-markers = [
- "python_full_version < '3.10'",
-]
-sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634, upload-time = "2025-08-26T14:32:04.268Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654, upload-time = "2025-08-26T14:32:02.735Z" },
-]
-
[[package]]
name = "platformdirs"
version = "4.5.0"
source = { registry = "https://pypi.org/simple" }
-resolution-markers = [
- "python_full_version >= '3.12'",
- "python_full_version == '3.11.*'",
- "python_full_version == '3.10.*'",
-]
sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632, upload-time = "2025-10-08T17:44:48.791Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload-time = "2025-10-08T17:44:47.223Z" },
@@ -384,19 +360,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" },
{ url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" },
{ url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" },
- { url = "https://files.pythonhosted.org/packages/54/db/160dffb57ed9a3705c4cbcbff0ac03bdae45f1ca7d58ab74645550df3fbd/pydantic_core-2.41.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf", size = 2107999, upload-time = "2025-11-04T13:42:03.885Z" },
- { url = "https://files.pythonhosted.org/packages/a3/7d/88e7de946f60d9263cc84819f32513520b85c0f8322f9b8f6e4afc938383/pydantic_core-2.41.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5", size = 1929745, upload-time = "2025-11-04T13:42:06.075Z" },
- { url = "https://files.pythonhosted.org/packages/d5/c2/aef51e5b283780e85e99ff19db0f05842d2d4a8a8cd15e63b0280029b08f/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d", size = 1920220, upload-time = "2025-11-04T13:42:08.457Z" },
- { url = "https://files.pythonhosted.org/packages/c7/97/492ab10f9ac8695cd76b2fdb24e9e61f394051df71594e9bcc891c9f586e/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60", size = 2067296, upload-time = "2025-11-04T13:42:10.817Z" },
- { url = "https://files.pythonhosted.org/packages/ec/23/984149650e5269c59a2a4c41d234a9570adc68ab29981825cfaf4cfad8f4/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82", size = 2231548, upload-time = "2025-11-04T13:42:13.843Z" },
- { url = "https://files.pythonhosted.org/packages/71/0c/85bcbb885b9732c28bec67a222dbed5ed2d77baee1f8bba2002e8cd00c5c/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5", size = 2362571, upload-time = "2025-11-04T13:42:16.208Z" },
- { url = "https://files.pythonhosted.org/packages/c0/4a/412d2048be12c334003e9b823a3fa3d038e46cc2d64dd8aab50b31b65499/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3", size = 2068175, upload-time = "2025-11-04T13:42:18.911Z" },
- { url = "https://files.pythonhosted.org/packages/73/f4/c58b6a776b502d0a5540ad02e232514285513572060f0d78f7832ca3c98b/pydantic_core-2.41.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425", size = 2177203, upload-time = "2025-11-04T13:42:22.578Z" },
- { url = "https://files.pythonhosted.org/packages/ed/ae/f06ea4c7e7a9eead3d165e7623cd2ea0cb788e277e4f935af63fc98fa4e6/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504", size = 2148191, upload-time = "2025-11-04T13:42:24.89Z" },
- { url = "https://files.pythonhosted.org/packages/c1/57/25a11dcdc656bf5f8b05902c3c2934ac3ea296257cc4a3f79a6319e61856/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5", size = 2343907, upload-time = "2025-11-04T13:42:27.683Z" },
- { url = "https://files.pythonhosted.org/packages/96/82/e33d5f4933d7a03327c0c43c65d575e5919d4974ffc026bc917a5f7b9f61/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3", size = 2322174, upload-time = "2025-11-04T13:42:30.776Z" },
- { url = "https://files.pythonhosted.org/packages/81/45/4091be67ce9f469e81656f880f3506f6a5624121ec5eb3eab37d7581897d/pydantic_core-2.41.5-cp39-cp39-win32.whl", hash = "sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460", size = 1990353, upload-time = "2025-11-04T13:42:33.111Z" },
- { url = "https://files.pythonhosted.org/packages/44/8a/a98aede18db6e9cd5d66bcacd8a409fcf8134204cdede2e7de35c5a2c5ef/pydantic_core-2.41.5-cp39-cp39-win_amd64.whl", hash = "sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b", size = 2015698, upload-time = "2025-11-04T13:42:35.484Z" },
{ url = "https://files.pythonhosted.org/packages/11/72/90fda5ee3b97e51c494938a4a44c3a35a9c96c19bba12372fb9c634d6f57/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034", size = 2115441, upload-time = "2025-11-04T13:42:39.557Z" },
{ url = "https://files.pythonhosted.org/packages/1f/53/8942f884fa33f50794f119012dc6a1a02ac43a56407adaac20463df8e98f/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c", size = 1930291, upload-time = "2025-11-04T13:42:42.169Z" },
{ url = "https://files.pythonhosted.org/packages/79/c8/ecb9ed9cd942bce09fc888ee960b52654fbdbede4ba6c2d6e0d3b1d8b49c/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2", size = 1948632, upload-time = "2025-11-04T13:42:44.564Z" },
@@ -433,11 +396,9 @@ dependencies = [
{ name = "dill" },
{ name = "isort" },
{ name = "mccabe" },
- { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
- { name = "platformdirs", version = "4.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
+ { name = "platformdirs" },
{ name = "tomli", marker = "python_full_version < '3.11'" },
{ name = "tomlkit" },
- { name = "typing-extensions", marker = "python_full_version < '3.10'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/9a/e9/60280b14cc1012794120345ce378504cf17409e38cd88f455dc24e0ad6b5/pylint-3.2.3.tar.gz", hash = "sha256:02f6c562b215582386068d52a30f520d84fdbcf2a95fc7e855b816060d048b60", size = 1506739, upload-time = "2024-06-06T14:19:17.955Z" }
wheels = [