From 9369d87c46984945ab8ec978a5e33b92fb1a9fbd Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Wed, 21 Jan 2026 00:10:50 +0000 Subject: [PATCH] ## Python SDK Changes: * `ragie.webhook_endpoints.list()`: `response.webhook_endpoints.[].secret` **Added** * `ragie.webhook_endpoints.create()`: `response.secret` **Added** * `ragie.webhook_endpoints.get()`: `response.secret` **Added** * `ragie.webhook_endpoints.update()`: `response.secret` **Added** --- .speakeasy/gen.lock | 437 +++++++++--------- .speakeasy/gen.yaml | 4 +- .speakeasy/workflow.lock | 14 +- RELEASES.md | 12 +- docs/models/webhookendpoint.md | 3 +- pyproject.toml | 2 +- src/ragie/_version.py | 6 +- src/ragie/basesdk.py | 26 +- .../models/agent_hopps_models_models_usage.py | 19 +- src/ragie/models/answer.py | 19 +- src/ragie/models/answerstep.py | 19 +- src/ragie/models/audiomodalitydata.py | 19 +- src/ragie/models/bucketdata.py | 33 +- src/ragie/models/codeinterpreterevidence.py | 19 +- src/ragie/models/codeinterpreteroutput.py | 19 +- src/ragie/models/codeinterpreteroutputlogs.py | 19 +- src/ragie/models/codestep.py | 19 +- src/ragie/models/connection.py | 49 +- src/ragie/models/connectionbase.py | 33 +- src/ragie/models/connectionlimitparams.py | 33 +- .../models/createauthenticatorconnection.py | 33 +- .../models/createdocumentfromurlparams.py | 33 +- src/ragie/models/createdocumentparams.py | 75 ++- src/ragie/models/createdocumentrawparams.py | 33 +- src/ragie/models/creategoogleauthenticator.py | 33 +- src/ragie/models/createinstructionparams.py | 19 +- src/ragie/models/createpartitionparams.py | 97 ++-- .../models/createwebhookendpointpayload.py | 33 +- ...tition_partitions_partition_id_deleteop.py | 33 +- src/ragie/models/deletedocumentop.py | 31 +- src/ragie/models/document.py | 33 +- src/ragie/models/documentchunk.py | 19 +- src/ragie/models/documentchunkdetail.py | 33 +- src/ragie/models/documentget.py | 33 +- src/ragie/models/documentwithcontent.py | 33 +- src/ragie/models/entity.py | 33 +- src/ragie/models/evaluatedanswerstep.py | 19 +- src/ragie/models/failedstep.py | 19 +- src/ragie/models/filesearchoutput.py | 19 +- src/ragie/models/finalanswer.py | 19 +- src/ragie/models/getdocumentchunkcontentop.py | 33 +- src/ragie/models/getdocumentchunkop.py | 33 +- src/ragie/models/getdocumentchunksop.py | 41 +- src/ragie/models/getdocumentcontentop.py | 33 +- src/ragie/models/getdocumentop.py | 33 +- src/ragie/models/getdocumentsourceop.py | 33 +- src/ragie/models/getdocumentsummaryop.py | 33 +- src/ragie/models/gmaildata.py | 33 +- src/ragie/models/inputtokendetails.py | 19 +- src/ragie/models/instruction.py | 19 +- src/ragie/models/intercomdata.py | 59 ++- .../list_connections_connections_getop.py | 33 +- .../list_partitions_partitions_getop.py | 33 +- src/ragie/models/listauthenticatorsop.py | 33 +- src/ragie/models/listdocumentsop.py | 33 +- src/ragie/models/listentitiesbydocumentop.py | 33 +- .../models/listentitiesbyinstructionop.py | 33 +- src/ragie/models/listwebhookendpointsop.py | 33 +- src/ragie/models/mediamodeparam.py | 33 +- src/ragie/models/oauthcredentials.py | 33 +- src/ragie/models/oauthurlcreate.py | 61 ++- src/ragie/models/outputtokendetails.py | 19 +- src/ragie/models/pagination.py | 33 +- src/ragie/models/partition.py | 33 +- src/ragie/models/partitiondetail.py | 33 +- src/ragie/models/partitionlimitparams.py | 89 ++-- src/ragie/models/partitionlimits.py | 89 ++-- src/ragie/models/patchdocumentmetadataop.py | 33 +- .../models/patchdocumentmetadataparams.py | 19 +- src/ragie/models/planstep.py | 19 +- src/ragie/models/publiccreateconnection.py | 33 +- .../models/ragie_api_schema_response_usage.py | 19 +- src/ragie/models/ragieevidence.py | 19 +- src/ragie/models/reasoning.py | 33 +- src/ragie/models/reasoningoutput.py | 19 +- src/ragie/models/reasoningsummary.py | 19 +- src/ragie/models/reasoningtext.py | 19 +- src/ragie/models/request.py | 33 +- src/ragie/models/response.py | 87 ++-- src/ragie/models/responsecontent.py | 19 +- src/ragie/models/responseok.py | 19 +- src/ragie/models/responseoutputmessage.py | 19 +- src/ragie/models/retrieveparams.py | 28 +- src/ragie/models/s3compatiblecredentials.py | 33 +- src/ragie/models/scoredchunk.py | 19 +- src/ragie/models/searchstep.py | 19 +- .../models/searchstepwithquerydetails.py | 19 +- .../models/setconnectionenabledpayload.py | 33 +- src/ragie/models/sharepointdata.py | 18 +- src/ragie/models/sharepointfiledata.py | 18 +- src/ragie/models/surrenderstep.py | 19 +- src/ragie/models/updatedocumentfileop.py | 31 +- src/ragie/models/updatedocumentfileparams.py | 75 ++- src/ragie/models/updatedocumentfromurlop.py | 31 +- .../models/updatedocumentfromurlparams.py | 19 +- src/ragie/models/updatedocumentrawop.py | 31 +- src/ragie/models/updatepartitionparams.py | 33 +- .../models/updatewebhookendpointpayload.py | 33 +- src/ragie/models/videomodalitydata.py | 19 +- src/ragie/models/webhookendpoint.py | 21 +- src/ragie/utils/__init__.py | 17 +- src/ragie/utils/enums.py | 60 +++ src/ragie/utils/requestbodies.py | 6 +- src/ragie/utils/serializers.py | 20 - 104 files changed, 1972 insertions(+), 1546 deletions(-) diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 0141251..daaa1bd 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,24 +1,24 @@ lockVersion: 2.0.0 id: 891d898b-5da4-4813-8dd3-fceb5b9832fe management: - docChecksum: f05bcd48705337294b49295e00dbfefb + docChecksum: ac8beac6b224aa34a5b90ea03b4a5847 docVersion: 1.0.0 - speakeasyVersion: 1.682.0 - generationVersion: 2.791.1 - releaseVersion: 1.15.1 - configChecksum: 7e93606329a70d291e2b8f02cecfaa1e + speakeasyVersion: 1.691.0 + generationVersion: 2.797.1 + releaseVersion: 1.15.2 + configChecksum: 4c148de236c73fdb50c5aaf77f462fbe repoURL: https://github.com/ragieai/ragie-python.git installationURL: https://github.com/ragieai/ragie-python.git published: true persistentEdits: - generation_id: ca6e35b3-9ea4-41a1-a5a9-cf7d8adce5a8 - pristine_commit_hash: fcbb8568e4aac28e55fd2f89a183ca72eb32ca5e - pristine_tree_hash: a81b6c35d753c0f9dc7274af3a12d65bfbb03f64 + generation_id: a73aa625-9515-40ca-bee6-f642e5d69e12 + pristine_commit_hash: 7b5c0593bc19f202ce2ec159b012bfa858188eed + pristine_tree_hash: 92c63c91343c7398041d278ae48dce241a8eae51 features: python: additionalDependencies: 1.0.0 constsAndDefaults: 1.0.5 - core: 5.23.16 + core: 5.23.18 defaultEnabledRetries: 0.2.0 devContainers: 3.0.0 downloadStreams: 1.0.1 @@ -34,12 +34,12 @@ features: methodArguments: 1.0.2 multipartFileContentType: 1.0.0 nameOverrides: 3.0.1 - nullables: 1.0.1 + nullables: 1.0.2 pagination: 3.0.7 responseFormat: 1.0.1 retries: 3.0.3 - sdkHooks: 1.2.0 - unions: 3.1.1 + sdkHooks: 1.2.1 + unions: 3.1.2 uploadStreams: 1.0.0 trackedFiles: .devcontainer/README.md: @@ -1080,8 +1080,8 @@ trackedFiles: pristine_git_object: 0b42c3988c695d84d5475899783dd37112c307cc docs/models/webhookendpoint.md: id: 48fbdb362b7e - last_write_checksum: sha1:6da79525daf7d1d41f0651055f35037a6ebff4d1 - pristine_git_object: b8b25e360221c5bc6bdc100b688608a8dbaa2735 + last_write_checksum: sha1:83faabfcb629e770ef6408d43f6e0c272403c9ea + pristine_git_object: 58291a397e24a8058f65f39d4646642110d1f70b docs/models/webhookendpointlist.md: id: ad9b87121d5f last_write_checksum: sha1:d3406c11d7e2fb89815e020d19332f8b623c9459 @@ -1144,8 +1144,8 @@ trackedFiles: pristine_git_object: e8cd3e85682cd3d489cf3c5be75a0563d0c9f4bf pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:8444deb7baebccac326764b190651df8431e77e3 - pristine_git_object: 6ac840df4972ceb0751ab7c5d13a16699ddfc6db + last_write_checksum: sha1:eeca2141a02a5886fc59e2f034d7723baf36d73c + pristine_git_object: 069ede4412f1a1afa077edb971537780aac3ab66 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:f50e786ba097ff7a6c94a983fd4893e3b1ce9417 @@ -1172,16 +1172,16 @@ trackedFiles: pristine_git_object: 63df765976d05650ad5ac814ab731a2e8ba3ede4 src/ragie/_version.py: id: fe031cf2bf0c - last_write_checksum: sha1:bc83ee2ee31b13e73929dbe76d807c4c0e7a1890 - pristine_git_object: 6e70a67dafd2ae1bc04db34ec9b0a65462956684 + last_write_checksum: sha1:71a09a6496520beda8ca5b3dff005d9f4410cc7b + pristine_git_object: 68a65596bfc88119b268c5217eb2f074d418b90f src/ragie/authenticators.py: id: e165d9360554 last_write_checksum: sha1:7865343cd24ca6374a7ee9eabc8d4825c19a22d9 pristine_git_object: 9cbec1e7376c148825489de70701889f6c59d722 src/ragie/basesdk.py: id: bd03679494af - last_write_checksum: sha1:59ff5a8f85e3b8b00ea54a2de9dc8faa42f72e4a - pristine_git_object: c9043228eb42bb9b59ac17c93a9999eb67a78c51 + last_write_checksum: sha1:711221c3f2b3f5010bbc7b7bd9fd238c0f750274 + pristine_git_object: 5e70dc4942fc7e42c974e27b8819cc2328d87c50 src/ragie/connections.py: id: 2315b5fb36f3 last_write_checksum: sha1:13e83bd9a83aa6334b9725a0887d6a25de1c3b3d @@ -1208,24 +1208,24 @@ trackedFiles: pristine_git_object: 74e8e84d3a8c4210ca80bd9a27b870edd7c8277b src/ragie/models/agent_hopps_models_models_usage.py: id: fd00a79f72ac - last_write_checksum: sha1:fb013805bcdcd6e0539ee61ab8521a6062898aa0 - pristine_git_object: bdfbcdf1e38e2c7c6e6560984d62a171217d4622 + last_write_checksum: sha1:4d4aeee530618cd9045ff3ad7778c771c1918017 + pristine_git_object: a7f27c077c148ed3a7c30d67d419b68c1ab06e30 src/ragie/models/answer.py: id: 8fad4a98e056 - last_write_checksum: sha1:a2724138d913c56b307d2958e5116e489021ffaa - pristine_git_object: d8954143178cbb6d7bb1d4acc342c6eb30232439 + last_write_checksum: sha1:7aa417fd41bb8fc2051f225c222e74a78f914e6a + pristine_git_object: 613f49e5a6c89b21876c8ae4d123e4b83b9210dc src/ragie/models/answerstep.py: id: b3f01342c466 - last_write_checksum: sha1:11fc1eae777f72675729561980363f8bd4c1882d - pristine_git_object: 4e823886f5294b2f16b2da770afeb411b07fd0d1 + last_write_checksum: sha1:7293e4341d3f5d0ad14331a486c0f76aec959c6e + pristine_git_object: 03220f085b53163a947e8f2590660416531ffaec src/ragie/models/asyncdocumentmetadataupdate.py: id: fdd449d8d6e4 last_write_checksum: sha1:dc5b191fdec1616e7d9ec858de7ccee184aa7792 pristine_git_object: f3cee2568785f1b160adba7453010370e280ef84 src/ragie/models/audiomodalitydata.py: id: 3bec528b8beb - last_write_checksum: sha1:4fa974a09ecb3a711fab8addd331ff875b9bd86e - pristine_git_object: b900305c888c6a3c4ae489390d7cf415c2a3e5c1 + last_write_checksum: sha1:a88d6fcacbac3fb5f454149f7f160fa6a4eb696c + pristine_git_object: b5e6c933ce67316f3a5f92666c9d1deaa1cb03ff src/ragie/models/authenticatorconfluenceconnection.py: id: 78e166a0f33b last_write_checksum: sha1:843de0739e5fe2517f932ecbcad7042209c956e5 @@ -1284,40 +1284,40 @@ trackedFiles: pristine_git_object: 892345ec2d2b64379f702ea02a17742b4553a327 src/ragie/models/bucketdata.py: id: 6e56bfa5aeba - last_write_checksum: sha1:e309b2eef5f9a233c554e071ff5118a063f8e8d4 - pristine_git_object: bebdd43313344fcb080c74358d81a52bc6207d03 + last_write_checksum: sha1:67f7ede5cdef3d340abb5eb370d19772cd581d09 + pristine_git_object: fd9b1ddba936f0adc27251aac8c16673bcadc3c2 src/ragie/models/codeinterpreterevidence.py: id: 58a8722a3875 - last_write_checksum: sha1:13380a19bf89f88e0f91f6a1a6354c9f7ecab232 - pristine_git_object: 91d279b3ae4ff81fa0e7565fd603d75bd251c8dc + last_write_checksum: sha1:2b940dd98ad172a981ce2c252d1db16c826ca5dc + pristine_git_object: 7cf9b9de8e81dc0310dfbbb606c47abbbcb38385 src/ragie/models/codeinterpreteroutput.py: id: 4a6f53809c7b - last_write_checksum: sha1:97d1c0b2dbf4a95c9825e2aa1e22f9009fd2b5b2 - pristine_git_object: c7b0e963618af6c5f326b1ad659360e18410bef9 + last_write_checksum: sha1:391b18a27a75dd3d79d335b57601891b28a013b1 + pristine_git_object: 80a0ec180fc8dedefdcd0d309e4bb1b04b40ec36 src/ragie/models/codeinterpreteroutputlogs.py: id: 2875042f2cc3 - last_write_checksum: sha1:41bccfa984233f5f4d82bc98fd727101e9198ca4 - pristine_git_object: c1303f7f4c2bc28335105862285bbbc0de9b4d3a + last_write_checksum: sha1:a0e5922658d55e66455c818161d3815d3b57d788 + pristine_git_object: 13912da4017458ca57534325a4ee13ac03975063 src/ragie/models/codestep.py: id: 10c53510018b - last_write_checksum: sha1:404fc1f6c5bedaa5d754f99ce8a2f6536698fadf - pristine_git_object: b1fcfd7933d46c79f88bcb5c31d7624e7c88f824 + last_write_checksum: sha1:7c5dc2542303fed5ad0f84642d18c7dab89f057c + pristine_git_object: 2b3e09d9efa071e11c7d3be7c63e1bc689216753 src/ragie/models/confluencedata.py: id: b80eefa18159 last_write_checksum: sha1:4cc81a0ca42f6729db54123aad2056bb523118f3 pristine_git_object: 7025893e9b24698ecd8036dfa451bf33ab009ee3 src/ragie/models/connection.py: id: a097d8b60401 - last_write_checksum: sha1:7d864bea629853ebce75d8e59108b918fba39c63 - pristine_git_object: af832a50311be6e0ec6fc42111dbbed8d7977ede + last_write_checksum: sha1:4cc75ed039f1e818fc75ed37e545a17918f67b72 + pristine_git_object: 8bfc2ee0e5bf9ff957ef3e57751c2f69546c04b9 src/ragie/models/connectionbase.py: id: b9a8296b837c - last_write_checksum: sha1:2d5eec6cd7e94db92de4247e53aae0d53a68a618 - pristine_git_object: 3ff91c191b110452ddb43c374f5c1e6d53a49b9c + last_write_checksum: sha1:9c1a040981da34c0f2cee5d04c1960605a0b6f4e + pristine_git_object: 855636a8d08a1b709a3132172a2b45f86f8617fb src/ragie/models/connectionlimitparams.py: id: 693f1bf572ac - last_write_checksum: sha1:a806b3a6acbe9228f0fe86fafa50f05b4d0a9ce5 - pristine_git_object: a916e6bcc67b0f64ab5c6783a85680e96278098a + last_write_checksum: sha1:6c1b785e72e9f6f88359f8151e2dabb9a169d889 + pristine_git_object: 8bde29699b18130a8668fb79565d23abc7bd729d src/ragie/models/connectionlist.py: id: 64d40056a161 last_write_checksum: sha1:32bcb0bf6146372f242a1a0cacb1c3e657546eab @@ -1336,8 +1336,8 @@ trackedFiles: pristine_git_object: b6fa16c5c0ff8829fb3be55b22ccfce9b332e357 src/ragie/models/createauthenticatorconnection.py: id: 6e9554e28868 - last_write_checksum: sha1:db06313dac6d12c6e9ab790e05c717068f43567e - pristine_git_object: aa7f745bbf71e48185afe0ea6572550de548b996 + last_write_checksum: sha1:5416bbf67fc148b34e2db5c19e91ac9519c148b3 + pristine_git_object: da059b7ccd88eb5dd044d3c73eb073f6fa06774c src/ragie/models/createauthenticatorconnectionop.py: id: b4efb1ad02f4 last_write_checksum: sha1:1b5b2e17638bab02084a9074010490fa48e0b5b1 @@ -1348,40 +1348,40 @@ trackedFiles: pristine_git_object: fa16dc2f5e0b5a768eb10828beb89a378c85da67 src/ragie/models/createdocumentfromurlparams.py: id: d19a13ac26c6 - last_write_checksum: sha1:70b380953f306c331b990bbb02ba3ca282652e83 - pristine_git_object: c573b2453667586b5927780b09ea761aef261167 + last_write_checksum: sha1:9541694525282ae9d3b5ed104a74c1ef9cf6b44d + pristine_git_object: 47c0581c8bd1a25813bd171c98c7222e4a918c43 src/ragie/models/createdocumentparams.py: id: 3454d3e0a733 - last_write_checksum: sha1:9b5380032fabe1b872ea9ad62b40d8bb21715fc5 - pristine_git_object: 70387dc6cfc12944e36ef18382a89305c4cae172 + last_write_checksum: sha1:8f8baaccfff9f1c70d1bba34f673580f12953675 + pristine_git_object: b05f8a8ff88f62823a77f56fa57756ba199a75a0 src/ragie/models/createdocumentrawparams.py: id: 00a5811a5001 - last_write_checksum: sha1:c69a96c3e896b0eba64f6d43d091643082ec4a6e - pristine_git_object: 674b1d72794da9f9c44cbf4501fb42372f21c45d + last_write_checksum: sha1:f6ccca0cef109a6536bca77eac138627f033cb27 + pristine_git_object: 1912721acf0061abbd528d120f1bccc7c47f0a5c src/ragie/models/creategoogleauthenticator.py: id: 40423f768adc - last_write_checksum: sha1:3fc5a3c0f336a3c5d5d8b0b14bac1b3b8600a0c2 - pristine_git_object: 916b456cb0ba378ffa037295122b449cbef04408 + last_write_checksum: sha1:b0721aed5ea8037a87bde3472d6bdd9d487f3fad + pristine_git_object: 530d54ccf5b6f6dd255c73e6256170764f434706 src/ragie/models/createinstructionparams.py: id: b9ad3bab8efc - last_write_checksum: sha1:2012b8b70a1c85970caaca24606396dd82ec6702 - pristine_git_object: 7b8ee41439414b4591502b30d7a54e56fcd3cd3b + last_write_checksum: sha1:7db6122245fbbe9e809f2ab318058eaa1babffed + pristine_git_object: 2c8da7ee4bc32a27b0188720c670aefaa541897f src/ragie/models/createpartitionparams.py: id: 5bddbbf09492 - last_write_checksum: sha1:852c0a838b02083033dddd95a8b72486c8ffa5a7 - pristine_git_object: 22e5202e9d6395de3af1b1afdc186293a1ffdfea + last_write_checksum: sha1:432355be44ee2a8eb2109e74ce2d4bf5d5f0c26a + pristine_git_object: aefec644150f3c59ce47a3ffa0bba3a9e3c36f9b src/ragie/models/createwebhookendpointpayload.py: id: 61c689f3279c - last_write_checksum: sha1:e4d37cda12fdac69d798374cbc851e3569fb8f62 - pristine_git_object: 0e84b70d48a06c32b7063da8e58c9d78fc20c649 + last_write_checksum: sha1:922cc8973933df663c8fcb4d9b525674c90d8dc0 + pristine_git_object: 5678416d0e726ee90ba6c9fd0b245d1f13d1b912 src/ragie/models/delete_connection_connections_connection_id_delete_postop.py: id: 3e3d9e8dc9a2 last_write_checksum: sha1:2678ff8a1c699b3225f9c05a6f34159dae2392cc pristine_git_object: d1d52c5b5fba89656e1b58f292cb084d8338870e src/ragie/models/delete_partition_partitions_partition_id_deleteop.py: id: e9b725ed9642 - last_write_checksum: sha1:4c2415186c3abda552b60343b81ed1cab1a9b042 - pristine_git_object: c740d29bb11e76e119384ec7149da521f3cb8aa1 + last_write_checksum: sha1:479f2c4a08d09751feda7f2f3e6f1eae44fcc701 + pristine_git_object: dbd33e366db01a59fcc17ce87f1f5e5dcc15bc5d src/ragie/models/deleteauthenticatorconnectionop.py: id: d544582887e1 last_write_checksum: sha1:3027374de613475a583c38af7a31395e37035b88 @@ -1392,8 +1392,8 @@ trackedFiles: pristine_git_object: 5007371ec240f87a5cb9042b4382629ec51c557f src/ragie/models/deletedocumentop.py: id: 58d750bebb8a - last_write_checksum: sha1:9909ddec1363cfa0cabfaf566421bcec81423ffb - pristine_git_object: 40e1bfd73e497d95443e1aea925ee434084453e1 + last_write_checksum: sha1:ec69a365f81ab683267698e0403518112f3db94a + pristine_git_object: 2df64f5527e217803ce2dd8d20208c3103b02c0e src/ragie/models/deleteinstructionop.py: id: c1d15421bef6 last_write_checksum: sha1:39b459d81e0a7a8f48bb5fda140c11e57414b1b8 @@ -1404,16 +1404,16 @@ trackedFiles: pristine_git_object: c29f0f7f299f853e4f9199957759ea4e10f5d494 src/ragie/models/document.py: id: a96c10d6cd79 - last_write_checksum: sha1:24bed6581fa39a127813d27c13744131e9d06cc3 - pristine_git_object: 4816f78a7405c5fcf42d42c49f5fa38854c4f267 + last_write_checksum: sha1:f573663c32b897807eb7b59b03ccd94897d0f5c0 + pristine_git_object: f1a1840cb73d940f40cbf966f3123726793c73c7 src/ragie/models/documentchunk.py: id: ce6bcc1580c5 - last_write_checksum: sha1:872fed55e3a466c4c76477326646e74105820dfa - pristine_git_object: 1e80d7385bbcf0a2ad393e94ebf403ea3d1517bf + last_write_checksum: sha1:8d6d6b287458ea27c063282f93516bbb366cf53f + pristine_git_object: e3bec894594828fe5078df8f223cba759ed8a0bd src/ragie/models/documentchunkdetail.py: id: bf3ae76d131f - last_write_checksum: sha1:76fe191d09614159fe7b1fc7934f72e0361c8ce5 - pristine_git_object: 1df28bbf62111d028e1b0bd9ebb8aff0ea2975bf + last_write_checksum: sha1:e2e9bdd37d32f10b6779a536105c4f9362f26c84 + pristine_git_object: 7d35e14e65fee01ccda82ef4d6ea24d4c7718ef2 src/ragie/models/documentchunklist.py: id: 1eb2c261d55a last_write_checksum: sha1:c53d45efa933bdc65ec3e52852d56e867d8a819a @@ -1428,8 +1428,8 @@ trackedFiles: pristine_git_object: f8243830abdac49f6bb27fddc884ab33d2e600b5 src/ragie/models/documentget.py: id: 88c6b58ac964 - last_write_checksum: sha1:8a0bd0e8b07086e0d489a58413e63a09ef08ab74 - pristine_git_object: dafb15274f629287963b37440f81e93567d1292c + last_write_checksum: sha1:5090164c0173052dd90c5f822fb19ca1c106ad60 + pristine_git_object: bc1cdcb27322ce042a0063b4f9ab6df9c8ab066b src/ragie/models/documentlist.py: id: 2f5b4cad9bef last_write_checksum: sha1:eb0fe83ab3a3dea37f6f16a01c171ea789367ff0 @@ -1452,12 +1452,12 @@ trackedFiles: pristine_git_object: c0760b7984a404b0eb993814b9ab6b891d61ccee src/ragie/models/documentwithcontent.py: id: 35f2af097df0 - last_write_checksum: sha1:88ac305b5a94b0fe0021c552b164e84218513cc1 - pristine_git_object: 689b4fac827e159d9f185f540e9a182b18a5fb17 + last_write_checksum: sha1:42a96f16cd7becd20b56e0ac00c34fef128f20f1 + pristine_git_object: 328d36623e9ffe85d0fafca1dfc10012eb8485cd src/ragie/models/entity.py: id: d14c935f650b - last_write_checksum: sha1:613775079fc4b38db58f88c3bfb48ee2c1a7b161 - pristine_git_object: 8e48a55781f0434f2c6e734086a177df8c3b0c0c + last_write_checksum: sha1:2618782f92233dd9885063f41614ed3650c634c8 + pristine_git_object: 7d5aba8d53cf40df96644d7c6137d35f50c27cc4 src/ragie/models/entitylist.py: id: a270a8597ba1 last_write_checksum: sha1:2d2159223102f6546cfa67f80a6dc63fb493d1ad @@ -1468,24 +1468,24 @@ trackedFiles: pristine_git_object: d8ef91ba29452d9ff785cafc6f4f29b40c937af0 src/ragie/models/evaluatedanswerstep.py: id: ab7776538d44 - last_write_checksum: sha1:538182faedbb286de22ce7f518dc27200c4d7d7e - pristine_git_object: 2f890a97ba9197fb36784ae73ef9f3320daf533f + last_write_checksum: sha1:952455babbb4307d9532cc60eefd11cee1c20418 + pristine_git_object: d0bfa865d33714441d4b5b55e2da976e8570c054 src/ragie/models/failedstep.py: id: db7574cefdc9 - last_write_checksum: sha1:6f4a7cbd7131bacf4ec4e6c5d678c58f11f44444 - pristine_git_object: 838eec58e9952033d220e46b5f455443ba17c95b + last_write_checksum: sha1:e7bddc542fd3601748dad878569cffb7ca2d77db + pristine_git_object: 7491165d223b0d056af5fc4703b0f52d4b053f57 src/ragie/models/filesearchoutput.py: id: "320201341764" - last_write_checksum: sha1:a9170ed25dde175d3a699e22d390ec4f5c30d385 - pristine_git_object: 84ea1ac7bd32a8acc11b5d7872a97ca94e0370db + last_write_checksum: sha1:c1157c871f2704aec7ff12dd01a118765349cb94 + pristine_git_object: 465981924e1fd32993180c2ae3151736addf7798 src/ragie/models/filesearchresult.py: id: 25534b16d60b last_write_checksum: sha1:4348fa86540c72407ee8eb9d8d5bd0de0430d49e pristine_git_object: f7c186fe2665a1cb008f437acfbd4765e37778bd src/ragie/models/finalanswer.py: id: 8e217345d931 - last_write_checksum: sha1:d3c23d899d4c7647277ae86a7e342d81730bf6e7 - pristine_git_object: 1826f444a24d44fb4bd8897c3e0fa57544127ee4 + last_write_checksum: sha1:c7a55feeff3a21a5ef28c77a49ec92711f5a9cb8 + pristine_git_object: 817649537bbe429a444aa79b273d15a1caa0ac11 src/ragie/models/folderdata.py: id: c175bbceb3cb last_write_checksum: sha1:e1146ed9023f284d589e948df7bc8383d5c293ef @@ -1516,40 +1516,40 @@ trackedFiles: pristine_git_object: c24157194d22014d79afbedd6b023e61196245df src/ragie/models/getdocumentchunkcontentop.py: id: 205da3e140f4 - last_write_checksum: sha1:c0f2e30621f6e5c00bc6e8b64a14081a27406b6d - pristine_git_object: 94443040a9b2ae008cb2dd38b703c380797979eb + last_write_checksum: sha1:43e4b6f7c69bb127c2e4e0a8c4ad8b950da23d1e + pristine_git_object: 6450c42265023f055711dd7140764a59cd44b020 src/ragie/models/getdocumentchunkop.py: id: 8119b2218d49 - last_write_checksum: sha1:9f47d18c1163d8d73a0c4af50ad0335697d50126 - pristine_git_object: 926d926e3fec69dad10cdc3def13109c3173e472 + last_write_checksum: sha1:fe07742620fcef9a13ff957fcd06fa2f560e6bc7 + pristine_git_object: e469d6e4de9da715ca83520cc2629c748048f199 src/ragie/models/getdocumentchunksop.py: id: c605cbba4383 - last_write_checksum: sha1:e4a412ae42bc2481a4c4e590a56ea771bf290e4d - pristine_git_object: c94c413597fe91b9dc0521c447f77fce651e4002 + last_write_checksum: sha1:304190def2e0c1a41362f6e96b0221235b9ec459 + pristine_git_object: 8ce52ea091adad8ff497f344082abc9630991d97 src/ragie/models/getdocumentcontentop.py: id: da2dcd6aa241 - last_write_checksum: sha1:5f7e37fdce508240e2eca9ee87c1d6d13cb8d1fb - pristine_git_object: 56816638353629d1309867d7311ad9568dfcf47c + last_write_checksum: sha1:d505d0f14ad0f8fc20bae2c22c01bec928c1356f + pristine_git_object: 868695865d9897843a1856e50ae987e1e8afee9b src/ragie/models/getdocumentop.py: id: 6634d749067a - last_write_checksum: sha1:35fdedf1bdcd3076be5b000defc15961bdf745be - pristine_git_object: b0adaf637ce287103117269dbfec8efb2dfa47c4 + last_write_checksum: sha1:9292cd164c78e20f0d1f0865ec053c94df29110e + pristine_git_object: aaa02a36a048c0edf792a1673bce705f7f4cb38d src/ragie/models/getdocumentsourceop.py: id: c5f2efdf2a45 - last_write_checksum: sha1:37d03e894780cb99f9ecd52b26217610bb6617bf - pristine_git_object: d0362dcdf7c088e018f167be1be36a29d6853928 + last_write_checksum: sha1:3c3faab58b60ce4972270d68470e9f39f0aaf37f + pristine_git_object: 9a637c2c82a24e9ee31fd2018a24953969f9899a src/ragie/models/getdocumentsummaryop.py: id: 883d9e71ae0d - last_write_checksum: sha1:12120555003d2dcc4b9a0350bb99a46b3c78b424 - pristine_git_object: 6ed4180acea1d5a17c17609cfb0a6833be36e6ac + last_write_checksum: sha1:bf216551a2c3205fe6f426c1164147e361a4733a + pristine_git_object: 4322ee77aae70aad27e8acb97056e7a544030142 src/ragie/models/getwebhookendpointop.py: id: a3295e010dab last_write_checksum: sha1:a8a30e76d5410faeed6d3de1f5ada619ad7d6abc pristine_git_object: 91ee4080c28ea2d5408b9944183be059d213f080 src/ragie/models/gmaildata.py: id: 285c1b268e9b - last_write_checksum: sha1:7b43c1d0c428b683bf505656e3d23ca91f111482 - pristine_git_object: 22bdcacf4485ebd121acadcc3a3ad294b785acde + last_write_checksum: sha1:eff988de1b46985187961969d6f30dd53fed5202 + pristine_git_object: 1597eefa2a40a464cb0c983c36e8b97827818d53 src/ragie/models/googlefolderdata.py: id: e1ca7cde726b last_write_checksum: sha1:6945b13a4be9e3679a9c5278ae477a6324b6d54a @@ -1564,60 +1564,60 @@ trackedFiles: pristine_git_object: 4cb2667a6d19961932acb673de3cbc087a548231 src/ragie/models/inputtokendetails.py: id: f4c01ffc86fb - last_write_checksum: sha1:017d031500cfcbaf2a21811a7e74a2692b664a50 - pristine_git_object: 32c70b7095536e9ce2481ddb701bdc9fd75713e8 + last_write_checksum: sha1:a2837ea7c333eaf4291ebb09d2e8a2d3321a890c + pristine_git_object: f298997e07978e15d6c8d38bec545987ca2ebd36 src/ragie/models/instruction.py: id: 53ecffeb6237 - last_write_checksum: sha1:fc1da3773e6111ee4b1a7c00245b8b0347c98781 - pristine_git_object: c448878d47c9b1061c58f8ca19a8bf21cc0c7643 + last_write_checksum: sha1:e4027c3a076dbac8514ad682715e3d26282284d7 + pristine_git_object: 0ade81243e5dbd5efaa90e3d95f603b9134ba5a1 src/ragie/models/intercomcredentials.py: id: 0fec3566a672 last_write_checksum: sha1:69c7fe443a19946df260ca2091bc64c8dcbd3aec pristine_git_object: 879a14b6a5a36c7793bffa9f3ff4172c1129b13a src/ragie/models/intercomdata.py: id: f46cc698c480 - last_write_checksum: sha1:7385f8db59fe35a4feb161cce796fdb6dcf027e4 - pristine_git_object: bd64303f2dd671def36e670e190295800a97d77e + last_write_checksum: sha1:b3dcbcd2a021fe06417b5639fdf236bb1082ad9a + pristine_git_object: 8f5af49b97bf30b95c62e34c78090ae85b0c47ae src/ragie/models/link.py: id: ac2a1e11c6ea last_write_checksum: sha1:1ed0f52800b8b2add1237f394ec72b298c89ad15 pristine_git_object: c8aaca09aba1299f5f89c5fbb2ee1aa9c96d7f27 src/ragie/models/list_connections_connections_getop.py: id: 44ae5e0f5798 - last_write_checksum: sha1:c7a4836e92b1260993b55112921515129ac39a74 - pristine_git_object: e95b34e8c79225df0eac7e68bd4b5e125301db51 + last_write_checksum: sha1:d8573eebbe354b6f111887bb7ed61d0083fc2ec9 + pristine_git_object: 1b744a2242583019a11f74f2b71c8fde64d12764 src/ragie/models/list_partitions_partitions_getop.py: id: 03965a1b68fb - last_write_checksum: sha1:b3e1b31034bf6ef9eeec8ec35a1138b8b114004d - pristine_git_object: 50038bbd17890c4bc6a8661a24d09b821f6f4641 + last_write_checksum: sha1:b7f7393e4825a781f831ef530bac9b8b2d9a12e5 + pristine_git_object: 4250f9edafbe6b9489cc7cbce712b5fe39605b90 src/ragie/models/listauthenticatorsop.py: id: 32320c393339 - last_write_checksum: sha1:19fdf414614682e26e1e88c49d26db027135bea3 - pristine_git_object: 92a1fd777a1d697c115ca0ba35ffda3eb9203086 + last_write_checksum: sha1:423a21d2b96724332e83602ade650227f29eccc9 + pristine_git_object: dc37ec1591793f3c920dadecdf832132f7cbe2a0 src/ragie/models/listconnectorsourcetypeinfo.py: id: a2008faa2fd5 last_write_checksum: sha1:61da13eb36495530b6cd61ed970cd97f8f5cdc3a pristine_git_object: ff12ff667525e1855cb6e687abc9a96ce9be8f79 src/ragie/models/listdocumentsop.py: id: ff311357aea7 - last_write_checksum: sha1:d7745c9e5a407082f5a9e916a2d29d36a9e822ac - pristine_git_object: da922346c637ee574e7582f1650bfb2234668229 + last_write_checksum: sha1:ab75484aecef584e7f563f6e8039c20cfacd59db + pristine_git_object: e523f1850e99147b473b9fc8e5319c90579c29fb src/ragie/models/listentitiesbydocumentop.py: id: 004678f37182 - last_write_checksum: sha1:f7c0bc34efd5cfa79c70acfa2bea5a6cfd5775eb - pristine_git_object: 86c01cb2f3f7f7d3cdc44df762ece2123d5fad78 + last_write_checksum: sha1:399eea3ba206410d764451ac41b6eeb69ffc05a7 + pristine_git_object: 5cd6f3e69e2360586620751a74e1df575c52595e src/ragie/models/listentitiesbyinstructionop.py: id: f7b8d42e6f40 - last_write_checksum: sha1:3df52fc0f1b4932207929ecb4ad88f53f26bdaa9 - pristine_git_object: 3bd687919463a0fedfd4927d817a32bbee0080af + last_write_checksum: sha1:a75a035467baf938423b83753a8aff6192d760d5 + pristine_git_object: 910237b4edded570c37eca574cad2faf2e5dfa3d src/ragie/models/listwebhookendpointsop.py: id: 55edb34bbe29 - last_write_checksum: sha1:b9883a7d22c888448bfe14316f2f3b2d5c265c7e - pristine_git_object: ad365c62f99993a728a603ed259cd69c8e862425 + last_write_checksum: sha1:73185a5897a53a50021469e146e281525fa560dc + pristine_git_object: 93b1c0d4d8efb7921a9043aa4c02c6857991a4d1 src/ragie/models/mediamodeparam.py: id: f742caf40caa - last_write_checksum: sha1:b5e4eec230a8630589bd2e262b4f5a84a667c57c - pristine_git_object: cc153f9388a1c5597601d253604ff6ca630b668b + last_write_checksum: sha1:2796c0ad0abc526c76b30e12d748fdc9f0a0720c + pristine_git_object: 244c41e6ab5483558f9c2fb404a793a5a7c59bad src/ragie/models/modelusage.py: id: b79a7d9a103e last_write_checksum: sha1:f485608772886e7e45c698007d98e9dcf4653ef5 @@ -1628,16 +1628,16 @@ trackedFiles: pristine_git_object: 1deab64bc43e1e65bf3c412d326a4032ce342366 src/ragie/models/oauthcredentials.py: id: 1dffefece9fe - last_write_checksum: sha1:59e5cbd14f0f00ba5f78df1486c9dcb4d2d64d6a - pristine_git_object: 4b7bd7a56d5def2439f5eb3cb4a3046f6fbb71a7 + last_write_checksum: sha1:ea0e8e91b5ef5fa58ad2fbe7dc4b30c712591925 + pristine_git_object: da389a7b006471d8c26d18ab5b85b5c0bc5e895b src/ragie/models/oauthrefreshtokencredentials.py: id: 055725d89911 last_write_checksum: sha1:21fe1a4ecb9ff54b93ecd73c4c9efc23c49b0b6d pristine_git_object: cc51e525eda252e9fb3030b06d0fd6d6fcb5981d src/ragie/models/oauthurlcreate.py: id: 02ab9526fd95 - last_write_checksum: sha1:9d25fc95fe64e602d08560b0f05d581dc9ede4d8 - pristine_git_object: ec7947910dfe18a14fb4d7337f9e2ef9f38b28b3 + last_write_checksum: sha1:676b6252a09a9d1934be9e243ee0dd07a90298da + pristine_git_object: 1c9533732c8e0304fe072bbb421f8d56407e8df3 src/ragie/models/oauthurlresponse.py: id: 9c7f56174b1a last_write_checksum: sha1:4842fc53764a24634e58c9780c7ec04abf094cd6 @@ -1648,28 +1648,28 @@ trackedFiles: pristine_git_object: c9afd2bc1f5742481d89619fdb7c0c63cb350019 src/ragie/models/outputtokendetails.py: id: 4c0d878b52fe - last_write_checksum: sha1:056821956d32b4ea9b127406e10ecba654eb0649 - pristine_git_object: bba6c4088862d0cc310698d5ae197bbf759ee52c + last_write_checksum: sha1:d13efde576a8a9acd3bb4695e244ab8e703ae7e4 + pristine_git_object: 6ea25d897447a4190f554aa1c591b59f37f521d0 src/ragie/models/pagination.py: id: 8470c88ad7a3 - last_write_checksum: sha1:857dba0f887aaff9e19761cfa89659dc80dddc49 - pristine_git_object: 2bc263adeb93c646eb272873dbe54dd9901934dc + last_write_checksum: sha1:3df3bd8ad832e6de90348913d76eebbce64f1f1c + pristine_git_object: 143d8d1e7d79eeede3ee0716a6098a9b9b420def src/ragie/models/partition.py: id: 0098c1d7524f - last_write_checksum: sha1:97f38462b00c5f8a42f5a35e9b51fed93061e524 - pristine_git_object: 4bd582ad404ed0aa5a145ca6b985d2bc494a46d4 + last_write_checksum: sha1:900189acbbee696f28267591c066570118840b00 + pristine_git_object: 4f651d3055efe4728dca9ed1a6659eeb5248817e src/ragie/models/partitiondetail.py: id: 7d258f33a93c - last_write_checksum: sha1:8f6a2188cc26d97b9f9b64a2ff1490abe8a723e6 - pristine_git_object: 5851c8e50808cd52c4a94f383a98da9332905c21 + last_write_checksum: sha1:e287c9ebc01d4315c1e17286e06cdc3ac1b74b1e + pristine_git_object: 433ce59ce8d193a674e6b2583c45ae6a8e29638b src/ragie/models/partitionlimitparams.py: id: 548cac60e715 - last_write_checksum: sha1:2c78fd511c2eb19b656a8f7afc129b1c6b3ab778 - pristine_git_object: d4624ba7af886f62ba7d84dc46f692537b1d4198 + last_write_checksum: sha1:04f2be3ab711d6244bbe90944f04bbc8e620fffe + pristine_git_object: b03059057d5e9e12d6fc465caf6adb2fb523a14e src/ragie/models/partitionlimits.py: id: 2f929857a4b1 - last_write_checksum: sha1:0ef9668e50d0a913e81098d7d30ca0af9e1a4a81 - pristine_git_object: 114acdede75b7104749d1770fe46e2b42d741d6d + last_write_checksum: sha1:41855c706451f87432484e1238e122bd5c28d641 + pristine_git_object: a6bd09989091aec0a994271c1386ca2f702d15d2 src/ragie/models/partitionlist.py: id: f32979d145c2 last_write_checksum: sha1:e1b430d295265f7ca521c8fe7325eceeef320ce3 @@ -1680,24 +1680,24 @@ trackedFiles: pristine_git_object: 4248b7f3d03902a38e12d9259db7eca9f93355d4 src/ragie/models/patchdocumentmetadataop.py: id: b10fb020f5ce - last_write_checksum: sha1:29ba006dadc91e32a323ae05c5f47faee1ceda2f - pristine_git_object: 4c9296cc4d6768c28e4915524b53b0858086bc43 + last_write_checksum: sha1:76bf19477a4563c8a169b99db2b5c909a0d352a6 + pristine_git_object: aa0874f87b52826139b07034eff2463ec94fd3d3 src/ragie/models/patchdocumentmetadataparams.py: id: 37259efb97a1 - last_write_checksum: sha1:e783d9a5e8f496e6573d41de5f65dd8a38628da4 - pristine_git_object: 14e5f57f3ffde40fe395c4938c47a1ead1b7ebec + last_write_checksum: sha1:63ddef1b824ff86c273cabc0006c43f86e7b05b6 + pristine_git_object: 91e858da81604cee1c8cc014e3a57079548d4a68 src/ragie/models/planstep.py: id: fefb6112ea16 - last_write_checksum: sha1:11633dcfdd4e44a2208db4a69e4f5eb619281af3 - pristine_git_object: 444e54f4f34e8e4f8f4bb97069f39b48c54a834c + last_write_checksum: sha1:260276166228ffed1e46d08e79c2b8b65df99de2 + pristine_git_object: be5c6f58a197522b9b7cf80c48c99461f90444c0 src/ragie/models/publicbackblazeconnection.py: id: 1b7057a0187b last_write_checksum: sha1:591725ad0f06b433402679a150cb40313adfdc7e pristine_git_object: 6f8270e15398b8353952f3e566d8d6c7fa3c63d2 src/ragie/models/publiccreateconnection.py: id: 37e7b3f8b99f - last_write_checksum: sha1:206ba732d89189e12c30e06cbd715d0870923a04 - pristine_git_object: 1d1e3ff62aa1895078457085bdc5bbdf561029f3 + last_write_checksum: sha1:1ed2e2f3dcb4b9182113b549d3822695cd476bfe + pristine_git_object: a268b39d0b4a496016ff26bb681ab32d414b8881 src/ragie/models/publicfreshdeskconnection.py: id: 9cee809fa25d last_write_checksum: sha1:84799e5d656d0984d5219e232e4860a03ec56250 @@ -1724,52 +1724,52 @@ trackedFiles: pristine_git_object: cfe04237528e5962f2df6420486275ce90706e81 src/ragie/models/ragie_api_schema_response_usage.py: id: 3259cdf8d328 - last_write_checksum: sha1:c7b98652cf1a5aa956bdda6344cbfbf1b5608a6a - pristine_git_object: 7e8a1b328a35766da39d55ee508a4ac1b3e9a669 + last_write_checksum: sha1:b4a1fd4c2e6539e39ef6dad701488de1f4b44528 + pristine_git_object: cfd8c1a4288af295deb74f82252eb0c87131eb87 src/ragie/models/ragieerror.py: id: 2557986692fe last_write_checksum: sha1:204f275b694055352f5ba0dd01a1a9378c7e549b pristine_git_object: aab45686b904e15cd2a0bc8e9bf52f91c3fb0b20 src/ragie/models/ragieevidence.py: id: 1f775241eddd - last_write_checksum: sha1:b1c9c43c855f5bee322170a2703c5847a2e2e4f9 - pristine_git_object: d60b83f3ccc2ee9d76249c1ddaceab98bdbe21df + last_write_checksum: sha1:9e1975c4649a341da92be1aadb9bb2d774c677c1 + pristine_git_object: 19310da7897b3e992e2eecddc6d73494de8a015f src/ragie/models/reasoning.py: id: b538b54c2baf - last_write_checksum: sha1:5f77fc93e52372f6888606238d6d2fcf5cfc9ed6 - pristine_git_object: 4d0a8357f25e41319e62ffba903bee8907b0d90c + last_write_checksum: sha1:7da9c8697846d54eaf43203e3800ad46606b5dcd + pristine_git_object: a81828f6eec3c697cf4a6788fa42518182df2465 src/ragie/models/reasoningoutput.py: id: e1a48cd21d1d - last_write_checksum: sha1:ac475f9fe233cad2df787ccf7c696534089a8c89 - pristine_git_object: aa491bda91161970fcab62d1fced62cddca681e0 + last_write_checksum: sha1:ae7bef7ca479bd46b34dbcbaa36e286871386e26 + pristine_git_object: c73274149e38156780e6a44a3d018d3a3086950c src/ragie/models/reasoningsummary.py: id: 0f251da8c32e - last_write_checksum: sha1:2a1ffebc56c3895e6e37197596137776aba50544 - pristine_git_object: 24a5f75322f9bfcf3db193f36f5dc21e06e4989f + last_write_checksum: sha1:4282c793db618ea9d5fcc920ee17bc9e05da8c0e + pristine_git_object: 89c01ba1fe423be06ce854ff9267eb5d8c64419b src/ragie/models/reasoningtext.py: id: 38752617d3eb - last_write_checksum: sha1:fdc8e9f6dbc922c975b67edddebcc9470281a75f - pristine_git_object: b777d3caae7c110794e112f2e3d02729d9d8217b + last_write_checksum: sha1:67e71b531f85c70cbfc08314e8395348327bd015 + pristine_git_object: e2101f034c8d466285d862ee82cf845ab1dfcf06 src/ragie/models/request.py: id: 22e8261db75f - last_write_checksum: sha1:dac3234c96e4001227baca659ca3d42129facf7e - pristine_git_object: 382b7e72b26d144a495057399d75b9fb90694661 + last_write_checksum: sha1:86a2f93b1252cd19b4fc0fe0c035baa1d6155d58 + pristine_git_object: c7ad3076687d0e0f55627611da6484dc26c0955d src/ragie/models/response.py: id: 13850c80e2c8 - last_write_checksum: sha1:c8f945e2eec069d2f1a897ce4482057ac1974578 - pristine_git_object: 61fdf4628c508379cf9689cda216e013e9c38b4a + last_write_checksum: sha1:953e4aa4447c8902ff7f335063585d499b42e9a7 + pristine_git_object: 6da2514986b9cd283030fa884c09823c0cfd71d7 src/ragie/models/responsecontent.py: id: d28aeff6f91e - last_write_checksum: sha1:2e559fd574e68aa49dde0b26a25f433e8dcb8fff - pristine_git_object: a18c62259388d096cbea51849357184c91210d79 + last_write_checksum: sha1:da9b23282d561793036b41044a59380e38c69a5e + pristine_git_object: 1f7498e01a2c6bac29b414a0ef221f40b3de3b12 src/ragie/models/responseok.py: id: 6f933bb6a3ef - last_write_checksum: sha1:608f94d82af1e1657c178fa87f1295aae4702607 - pristine_git_object: ca0e2617b18138950f503d748cf75720ed163f8a + last_write_checksum: sha1:017b9814f727a54d402e0478a791f72254b68d00 + pristine_git_object: 556794ffd352c7bb0f1ad346c078fbb6be24c07a src/ragie/models/responseoutputmessage.py: id: d729a5c22fd2 - last_write_checksum: sha1:28ec30368142118397a35736d5321a89d86936e5 - pristine_git_object: 919a1aade1f67d81dde46084a61d7edd9266d305 + last_write_checksum: sha1:aa3856909d8ba83b08e5eb45821a4c35a5285c69 + pristine_git_object: 5908fd458ccbac498c6c3dd845e1f2492ba3d90d src/ragie/models/responsevalidationerror.py: id: c864a2d677d4 last_write_checksum: sha1:45b22889cc38a58a6961fa98ded91fbf8131975b @@ -1780,16 +1780,16 @@ trackedFiles: pristine_git_object: e3f7d5f35e503888d81e2938397af3e9d8d74e7e src/ragie/models/retrieveparams.py: id: 635e89513881 - last_write_checksum: sha1:2c183e28e71f2322ab49d2d7b78ad2bbfdc4f25b - pristine_git_object: 3f8b7d0f9c97c60701d0153079be81e9008144ae + last_write_checksum: sha1:2547353a08288bcca5bc18b8b41a420509ac4b71 + pristine_git_object: 9a09fc82eb3d39f2e46a46aca4500b31080f7807 src/ragie/models/s3compatiblecredentials.py: id: 14b3e8ef04d7 - last_write_checksum: sha1:20e46c5aeb7b9afb482de3e15e79d638d02542b1 - pristine_git_object: 17a98160ddc167ec0de00e0bb3e88f05a3cdcecf + last_write_checksum: sha1:2ed9f64ac276f60d057300e0139270dac37293f1 + pristine_git_object: 5d00d4aaa7cbbeaaa5bda00c78f65796bfa53c7c src/ragie/models/scoredchunk.py: id: f5c561612168 - last_write_checksum: sha1:58c1db1c0815a6db4162c93d4a69a7ef06a78362 - pristine_git_object: 3ed49b486b91876ade1bc712c94e1be3f8be20f2 + last_write_checksum: sha1:00fbee88f1f66ba53be00c5816f72d36b8a20c6e + pristine_git_object: 3b9349e6aaabd37575da8ae93fb8017f37516566 src/ragie/models/sdkerror.py: id: 58f87052d1ef last_write_checksum: sha1:4e2118e5c1406bc92c2ba2168578e052b55fc05c @@ -1808,12 +1808,12 @@ trackedFiles: pristine_git_object: 01b288119fd4f4c3efb1a4bbeced4b782e3b4028 src/ragie/models/searchstep.py: id: a0f82e57eddb - last_write_checksum: sha1:145893c3f928aa70418931bf44af8e8a08710acb - pristine_git_object: 7c6d4c28b9fd103c9472a5bff76c164fd3c55b95 + last_write_checksum: sha1:d25eb600403437a4913eda49c1cb20b090bd8c51 + pristine_git_object: e59bbea965ce3a24b90c407ce4f04da876806a6d src/ragie/models/searchstepwithquerydetails.py: id: 160f2a5cd2bc - last_write_checksum: sha1:c765068a5725c323be44129a26533207ebd8d555 - pristine_git_object: 277ea692901011e7dc9ae184eeae734e9e60e523 + last_write_checksum: sha1:6cf4cebaa309e0e927294e514f249c3504574e24 + pristine_git_object: e6ffbbb2e7c022db7fe79e20e937f720057bb3a0 src/ragie/models/security.py: id: 5bcfbd85e953 last_write_checksum: sha1:9754de327099572f9bc9b0ae566d42ab28ec9ce3 @@ -1832,20 +1832,20 @@ trackedFiles: pristine_git_object: 0d6f85790f491e62fcc4efa24925c1e626f67cd7 src/ragie/models/setconnectionenabledpayload.py: id: 5bc812ee3255 - last_write_checksum: sha1:0112425855531a9ed9d7e362d72f0bc37d4d122f - pristine_git_object: d9b95f49ce671911f68e4bc705821d5b8cb7f006 + last_write_checksum: sha1:26bfdeca3d9790e536c9760c8663ba0016839cf1 + pristine_git_object: 46f5a0ac37f0a428ef8c7bf0346204a27f9930e7 src/ragie/models/sharepointdata.py: id: 5be522b44494 - last_write_checksum: sha1:b5bc384e7d70a08a86788541a44a8c53da293222 - pristine_git_object: 9237bf81b31bfb25550bdcda2eb5e6191ba260e2 + last_write_checksum: sha1:be6503f608048bb8f9702612cac7206cba1ee9f2 + pristine_git_object: 2364b4e5817b522a1417100e679be64f82f008d4 src/ragie/models/sharepointdrivedata.py: id: 4cf1fbe585ca last_write_checksum: sha1:9dac1e8d8a7dbb862e5b361ea60b800dbbdb4205 pristine_git_object: 01bf06385f399e8dcbf1ebd97d443d1f924509c8 src/ragie/models/sharepointfiledata.py: id: ee2251015c0f - last_write_checksum: sha1:a0866c2b80345d8dab90bc6a3e1361301b7c076d - pristine_git_object: 367ee6cb5dc20f1f9fc4e694fc799b50b2f2068b + last_write_checksum: sha1:32261abe307f88e8bcba9c1ac43cbe0dd1d41c8b + pristine_git_object: 891229efb2e471298b3d1dc54378567697663cf0 src/ragie/models/sharepointsitedata.py: id: efa19c0ec772 last_write_checksum: sha1:d5d45a57a97101c71fd4d347a36e11d89b8c65be @@ -1856,8 +1856,8 @@ trackedFiles: pristine_git_object: 54220d3867127ecc5e3f454bcdd83a0c9a22b7e5 src/ragie/models/surrenderstep.py: id: 9c06cdbd6a80 - last_write_checksum: sha1:fa4719267e534a4eca6ac513be2bd03e15d35110 - pristine_git_object: cf2e5cf030552dad1fd8c6dda8fb0a1fb1bdfb80 + last_write_checksum: sha1:152ed77830f25d819070e545983bfb8d3672fd47 + pristine_git_object: c6c94d7d069bb7113c958f34b7d56c2fdb700351 src/ragie/models/syncconnectionop.py: id: e81ed439fe80 last_write_checksum: sha1:afca5c2e0f540840e9c1fac0f4eee3b866f96895 @@ -1876,24 +1876,24 @@ trackedFiles: pristine_git_object: 85f71a866215c3840bdb37d63b6049b4cb0c63fc src/ragie/models/updatedocumentfileop.py: id: 472a849f1f0e - last_write_checksum: sha1:b3e888adad6acefbb90d3d5525ffa6fbe5263743 - pristine_git_object: 0dd380b3acfc5fc3750ac0e7ce87a6dbd1e399c7 + last_write_checksum: sha1:f1ec3d54210b0de3564f5969acd418936a4ba885 + pristine_git_object: 248d86763de42a4a2c1f04b9afd0dc5deab8a0bd src/ragie/models/updatedocumentfileparams.py: id: d76d11ae543c - last_write_checksum: sha1:d48a81e430a9e57ad8fe9f85daf8b35f242386ef - pristine_git_object: 7c2f0a4455b670f2fafb47ae18d510e84747c142 + last_write_checksum: sha1:8d141a7453896416d0b3acfe79537714bca178fd + pristine_git_object: 4cbb687f4d492922d1f3eb9d819e1a6c8db8138c src/ragie/models/updatedocumentfromurlop.py: id: 4681056d6e7e - last_write_checksum: sha1:673c5ae2d73065ef5dff8068c032cc82709c95f9 - pristine_git_object: c778e4904d6235d625243589d4f6883dedc4ec4a + last_write_checksum: sha1:fb17136d1659a723901536ee10d9dca39c45a8d2 + pristine_git_object: 3f8eba62a0d4a4df59939754027dffb08f7f2cd8 src/ragie/models/updatedocumentfromurlparams.py: id: 45e7f112044b - last_write_checksum: sha1:6444532e6f6c531e7be300811d332a44d2506734 - pristine_git_object: 3b6f97028b7f994d9ae9a353f915cb106ed69023 + last_write_checksum: sha1:8e09ccd2cd9f46a8cd204c2d3eee30bce20c1aa5 + pristine_git_object: fa94c6f460e800b255f151e45ca4dcc1ea5d304d src/ragie/models/updatedocumentrawop.py: id: bb62736e7427 - last_write_checksum: sha1:8677a10be17639c8cc4149fdc90d8479fd3cfa09 - pristine_git_object: b3fe86d8409f612374198099e6be03519d93f069 + last_write_checksum: sha1:44124e3bc9f39c57149646ba03345c21ab86363a + pristine_git_object: e8cd652cd6d6c467e10181ae3d602f4092ea700a src/ragie/models/updatedocumentrawparams.py: id: f2841a003bb2 last_write_checksum: sha1:d0a2257fcc995d8d8b9f9be5a67a0a6e8863b459 @@ -1908,28 +1908,28 @@ trackedFiles: pristine_git_object: c151cdb94244a39b20b7cb4b0c4e3b121c8be68d src/ragie/models/updatepartitionparams.py: id: 69cc827fafd7 - last_write_checksum: sha1:09f15fc47d9644aa31aee30257580203e12e2857 - pristine_git_object: 6194a575bfa86bff89852e487afd8b331d3ee48b + last_write_checksum: sha1:fea50fda8f8e5736264aa2f29fbfef0d19686319 + pristine_git_object: cf36de1169d5e6131273e27a9a81d3a1f0e7a85c src/ragie/models/updatewebhookendpointop.py: id: 0ff0fa4446eb last_write_checksum: sha1:532b9b4b2a092567ade4457fbba29f6c055ff432 pristine_git_object: 1ce7b2c6be75777c6ecbc065a82ba7aaa8bcff62 src/ragie/models/updatewebhookendpointpayload.py: id: 383e2342c761 - last_write_checksum: sha1:583f8b9436380d96ec7aec9e322be578fc1512bd - pristine_git_object: a68b30bf4a2f9fe1f0bbd01ea78c49fe6b27b828 + last_write_checksum: sha1:828e4d8e194aede5b3076bc7fa9f724ae47e51ca + pristine_git_object: 39a7dc556f7dc0b51776622c5835923eab0b23e8 src/ragie/models/validationerror.py: id: bb8666b5c600 last_write_checksum: sha1:e24055ae9db0f80de32fa5013f71736fe6d28c21 pristine_git_object: 345b9903d9e4d4fd2b6a43ff04b7a50f5202a608 src/ragie/models/videomodalitydata.py: id: 442b0b0ceb4f - last_write_checksum: sha1:c3dbf3042876c0de33e535865845e147a0ba0294 - pristine_git_object: 5d1c07898c68a9fc2deb27d84e294e718dc11b7c + last_write_checksum: sha1:3b003b26e7920d0f9153f7fbfe974ce8c8f7e14e + pristine_git_object: 51e1c502ec1e36a8785d061325d2460ef2b8c88d src/ragie/models/webhookendpoint.py: id: e7a40cbc0582 - last_write_checksum: sha1:12876695069b956205a6b07af710e2184a486416 - pristine_git_object: 8fb67a240c8bc80e56945ca534fb40f3e8a5be51 + last_write_checksum: sha1:567e81d1f7a8656f42aa9c95da0eaabcbebbe73d + pristine_git_object: 503eb834b8cf75a4b396704781851b7a17e571a3 src/ragie/models/webhookendpointlist.py: id: bfb69e36cf04 last_write_checksum: sha1:78c2c2b8ee4dd6e922418e2f25f09530a97327e3 @@ -1980,8 +1980,8 @@ trackedFiles: pristine_git_object: a9a640a1a7048736383f96c67c6290c86bf536ee src/ragie/utils/__init__.py: id: 794db4b3113d - last_write_checksum: sha1:81e0385b93362e0f3f6911b65bd4cc601ebc11e1 - pristine_git_object: 56164cf3a86399ee7a8e1a68d19fb494689d77c3 + last_write_checksum: sha1:398211d49b762a067ec6d10197a4b11dfd258ff5 + pristine_git_object: c906e1e0192e9017fc13851eb23fc0c2753429c8 src/ragie/utils/annotations.py: id: 82fb6e8764bd last_write_checksum: sha1:a4824ad65f730303e4e1e3ec1febf87b4eb46dbc @@ -1992,8 +1992,8 @@ trackedFiles: pristine_git_object: a6c52cd61bbe2d459046c940ce5e8c469f2f0664 src/ragie/utils/enums.py: id: 6fd4d239babe - last_write_checksum: sha1:786ba597f79dca6fbc0d87c591752bb8d775ecb7 - pristine_git_object: c3bc13cfc48794c143a64667f02e7949a8ce3fcc + last_write_checksum: sha1:bc8c3c1285ae09ba8a094ee5c3d9c7f41fa1284d + pristine_git_object: 3324e1bc2668c54c4d5f5a1a845675319757a828 src/ragie/utils/eventstreaming.py: id: 93ad337e543e last_write_checksum: sha1:bababae5d54b7efc360db701daa49e18a92c2f3b @@ -2020,8 +2020,8 @@ trackedFiles: pristine_git_object: c04e0db82b68eca041f2cb2614d748fbac80fd41 src/ragie/utils/requestbodies.py: id: b4ac21f8488d - last_write_checksum: sha1:e0a3a78158eba39880475d62d61be906625676b8 - pristine_git_object: d5240dd5f5efffabbd9aefa2f4a349511a9c75b4 + last_write_checksum: sha1:41e2d2d2d3ecc394c8122ca4d4b85e1c3e03f054 + pristine_git_object: 1de32b6d26f46590232f398fdba6ce0072f1659c src/ragie/utils/retries.py: id: ff555dbc4237 last_write_checksum: sha1:5b97ac4f59357d70c2529975d50364c88bcad607 @@ -2032,8 +2032,8 @@ trackedFiles: pristine_git_object: 295a3f40031dbb40073ad227fd4a355660f97ab2 src/ragie/utils/serializers.py: id: c564e36f25e9 - last_write_checksum: sha1:a0d184ace7371a14a7d005cca7f358a03e3d4b07 - pristine_git_object: 378a14c0f86a867ca7b0eb7e620da82234c0ccc4 + last_write_checksum: sha1:ce1d8d7f500a9ccba0aeca5057cee9c271f4dfd7 + pristine_git_object: 14321eb479de81d0d9580ec8291e0ff91bf29e57 src/ragie/utils/unmarshal_json_response.py: id: c037caf2daa6 last_write_checksum: sha1:a2c0a433f1d541eed7985d3c3cc043e9b7731cdb @@ -2774,7 +2774,7 @@ examples: application/json: {"name": "", "url": "https://crazy-birth.name"} responses: "201": - application/json: {"id": "eb083a2b-5791-4b88-96e1-b294238d3152", "created_at": "2026-08-26T05:46:20.116Z", "updated_at": "2024-04-28T21:10:08.943Z", "name": "", "url": "https://big-tomatillo.name/", "partition_pattern": "", "active": true} + application/json: {"id": "eb083a2b-5791-4b88-96e1-b294238d3152", "created_at": "2026-08-26T05:46:20.116Z", "updated_at": "2024-04-28T21:10:08.943Z", "name": "", "url": "https://big-tomatillo.name/", "partition_pattern": "", "active": true, "secret": ""} "422": application/json: {} "401": @@ -2788,7 +2788,7 @@ examples: endpoint_id: "b2685048-407b-4461-ba68-ae1653b337f9" responses: "200": - application/json: {"id": "40a280c0-beda-4db7-b2d8-bbd7e7d59572", "created_at": "2026-04-26T14:41:48.179Z", "updated_at": "2024-01-10T00:29:05.466Z", "name": "", "url": "https://lighthearted-reservation.org/", "partition_pattern": null, "active": true} + application/json: {"id": "40a280c0-beda-4db7-b2d8-bbd7e7d59572", "created_at": "2026-04-26T14:41:48.179Z", "updated_at": "2024-01-10T00:29:05.466Z", "name": "", "url": "https://lighthearted-reservation.org/", "partition_pattern": null, "active": true, "secret": ""} "422": application/json: {} "401": @@ -2804,7 +2804,7 @@ examples: application/json: {} responses: "200": - application/json: {"id": "531bf800-3bcc-4f2b-94aa-a0f3d227100b", "created_at": "2024-01-07T09:31:05.674Z", "updated_at": "2024-03-19T13:51:42.032Z", "name": "", "url": "https://sticky-plugin.name/", "partition_pattern": "", "active": false} + application/json: {"id": "531bf800-3bcc-4f2b-94aa-a0f3d227100b", "created_at": "2024-01-07T09:31:05.674Z", "updated_at": "2024-03-19T13:51:42.032Z", "name": "", "url": "https://sticky-plugin.name/", "partition_pattern": "", "active": false, "secret": ""} "422": application/json: {} "401": @@ -2827,7 +2827,12 @@ examples: application/json: {"detail": ""} examplesVersion: 1.0.2 generatedTests: {} -releaseNotes: "## Python SDK Changes:\n* `ragie.authenticators.create_authenticator_connection()`: \n * `request.create_authenticator_connection.connection.[sharepoint].data` **Changed** **Breaking** :warning:\n* `ragie.webhook_endpoints.list()`: **Added**\n* `ragie.webhook_endpoints.create()`: **Added**\n* `ragie.webhook_endpoints.get()`: **Added**\n* `ragie.webhook_endpoints.update()`: **Added**\n* `ragie.webhook_endpoints.delete()`: **Added**\n" +releaseNotes: | + ## Python SDK Changes: + * `ragie.webhook_endpoints.list()`: `response.webhook_endpoints.[].secret` **Added** + * `ragie.webhook_endpoints.create()`: `response.secret` **Added** + * `ragie.webhook_endpoints.get()`: `response.secret` **Added** + * `ragie.webhook_endpoints.update()`: `response.secret` **Added** generatedFiles: - .devcontainer/README.md - .devcontainer/devcontainer.json diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index d208d80..18814b4 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -16,6 +16,7 @@ generation: requestResponseComponentNamesFeb2024: true securityFeb2025: false sharedErrorComponentsApr2025: false + sharedNestedComponentsJan2026: false auth: oAuth2ClientCredentialsEnabled: false oAuth2PasswordEnabled: false @@ -29,7 +30,7 @@ generation: generateNewTests: false skipResponseBodyAssertions: false python: - version: 1.15.1 + version: 1.15.2 additionalDependencies: dev: {} main: {} @@ -76,3 +77,4 @@ python: responseFormat: flat sseFlatResponse: false templateVersion: v2 + useAsyncHooks: false diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 94d6699..2c699da 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,21 +1,21 @@ -speakeasyVersion: 1.682.0 +speakeasyVersion: 1.691.0 sources: Ragie-OAS: sourceNamespace: ragie-oas - sourceRevisionDigest: sha256:bbff923159484b6f5a7027ee8c16c13a60ce2d9e9f523603fcba9243d1b38da7 - sourceBlobDigest: sha256:e781f18c8b4e50249a130e038774b0f9e647fa416eb773f6d638506da7b70f14 + sourceRevisionDigest: sha256:f42fb754a21b1dedb69db5f27056f318642ecedb7f28d82e80925ebcae3168f2 + sourceBlobDigest: sha256:9dff3a519b26b3891c484abf6ec355ac0d958d1a56b4ad083e39c63b310bc74c tags: - latest - - speakeasy-sdk-regen-1765152535 + - speakeasy-sdk-regen-1767917334 - 1.0.0 targets: ragie: source: Ragie-OAS sourceNamespace: ragie-oas - sourceRevisionDigest: sha256:bbff923159484b6f5a7027ee8c16c13a60ce2d9e9f523603fcba9243d1b38da7 - sourceBlobDigest: sha256:e781f18c8b4e50249a130e038774b0f9e647fa416eb773f6d638506da7b70f14 + sourceRevisionDigest: sha256:f42fb754a21b1dedb69db5f27056f318642ecedb7f28d82e80925ebcae3168f2 + sourceBlobDigest: sha256:9dff3a519b26b3891c484abf6ec355ac0d958d1a56b4ad083e39c63b310bc74c codeSamplesNamespace: ragie-oas-python-code-samples - codeSamplesRevisionDigest: sha256:cb4c40794dfa72db1e2fca9d89f1a2f529ec8379fd12a0d7525ebabf3bee82f7 + codeSamplesRevisionDigest: sha256:d8ba9823680d45c692023095f4ad40d6d86aea6e968b52b567b806a13ffd02fe workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/RELEASES.md b/RELEASES.md index 5a7165f..3bd339e 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -278,4 +278,14 @@ Based on: ### Generated - [python v1.15.1] . ### Releases -- [PyPI v1.15.1] https://pypi.org/project/ragie/1.15.1 - . \ No newline at end of file +- [PyPI v1.15.1] https://pypi.org/project/ragie/1.15.1 - . + +## 2026-01-21 00:09:21 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.691.0 (2.797.1) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v1.15.2] . +### Releases +- [PyPI v1.15.2] https://pypi.org/project/ragie/1.15.2 - . \ No newline at end of file diff --git a/docs/models/webhookendpoint.md b/docs/models/webhookendpoint.md index b8b25e3..58291a3 100644 --- a/docs/models/webhookendpoint.md +++ b/docs/models/webhookendpoint.md @@ -11,4 +11,5 @@ | `name` | *str* | :heavy_check_mark: | N/A | | `url` | *str* | :heavy_check_mark: | N/A | | `partition_pattern` | *Nullable[str]* | :heavy_check_mark: | N/A | -| `active` | *bool* | :heavy_check_mark: | N/A | \ No newline at end of file +| `active` | *bool* | :heavy_check_mark: | N/A | +| `secret` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 6ac840d..069ede4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "ragie" -version = "1.15.1" +version = "1.15.2" description = "Python Client SDK Generated by Speakeasy." authors = [{ name = "Speakeasy" },] readme = "README-PYPI.md" diff --git a/src/ragie/_version.py b/src/ragie/_version.py index 6e70a67..68a6559 100644 --- a/src/ragie/_version.py +++ b/src/ragie/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "ragie" -__version__: str = "1.15.1" +__version__: str = "1.15.2" __openapi_doc_version__: str = "1.0.0" -__gen_version__: str = "2.791.1" -__user_agent__: str = "speakeasy-sdk/python 1.15.1 2.791.1 1.0.0 ragie" +__gen_version__: str = "2.797.1" +__user_agent__: str = "speakeasy-sdk/python 1.15.2 2.797.1 1.0.0 ragie" try: if __package__ is not None: diff --git a/src/ragie/basesdk.py b/src/ragie/basesdk.py index c904322..5e70dc4 100644 --- a/src/ragie/basesdk.py +++ b/src/ragie/basesdk.py @@ -4,7 +4,12 @@ import httpx from ragie import models, utils from ragie._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext -from ragie.utils import RetryConfig, SerializedRequestBody, get_body_content +from ragie.utils import ( + RetryConfig, + SerializedRequestBody, + get_body_content, + run_sync_in_thread, +) from typing import Callable, List, Mapping, Optional, Tuple from urllib.parse import parse_qs, urlparse @@ -307,7 +312,10 @@ async def do_request_async( 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 + ) + logger.debug( "Request:\nMethod: %s\nURL: %s\nHeaders: %s\nBody: %s", req.method, @@ -321,7 +329,10 @@ async def do(): 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 @@ -339,9 +350,10 @@ async def do(): ) if utils.match_status_codes(error_status_codes, http_res.status_code): - result, err = hooks.after_error( - AfterErrorContext(hook_ctx), http_res, None + 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 @@ -361,6 +373,8 @@ async def do(): 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) + http_res = await run_sync_in_thread( + hooks.after_success, AfterSuccessContext(hook_ctx), http_res + ) return http_res diff --git a/src/ragie/models/agent_hopps_models_models_usage.py b/src/ragie/models/agent_hopps_models_models_usage.py index bdfbcdf..a7f27c0 100644 --- a/src/ragie/models/agent_hopps_models_models_usage.py +++ b/src/ragie/models/agent_hopps_models_models_usage.py @@ -2,7 +2,8 @@ from __future__ import annotations from .modelusage import ModelUsage, ModelUsageTypedDict -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import List, Optional from typing_extensions import NotRequired, TypedDict @@ -13,3 +14,19 @@ class AgentHoppsModelsModelsUsageTypedDict(TypedDict): class AgentHoppsModelsModelsUsage(BaseModel): models: Optional[List[ModelUsage]] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["models"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/answer.py b/src/ragie/models/answer.py index d895414..613f49e 100644 --- a/src/ragie/models/answer.py +++ b/src/ragie/models/answer.py @@ -1,7 +1,8 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import List, Optional from typing_extensions import NotRequired, TypedDict @@ -19,3 +20,19 @@ class Answer(BaseModel): evidence: Optional[List[str]] = None r"""The evidence used to derive the answer.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["evidence"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/answerstep.py b/src/ragie/models/answerstep.py index 4e82388..03220f0 100644 --- a/src/ragie/models/answerstep.py +++ b/src/ragie/models/answerstep.py @@ -3,8 +3,9 @@ from __future__ import annotations from .answer import Answer, AnswerTypedDict import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -38,3 +39,19 @@ class AnswerStep(BaseModel): other_resolved_question_ids: Optional[List[str]] = None r"""A list of question ids that are no longer relevant to the current answer referenced by their IDs.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "errored", "other_resolved_question_ids"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/audiomodalitydata.py b/src/ragie/models/audiomodalitydata.py index b900305..b5e6c93 100644 --- a/src/ragie/models/audiomodalitydata.py +++ b/src/ragie/models/audiomodalitydata.py @@ -3,8 +3,9 @@ from __future__ import annotations from .wordtimestamp import WordTimestamp, WordTimestampTypedDict import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -22,3 +23,19 @@ class AudioModalityData(BaseModel): ] = "audio" word_timestamps: Optional[List[WordTimestamp]] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "word_timestamps"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/bucketdata.py b/src/ragie/models/bucketdata.py index bebdd43..fd9b1dd 100644 --- a/src/ragie/models/bucketdata.py +++ b/src/ragie/models/bucketdata.py @@ -22,30 +22,25 @@ class BucketData(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["prefix", "import_file_metadata"] - nullable_fields = ["prefix"] - null_default_fields = [] - + optional_fields = set(["prefix", "import_file_metadata"]) + nullable_fields = set(["prefix"]) 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 + 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 return m diff --git a/src/ragie/models/codeinterpreterevidence.py b/src/ragie/models/codeinterpreterevidence.py index 91d279b..7cf9b9d 100644 --- a/src/ragie/models/codeinterpreterevidence.py +++ b/src/ragie/models/codeinterpreterevidence.py @@ -2,8 +2,9 @@ from __future__ import annotations import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import Literal, Optional from typing_extensions import Annotated, TypedDict @@ -39,3 +40,19 @@ class CodeInterpreterEvidence(BaseModel): ], pydantic.Field(alias="type"), ] = "code_interpreter" + + @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) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/codeinterpreteroutput.py b/src/ragie/models/codeinterpreteroutput.py index c7b0e96..80a0ec1 100644 --- a/src/ragie/models/codeinterpreteroutput.py +++ b/src/ragie/models/codeinterpreteroutput.py @@ -7,8 +7,9 @@ ) from enum import Enum import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -59,3 +60,19 @@ class CodeInterpreterOutput(BaseModel): status: Optional[CodeInterpreterOutputStatus] = ( CodeInterpreterOutputStatus.COMPLETED ) + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "status"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/codeinterpreteroutputlogs.py b/src/ragie/models/codeinterpreteroutputlogs.py index c1303f7..13912da 100644 --- a/src/ragie/models/codeinterpreteroutputlogs.py +++ b/src/ragie/models/codeinterpreteroutputlogs.py @@ -2,8 +2,9 @@ from __future__ import annotations import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import Literal, Optional from typing_extensions import Annotated, TypedDict @@ -23,3 +24,19 @@ class CodeInterpreterOutputLogs(BaseModel): Annotated[Optional[Literal["logs"]], AfterValidator(validate_const("logs"))], pydantic.Field(alias="type"), ] = "logs" + + @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) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/codestep.py b/src/ragie/models/codestep.py index b1fcfd7..2b3e09d 100644 --- a/src/ragie/models/codestep.py +++ b/src/ragie/models/codestep.py @@ -2,8 +2,9 @@ from __future__ import annotations import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -42,3 +43,19 @@ class CodeStep(BaseModel): code_result: Optional[str] = "" r"""The result of the code you generated after executing it.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "errored", "code", "code_result"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/connection.py b/src/ragie/models/connection.py index af832a5..8bfc2ee 100644 --- a/src/ragie/models/connection.py +++ b/src/ragie/models/connection.py @@ -80,37 +80,34 @@ class Connection(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["last_synced_at", "syncing", "partition"] - nullable_fields = [ - "source", - "disabled_by_system_reason", - "last_synced_at", - "syncing", - "partition", - "page_limit", - ] - null_default_fields = [] - + optional_fields = set(["last_synced_at", "syncing", "partition"]) + nullable_fields = set( + [ + "source", + "disabled_by_system_reason", + "last_synced_at", + "syncing", + "partition", + "page_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) - - 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 + 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 return m diff --git a/src/ragie/models/connectionbase.py b/src/ragie/models/connectionbase.py index 3ff91c1..855636a 100644 --- a/src/ragie/models/connectionbase.py +++ b/src/ragie/models/connectionbase.py @@ -53,30 +53,25 @@ class ConnectionBase(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["metadata", "page_limit"] - nullable_fields = ["page_limit"] - null_default_fields = [] - + optional_fields = set(["metadata", "page_limit"]) + nullable_fields = set(["page_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) - - 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 + 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 return m diff --git a/src/ragie/models/connectionlimitparams.py b/src/ragie/models/connectionlimitparams.py index a916e6b..8bde296 100644 --- a/src/ragie/models/connectionlimitparams.py +++ b/src/ragie/models/connectionlimitparams.py @@ -17,30 +17,25 @@ class ConnectionLimitParams(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["page_limit"] - nullable_fields = ["page_limit"] - null_default_fields = [] - + optional_fields = set(["page_limit"]) + nullable_fields = set(["page_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) - - 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 + 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 return m diff --git a/src/ragie/models/createauthenticatorconnection.py b/src/ragie/models/createauthenticatorconnection.py index aa7f745..da059b7 100644 --- a/src/ragie/models/createauthenticatorconnection.py +++ b/src/ragie/models/createauthenticatorconnection.py @@ -125,30 +125,25 @@ class CreateAuthenticatorConnection(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["partition", "page_limit", "config", "metadata"] - nullable_fields = ["partition", "page_limit", "config"] - null_default_fields = [] - + optional_fields = set(["partition", "page_limit", "config", "metadata"]) + nullable_fields = set(["partition", "page_limit", "config"]) 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 + 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 return m diff --git a/src/ragie/models/createdocumentfromurlparams.py b/src/ragie/models/createdocumentfromurlparams.py index c573b24..47c0581 100644 --- a/src/ragie/models/createdocumentfromurlparams.py +++ b/src/ragie/models/createdocumentfromurlparams.py @@ -71,30 +71,25 @@ class CreateDocumentFromURLParams(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["name", "metadata", "mode", "external_id", "partition"] - nullable_fields = ["external_id"] - null_default_fields = [] - + optional_fields = set(["name", "metadata", "mode", "external_id", "partition"]) + nullable_fields = set(["external_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) - - 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 + 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 return m diff --git a/src/ragie/models/createdocumentparams.py b/src/ragie/models/createdocumentparams.py index 70387dc..b05f8a8 100644 --- a/src/ragie/models/createdocumentparams.py +++ b/src/ragie/models/createdocumentparams.py @@ -24,15 +24,15 @@ class Two1(str, Enum): FAST = "fast" -TwoTypedDict = TypeAliasType("TwoTypedDict", Union[Two2TypedDict, Two1]) +class ModeStatic(str, Enum): + HI_RES = "hi_res" + FAST = "fast" -Two = TypeAliasType("Two", Union[Two2, Two1]) +TwoTypedDict = TypeAliasType("TwoTypedDict", Union[Two2TypedDict, Two1]) -class ModeStatic(str, Enum): - HI_RES = "hi_res" - FAST = "fast" +Two = TypeAliasType("Two", Union[Two2, Two1]) class ModeVideo(str, Enum): @@ -56,31 +56,26 @@ class One(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["static", "audio", "video"] - nullable_fields = ["static", "audio", "video"] - null_default_fields = [] - + optional_fields = set(["static", "audio", "video"]) + nullable_fields = set(["static", "audio", "video"]) 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 + 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 return m @@ -124,6 +119,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) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + class CreateDocumentParamsTypedDict(TypedDict): file: FileTypedDict @@ -169,3 +180,19 @@ class CreateDocumentParams(BaseModel): partition: Annotated[Optional[str], FieldMetadata(multipart=True)] = None r"""An optional partition identifier. Documents can be scoped to a partition. Partitions must be lowercase alphanumeric and may only include the special characters `_` and `-`. A partition is created any time a document is created.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["mode", "metadata", "external_id", "name", "partition"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/createdocumentrawparams.py b/src/ragie/models/createdocumentrawparams.py index 674b1d7..1912721 100644 --- a/src/ragie/models/createdocumentrawparams.py +++ b/src/ragie/models/createdocumentrawparams.py @@ -56,30 +56,25 @@ class CreateDocumentRawParams(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["name", "metadata", "external_id", "partition"] - nullable_fields = ["external_id"] - null_default_fields = [] - + optional_fields = set(["name", "metadata", "external_id", "partition"]) + nullable_fields = set(["external_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) - - 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 + 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 return m diff --git a/src/ragie/models/creategoogleauthenticator.py b/src/ragie/models/creategoogleauthenticator.py index 916b456..530d54c 100644 --- a/src/ragie/models/creategoogleauthenticator.py +++ b/src/ragie/models/creategoogleauthenticator.py @@ -39,30 +39,25 @@ class CreateGoogleAuthenticator(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["domain", "project_number"] - nullable_fields = ["domain", "project_number"] - null_default_fields = [] - + optional_fields = set(["domain", "project_number"]) + nullable_fields = set(["domain", "project_number"]) 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 + 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 return m diff --git a/src/ragie/models/createinstructionparams.py b/src/ragie/models/createinstructionparams.py index 7b8ee41..2c8da7e 100644 --- a/src/ragie/models/createinstructionparams.py +++ b/src/ragie/models/createinstructionparams.py @@ -3,7 +3,8 @@ from __future__ import annotations from enum import Enum import pydantic -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import Any, Dict, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -51,3 +52,19 @@ class CreateInstructionParams(BaseModel): partition: Optional[str] = None r"""An optional partition identifier. Instructions can be scoped to a partition. An instruction that defines a partition will only be executed for documents in that partition.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["active", "scope", "filter", "partition"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/createpartitionparams.py b/src/ragie/models/createpartitionparams.py index 22e5202..aefec64 100644 --- a/src/ragie/models/createpartitionparams.py +++ b/src/ragie/models/createpartitionparams.py @@ -102,60 +102,59 @@ class CreatePartitionParams(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "description", - "pages_hosted_limit_monthly", - "pages_processed_limit_monthly", - "pages_hosted_limit_max", - "pages_processed_limit_max", - "audio_processed_limit_monthly", - "audio_processed_limit_max", - "video_processed_limit_monthly", - "video_processed_limit_max", - "media_streamed_limit_monthly", - "media_streamed_limit_max", - "media_hosted_limit_monthly", - "media_hosted_limit_max", - "metadata_schema", - ] - nullable_fields = [ - "description", - "pages_hosted_limit_monthly", - "pages_processed_limit_monthly", - "pages_hosted_limit_max", - "pages_processed_limit_max", - "audio_processed_limit_monthly", - "audio_processed_limit_max", - "video_processed_limit_monthly", - "video_processed_limit_max", - "media_streamed_limit_monthly", - "media_streamed_limit_max", - "media_hosted_limit_monthly", - "media_hosted_limit_max", - "metadata_schema", - ] - null_default_fields = [] - + optional_fields = set( + [ + "description", + "pages_hosted_limit_monthly", + "pages_processed_limit_monthly", + "pages_hosted_limit_max", + "pages_processed_limit_max", + "audio_processed_limit_monthly", + "audio_processed_limit_max", + "video_processed_limit_monthly", + "video_processed_limit_max", + "media_streamed_limit_monthly", + "media_streamed_limit_max", + "media_hosted_limit_monthly", + "media_hosted_limit_max", + "metadata_schema", + ] + ) + nullable_fields = set( + [ + "description", + "pages_hosted_limit_monthly", + "pages_processed_limit_monthly", + "pages_hosted_limit_max", + "pages_processed_limit_max", + "audio_processed_limit_monthly", + "audio_processed_limit_max", + "video_processed_limit_monthly", + "video_processed_limit_max", + "media_streamed_limit_monthly", + "media_streamed_limit_max", + "media_hosted_limit_monthly", + "media_hosted_limit_max", + "metadata_schema", + ] + ) 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 + 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 return m diff --git a/src/ragie/models/createwebhookendpointpayload.py b/src/ragie/models/createwebhookendpointpayload.py index 0e84b70..5678416 100644 --- a/src/ragie/models/createwebhookendpointpayload.py +++ b/src/ragie/models/createwebhookendpointpayload.py @@ -21,30 +21,25 @@ class CreateWebhookEndpointPayload(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["partition_pattern"] - nullable_fields = ["partition_pattern"] - null_default_fields = [] - + optional_fields = set(["partition_pattern"]) + nullable_fields = set(["partition_pattern"]) 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 + 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 return m diff --git a/src/ragie/models/delete_partition_partitions_partition_id_deleteop.py b/src/ragie/models/delete_partition_partitions_partition_id_deleteop.py index c740d29..dbd33e3 100644 --- a/src/ragie/models/delete_partition_partitions_partition_id_deleteop.py +++ b/src/ragie/models/delete_partition_partitions_partition_id_deleteop.py @@ -28,30 +28,25 @@ class DeletePartitionPartitionsPartitionIDDeleteRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["async"] - nullable_fields = ["async"] - null_default_fields = [] - + optional_fields = set(["async"]) + nullable_fields = set(["async"]) 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 + 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 return m diff --git a/src/ragie/models/deletedocumentop.py b/src/ragie/models/deletedocumentop.py index 40e1bfd..2df64f5 100644 --- a/src/ragie/models/deletedocumentop.py +++ b/src/ragie/models/deletedocumentop.py @@ -43,30 +43,25 @@ class DeleteDocumentRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["async", "partition"] - nullable_fields = ["async", "partition"] - null_default_fields = [] - + optional_fields = set(["async", "partition"]) + nullable_fields = set(["async", "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) - - 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 + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # 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/ragie/models/document.py b/src/ragie/models/document.py index 4816f78..f1a1840 100644 --- a/src/ragie/models/document.py +++ b/src/ragie/models/document.py @@ -54,30 +54,25 @@ class Document(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["chunk_count", "external_id", "page_count"] - nullable_fields = ["chunk_count", "external_id", "page_count"] - null_default_fields = [] - + optional_fields = set(["chunk_count", "external_id", "page_count"]) + nullable_fields = set(["chunk_count", "external_id", "page_count"]) 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 + 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 return m diff --git a/src/ragie/models/documentchunk.py b/src/ragie/models/documentchunk.py index 1e80d73..e3bec89 100644 --- a/src/ragie/models/documentchunk.py +++ b/src/ragie/models/documentchunk.py @@ -2,7 +2,8 @@ from __future__ import annotations from .link import Link, LinkTypedDict -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import Any, Dict, Optional from typing_extensions import NotRequired, TypedDict @@ -25,3 +26,19 @@ class DocumentChunk(BaseModel): index: Optional[int] = -1 metadata: Optional[Dict[str, Any]] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["index", "metadata"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/documentchunkdetail.py b/src/ragie/models/documentchunkdetail.py index 1df28bb..7d35e14 100644 --- a/src/ragie/models/documentchunkdetail.py +++ b/src/ragie/models/documentchunkdetail.py @@ -52,30 +52,25 @@ class DocumentChunkDetail(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["index", "metadata", "modality_data"] - nullable_fields = ["modality_data"] - null_default_fields = [] - + optional_fields = set(["index", "metadata", "modality_data"]) + nullable_fields = set(["modality_data"]) 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 + 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 return m diff --git a/src/ragie/models/documentget.py b/src/ragie/models/documentget.py index dafb152..bc1cdcb 100644 --- a/src/ragie/models/documentget.py +++ b/src/ragie/models/documentget.py @@ -57,30 +57,25 @@ class DocumentGet(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["chunk_count", "external_id", "page_count"] - nullable_fields = ["chunk_count", "external_id", "page_count"] - null_default_fields = [] - + optional_fields = set(["chunk_count", "external_id", "page_count"]) + nullable_fields = set(["chunk_count", "external_id", "page_count"]) 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 + 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 return m diff --git a/src/ragie/models/documentwithcontent.py b/src/ragie/models/documentwithcontent.py index 689b4fa..328d366 100644 --- a/src/ragie/models/documentwithcontent.py +++ b/src/ragie/models/documentwithcontent.py @@ -57,30 +57,25 @@ class DocumentWithContent(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["chunk_count", "external_id", "page_count"] - nullable_fields = ["chunk_count", "external_id", "page_count"] - null_default_fields = [] - + optional_fields = set(["chunk_count", "external_id", "page_count"]) + nullable_fields = set(["chunk_count", "external_id", "page_count"]) 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 + 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 return m diff --git a/src/ragie/models/entity.py b/src/ragie/models/entity.py index 8e48a55..7d5aba8 100644 --- a/src/ragie/models/entity.py +++ b/src/ragie/models/entity.py @@ -39,30 +39,25 @@ class Entity(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["chunk_id"] - nullable_fields = ["chunk_id"] - null_default_fields = [] - + optional_fields = set(["chunk_id"]) + nullable_fields = set(["chunk_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) - - 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 + 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 return m diff --git a/src/ragie/models/evaluatedanswerstep.py b/src/ragie/models/evaluatedanswerstep.py index 2f890a9..d0bfa86 100644 --- a/src/ragie/models/evaluatedanswerstep.py +++ b/src/ragie/models/evaluatedanswerstep.py @@ -3,8 +3,9 @@ from __future__ import annotations from .answer import Answer, AnswerTypedDict import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -45,3 +46,19 @@ class EvaluatedAnswerStep(BaseModel): other_resolved_question_ids: Optional[List[str]] = None r"""A list of questions ids that are no longer relevant to the current answer referenced by their IDs.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "errored", "other_resolved_question_ids"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/failedstep.py b/src/ragie/models/failedstep.py index 838eec5..7491165 100644 --- a/src/ragie/models/failedstep.py +++ b/src/ragie/models/failedstep.py @@ -2,8 +2,9 @@ from __future__ import annotations import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -29,3 +30,19 @@ class FailedStep(BaseModel): ] = "failed" errored: Optional[bool] = False + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "errored"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/filesearchoutput.py b/src/ragie/models/filesearchoutput.py index 84ea1ac..4659819 100644 --- a/src/ragie/models/filesearchoutput.py +++ b/src/ragie/models/filesearchoutput.py @@ -4,8 +4,9 @@ from .filesearchresult import FileSearchResult, FileSearchResultTypedDict from enum import Enum import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -47,3 +48,19 @@ class FileSearchOutput(BaseModel): ], pydantic.Field(alias="type"), ] = "file_search_call" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_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) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/finalanswer.py b/src/ragie/models/finalanswer.py index 1826f44..8176495 100644 --- a/src/ragie/models/finalanswer.py +++ b/src/ragie/models/finalanswer.py @@ -21,7 +21,8 @@ SearchStepWithQueryDetailsTypedDict, ) from .surrenderstep import SurrenderStep, SurrenderStepTypedDict -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import List, Optional, Union from typing_extensions import NotRequired, TypeAliasType, TypedDict @@ -85,3 +86,19 @@ class FinalAnswer(BaseModel): r"""The steps that led to the answer.""" usage: Optional[AgentHoppsModelsModelsUsage] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["evidence", "steps", "usage"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/getdocumentchunkcontentop.py b/src/ragie/models/getdocumentchunkcontentop.py index 9444304..6450c42 100644 --- a/src/ragie/models/getdocumentchunkcontentop.py +++ b/src/ragie/models/getdocumentchunkcontentop.py @@ -78,30 +78,25 @@ class GetDocumentChunkContentRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["media_type", "download", "partition", "range"] - nullable_fields = ["media_type", "partition", "range"] - null_default_fields = [] - + optional_fields = set(["media_type", "download", "partition", "range"]) + nullable_fields = set(["media_type", "partition", "range"]) 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 + 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 return m diff --git a/src/ragie/models/getdocumentchunkop.py b/src/ragie/models/getdocumentchunkop.py index 926d926..e469d6e 100644 --- a/src/ragie/models/getdocumentchunkop.py +++ b/src/ragie/models/getdocumentchunkop.py @@ -35,30 +35,25 @@ class GetDocumentChunkRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["partition"] - nullable_fields = ["partition"] - null_default_fields = [] - + optional_fields = set(["partition"]) + nullable_fields = set(["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) - - 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 + 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 return m diff --git a/src/ragie/models/getdocumentchunksop.py b/src/ragie/models/getdocumentchunksop.py index c94c413..8ce52ea 100644 --- a/src/ragie/models/getdocumentchunksop.py +++ b/src/ragie/models/getdocumentchunksop.py @@ -66,36 +66,27 @@ class GetDocumentChunksRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "start_index", - "end_index", - "cursor", - "page_size", - "partition", - ] - nullable_fields = ["start_index", "end_index", "cursor", "partition"] - null_default_fields = [] - + optional_fields = set( + ["start_index", "end_index", "cursor", "page_size", "partition"] + ) + nullable_fields = set(["start_index", "end_index", "cursor", "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) - - 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 + 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 return m diff --git a/src/ragie/models/getdocumentcontentop.py b/src/ragie/models/getdocumentcontentop.py index 5681663..8686958 100644 --- a/src/ragie/models/getdocumentcontentop.py +++ b/src/ragie/models/getdocumentcontentop.py @@ -79,30 +79,25 @@ class GetDocumentContentRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["media_type", "download", "partition", "range"] - nullable_fields = ["media_type", "partition", "range"] - null_default_fields = [] - + optional_fields = set(["media_type", "download", "partition", "range"]) + nullable_fields = set(["media_type", "partition", "range"]) 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 + 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 return m diff --git a/src/ragie/models/getdocumentop.py b/src/ragie/models/getdocumentop.py index b0adaf6..aaa02a3 100644 --- a/src/ragie/models/getdocumentop.py +++ b/src/ragie/models/getdocumentop.py @@ -28,30 +28,25 @@ class GetDocumentRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["partition"] - nullable_fields = ["partition"] - null_default_fields = [] - + optional_fields = set(["partition"]) + nullable_fields = set(["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) - - 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 + 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 return m diff --git a/src/ragie/models/getdocumentsourceop.py b/src/ragie/models/getdocumentsourceop.py index d0362dc..9a637c2 100644 --- a/src/ragie/models/getdocumentsourceop.py +++ b/src/ragie/models/getdocumentsourceop.py @@ -28,30 +28,25 @@ class GetDocumentSourceRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["partition"] - nullable_fields = ["partition"] - null_default_fields = [] - + optional_fields = set(["partition"]) + nullable_fields = set(["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) - - 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 + 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 return m diff --git a/src/ragie/models/getdocumentsummaryop.py b/src/ragie/models/getdocumentsummaryop.py index 6ed4180..4322ee7 100644 --- a/src/ragie/models/getdocumentsummaryop.py +++ b/src/ragie/models/getdocumentsummaryop.py @@ -28,30 +28,25 @@ class GetDocumentSummaryRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["partition"] - nullable_fields = ["partition"] - null_default_fields = [] - + optional_fields = set(["partition"]) + nullable_fields = set(["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) - - 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 + 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 return m diff --git a/src/ragie/models/gmaildata.py b/src/ragie/models/gmaildata.py index 22bdcac..1597eef 100644 --- a/src/ragie/models/gmaildata.py +++ b/src/ragie/models/gmaildata.py @@ -15,30 +15,25 @@ class GmailData(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) - - 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 + 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 return m diff --git a/src/ragie/models/inputtokendetails.py b/src/ragie/models/inputtokendetails.py index 32c70b7..f298997 100644 --- a/src/ragie/models/inputtokendetails.py +++ b/src/ragie/models/inputtokendetails.py @@ -1,7 +1,8 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -12,3 +13,19 @@ class InputTokenDetailsTypedDict(TypedDict): class InputTokenDetails(BaseModel): cached_tokens: Optional[int] = 0 + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["cached_tokens"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/instruction.py b/src/ragie/models/instruction.py index c448878..0ade812 100644 --- a/src/ragie/models/instruction.py +++ b/src/ragie/models/instruction.py @@ -4,7 +4,8 @@ from datetime import datetime from enum import Enum import pydantic -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import Any, Dict, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -61,3 +62,19 @@ class Instruction(BaseModel): partition: Optional[str] = None r"""An optional partition identifier. Instructions can be scoped to a partition. An instruction that defines a partition will only be executed for documents in that partition.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["active", "scope", "filter", "partition"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/intercomdata.py b/src/ragie/models/intercomdata.py index bd64303..8f5af49 100644 --- a/src/ragie/models/intercomdata.py +++ b/src/ragie/models/intercomdata.py @@ -46,42 +46,39 @@ class IntercomData(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "articles_help_center", - "admins", - "contacts", - "conversations", - "conversation_attachments", - "conversation_notes", - "tickets", - "ticket_attachments", - "ticket_comments", - "ticket_notes", - "filter_user_id", - ] - nullable_fields = ["filter_user_id"] - null_default_fields = [] - + optional_fields = set( + [ + "articles_help_center", + "admins", + "contacts", + "conversations", + "conversation_attachments", + "conversation_notes", + "tickets", + "ticket_attachments", + "ticket_comments", + "ticket_notes", + "filter_user_id", + ] + ) + nullable_fields = set(["filter_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) - - 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 + 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 return m diff --git a/src/ragie/models/list_connections_connections_getop.py b/src/ragie/models/list_connections_connections_getop.py index e95b34e..1b744a2 100644 --- a/src/ragie/models/list_connections_connections_getop.py +++ b/src/ragie/models/list_connections_connections_getop.py @@ -49,31 +49,26 @@ class ListConnectionsConnectionsGetRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["cursor", "page_size", "filter", "partition"] - nullable_fields = ["cursor", "filter", "partition"] - null_default_fields = [] - + optional_fields = set(["cursor", "page_size", "filter", "partition"]) + nullable_fields = set(["cursor", "filter", "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) - - 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 + 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 return m diff --git a/src/ragie/models/list_partitions_partitions_getop.py b/src/ragie/models/list_partitions_partitions_getop.py index 50038bb..4250f9e 100644 --- a/src/ragie/models/list_partitions_partitions_getop.py +++ b/src/ragie/models/list_partitions_partitions_getop.py @@ -31,31 +31,26 @@ class ListPartitionsPartitionsGetRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["cursor", "page_size"] - nullable_fields = ["cursor"] - null_default_fields = [] - + optional_fields = set(["cursor", "page_size"]) + nullable_fields = set(["cursor"]) 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 + 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 return m diff --git a/src/ragie/models/listauthenticatorsop.py b/src/ragie/models/listauthenticatorsop.py index 92a1fd7..dc37ec1 100644 --- a/src/ragie/models/listauthenticatorsop.py +++ b/src/ragie/models/listauthenticatorsop.py @@ -31,31 +31,26 @@ class ListAuthenticatorsRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["cursor", "page_size"] - nullable_fields = ["cursor"] - null_default_fields = [] - + optional_fields = set(["cursor", "page_size"]) + nullable_fields = set(["cursor"]) 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 + 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 return m diff --git a/src/ragie/models/listdocumentsop.py b/src/ragie/models/listdocumentsop.py index da92234..e523f18 100644 --- a/src/ragie/models/listdocumentsop.py +++ b/src/ragie/models/listdocumentsop.py @@ -49,31 +49,26 @@ class ListDocumentsRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["cursor", "page_size", "filter", "partition"] - nullable_fields = ["cursor", "filter", "partition"] - null_default_fields = [] - + optional_fields = set(["cursor", "page_size", "filter", "partition"]) + nullable_fields = set(["cursor", "filter", "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) - - 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 + 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 return m diff --git a/src/ragie/models/listentitiesbydocumentop.py b/src/ragie/models/listentitiesbydocumentop.py index 86c01cb..5cd6f3e 100644 --- a/src/ragie/models/listentitiesbydocumentop.py +++ b/src/ragie/models/listentitiesbydocumentop.py @@ -51,31 +51,26 @@ class ListEntitiesByDocumentRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["cursor", "page_size", "partition"] - nullable_fields = ["cursor", "partition"] - null_default_fields = [] - + optional_fields = set(["cursor", "page_size", "partition"]) + nullable_fields = set(["cursor", "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) - - 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 + 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 return m diff --git a/src/ragie/models/listentitiesbyinstructionop.py b/src/ragie/models/listentitiesbyinstructionop.py index 3bd6879..910237b 100644 --- a/src/ragie/models/listentitiesbyinstructionop.py +++ b/src/ragie/models/listentitiesbyinstructionop.py @@ -51,31 +51,26 @@ class ListEntitiesByInstructionRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["cursor", "page_size", "partition"] - nullable_fields = ["cursor", "partition"] - null_default_fields = [] - + optional_fields = set(["cursor", "page_size", "partition"]) + nullable_fields = set(["cursor", "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) - - 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 + 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 return m diff --git a/src/ragie/models/listwebhookendpointsop.py b/src/ragie/models/listwebhookendpointsop.py index ad365c6..93b1c0d 100644 --- a/src/ragie/models/listwebhookendpointsop.py +++ b/src/ragie/models/listwebhookendpointsop.py @@ -31,31 +31,26 @@ class ListWebhookEndpointsRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["cursor", "page_size"] - nullable_fields = ["cursor"] - null_default_fields = [] - + optional_fields = set(["cursor", "page_size"]) + nullable_fields = set(["cursor"]) 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 + 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 return m diff --git a/src/ragie/models/mediamodeparam.py b/src/ragie/models/mediamodeparam.py index cc153f9..244c41e 100644 --- a/src/ragie/models/mediamodeparam.py +++ b/src/ragie/models/mediamodeparam.py @@ -33,30 +33,25 @@ class MediaModeParam(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["static", "audio", "video"] - nullable_fields = ["static", "audio", "video"] - null_default_fields = [] - + optional_fields = set(["static", "audio", "video"]) + nullable_fields = set(["static", "audio", "video"]) 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 + 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 return m diff --git a/src/ragie/models/oauthcredentials.py b/src/ragie/models/oauthcredentials.py index 4b7bd7a..da389a7 100644 --- a/src/ragie/models/oauthcredentials.py +++ b/src/ragie/models/oauthcredentials.py @@ -39,30 +39,25 @@ class OAuthCredentials(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["domain"] - nullable_fields = ["domain"] - null_default_fields = [] - + optional_fields = set(["domain"]) + nullable_fields = set(["domain"]) 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 + 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 return m diff --git a/src/ragie/models/oauthurlcreate.py b/src/ragie/models/oauthurlcreate.py index ec79479..1c95337 100644 --- a/src/ragie/models/oauthurlcreate.py +++ b/src/ragie/models/oauthurlcreate.py @@ -82,45 +82,38 @@ class OAuthURLCreate(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "partition", - "source_type", - "metadata", - "mode", - "theme", - "page_limit", - "config", - "authenticator_id", - ] - nullable_fields = [ - "partition", - "mode", - "theme", - "page_limit", - "authenticator_id", - ] - null_default_fields = [] - + optional_fields = set( + [ + "partition", + "source_type", + "metadata", + "mode", + "theme", + "page_limit", + "config", + "authenticator_id", + ] + ) + nullable_fields = set( + ["partition", "mode", "theme", "page_limit", "authenticator_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) - - 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 + 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 return m diff --git a/src/ragie/models/outputtokendetails.py b/src/ragie/models/outputtokendetails.py index bba6c40..6ea25d8 100644 --- a/src/ragie/models/outputtokendetails.py +++ b/src/ragie/models/outputtokendetails.py @@ -1,7 +1,8 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -12,3 +13,19 @@ class OutputTokenDetailsTypedDict(TypedDict): class OutputTokenDetails(BaseModel): reasoning_tokens: Optional[int] = 0 + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["reasoning_tokens"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/pagination.py b/src/ragie/models/pagination.py index 2bc263a..143d8d1 100644 --- a/src/ragie/models/pagination.py +++ b/src/ragie/models/pagination.py @@ -18,30 +18,25 @@ class Pagination(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["next_cursor"] - nullable_fields = ["next_cursor"] - null_default_fields = [] - + optional_fields = set(["next_cursor"]) + nullable_fields = set(["next_cursor"]) 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 + 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 return m diff --git a/src/ragie/models/partition.py b/src/ragie/models/partition.py index 4bd582a..4f651d3 100644 --- a/src/ragie/models/partition.py +++ b/src/ragie/models/partition.py @@ -48,30 +48,25 @@ class Partition(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["limit_exceeded_at"] - nullable_fields = ["limit_exceeded_at", "description", "metadata_schema"] - null_default_fields = [] - + optional_fields = set(["limit_exceeded_at"]) + nullable_fields = set(["limit_exceeded_at", "description", "metadata_schema"]) 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 + 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 return m diff --git a/src/ragie/models/partitiondetail.py b/src/ragie/models/partitiondetail.py index 5851c8e..433ce59 100644 --- a/src/ragie/models/partitiondetail.py +++ b/src/ragie/models/partitiondetail.py @@ -53,30 +53,25 @@ class PartitionDetail(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["limit_exceeded_at"] - nullable_fields = ["limit_exceeded_at", "description", "metadata_schema"] - null_default_fields = [] - + optional_fields = set(["limit_exceeded_at"]) + nullable_fields = set(["limit_exceeded_at", "description", "metadata_schema"]) 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 + 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 return m diff --git a/src/ragie/models/partitionlimitparams.py b/src/ragie/models/partitionlimitparams.py index d4624ba..b030590 100644 --- a/src/ragie/models/partitionlimitparams.py +++ b/src/ragie/models/partitionlimitparams.py @@ -72,56 +72,55 @@ class PartitionLimitParams(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "pages_hosted_limit_monthly", - "pages_processed_limit_monthly", - "pages_hosted_limit_max", - "pages_processed_limit_max", - "video_processed_limit_monthly", - "video_processed_limit_max", - "audio_processed_limit_monthly", - "audio_processed_limit_max", - "media_streamed_limit_monthly", - "media_streamed_limit_max", - "media_hosted_limit_monthly", - "media_hosted_limit_max", - ] - nullable_fields = [ - "pages_hosted_limit_monthly", - "pages_processed_limit_monthly", - "pages_hosted_limit_max", - "pages_processed_limit_max", - "video_processed_limit_monthly", - "video_processed_limit_max", - "audio_processed_limit_monthly", - "audio_processed_limit_max", - "media_streamed_limit_monthly", - "media_streamed_limit_max", - "media_hosted_limit_monthly", - "media_hosted_limit_max", - ] - null_default_fields = [] - + optional_fields = set( + [ + "pages_hosted_limit_monthly", + "pages_processed_limit_monthly", + "pages_hosted_limit_max", + "pages_processed_limit_max", + "video_processed_limit_monthly", + "video_processed_limit_max", + "audio_processed_limit_monthly", + "audio_processed_limit_max", + "media_streamed_limit_monthly", + "media_streamed_limit_max", + "media_hosted_limit_monthly", + "media_hosted_limit_max", + ] + ) + nullable_fields = set( + [ + "pages_hosted_limit_monthly", + "pages_processed_limit_monthly", + "pages_hosted_limit_max", + "pages_processed_limit_max", + "video_processed_limit_monthly", + "video_processed_limit_max", + "audio_processed_limit_monthly", + "audio_processed_limit_max", + "media_streamed_limit_monthly", + "media_streamed_limit_max", + "media_hosted_limit_monthly", + "media_hosted_limit_max", + ] + ) 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 + 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 return m diff --git a/src/ragie/models/partitionlimits.py b/src/ragie/models/partitionlimits.py index 114acde..a6bd099 100644 --- a/src/ragie/models/partitionlimits.py +++ b/src/ragie/models/partitionlimits.py @@ -72,56 +72,55 @@ class PartitionLimits(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "pages_processed_limit_monthly", - "pages_hosted_limit_monthly", - "pages_processed_limit_max", - "pages_hosted_limit_max", - "video_processed_limit_monthly", - "video_processed_limit_max", - "audio_processed_limit_monthly", - "audio_processed_limit_max", - "media_streamed_limit_monthly", - "media_streamed_limit_max", - "media_hosted_limit_monthly", - "media_hosted_limit_max", - ] - nullable_fields = [ - "pages_processed_limit_monthly", - "pages_hosted_limit_monthly", - "pages_processed_limit_max", - "pages_hosted_limit_max", - "video_processed_limit_monthly", - "video_processed_limit_max", - "audio_processed_limit_monthly", - "audio_processed_limit_max", - "media_streamed_limit_monthly", - "media_streamed_limit_max", - "media_hosted_limit_monthly", - "media_hosted_limit_max", - ] - null_default_fields = [] - + optional_fields = set( + [ + "pages_processed_limit_monthly", + "pages_hosted_limit_monthly", + "pages_processed_limit_max", + "pages_hosted_limit_max", + "video_processed_limit_monthly", + "video_processed_limit_max", + "audio_processed_limit_monthly", + "audio_processed_limit_max", + "media_streamed_limit_monthly", + "media_streamed_limit_max", + "media_hosted_limit_monthly", + "media_hosted_limit_max", + ] + ) + nullable_fields = set( + [ + "pages_processed_limit_monthly", + "pages_hosted_limit_monthly", + "pages_processed_limit_max", + "pages_hosted_limit_max", + "video_processed_limit_monthly", + "video_processed_limit_max", + "audio_processed_limit_monthly", + "audio_processed_limit_max", + "media_streamed_limit_monthly", + "media_streamed_limit_max", + "media_hosted_limit_monthly", + "media_hosted_limit_max", + ] + ) 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 + 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 return m diff --git a/src/ragie/models/patchdocumentmetadataop.py b/src/ragie/models/patchdocumentmetadataop.py index 4c9296c..aa0874f 100644 --- a/src/ragie/models/patchdocumentmetadataop.py +++ b/src/ragie/models/patchdocumentmetadataop.py @@ -52,31 +52,26 @@ class PatchDocumentMetadataRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["partition"] - nullable_fields = ["partition"] - null_default_fields = [] - + optional_fields = set(["partition"]) + nullable_fields = set(["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) - - 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 + 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 return m diff --git a/src/ragie/models/patchdocumentmetadataparams.py b/src/ragie/models/patchdocumentmetadataparams.py index 14e5f57..91e858d 100644 --- a/src/ragie/models/patchdocumentmetadataparams.py +++ b/src/ragie/models/patchdocumentmetadataparams.py @@ -2,7 +2,8 @@ from __future__ import annotations import pydantic -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import Any, Dict, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -20,3 +21,19 @@ class PatchDocumentMetadataParams(BaseModel): async_: Annotated[Optional[bool], pydantic.Field(alias="async")] = False r"""Whether to run the metadata update asynchronously. If true, the metadata update will be run in the background and the response will be 202. If false, the metadata update will be run synchronously and the response will be 200.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["async"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/planstep.py b/src/ragie/models/planstep.py index 444e54f..be5c6f5 100644 --- a/src/ragie/models/planstep.py +++ b/src/ragie/models/planstep.py @@ -2,8 +2,9 @@ from __future__ import annotations import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -32,3 +33,19 @@ class PlanStep(BaseModel): questions_to_answer: Optional[List[str]] = None r"""The questions that need to be answered to answer the original question.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "errored", "questions_to_answer"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/publiccreateconnection.py b/src/ragie/models/publiccreateconnection.py index 1d1e3ff..a268b39 100644 --- a/src/ragie/models/publiccreateconnection.py +++ b/src/ragie/models/publiccreateconnection.py @@ -91,30 +91,25 @@ class PublicCreateConnection(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["partition", "page_limit", "config", "metadata"] - nullable_fields = ["partition", "page_limit", "config"] - null_default_fields = [] - + optional_fields = set(["partition", "page_limit", "config", "metadata"]) + nullable_fields = set(["partition", "page_limit", "config"]) 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 + 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 return m diff --git a/src/ragie/models/ragie_api_schema_response_usage.py b/src/ragie/models/ragie_api_schema_response_usage.py index 7e8a1b3..cfd8c1a 100644 --- a/src/ragie/models/ragie_api_schema_response_usage.py +++ b/src/ragie/models/ragie_api_schema_response_usage.py @@ -3,7 +3,8 @@ from __future__ import annotations from .inputtokendetails import InputTokenDetails, InputTokenDetailsTypedDict from .outputtokendetails import OutputTokenDetails, OutputTokenDetailsTypedDict -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -26,3 +27,19 @@ class RagieAPISchemaResponseUsage(BaseModel): input_token_details: Optional[InputTokenDetails] = None output_token_details: Optional[OutputTokenDetails] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["input_token_details", "output_token_details"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/ragieevidence.py b/src/ragie/models/ragieevidence.py index d60b83f..19310da 100644 --- a/src/ragie/models/ragieevidence.py +++ b/src/ragie/models/ragieevidence.py @@ -3,8 +3,9 @@ from __future__ import annotations from .searchresultlink import SearchResultLink, SearchResultLinkTypedDict import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import Any, Dict, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -57,3 +58,19 @@ class RagieEvidence(BaseModel): links: Optional[Dict[str, SearchResultLink]] = None r"""The links to the evidence.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "metadata", "document_metadata", "links"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/reasoning.py b/src/ragie/models/reasoning.py index 4d0a835..a81828f 100644 --- a/src/ragie/models/reasoning.py +++ b/src/ragie/models/reasoning.py @@ -26,30 +26,25 @@ class Reasoning(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["summary"] - nullable_fields = ["summary"] - null_default_fields = [] - + optional_fields = set(["summary"]) + nullable_fields = set(["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) - - 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 + 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 return m diff --git a/src/ragie/models/reasoningoutput.py b/src/ragie/models/reasoningoutput.py index aa491bd..c732741 100644 --- a/src/ragie/models/reasoningoutput.py +++ b/src/ragie/models/reasoningoutput.py @@ -5,8 +5,9 @@ from .reasoningtext import ReasoningText, ReasoningTextTypedDict from enum import Enum import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -52,3 +53,19 @@ class ReasoningOutput(BaseModel): ] = "reasoning" status: Optional[ReasoningOutputStatus] = ReasoningOutputStatus.COMPLETED + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "status"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/reasoningsummary.py b/src/ragie/models/reasoningsummary.py index 24a5f75..89c01ba 100644 --- a/src/ragie/models/reasoningsummary.py +++ b/src/ragie/models/reasoningsummary.py @@ -2,8 +2,9 @@ from __future__ import annotations import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import Literal, Optional from typing_extensions import Annotated, TypedDict @@ -25,3 +26,19 @@ class ReasoningSummary(BaseModel): ], pydantic.Field(alias="type"), ] = "summary" + + @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) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/reasoningtext.py b/src/ragie/models/reasoningtext.py index b777d3c..e2101f0 100644 --- a/src/ragie/models/reasoningtext.py +++ b/src/ragie/models/reasoningtext.py @@ -2,8 +2,9 @@ from __future__ import annotations import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import Literal, Optional from typing_extensions import Annotated, TypedDict @@ -26,3 +27,19 @@ class ReasoningText(BaseModel): ], pydantic.Field(alias="type"), ] = "reasoning_text" + + @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) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/request.py b/src/ragie/models/request.py index 382b7e7..c7ad307 100644 --- a/src/ragie/models/request.py +++ b/src/ragie/models/request.py @@ -52,30 +52,25 @@ class Request(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["instructions", "tools", "model", "reasoning", "stream"] - nullable_fields = ["instructions"] - null_default_fields = [] - + optional_fields = set(["instructions", "tools", "model", "reasoning", "stream"]) + nullable_fields = set(["instructions"]) 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 + 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 return m diff --git a/src/ragie/models/response.py b/src/ragie/models/response.py index 61fdf46..6da2514 100644 --- a/src/ragie/models/response.py +++ b/src/ragie/models/response.py @@ -142,55 +142,54 @@ class Response(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "object", - "error", - "incomplete_details", - "instructions", - "max_output_tokens", - "model", - "output_parsed", - "parallel_tool_calls", - "store", - "temperature", - "previous_response_id", - "tool_choice", - "top_p", - "truncation", - "user", - "metadata", - ] - nullable_fields = [ - "error", - "incomplete_details", - "instructions", - "max_output_tokens", - "output_parsed", - "previous_response_id", - "user", - ] - null_default_fields = [] - + optional_fields = set( + [ + "object", + "error", + "incomplete_details", + "instructions", + "max_output_tokens", + "model", + "output_parsed", + "parallel_tool_calls", + "store", + "temperature", + "previous_response_id", + "tool_choice", + "top_p", + "truncation", + "user", + "metadata", + ] + ) + nullable_fields = set( + [ + "error", + "incomplete_details", + "instructions", + "max_output_tokens", + "output_parsed", + "previous_response_id", + "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) - - 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 + 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 return m diff --git a/src/ragie/models/responsecontent.py b/src/ragie/models/responsecontent.py index a18c622..1f7498e 100644 --- a/src/ragie/models/responsecontent.py +++ b/src/ragie/models/responsecontent.py @@ -2,8 +2,9 @@ from __future__ import annotations import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import Any, Dict, List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -24,3 +25,19 @@ class ResponseContent(BaseModel): ] = "text" annotations: Optional[List[Dict[str, Any]]] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "annotations"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/responseok.py b/src/ragie/models/responseok.py index ca0e261..556794f 100644 --- a/src/ragie/models/responseok.py +++ b/src/ragie/models/responseok.py @@ -1,7 +1,8 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import Optional from typing_extensions import NotRequired, TypedDict @@ -12,3 +13,19 @@ class ResponseOKTypedDict(TypedDict): class ResponseOK(BaseModel): message: Optional[str] = "ok" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["message"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/responseoutputmessage.py b/src/ragie/models/responseoutputmessage.py index 919a1aa..5908fd4 100644 --- a/src/ragie/models/responseoutputmessage.py +++ b/src/ragie/models/responseoutputmessage.py @@ -3,8 +3,9 @@ from __future__ import annotations from .responsecontent import ResponseContent, ResponseContentTypedDict import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import List, Literal, Optional from typing_extensions import Annotated, TypedDict @@ -35,3 +36,19 @@ class ResponseOutputMessage(BaseModel): ], pydantic.Field(alias="role"), ] = "assistant" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "role"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/retrieveparams.py b/src/ragie/models/retrieveparams.py index 3f8b7d0..9a09fc8 100644 --- a/src/ragie/models/retrieveparams.py +++ b/src/ragie/models/retrieveparams.py @@ -2,7 +2,8 @@ from __future__ import annotations import pydantic -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import Any, Dict, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -43,3 +44,28 @@ class RetrieveParams(BaseModel): recency_bias: Optional[bool] = False r"""Enables recency bias which will favor more recent documents vs older documents. https://docs.ragie.ai/docs/retrievals-recency-bias""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + [ + "top_k", + "filter", + "rerank", + "max_chunks_per_document", + "partition", + "recency_bias", + ] + ) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/s3compatiblecredentials.py b/src/ragie/models/s3compatiblecredentials.py index 17a9816..5d00d4a 100644 --- a/src/ragie/models/s3compatiblecredentials.py +++ b/src/ragie/models/s3compatiblecredentials.py @@ -24,30 +24,25 @@ class S3CompatibleCredentials(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["endpoint"] - nullable_fields = ["endpoint"] - null_default_fields = [] - + optional_fields = set(["endpoint"]) + nullable_fields = set(["endpoint"]) 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 + 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 return m diff --git a/src/ragie/models/scoredchunk.py b/src/ragie/models/scoredchunk.py index 3ed49b4..3b9349e 100644 --- a/src/ragie/models/scoredchunk.py +++ b/src/ragie/models/scoredchunk.py @@ -2,7 +2,8 @@ from __future__ import annotations from .link import Link, LinkTypedDict -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import Any, Dict, Optional from typing_extensions import NotRequired, TypedDict @@ -37,3 +38,19 @@ class ScoredChunk(BaseModel): links: Dict[str, Link] metadata: Optional[Dict[str, Any]] = None + + @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) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/searchstep.py b/src/ragie/models/searchstep.py index 7c6d4c2..e59bbea 100644 --- a/src/ragie/models/searchstep.py +++ b/src/ragie/models/searchstep.py @@ -3,8 +3,9 @@ from __future__ import annotations from .search import Search, SearchTypedDict import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -34,3 +35,19 @@ class SearchStep(BaseModel): ] = "base_search" errored: Optional[bool] = False + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "errored"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/searchstepwithquerydetails.py b/src/ragie/models/searchstepwithquerydetails.py index 277ea69..e6ffbbb 100644 --- a/src/ragie/models/searchstepwithquerydetails.py +++ b/src/ragie/models/searchstepwithquerydetails.py @@ -4,8 +4,9 @@ from .querydetails import QueryDetails, QueryDetailsTypedDict from .search import Search, SearchTypedDict import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -42,3 +43,19 @@ class SearchStepWithQueryDetails(BaseModel): search_log: Optional[str] = "" r"""A log of the search results you found.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "errored", "query_details", "search_log"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/setconnectionenabledpayload.py b/src/ragie/models/setconnectionenabledpayload.py index d9b95f4..46f5a0a 100644 --- a/src/ragie/models/setconnectionenabledpayload.py +++ b/src/ragie/models/setconnectionenabledpayload.py @@ -24,30 +24,25 @@ class SetConnectionEnabledPayload(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["reason"] - nullable_fields = ["reason"] - null_default_fields = [] - + optional_fields = set(["reason"]) + nullable_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.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 + 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 return m diff --git a/src/ragie/models/sharepointdata.py b/src/ragie/models/sharepointdata.py index 9237bf8..2364b4e 100644 --- a/src/ragie/models/sharepointdata.py +++ b/src/ragie/models/sharepointdata.py @@ -25,30 +25,14 @@ class SharepointData(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [] - nullable_fields = ["drive"] - 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) - 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/ragie/models/sharepointfiledata.py b/src/ragie/models/sharepointfiledata.py index 367ee6c..891229e 100644 --- a/src/ragie/models/sharepointfiledata.py +++ b/src/ragie/models/sharepointfiledata.py @@ -33,30 +33,14 @@ class SharepointFileData(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [] - nullable_fields = ["drive_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) - 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/ragie/models/surrenderstep.py b/src/ragie/models/surrenderstep.py index cf2e5cf..c6c94d7 100644 --- a/src/ragie/models/surrenderstep.py +++ b/src/ragie/models/surrenderstep.py @@ -3,8 +3,9 @@ from __future__ import annotations from .answer import Answer, AnswerTypedDict import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -33,3 +34,19 @@ class SurrenderStep(BaseModel): ] = "surrender" errored: Optional[bool] = False + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "errored"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/updatedocumentfileop.py b/src/ragie/models/updatedocumentfileop.py index 0dd380b..248d867 100644 --- a/src/ragie/models/updatedocumentfileop.py +++ b/src/ragie/models/updatedocumentfileop.py @@ -43,30 +43,25 @@ class UpdateDocumentFileRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["partition"] - nullable_fields = ["partition"] - null_default_fields = [] - + optional_fields = set(["partition"]) + nullable_fields = set(["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) - - 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 + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # 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/ragie/models/updatedocumentfileparams.py b/src/ragie/models/updatedocumentfileparams.py index 7c2f0a4..4cbb687 100644 --- a/src/ragie/models/updatedocumentfileparams.py +++ b/src/ragie/models/updatedocumentfileparams.py @@ -24,6 +24,11 @@ class UpdateDocumentFileParams21(str, Enum): FAST = "fast" +class UpdateDocumentFileParamsModeStatic(str, Enum): + HI_RES = "hi_res" + FAST = "fast" + + Mode2TypedDict = TypeAliasType( "Mode2TypedDict", Union[UpdateDocumentFileParams22TypedDict, UpdateDocumentFileParams21], @@ -35,11 +40,6 @@ class UpdateDocumentFileParams21(str, Enum): ) -class UpdateDocumentFileParamsModeStatic(str, Enum): - HI_RES = "hi_res" - FAST = "fast" - - class UpdateDocumentFileParamsModeVideo(str, Enum): AUDIO_ONLY = "audio_only" VIDEO_ONLY = "video_only" @@ -61,31 +61,26 @@ class UpdateDocumentFileParamsMode1(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["static", "audio", "video"] - nullable_fields = ["static", "audio", "video"] - null_default_fields = [] - + optional_fields = set(["static", "audio", "video"]) + nullable_fields = set(["static", "audio", "video"]) 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 + 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 return m @@ -126,6 +121,22 @@ class UpdateDocumentFileParamsFile(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) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + class UpdateDocumentFileParamsTypedDict(TypedDict): file: UpdateDocumentFileParamsFileTypedDict @@ -152,3 +163,19 @@ class UpdateDocumentFileParams(BaseModel): FieldMetadata(multipart=MultipartFormMetadata(json=True)), ] = None r"""Partition strategy for the document. Different strategies exist for textual, audio and video file types and you can set the strategy you want for each file type, or just for textual types. For textual documents the options are `'hi_res'` or `'fast'`. When set to `'hi_res'`, images and tables will be extracted from the document. `'fast'` will only extract text. `'fast'` may be up to 20x faster than `'hi_res'`. `hi_res` is only applicable for Word documents, PDFs, Images, and PowerPoints. Images will always be processed in `hi_res`. If `hi_res` is set for an unsupported document type, it will be processed and billed in `fast` mode. For audio files, the options are true or false. True if you want to process audio, false otherwise. For video files, the options are `'audio_only'`, `'video_only'`, `'audio_video'`. `'audio_only'` will extract just the audio part of the video. `'video_only'` will similarly just extract the video part, ignoring audio. `'audio_video'` will extract both audio and video. To process all media types at the highest quality, use `'all'`. When you specify audio or video stategies, the format must be a JSON object. In this case, textual documents are denoted by the key \"static\". If you omit a key, that document type won't be processd. See examples below. Examples Textual documents only \"fast\" Video documents only { \"video\": \"audio_video\" } Specify multiple document types { \"static\": \"hi_res\", \"audio\": true, \"video\": \"video_only\" } Specify only textual or audio document types { \"static\": \"fast\", \"audio\": true } Highest quality processing for all media types \"all\" """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["mode"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/updatedocumentfromurlop.py b/src/ragie/models/updatedocumentfromurlop.py index c778e49..3f8eba6 100644 --- a/src/ragie/models/updatedocumentfromurlop.py +++ b/src/ragie/models/updatedocumentfromurlop.py @@ -43,30 +43,25 @@ class UpdateDocumentFromURLRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["partition"] - nullable_fields = ["partition"] - null_default_fields = [] - + optional_fields = set(["partition"]) + nullable_fields = set(["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) - - 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 + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # 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/ragie/models/updatedocumentfromurlparams.py b/src/ragie/models/updatedocumentfromurlparams.py index 3b6f970..fa94c6f 100644 --- a/src/ragie/models/updatedocumentfromurlparams.py +++ b/src/ragie/models/updatedocumentfromurlparams.py @@ -3,7 +3,8 @@ from __future__ import annotations from .mediamodeparam import MediaModeParam, MediaModeParamTypedDict from enum import Enum -from ragie.types import BaseModel +from pydantic import model_serializer +from ragie.types import BaseModel, UNSET_SENTINEL from typing import Optional, Union from typing_extensions import NotRequired, TypeAliasType, TypedDict @@ -40,3 +41,19 @@ class UpdateDocumentFromURLParams(BaseModel): mode: Optional[UpdateDocumentFromURLParamsMode] = None r"""Partition strategy for the document. Different strategies exist for textual, audio and video file types and you can set the strategy you want for each file type, or just for textual types. For textual documents the options are `'hi_res'` or `'fast'`. When set to `'hi_res'`, images and tables will be extracted from the document. `'fast'` will only extract text. `'fast'` may be up to 20x faster than `'hi_res'`. `hi_res` is only applicable for Word documents, PDFs, Images, and PowerPoints. Images will always be processed in `hi_res`. If `hi_res` is set for an unsupported document type, it will be processed and billed in `fast` mode. For audio files, the options are true or false. True if you want to process audio, false otherwise. For video files, the options are `'audio_only'`, `'video_only'`, `'audio_video'`. `'audio_only'` will extract just the audio part of the video. `'video_only'` will similarly just extract the video part, ignoring audio. `'audio_video'` will extract both audio and video. To process all media types at the highest quality, use `'all'`. When you specify audio or video stategies, the format must be a JSON object. In this case, textual documents are denoted by the key \"static\". If you omit a key, that document type won't be processd. See examples below. Examples Textual documents only \"fast\" Video documents only { \"video\": \"audio_video\" } Specify multiple document types { \"static\": \"hi_res\", \"audio\": true, \"video\": \"video_only\" } Specify only textual or audio document types { \"static\": \"fast\", \"audio\": true } Highest quality processing for all media types \"all\" """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["mode"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/updatedocumentrawop.py b/src/ragie/models/updatedocumentrawop.py index b3fe86d..e8cd652 100644 --- a/src/ragie/models/updatedocumentrawop.py +++ b/src/ragie/models/updatedocumentrawop.py @@ -43,30 +43,25 @@ class UpdateDocumentRawRequest(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["partition"] - nullable_fields = ["partition"] - null_default_fields = [] - + optional_fields = set(["partition"]) + nullable_fields = set(["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) - - 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 + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # 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/ragie/models/updatepartitionparams.py b/src/ragie/models/updatepartitionparams.py index 6194a57..cf36de1 100644 --- a/src/ragie/models/updatepartitionparams.py +++ b/src/ragie/models/updatepartitionparams.py @@ -44,30 +44,25 @@ class UpdatePartitionParams(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["context_aware", "description", "metadata_schema"] - nullable_fields = ["context_aware", "description", "metadata_schema"] - null_default_fields = [] - + optional_fields = set(["context_aware", "description", "metadata_schema"]) + nullable_fields = set(["context_aware", "description", "metadata_schema"]) 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 + 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 return m diff --git a/src/ragie/models/updatewebhookendpointpayload.py b/src/ragie/models/updatewebhookendpointpayload.py index a68b30b..39a7dc5 100644 --- a/src/ragie/models/updatewebhookendpointpayload.py +++ b/src/ragie/models/updatewebhookendpointpayload.py @@ -24,30 +24,25 @@ class UpdateWebhookEndpointPayload(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["name", "url", "active", "partition_pattern"] - nullable_fields = ["name", "url", "active", "partition_pattern"] - null_default_fields = [] - + optional_fields = set(["name", "url", "active", "partition_pattern"]) + nullable_fields = set(["name", "url", "active", "partition_pattern"]) 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 + 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 return m diff --git a/src/ragie/models/videomodalitydata.py b/src/ragie/models/videomodalitydata.py index 5d1c078..51e1c50 100644 --- a/src/ragie/models/videomodalitydata.py +++ b/src/ragie/models/videomodalitydata.py @@ -3,8 +3,9 @@ from __future__ import annotations from .wordtimestamp import WordTimestamp, WordTimestampTypedDict import pydantic +from pydantic import model_serializer from pydantic.functional_validators import AfterValidator -from ragie.types import BaseModel +from ragie.types import BaseModel, UNSET_SENTINEL from ragie.utils import validate_const from typing import List, Literal, Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -22,3 +23,19 @@ class VideoModalityData(BaseModel): ] = "video" word_timestamps: Optional[List[WordTimestamp]] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["type", "word_timestamps"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/ragie/models/webhookendpoint.py b/src/ragie/models/webhookendpoint.py index 8fb67a2..503eb83 100644 --- a/src/ragie/models/webhookendpoint.py +++ b/src/ragie/models/webhookendpoint.py @@ -15,6 +15,7 @@ class WebhookEndpointTypedDict(TypedDict): url: str partition_pattern: Nullable[str] active: bool + secret: str class WebhookEndpoint(BaseModel): @@ -32,32 +33,18 @@ class WebhookEndpoint(BaseModel): active: bool + secret: str + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [] - nullable_fields = ["partition_pattern"] - 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) - 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/ragie/utils/__init__.py b/src/ragie/utils/__init__.py index 56164cf..c906e1e 100644 --- a/src/ragie/utils/__init__.py +++ b/src/ragie/utils/__init__.py @@ -1,10 +1,22 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Callable, TypeVar from importlib import import_module +import asyncio import builtins import sys +_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.""" + if sys.version_info >= (3, 9): + return await asyncio.to_thread(func, *args) + loop = asyncio.get_event_loop() + return await loop.run_in_executor(None, func, *args) + + if TYPE_CHECKING: from .annotations import get_discriminator from .datetimes import parse_datetime @@ -41,7 +53,6 @@ validate_decimal, validate_float, validate_int, - validate_open_enum, ) from .url import generate_url, template_url, remove_suffix from .values import ( @@ -102,7 +113,6 @@ "validate_const", "validate_float", "validate_int", - "validate_open_enum", "cast_partial", ] @@ -155,7 +165,6 @@ "validate_const": ".serializers", "validate_float": ".serializers", "validate_int": ".serializers", - "validate_open_enum": ".serializers", "cast_partial": ".values", } diff --git a/src/ragie/utils/enums.py b/src/ragie/utils/enums.py index c3bc13c..3324e1b 100644 --- a/src/ragie/utils/enums.py +++ b/src/ragie/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 @@ def __call__( ) 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/ragie/utils/requestbodies.py b/src/ragie/utils/requestbodies.py index d5240dd..1de32b6 100644 --- a/src/ragie/utils/requestbodies.py +++ b/src/ragie/utils/requestbodies.py @@ -44,15 +44,15 @@ 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/ragie/utils/serializers.py b/src/ragie/utils/serializers.py index 378a14c..14321eb 100644 --- a/src/ragie/utils/serializers.py +++ b/src/ragie/utils/serializers.py @@ -102,26 +102,6 @@ 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]