diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh index a0ca561d..22e7b9f7 100644 --- a/.devcontainer/setup.sh +++ b/.devcontainer/setup.sh @@ -7,6 +7,7 @@ curl -fsSL https://raw.githubusercontent.com/speakeasy-api/speakeasy/main/instal rmdir samples || true mkdir samples + python -m pip install --upgrade pip pip install -e . diff --git a/.gitignore b/.gitignore index 9cea21a5..36938f36 100755 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ +**/__pycache__/ +**/.speakeasy/temp/ +**/.speakeasy/logs/ +.env +.env.local .speakeasy/reports .venv/ pyrightconfig.json diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 12b44bcf..5514469d 100755 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,21 +1,25 @@ lockVersion: 2.0.0 id: de81127b-e65c-4970-8911-8f8874953a42 management: - docChecksum: 4b74d250e4dae46c2d3e1dec7a2be5b9 + docChecksum: 9ae9ccc00c5a0ebc6c287d518aa2e04c docVersion: v1.0.0 - speakeasyVersion: 1.488.0 - generationVersion: 2.506.0 - releaseVersion: 6.5.1 - configChecksum: be9b11784105c7e38276fec79614825d + speakeasyVersion: 1.688.0 + generationVersion: 2.796.4 + releaseVersion: 6.6.0 + configChecksum: d440c3959b9b96e062ea6a998c4b07ef repoURL: https://github.com/Leonardo-Interactive/leonardo-python-sdk.git repoSubDirectory: . installationURL: https://github.com/Leonardo-Interactive/leonardo-python-sdk.git published: true +persistentEdits: + generation_id: 0b58aaf1-0884-46fe-af5c-53ac5c6c6adf + pristine_commit_hash: 71743aa767a285abe2a9a12f5fe97fb889dc72ad + pristine_tree_hash: 0c932673eeb925d164156df1f87d8bcd8a003753 features: python: additionalDependencies: 1.0.0 constsAndDefaults: 1.0.5 - core: 5.11.0 + core: 5.23.18 defaultEnabledRetries: 0.2.0 deprecations: 3.0.2 devContainers: 3.0.0 @@ -23,379 +27,1631 @@ features: envVarSecurityUsage: 0.3.2 flattening: 3.1.1 getRequestBodies: 3.0.0 - globalSecurity: 3.0.2 + globalSecurity: 3.0.4 globalSecurityCallbacks: 1.0.0 globalSecurityFlattening: 1.0.0 - globalServerURLs: 3.1.0 - nullables: 1.0.0 + globalServerURLs: 3.2.0 + nullables: 1.0.2 responseFormat: 1.0.1 - retries: 3.0.2 - sdkHooks: 1.0.0 -generatedFiles: - - .devcontainer/README.md - - .devcontainer/devcontainer.json - - .devcontainer/setup.sh - - .gitattributes - - .python-version - - .vscode/settings.json - - USAGE.md - - docs/models/operations/calculateproductionapiservicecost.md - - docs/models/operations/canvasinitimageuploadoutput.md - - docs/models/operations/createdatasetrequestbody.md - - docs/models/operations/createdatasetresponse.md - - docs/models/operations/createdatasetresponsebody.md - - docs/models/operations/createelementrequestbody.md - - docs/models/operations/createelementresponse.md - - docs/models/operations/createelementresponsebody.md - - docs/models/operations/creategenerationrequestbody.md - - docs/models/operations/creategenerationresponse.md - - docs/models/operations/creategenerationresponsebody.md - - docs/models/operations/createlcmgenerationrequestbody.md - - docs/models/operations/createlcmgenerationresponse.md - - docs/models/operations/createlcmgenerationresponsebody.md - - docs/models/operations/createmodelrequestbody.md - - docs/models/operations/createmodelresponse.md - - docs/models/operations/createmodelresponsebody.md - - docs/models/operations/createmodelsdtrainingoutput.md - - docs/models/operations/createmodelsdversions.md - - docs/models/operations/createsvdmotiongenerationrequestbody.md - - docs/models/operations/createsvdmotiongenerationresponse.md - - docs/models/operations/createsvdmotiongenerationresponsebody.md - - docs/models/operations/createtexturegenerationrequestbody.md - - docs/models/operations/createtexturegenerationresponse.md - - docs/models/operations/createtexturegenerationresponsebody.md - - docs/models/operations/createuniversalupscalerjobrequestbody.md - - docs/models/operations/createuniversalupscalerjobresponse.md - - docs/models/operations/createuniversalupscalerjobresponsebody.md - - docs/models/operations/createvariationnobgrequestbody.md - - docs/models/operations/createvariationnobgresponse.md - - docs/models/operations/createvariationnobgresponsebody.md - - docs/models/operations/createvariationunzoomrequestbody.md - - docs/models/operations/createvariationunzoomresponse.md - - docs/models/operations/createvariationunzoomresponsebody.md - - docs/models/operations/createvariationupscalerequestbody.md - - docs/models/operations/createvariationupscaleresponse.md - - docs/models/operations/createvariationupscaleresponsebody.md - - docs/models/operations/createvariationupscalesdupscalejoboutput.md - - docs/models/operations/custommodels.md - - docs/models/operations/datasetgenuploadoutput.md - - docs/models/operations/datasetimages.md - - docs/models/operations/datasets.md - - docs/models/operations/datasetuploadoutput.md - - docs/models/operations/delete3dmodelbyidrequest.md - - docs/models/operations/delete3dmodelbyidrequestbody.md - - docs/models/operations/delete3dmodelbyidresponse.md - - docs/models/operations/delete3dmodelbyidresponsebody.md - - docs/models/operations/deletedatasetbyiddatasets.md - - docs/models/operations/deletedatasetbyidrequest.md - - docs/models/operations/deletedatasetbyidresponse.md - - docs/models/operations/deletedatasetbyidresponsebody.md - - docs/models/operations/deleteelementbyidrequest.md - - docs/models/operations/deleteelementbyidresponse.md - - docs/models/operations/deleteelementbyidresponsebody.md - - docs/models/operations/deletegenerationbyidrequest.md - - docs/models/operations/deletegenerationbyidresponse.md - - docs/models/operations/deletegenerationbyidresponsebody.md - - docs/models/operations/deleteinitimagebyidrequest.md - - docs/models/operations/deleteinitimagebyidresponse.md - - docs/models/operations/deleteinitimagebyidresponsebody.md - - docs/models/operations/deletemodelbyidrequest.md - - docs/models/operations/deletemodelbyidresponse.md - - docs/models/operations/deletemodelbyidresponsebody.md - - docs/models/operations/deletetexturegenerationbyidrequest.md - - docs/models/operations/deletetexturegenerationbyidrequestbody.md - - docs/models/operations/deletetexturegenerationbyidresponse.md - - docs/models/operations/deletetexturegenerationbyidresponsebody.md - - docs/models/operations/elements.md - - docs/models/operations/generatedimages.md - - docs/models/operations/generatedimagevariationgeneric.md - - docs/models/operations/generationelements.md - - docs/models/operations/generations.md - - docs/models/operations/get3dmodelbyidmodelassets.md - - docs/models/operations/get3dmodelbyidrequest.md - - docs/models/operations/get3dmodelbyidrequestbody.md - - docs/models/operations/get3dmodelbyidresponse.md - - docs/models/operations/get3dmodelbyidresponsebody.md - - docs/models/operations/get3dmodelsbyuseridmodelassets.md - - docs/models/operations/get3dmodelsbyuseridrequest.md - - docs/models/operations/get3dmodelsbyuseridrequestbody.md - - docs/models/operations/get3dmodelsbyuseridresponse.md - - docs/models/operations/get3dmodelsbyuseridresponsebody.md - - docs/models/operations/getcustomelementsbyuseridrequest.md - - docs/models/operations/getcustomelementsbyuseridresponse.md - - docs/models/operations/getcustomelementsbyuseridresponsebody.md - - docs/models/operations/getcustomelementsbyuseriduserloras.md - - docs/models/operations/getcustommodelsbyuseridcustommodels.md - - docs/models/operations/getcustommodelsbyuseridrequest.md - - docs/models/operations/getcustommodelsbyuseridresponse.md - - docs/models/operations/getcustommodelsbyuseridresponsebody.md - - docs/models/operations/getdatasetbyiddatasets.md - - docs/models/operations/getdatasetbyidrequest.md - - docs/models/operations/getdatasetbyidresponse.md - - docs/models/operations/getdatasetbyidresponsebody.md - - docs/models/operations/getelementbyidrequest.md - - docs/models/operations/getelementbyidresponse.md - - docs/models/operations/getelementbyidresponsebody.md - - docs/models/operations/getelementbyiduserloras.md - - docs/models/operations/getgenerationbyidgeneratedimagevariationgeneric.md - - docs/models/operations/getgenerationbyidgenerations.md - - docs/models/operations/getgenerationbyidloras.md - - docs/models/operations/getgenerationbyidrequest.md - - docs/models/operations/getgenerationbyidresponse.md - - docs/models/operations/getgenerationbyidresponsebody.md - - docs/models/operations/getgenerationsbyuseridgeneratedimages.md - - docs/models/operations/getgenerationsbyuseridgeneratedimagevariationgeneric.md - - docs/models/operations/getgenerationsbyuseridgenerationelements.md - - docs/models/operations/getgenerationsbyuseridgenerations.md - - docs/models/operations/getgenerationsbyuseridrequest.md - - docs/models/operations/getgenerationsbyuseridresponse.md - - docs/models/operations/getgenerationsbyuseridresponsebody.md - - docs/models/operations/getinitimagebyidinitimages.md - - docs/models/operations/getinitimagebyidrequest.md - - docs/models/operations/getinitimagebyidresponse.md - - docs/models/operations/getinitimagebyidresponsebody.md - - docs/models/operations/getmodelbyidcustommodels.md - - docs/models/operations/getmodelbyidrequest.md - - docs/models/operations/getmodelbyidresponse.md - - docs/models/operations/getmodelbyidresponsebody.md - - docs/models/operations/gettexturegenerationbyidmodelassettexturegenerations.md - - docs/models/operations/gettexturegenerationbyidrequest.md - - docs/models/operations/gettexturegenerationbyidrequestbody.md - - docs/models/operations/gettexturegenerationbyidresponse.md - - docs/models/operations/gettexturegenerationbyidresponsebody.md - - docs/models/operations/gettexturegenerationsbymodelidmodelassettexturegenerations.md - - docs/models/operations/gettexturegenerationsbymodelidmodelassettextureimages.md - - docs/models/operations/gettexturegenerationsbymodelidrequest.md - - docs/models/operations/gettexturegenerationsbymodelidrequestbody.md - - docs/models/operations/gettexturegenerationsbymodelidresponse.md - - docs/models/operations/gettexturegenerationsbymodelidresponsebody.md - - docs/models/operations/getuserselfresponse.md - - docs/models/operations/getuserselfresponsebody.md - - docs/models/operations/getvariationbyidrequest.md - - docs/models/operations/getvariationbyidresponse.md - - docs/models/operations/getvariationbyidresponsebody.md - - docs/models/operations/initimages.md - - docs/models/operations/initimageuploadoutput.md - - docs/models/operations/lcmgenerationoutput.md - - docs/models/operations/listelementsresponse.md - - docs/models/operations/listelementsresponsebody.md - - docs/models/operations/listplatformmodelscustommodels.md - - docs/models/operations/listplatformmodelsgeneratedimages.md - - docs/models/operations/listplatformmodelsresponse.md - - docs/models/operations/listplatformmodelsresponsebody.md - - docs/models/operations/loras.md - - docs/models/operations/modelassets.md - - docs/models/operations/modelassettexturegenerations.md - - docs/models/operations/modelassettextureimages.md - - docs/models/operations/modelassetuploadoutput.md - - docs/models/operations/motionsvdgenerationoutput.md - - docs/models/operations/object.md - - docs/models/operations/performalchemyupscalelcmlcmgenerationoutput.md - - docs/models/operations/performalchemyupscalelcmrequestbody.md - - docs/models/operations/performalchemyupscalelcmresponse.md - - docs/models/operations/performalchemyupscalelcmresponsebody.md - - docs/models/operations/performinpaintinglcmlcmgenerationoutput.md - - docs/models/operations/performinpaintinglcmrequestbody.md - - docs/models/operations/performinpaintinglcmresponse.md - - docs/models/operations/performinpaintinglcmresponsebody.md - - docs/models/operations/performinstantrefinelcmgenerationoutput.md - - docs/models/operations/performinstantrefinerequestbody.md - - docs/models/operations/performinstantrefineresponse.md - - docs/models/operations/performinstantrefineresponsebody.md - - docs/models/operations/pricingcalculatorobject.md - - docs/models/operations/pricingcalculatorpricingcalculatorobject.md - - docs/models/operations/pricingcalculatorpricingcalculatorrequestobject.md - - docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyobject.md - - docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsobject.md - - docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamstexturegenerationobject.md - - docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsuniversalupscalerobject.md - - docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsuniversalupscalerultraobject.md - - docs/models/operations/pricingcalculatorrequestbody.md - - docs/models/operations/pricingcalculatorresponse.md - - docs/models/operations/pricingcalculatorresponsebody.md - - docs/models/operations/promptgenerationoutput.md - - docs/models/operations/promptimproverequestbody.md - - docs/models/operations/promptimproveresponse.md - - docs/models/operations/promptimproveresponsebody.md - - docs/models/operations/promptrandompromptgenerationoutput.md - - docs/models/operations/promptrandomresponse.md - - docs/models/operations/promptrandomresponsebody.md - - docs/models/operations/sdgenerationoutput.md - - docs/models/operations/sdtrainingoutput.md - - docs/models/operations/sdunzoomoutput.md - - docs/models/operations/sdupscalejoboutput.md - - docs/models/operations/sdversions.md - - docs/models/operations/texturegenerationjoboutput.md - - docs/models/operations/transparencytype.md - - docs/models/operations/universalupscaleroutput.md - - docs/models/operations/uploadcanvasinitimagerequestbody.md - - docs/models/operations/uploadcanvasinitimageresponse.md - - docs/models/operations/uploadcanvasinitimageresponsebody.md - - docs/models/operations/uploaddatasetimagefromgenrequest.md - - docs/models/operations/uploaddatasetimagefromgenrequestbody.md - - docs/models/operations/uploaddatasetimagefromgenresponse.md - - docs/models/operations/uploaddatasetimagefromgenresponsebody.md - - docs/models/operations/uploaddatasetimagerequest.md - - docs/models/operations/uploaddatasetimagerequestbody.md - - docs/models/operations/uploaddatasetimageresponse.md - - docs/models/operations/uploaddatasetimageresponsebody.md - - docs/models/operations/uploadinitimagerequestbody.md - - docs/models/operations/uploadinitimageresponse.md - - docs/models/operations/uploadinitimageresponsebody.md - - docs/models/operations/uploadmodelassetrequestbody.md - - docs/models/operations/uploadmodelassetresponse.md - - docs/models/operations/uploadmodelassetresponsebody.md - - docs/models/operations/userdetails.md - - docs/models/operations/userloras.md - - docs/models/operations/users.md - - docs/models/shared/canvasrequesttype.md - - docs/models/shared/controlnetinput.md - - docs/models/shared/controlnettype.md - - docs/models/shared/custommodeltype.md - - docs/models/shared/elementinput.md - - docs/models/shared/initimagetype.md - - docs/models/shared/jobstatus.md - - docs/models/shared/lcmgenerationstyle.md - - docs/models/shared/modelassettexturetypes.md - - docs/models/shared/pricingcalculatorservices.md - - docs/models/shared/sdgenerationschedulers.md - - docs/models/shared/sdgenerationstyle.md - - docs/models/shared/sdversions.md - - docs/models/shared/security.md - - docs/models/shared/strength.md - - docs/models/shared/strengthtype.md - - docs/models/shared/universalupscalerstyle.md - - docs/models/shared/universalupscalerultrastyle.md - - docs/models/shared/userelementsinput.md - - docs/models/shared/variationtype.md - - docs/models/utils/retryconfig.md - - docs/sdks/dataset/README.md - - docs/sdks/elements/README.md - - docs/sdks/image/README.md - - docs/sdks/initimages/README.md - - docs/sdks/leonardoaisdk/README.md - - docs/sdks/models/README.md - - docs/sdks/motion/README.md - - docs/sdks/pricingcalculator/README.md - - docs/sdks/prompt/README.md - - docs/sdks/realtimecanvas/README.md - - docs/sdks/texture/README.md - - docs/sdks/threedmodelassets/README.md - - docs/sdks/user/README.md - - docs/sdks/variation/README.md - - poetry.toml - - py.typed - - pylintrc - - pyproject.toml - - scripts/prepare-readme.py - - scripts/publish.sh - - src/leonardo_ai_sdk/__init__.py - - src/leonardo_ai_sdk/_hooks/__init__.py - - src/leonardo_ai_sdk/_hooks/sdkhooks.py - - src/leonardo_ai_sdk/_hooks/types.py - - src/leonardo_ai_sdk/_version.py - - src/leonardo_ai_sdk/basesdk.py - - src/leonardo_ai_sdk/dataset.py - - src/leonardo_ai_sdk/elements.py - - src/leonardo_ai_sdk/httpclient.py - - src/leonardo_ai_sdk/image.py - - src/leonardo_ai_sdk/init_images.py - - src/leonardo_ai_sdk/models/errors/__init__.py - - src/leonardo_ai_sdk/models/errors/sdkerror.py - - src/leonardo_ai_sdk/models/operations/__init__.py - - src/leonardo_ai_sdk/models/operations/createdataset.py - - src/leonardo_ai_sdk/models/operations/createelement.py - - src/leonardo_ai_sdk/models/operations/creategeneration.py - - src/leonardo_ai_sdk/models/operations/createlcmgeneration.py - - src/leonardo_ai_sdk/models/operations/createmodel.py - - src/leonardo_ai_sdk/models/operations/createsvdmotiongeneration.py - - src/leonardo_ai_sdk/models/operations/createtexturegeneration.py - - src/leonardo_ai_sdk/models/operations/createuniversalupscalerjob.py - - src/leonardo_ai_sdk/models/operations/createvariationnobg.py - - src/leonardo_ai_sdk/models/operations/createvariationunzoom.py - - src/leonardo_ai_sdk/models/operations/createvariationupscale.py - - src/leonardo_ai_sdk/models/operations/delete3dmodelbyid.py - - src/leonardo_ai_sdk/models/operations/deletedatasetbyid.py - - src/leonardo_ai_sdk/models/operations/deleteelementbyid.py - - src/leonardo_ai_sdk/models/operations/deletegenerationbyid.py - - src/leonardo_ai_sdk/models/operations/deleteinitimagebyid.py - - src/leonardo_ai_sdk/models/operations/deletemodelbyid.py - - src/leonardo_ai_sdk/models/operations/deletetexturegenerationbyid.py - - src/leonardo_ai_sdk/models/operations/get3dmodelbyid.py - - src/leonardo_ai_sdk/models/operations/get3dmodelsbyuserid.py - - src/leonardo_ai_sdk/models/operations/getcustomelementsbyuserid.py - - src/leonardo_ai_sdk/models/operations/getcustommodelsbyuserid.py - - src/leonardo_ai_sdk/models/operations/getdatasetbyid.py - - src/leonardo_ai_sdk/models/operations/getelementbyid.py - - src/leonardo_ai_sdk/models/operations/getgenerationbyid.py - - src/leonardo_ai_sdk/models/operations/getgenerationsbyuserid.py - - src/leonardo_ai_sdk/models/operations/getinitimagebyid.py - - src/leonardo_ai_sdk/models/operations/getmodelbyid.py - - src/leonardo_ai_sdk/models/operations/gettexturegenerationbyid.py - - src/leonardo_ai_sdk/models/operations/gettexturegenerationsbymodelid.py - - src/leonardo_ai_sdk/models/operations/getuserself.py - - src/leonardo_ai_sdk/models/operations/getvariationbyid.py - - src/leonardo_ai_sdk/models/operations/listelements.py - - src/leonardo_ai_sdk/models/operations/listplatformmodels.py - - src/leonardo_ai_sdk/models/operations/performalchemyupscalelcm.py - - src/leonardo_ai_sdk/models/operations/performinpaintinglcm.py - - src/leonardo_ai_sdk/models/operations/performinstantrefine.py - - src/leonardo_ai_sdk/models/operations/pricingcalculator.py - - src/leonardo_ai_sdk/models/operations/promptimprove.py - - src/leonardo_ai_sdk/models/operations/promptrandom.py - - src/leonardo_ai_sdk/models/operations/uploadcanvasinitimage.py - - src/leonardo_ai_sdk/models/operations/uploaddatasetimage.py - - src/leonardo_ai_sdk/models/operations/uploaddatasetimagefromgen.py - - src/leonardo_ai_sdk/models/operations/uploadinitimage.py - - src/leonardo_ai_sdk/models/operations/uploadmodelasset.py - - src/leonardo_ai_sdk/models/shared/__init__.py - - src/leonardo_ai_sdk/models/shared/canvasrequesttype.py - - src/leonardo_ai_sdk/models/shared/controlnet_input.py - - src/leonardo_ai_sdk/models/shared/controlnet_type.py - - src/leonardo_ai_sdk/models/shared/custom_model_type.py - - src/leonardo_ai_sdk/models/shared/element_input.py - - src/leonardo_ai_sdk/models/shared/job_status.py - - src/leonardo_ai_sdk/models/shared/lcm_generation_style.py - - src/leonardo_ai_sdk/models/shared/model_asset_texture_types.py - - src/leonardo_ai_sdk/models/shared/pricingcalculatorservices.py - - src/leonardo_ai_sdk/models/shared/sd_generation_schedulers.py - - src/leonardo_ai_sdk/models/shared/sd_generation_style.py - - src/leonardo_ai_sdk/models/shared/sd_versions.py - - src/leonardo_ai_sdk/models/shared/security.py - - src/leonardo_ai_sdk/models/shared/strength.py - - src/leonardo_ai_sdk/models/shared/universal_upscaler_style.py - - src/leonardo_ai_sdk/models/shared/universal_upscaler_ultra_style.py - - src/leonardo_ai_sdk/models/shared/user_elements_input.py - - src/leonardo_ai_sdk/models/shared/variation_type.py - - src/leonardo_ai_sdk/models_.py - - src/leonardo_ai_sdk/motion.py - - src/leonardo_ai_sdk/pricing_calculator.py - - src/leonardo_ai_sdk/prompt.py - - src/leonardo_ai_sdk/py.typed - - src/leonardo_ai_sdk/realtime_canvas.py - - src/leonardo_ai_sdk/sdk.py - - src/leonardo_ai_sdk/sdkconfiguration.py - - src/leonardo_ai_sdk/texture.py - - src/leonardo_ai_sdk/threed_model_assets.py - - src/leonardo_ai_sdk/types/__init__.py - - src/leonardo_ai_sdk/types/basemodel.py - - src/leonardo_ai_sdk/user.py - - src/leonardo_ai_sdk/utils/__init__.py - - src/leonardo_ai_sdk/utils/annotations.py - - src/leonardo_ai_sdk/utils/enums.py - - src/leonardo_ai_sdk/utils/eventstreaming.py - - src/leonardo_ai_sdk/utils/forms.py - - src/leonardo_ai_sdk/utils/headers.py - - src/leonardo_ai_sdk/utils/logger.py - - src/leonardo_ai_sdk/utils/metadata.py - - src/leonardo_ai_sdk/utils/queryparams.py - - src/leonardo_ai_sdk/utils/requestbodies.py - - src/leonardo_ai_sdk/utils/retries.py - - src/leonardo_ai_sdk/utils/security.py - - src/leonardo_ai_sdk/utils/serializers.py - - src/leonardo_ai_sdk/utils/url.py - - src/leonardo_ai_sdk/utils/values.py - - src/leonardo_ai_sdk/variation.py + retries: 3.0.3 + sdkHooks: 1.2.1 +trackedFiles: + .devcontainer/README.md: + id: b170c0f184ac + last_write_checksum: sha1:485be407d7c9c2f76e55e6626f98c5f0b4921665 + pristine_git_object: 4244ddea0365cd65c9c2038ec4d34cd60fa01115 + .devcontainer/devcontainer.json: + id: b34062a34eb1 + last_write_checksum: sha1:fbbce5654b8990b172a9ffe841d7635cd51c495b + pristine_git_object: 7e67af9f5b5aeed56bab8dd84f75d3729df3ada1 + .devcontainer/setup.sh: + id: 5f1dfbfeb8eb + last_write_checksum: sha1:9a6144aa4ad40e0b8fad2338cc8ad3b9581fdca8 + pristine_git_object: 22e7b9f7b0bb2a3fdd027c3109682a890d7e844f + .gitattributes: + id: 24139dae6567 + last_write_checksum: sha1:53134de3ada576f37c22276901e1b5b6d85cd2da + pristine_git_object: 4d75d59008e4d8609876d263419a9dc56c8d6f3a + .vscode/settings.json: + id: 89aa447020cd + last_write_checksum: sha1:f84632c81029fcdda8c3b0c768d02b836fc80526 + pristine_git_object: 8d79f0abb72526f1fb34a4c03e5bba612c6ba2ae + USAGE.md: + id: 3aed33ce6e6f + last_write_checksum: sha1:0c1c03b0bbe8ac24e43528cceaac7a327681fbdd + pristine_git_object: d7b2c1f2a8573bb485f3b922b27e05ebaaceae28 + docs/models/operations/calculateproductionapiservicecost.md: + id: 601880510af0 + last_write_checksum: sha1:2b61998f4211332981d0efb37036aebdc8ecf73a + pristine_git_object: 02bbcb92cbac53c702de18c169ea0112a9e59ffe + docs/models/operations/canvasinitimageuploadoutput.md: + id: 4575112004b4 + last_write_checksum: sha1:ab6c540af859d12212e7128f39eec69ea57e046e + pristine_git_object: 10013cce7c0491975bc41ac670bc56aa53c125af + docs/models/operations/createdatasetrequestbody.md: + id: 9c042f0a2819 + last_write_checksum: sha1:773ba428cfcdc7fc9be87ff1a56a72b579960625 + pristine_git_object: f1ab25703a3e87deb1d00ebd753e16497a0f0fb3 + docs/models/operations/createdatasetresponse.md: + id: 5c9777bb00c9 + last_write_checksum: sha1:72f3cce734c31a36da57c2a2a52c88624665ef8d + pristine_git_object: 2497df80600efc72c7767150d4ef5105151e06c2 + docs/models/operations/createdatasetresponsebody.md: + id: 6d851416578f + last_write_checksum: sha1:3241162a4c7a4d9368988c4f341337d17ea6f62a + pristine_git_object: 19ea892997624f17308167f8a50fd1326bb5c7ec + docs/models/operations/createelementrequestbody.md: + id: 8e752cb8604c + last_write_checksum: sha1:37b8893dc4cc38ca25aca540773ec6d2baf1cac8 + pristine_git_object: f509620dcb31934cd2ff68ecf91cbec718ad403e + docs/models/operations/createelementresponse.md: + id: 4260d1765ffd + last_write_checksum: sha1:41c6666844bf5c3158831cd5a710e31bfd33d745 + pristine_git_object: c103ae57a176319c57fac8af9ba29edcf773b40c + docs/models/operations/createelementresponsebody.md: + id: d67d5698940e + last_write_checksum: sha1:8e2bb9c148b3ac5830f058de6b31e457c0e12032 + pristine_git_object: e1ceff3a291eda40db0a54ee49b98435e3fed76b + docs/models/operations/creategenerationrequestbody.md: + id: 5c4483e70e83 + last_write_checksum: sha1:402e219986d8a8bd0cbcd208fdf14fe4f18b9250 + pristine_git_object: fd30d7c44318d66a6ef8e7908989993082a26fa4 + docs/models/operations/creategenerationresponse.md: + id: 19e7fda61bce + last_write_checksum: sha1:f198673f46ed218e24f82eeccf02eea7f096de14 + pristine_git_object: 3a586953a9184b82e50c6bc7bda7740d973997cf + docs/models/operations/creategenerationresponsebody.md: + id: 363705d4e567 + last_write_checksum: sha1:69966ff52ff503c05c61429ba77088a1010bb3a8 + pristine_git_object: bf5826c3078fba261901391477b8c4ac5c2921ae + docs/models/operations/createimagetovideogenerationmotionstring.md: + id: 97f92e8632f0 + last_write_checksum: sha1:2bd0f28217ec6cd5c674281bf80f3fa39cad09c3 + pristine_git_object: 5882d58ee3ed6fbedb84d4b479354e8f031c60ac + docs/models/operations/createimagetovideogenerationrequestbody.md: + id: 99a422ba2e2e + last_write_checksum: sha1:ef7098fc018f926f8ffe5972d2a2728ea67280f7 + pristine_git_object: b0b04ee8aac36cd1347de1955d9e9b3993763e6b + docs/models/operations/createimagetovideogenerationresponse.md: + id: 1f21b414d191 + last_write_checksum: sha1:1af575117dd340e6284dcae5a51bf04e38f89d6a + pristine_git_object: 459eaf2dfacbcf7a7438f8b39d7a5d2b3d936601 + docs/models/operations/createimagetovideogenerationresponsebody.md: + id: ec35231476ba + last_write_checksum: sha1:599bb891902ccb8d08a169c8b7e385bc06888b81 + pristine_git_object: e3a2531bc560397104e9fd2dc0b2625cb242a9ec + docs/models/operations/createimagetovideogenerationstring.md: + id: a49ee8bd752e + last_write_checksum: sha1:06994890ef0b57887fc5039b1e0290faddb5f7fb + pristine_git_object: cdced64325496c3c34dcd403f51b8e20becaba4f + docs/models/operations/createlcmgenerationrequestbody.md: + id: 020b6884ab1d + last_write_checksum: sha1:7ba2a5669f4995089f2b3f813b1f4d2c0a199be4 + pristine_git_object: 4bb9f6c0ba9cb3c1aa4acb90ece089c721c0c14f + docs/models/operations/createlcmgenerationresponse.md: + id: 21d1c87c6fa0 + last_write_checksum: sha1:e7962f7de05c8065ec85a6f288f64cd7ec3866ad + pristine_git_object: 54c9a77ad293491cb2e459290f974898cd2972ab + docs/models/operations/createlcmgenerationresponsebody.md: + id: c4c1d00efa94 + last_write_checksum: sha1:b180e172b3110e238f0cfa3c742fea74b037275b + pristine_git_object: 3edea84884044c454f5b438aa8e5a7f89107cec2 + docs/models/operations/createmodelrequestbody.md: + id: ce27b97fffde + last_write_checksum: sha1:1ba86a335e2e0accf4b5d4b4ccc35a0682e0d0d5 + pristine_git_object: 9595d764e26574cd6f066dad9ddab69ce749d1dd + docs/models/operations/createmodelresponse.md: + id: 15f3f7657356 + last_write_checksum: sha1:4cc342f08d91498eecc58ae8b9a7234ab2b7c3fa + pristine_git_object: 8ef5e5bfe2724098b87c6cb88c0f397dc67c5f24 + docs/models/operations/createmodelresponsebody.md: + id: f111c833ed6c + last_write_checksum: sha1:a825fea398b0c149771e088e35f2d3f273b0bd4b + pristine_git_object: ae3f40ca048604db95cc8dc4ff1481dea72fee8a + docs/models/operations/createmodelsdtrainingoutput.md: + id: 4d4772f32757 + last_write_checksum: sha1:36fc1891788bc3fbd1dd78d4197a5ddd87830f7c + pristine_git_object: a27397b928c163a7bf58a2939311cbdd5813f4f7 + docs/models/operations/createmodelsdversions.md: + id: ac2616288c29 + last_write_checksum: sha1:773a17e4f38a06e1afb8d21d497505dca745a909 + pristine_git_object: 45e7135d6c902d245b250e805af15907c3c7a501 + docs/models/operations/createsvdmotiongenerationrequestbody.md: + id: 4e4529819611 + last_write_checksum: sha1:c8504c5b6e68a069a24839cbbf489ba830a1a185 + pristine_git_object: 286454c7828491e51cc246a224c65fd2390c80e3 + docs/models/operations/createsvdmotiongenerationresponse.md: + id: effe6d539b4a + last_write_checksum: sha1:976b53b62005a70aad354eb252c335ecd8281e39 + pristine_git_object: 3cb5282b2128f7e9f8ea54dd5b5f9506d21ce9c8 + docs/models/operations/createsvdmotiongenerationresponsebody.md: + id: 7534a3173c86 + last_write_checksum: sha1:ea8e6eafb07d88a159f676d94e95aa5c6061dd25 + pristine_git_object: f1d30eb36d957b3f399393d92f3f736fb86540b0 + docs/models/operations/createtexttovideogenerationmotionstring.md: + id: 85de2070ea55 + last_write_checksum: sha1:432f8d93c9a14fbd6dbfddb1a34e4a4831b8f97d + pristine_git_object: a6e775f5da649cc878f09613b2a61deacff5d35c + docs/models/operations/createtexttovideogenerationmotionvideogenerationoutput.md: + id: c5311f88d26e + last_write_checksum: sha1:ee99cc618fe436250a23afaa8022a1beda1a33a5 + pristine_git_object: 5c82d59748e60b48f0105315bc3eae9b984e59a1 + docs/models/operations/createtexttovideogenerationrequestbody.md: + id: 567758831fbf + last_write_checksum: sha1:3b38f18d7c03d5609ef335962eaae67418957483 + pristine_git_object: 9bee43fd23bd01520e0ff7a13ab10a822d64056f + docs/models/operations/createtexttovideogenerationresponse.md: + id: 6f67d6b6b167 + last_write_checksum: sha1:cd988e5aeb462dd9f1c3a34b0537872200fd0af7 + pristine_git_object: 6ea818a2bad439bf620cd6b53f77153b203ab424 + docs/models/operations/createtexttovideogenerationresponsebody.md: + id: e14dfd63070c + last_write_checksum: sha1:2d4febd458a7cda090a3a766d57f1dcf94a7e280 + pristine_git_object: ecfbb51f742db5cb5944308ef3a2322854e493b2 + docs/models/operations/createtexttovideogenerationstring.md: + id: 01d6fd461bf6 + last_write_checksum: sha1:8a52c89a9c4322889d3b9756ab1b3578af3de48a + pristine_git_object: d095d8c11689d5e215515598382318a77f2828a6 + docs/models/operations/createtexturegenerationrequestbody.md: + id: bf078b04f842 + last_write_checksum: sha1:fb3c686df3ce7435ac10f5f87f01857b01fb533f + pristine_git_object: 36aa9b06dfcef746685de008d615263770fb8687 + docs/models/operations/createtexturegenerationresponse.md: + id: ccc56426b4a2 + last_write_checksum: sha1:a9de00643cf0afed783cc8b3481ca51c53d67a90 + pristine_git_object: 65d2ee0040750f3eeac50743eb61900ea3aec27b + docs/models/operations/createtexturegenerationresponsebody.md: + id: 2af45cbcf0f5 + last_write_checksum: sha1:83709a5c1dd0df1353734945eae786a62e250d8b + pristine_git_object: bcb659234db5c1a7b105511496d418f60ce798e6 + docs/models/operations/createuniversalupscalerjobrequestbody.md: + id: 15ee8c160d88 + last_write_checksum: sha1:bf659d3f7488c75e3dc525072d80003d7f78f10c + pristine_git_object: 091af6094855d003347964a80ff9ecf7bd47fcd7 + docs/models/operations/createuniversalupscalerjobresponse.md: + id: c91d6d826533 + last_write_checksum: sha1:1f060f0eb00a413af3ff4c48b7596a3ebf98c97e + pristine_git_object: d2e53c8bbc928b935260a311a65304d2b098d87b + docs/models/operations/createuniversalupscalerjobresponsebody.md: + id: 0553f5bb3d9b + last_write_checksum: sha1:2084192cdef2efcaea462bc81dba162c8a038401 + pristine_git_object: f5943b9d8119c79951643cc0a5c1dbe45c849079 + docs/models/operations/createvariationnobgrequestbody.md: + id: be44e2b6e3dc + last_write_checksum: sha1:0c78c7bef8ae2a0814f556dcd6a7b85d55969db7 + pristine_git_object: b5ba16cd5545144c7b300c05b2ccc146f7d5c8b0 + docs/models/operations/createvariationnobgresponse.md: + id: 29a03301fe56 + last_write_checksum: sha1:00b981ea6cf8f57fa85bdcc5a29b47c78b25f460 + pristine_git_object: b0168656e9a9746752296de1e9c8e9b940d5be59 + docs/models/operations/createvariationnobgresponsebody.md: + id: 159ee66b4403 + last_write_checksum: sha1:333290a776f72c6d109ffeeb5721cefc2173f987 + pristine_git_object: 62beae824693b8f511590d746dee597b5c693e1a + docs/models/operations/createvariationunzoomrequestbody.md: + id: 5777d76432b1 + last_write_checksum: sha1:607896c63b783a08887fd5ff54cdedfeaa76349e + pristine_git_object: 9df929b7d4af6ee838e6671eac42b78ef5c735ca + docs/models/operations/createvariationunzoomresponse.md: + id: 01e854ac8b3c + last_write_checksum: sha1:32abcfec34e77fd1dd0bfa04d52946ab234a041e + pristine_git_object: a64ccdfeda623fd7f96484dadbdc4832e183849b + docs/models/operations/createvariationunzoomresponsebody.md: + id: 324ab30b2063 + last_write_checksum: sha1:0110f6dae307ffd8ea1a72f3e3bed7e3632fd308 + pristine_git_object: 26b12b9a0e06d22835132ebd8ac4cba1f08bc15f + docs/models/operations/createvariationupscalerequestbody.md: + id: 55aeeba0e7d0 + last_write_checksum: sha1:b60fabe624f342918bc68793c20683530495d0a5 + pristine_git_object: e42f79304eefd11fa46ab3308ae260c021227d48 + docs/models/operations/createvariationupscaleresponse.md: + id: a2474a1c4830 + last_write_checksum: sha1:e0735bbcc614245de941cf1f1c4f11471948dfb8 + pristine_git_object: 5f5c368b556f714249198fff4176c64b299d5322 + docs/models/operations/createvariationupscaleresponsebody.md: + id: d0d1d8e2b676 + last_write_checksum: sha1:702059dee2359b38018014add37b477d0ced5d76 + pristine_git_object: f5b126314e612fa44d8fc4e73a15337331c694da + docs/models/operations/createvariationupscalesdupscalejoboutput.md: + id: 2a595fdf0a43 + last_write_checksum: sha1:7262ecbb677a68fbe72e7982f8c075c1004b7adb + pristine_git_object: ddfbbc2db011cd53aaa61b1549ef7fd5c851a17f + docs/models/operations/createvideoupscalemotionvideogenerationoutput.md: + id: 3eea0abfc2b2 + last_write_checksum: sha1:89095bd4db281a9c83c13f9540652e9a7ed8510f + pristine_git_object: 35bd22808d5ea06f6f782ab66eb3d81065494758 + docs/models/operations/createvideoupscalerequestbody.md: + id: 0401f2dd8ad2 + last_write_checksum: sha1:2c458ee2127c48bc89c9e57dc08ba324fbab9c42 + pristine_git_object: fe3b22d625f464c49cc096b4d2b7d9094e80c656 + docs/models/operations/createvideoupscaleresponse.md: + id: 8097a01e4f44 + last_write_checksum: sha1:07efb7682044e927d25c717f55606e6750486503 + pristine_git_object: 1cd49352f9f974015850e9a46e5d47ca7031f07a + docs/models/operations/createvideoupscaleresponsebody.md: + id: fefbf39d4bd9 + last_write_checksum: sha1:971651e32fe715d2de2b2a51563ff55e8d0bc79f + pristine_git_object: 54bc13bb13de08c139ded8be532468b750dccdb6 + docs/models/operations/createvideoupscalestring.md: + id: 5a5448fdb7d4 + last_write_checksum: sha1:38a153a04921fd4b770621fd56c8a2e9f6b0600c + pristine_git_object: bdf3873b3e065d3e4337cd9b0add1960365d14ce + docs/models/operations/custommodels.md: + id: c5b5df5909ce + last_write_checksum: sha1:bef781cc9cc0e8391d64d94689aba85640a215ea + pristine_git_object: 3701fa593a9809a6f475e2a7dbd528c39598e138 + docs/models/operations/datasetgenuploadoutput.md: + id: 069a07921fde + last_write_checksum: sha1:6ce41cd6adede66b9f5396d845bf3e965f41e46f + pristine_git_object: dd8565926a2943b33fc0beb7bd00441790d144c4 + docs/models/operations/datasetimages.md: + id: f5c049619390 + last_write_checksum: sha1:807db95617eb7dad94b7c41f2eadf4f7c799936f + pristine_git_object: 84ea671b1ed2b9f0894cc221038c8bb24b2e4d60 + docs/models/operations/datasets.md: + id: bf448852b9b5 + last_write_checksum: sha1:21eb40d81bb96927c30057550696cd04fd77b38f + pristine_git_object: ef3a8ef1d19e7252f8c82c56770288bc276ea23c + docs/models/operations/datasetuploadoutput.md: + id: b766283ef9e4 + last_write_checksum: sha1:642cc0ec3098181f1d72e94555b7280acccc2f9f + pristine_git_object: 95d848f15a2451a1021dc062b25f070e68b646c4 + docs/models/operations/delete3dmodelbyidrequest.md: + id: 476411abd617 + last_write_checksum: sha1:f7b3412e4804d1f92b7e1c642b7e06f7bbea9d96 + pristine_git_object: 7b6a3f96e0fe2864951ef1fbb87521ae7735591f + docs/models/operations/delete3dmodelbyidrequestbody.md: + id: c32f51e6c7e0 + last_write_checksum: sha1:b6c852a66638d6d61821145632eebb6c04320084 + pristine_git_object: eb9268a82441a1bd6c5ab2733dad4778b11b0335 + docs/models/operations/delete3dmodelbyidresponse.md: + id: c448db567cf7 + last_write_checksum: sha1:b8d8495933c6953551bc925e0b9bbdd0a87cc2f4 + pristine_git_object: f39e8ac5f4ef9dd5175d81ac885f86fc067a25ab + docs/models/operations/delete3dmodelbyidresponsebody.md: + id: e8442e7e48fd + last_write_checksum: sha1:75341f6126f5aa85a788cfa4e90ac1078e1a07d2 + pristine_git_object: 43288eac35a18a632dece3c50488bfd469248d95 + docs/models/operations/deletedatasetbyiddatasets.md: + id: 7ab6a3834696 + last_write_checksum: sha1:07de83c232697e3df7119733797c0aee8ddba7c5 + pristine_git_object: 1afc51868fcd671aad79c1d917c7b160c3cd2333 + docs/models/operations/deletedatasetbyidrequest.md: + id: 01681fed7882 + last_write_checksum: sha1:a5123328dff1958455dce2af9702d517e2a4796c + pristine_git_object: 9a5f6b358a22a3878419c558c12c90a7c98c58fd + docs/models/operations/deletedatasetbyidresponse.md: + id: 0dc424fd5c5f + last_write_checksum: sha1:b3dedecd5c98c13aaf21c1a99baa0cb0fa1743a5 + pristine_git_object: 5ea621780bf71c37f3a2566d27e39d409ebe3d93 + docs/models/operations/deletedatasetbyidresponsebody.md: + id: 6566abdb1975 + last_write_checksum: sha1:daa6f8442a29ff38c336179e9d3077a20be41f3f + pristine_git_object: 6a7cce3a3b41c9b8977f96e6c701e486f39960a4 + docs/models/operations/deleteelementbyidrequest.md: + id: ef9283cd917f + last_write_checksum: sha1:6e8d8b0fb641c81ba0f437f16e0e395f0339f86d + pristine_git_object: aefad5fd181a2971670c41bdfd0588f7188ec4bb + docs/models/operations/deleteelementbyidresponse.md: + id: af2c6ed7a872 + last_write_checksum: sha1:bbe5292ed02ee7d271b14d6dd38782759619eb74 + pristine_git_object: e66f64386c87d8a3e6419b79140506ae114401ea + docs/models/operations/deleteelementbyidresponsebody.md: + id: 8ecfe83171a4 + last_write_checksum: sha1:cd07a9bedab3d344f9a6017263d6ac304f6b8ebc + pristine_git_object: 7a8042965c449c12c748e0f7988e6581d6cf7333 + docs/models/operations/deletegenerationbyidrequest.md: + id: 563d06cb4b3e + last_write_checksum: sha1:b3b4a8356a4db5a65f1a393b613c0f0eebeb38e8 + pristine_git_object: 04c5c2f8fd8d7f34f003f22047e487195fee592a + docs/models/operations/deletegenerationbyidresponse.md: + id: 3e34a043bd02 + last_write_checksum: sha1:12a31e04b626ef35a6bbc02c7f3b1055e5158591 + pristine_git_object: 93ee7a3dfd1c8f2d43776f31fc761b5ed70e5b6c + docs/models/operations/deletegenerationbyidresponsebody.md: + id: a823e8e81eb0 + last_write_checksum: sha1:131e181f661b26c8d39399046cb48c1da1bd8bbc + pristine_git_object: dababcc9082c848a731a93855c30088c730128da + docs/models/operations/deleteinitimagebyidrequest.md: + id: eec9fbd169d6 + last_write_checksum: sha1:46c63648f26e493cbfdf19e43dcb0c3726af2b78 + pristine_git_object: 20252135eb0459c8190cfd94dc945bd6962e93f9 + docs/models/operations/deleteinitimagebyidresponse.md: + id: 395c7832d0ad + last_write_checksum: sha1:e52776122f3b78aab7a0b44002cfb1a4af4790e5 + pristine_git_object: 2a64f1d774bae63b975d4e0e99665a6be615e042 + docs/models/operations/deleteinitimagebyidresponsebody.md: + id: d08ad00d2631 + last_write_checksum: sha1:652f010dd96d7dbd928f261514abe8c762ffed3b + pristine_git_object: 31adb8611a9e7649c99d662b76a1ed09a24174e8 + docs/models/operations/deletemodelbyidrequest.md: + id: 1720e47a0b71 + last_write_checksum: sha1:bef01cbfd02ab7e57467799c8538455ed6fd1a3f + pristine_git_object: 96d8d4626ce217543b0d4ceb99012010338b8add + docs/models/operations/deletemodelbyidresponse.md: + id: 28a94c61d07b + last_write_checksum: sha1:dad68cf9abf43ffd4f18f4c225d274eb63415062 + pristine_git_object: e1fc39e857afd36d1a63b4929083cebcaea1d01f + docs/models/operations/deletemodelbyidresponsebody.md: + id: bc5e8ae89b8f + last_write_checksum: sha1:40964f71e4501fde0a16e04cbfa591c35496df74 + pristine_git_object: 8ed0e41802c2095c05ff922a9166738235edc63a + docs/models/operations/deletetexturegenerationbyidrequest.md: + id: 5591c580eaea + last_write_checksum: sha1:2085a235d426619bfe22caa2392a50ff6fee2129 + pristine_git_object: b9e1367035e12de4edd5b91cb2a552d22cd7fcad + docs/models/operations/deletetexturegenerationbyidrequestbody.md: + id: 8a66be32450b + last_write_checksum: sha1:ac26d65fd57325a88582bdf485d0f37f020a6433 + pristine_git_object: a9d885e4281163313846aac5a8ebeac1251dd9f6 + docs/models/operations/deletetexturegenerationbyidresponse.md: + id: e3947e33933f + last_write_checksum: sha1:5f4c004e831ca61e4aa209ec46d23f8ee3c940d5 + pristine_git_object: 50d3a166b40ccf588810a0d529f5ed991e92326d + docs/models/operations/deletetexturegenerationbyidresponsebody.md: + id: f90992f00450 + last_write_checksum: sha1:363403f38dd3f2929ebea71a4c1713f733bca600 + pristine_git_object: ea3e69d2b32340893219f096af09e6ed46cf745e + docs/models/operations/elements.md: + id: 825a0637ae0d + last_write_checksum: sha1:cdb1c25a011a6ce28eecbf8f91d5633b3c2462e3 + pristine_git_object: 86cc0f1cff77b58e603448bc5ec9b4d044346b1b + docs/models/operations/generatedimages.md: + id: 6c50a67b5bd7 + last_write_checksum: sha1:f7c95377c62e5c938a5807052925d1468d5af1d1 + pristine_git_object: 4f1440e711730ce9e87d23193088aff8d51d58af + docs/models/operations/generatedimagevariationgeneric.md: + id: e7583ed18367 + last_write_checksum: sha1:5f3d4ead6abcbd561690e6b9a81cbef2f9819fc4 + pristine_git_object: 79e6f23b5cd288e3a243e96c639e17eeccd6b6f9 + docs/models/operations/generatedimagevariationmotion.md: + id: 347f2c1b0fbb + last_write_checksum: sha1:6b3fb4b239cbaacecf68551460b744fb78c34f46 + pristine_git_object: 49a70b3ea58d68e156dc113c84b2c8acacf9cf8f + docs/models/operations/generationelements.md: + id: fbfd6a686ae6 + last_write_checksum: sha1:2b8b6b4f8575e5c0fb42ffb63ad8fc79269a5d41 + pristine_git_object: 695dd13bdd895e6b6dea0cc9545194769577804c + docs/models/operations/generations.md: + id: f193d158569e + last_write_checksum: sha1:ad8fd78630682c3f328c94df80216d9f68dec1b3 + pristine_git_object: 594459482ad67897ac2eaa78036a4163045c152b + docs/models/operations/get3dmodelbyidmodelassets.md: + id: 1bad780385a3 + last_write_checksum: sha1:bac3d05dbf79cb0e89707cdfbd380924b78e8066 + pristine_git_object: 2ce3bf7ccb342199bfa7ca46117a6047bc1ac4b6 + docs/models/operations/get3dmodelbyidrequest.md: + id: 2f99e8fc441c + last_write_checksum: sha1:5f7b027f9a8a38c2b2c0ea07ffd7f194eeccd38a + pristine_git_object: 92e42855808beead308aec081dc13ea38b5c15be + docs/models/operations/get3dmodelbyidrequestbody.md: + id: 79ceddd59741 + last_write_checksum: sha1:9aaa2ade75e27218b65e855941a30823e93ac7ad + pristine_git_object: 43add8808b3bba05561003883082d6c3c4b374ea + docs/models/operations/get3dmodelbyidresponse.md: + id: 9787b7adf5b2 + last_write_checksum: sha1:cb7d35664c09d6e208d1b219e38149fe607ead43 + pristine_git_object: 218d5aa2520f4edbf97e05e115b10f62a049cd06 + docs/models/operations/get3dmodelbyidresponsebody.md: + id: 6eedd20e7216 + last_write_checksum: sha1:5c3dcdb6e5d2ccb8df15057c724d25bbc5895943 + pristine_git_object: d0710c29e53ca17f608668aee492ca2035721792 + docs/models/operations/get3dmodelsbyuseridmodelassets.md: + id: fbb4f4e12ba0 + last_write_checksum: sha1:7c009d42783311dfc398ee9208705e063f63de7d + pristine_git_object: 9e664e21a839f81c6d113f8f4d7c636ce746e7d9 + docs/models/operations/get3dmodelsbyuseridrequest.md: + id: 64c76e89cf26 + last_write_checksum: sha1:a29926b830eeca8ffe076e8679e60192a6620229 + pristine_git_object: e0357e0ee5a635cbaf2abf46ee97687ff5a3af61 + docs/models/operations/get3dmodelsbyuseridrequestbody.md: + id: 2590a87fce80 + last_write_checksum: sha1:2a981b3ef9b2929025862d324c111fd04159c66d + pristine_git_object: 35b6334912673d6acf69500811ad18e6b6f25d4d + docs/models/operations/get3dmodelsbyuseridresponse.md: + id: 498873baebff + last_write_checksum: sha1:7710535dc164c57b3059b82061be555a6473b448 + pristine_git_object: 3ac42ee7d7af74a63a655498bc917131b1862928 + docs/models/operations/get3dmodelsbyuseridresponsebody.md: + id: 6f7470167de9 + last_write_checksum: sha1:e6f95edc0ac6dc30b075f1b62ab62bfebdfa7b17 + pristine_git_object: 32f027aff00459ffb6e43662fa04bb624b2ba7f3 + docs/models/operations/getcustomelementsbyuseridrequest.md: + id: e5ac9577f05e + last_write_checksum: sha1:08e24927531baeab5ba234e4818926c3b874f366 + pristine_git_object: 48110814d37b55b065f7922fb6f219c4d8c2212e + docs/models/operations/getcustomelementsbyuseridresponse.md: + id: 82889109b355 + last_write_checksum: sha1:f6c3b4fa85f9f9e4f6adaa7a2bb31ee5dffc1ecb + pristine_git_object: 9cad575ad219a1f23e7be3d5961b3126c59e8212 + docs/models/operations/getcustomelementsbyuseridresponsebody.md: + id: ac0eacea3ca7 + last_write_checksum: sha1:4af4ad00e12c4921070cbc2ff65c3161d5fc760c + pristine_git_object: dbaedb2ff2e76841e2e6d30ae40de80da4423ea8 + docs/models/operations/getcustomelementsbyuseriduserloras.md: + id: 759eed1d6ba4 + last_write_checksum: sha1:8425fa602bad86021ae1906e337aadd87e494f7a + pristine_git_object: a5036bef603f178ea35cbc6429d3eb24bb0dd7d8 + docs/models/operations/getcustommodelsbyuseridcustommodels.md: + id: d110830216b8 + last_write_checksum: sha1:95cbf65676a321179761797499a427da89e70a18 + pristine_git_object: f1145081b3f1e7af67588861532bbc0547677773 + docs/models/operations/getcustommodelsbyuseridrequest.md: + id: 4a6f631519d3 + last_write_checksum: sha1:f37b0abbb0eba61219706c2d319694a5ff50b74d + pristine_git_object: 0bdd98e7b5a3b628b7e0d1648b215fb32e508371 + docs/models/operations/getcustommodelsbyuseridresponse.md: + id: 8abc4e8f11c1 + last_write_checksum: sha1:22fd3a3cf80219dd445fc5ff3b83b159c3e4f914 + pristine_git_object: cb06a7f442be97d3629eb14470ce8646a23079e6 + docs/models/operations/getcustommodelsbyuseridresponsebody.md: + id: 86ad528c0b57 + last_write_checksum: sha1:b550dbd1d2af9b1011dc00f65e15e5c8f2ce2e62 + pristine_git_object: 8665990385f9916ed1fee527c60d152048cd1c95 + docs/models/operations/getdatasetbyiddatasets.md: + id: 9de076f5c71a + last_write_checksum: sha1:f06662455a95ce2f77498b756f3d86b4a66888b4 + pristine_git_object: b6652b060d080d57da091f7ee5db6b59bb1a1585 + docs/models/operations/getdatasetbyidrequest.md: + id: d5a8447662df + last_write_checksum: sha1:f1ecc4d820bc3b33a3a87d58778d4909596914c9 + pristine_git_object: 302d8eef716afb6996ae703ad5094765c56b250b + docs/models/operations/getdatasetbyidresponse.md: + id: fc9dc7c90d1c + last_write_checksum: sha1:489546ebacffa38d271730caabeb1d650fb6fc32 + pristine_git_object: 2ee07f4061bba3ba7ddc4552588f06fe633c4bab + docs/models/operations/getdatasetbyidresponsebody.md: + id: 876c16719345 + last_write_checksum: sha1:836d4be3bbe4244b2036049eb978781fdac275bb + pristine_git_object: 4666ce261acf7dad9f66a4b0df2a3ddf0f251a62 + docs/models/operations/getelementbyidrequest.md: + id: e82c71954a53 + last_write_checksum: sha1:bb039100616724a01b09549ffe90b8dacb7d197e + pristine_git_object: ae4dc1d2b60a3deb6d4bb824490cb0cffbfdbcad + docs/models/operations/getelementbyidresponse.md: + id: 3a79ebbf8e3c + last_write_checksum: sha1:8419d4e1703357a9e25b9d6d9febf2ef544f43ad + pristine_git_object: 6a649f8d6b52ad9e484cb3cc6c08a760d89a3b67 + docs/models/operations/getelementbyidresponsebody.md: + id: e402610ba77f + last_write_checksum: sha1:8fd51903e95f324b85b9ef36f8218fc6113b1d3c + pristine_git_object: f334aba2ae7cc77a4244b1d05555321933cca396 + docs/models/operations/getelementbyiduserloras.md: + id: 595412fe5cfc + last_write_checksum: sha1:ff382e3fef349176420b7309c10fa3049d8332b8 + pristine_git_object: 9e27aa64b21f04dd3ae2dd15eb857dffb5679260 + docs/models/operations/getgenerationbyidgeneratedimagevariationgeneric.md: + id: 9c6352762df4 + last_write_checksum: sha1:65e05d3a7d2427de62ed8bec974e01c6751164a9 + pristine_git_object: bf7bcc6b9e294998e76274d19a81e05bc929d337 + docs/models/operations/getgenerationbyidgenerations.md: + id: 6f63c5fbc637 + last_write_checksum: sha1:dbc1f565ecee5ad8710fba514abb77ea8b726de1 + pristine_git_object: 7d5930f10e40a6de77aea109f493b92d2584ae1d + docs/models/operations/getgenerationbyidloras.md: + id: 967418dea7c7 + last_write_checksum: sha1:d05e44fd754953849643284370af4fb0718fbcbd + pristine_git_object: 0b4a6a1c5cd952da211f258579628f3ec93bf58b + docs/models/operations/getgenerationbyidrequest.md: + id: cb9a543a571c + last_write_checksum: sha1:709794b9795a9bf5534d755c5b201527a978145b + pristine_git_object: 0460c72a420423ecda3b03c4a1c41913d9d67218 + docs/models/operations/getgenerationbyidresponse.md: + id: 5d3e8057ddaa + last_write_checksum: sha1:9a4be8a7cf7085548a7c2db925af4168be85dd2f + pristine_git_object: e3b28ae9c24e313fefd2ccf8cdf929c40353ea7c + docs/models/operations/getgenerationbyidresponsebody.md: + id: f5e601b1a627 + last_write_checksum: sha1:cf35da5ed053b8309cb7351c00301634760a1071 + pristine_git_object: c963f44eed1f3d6a10fd67390209e9bd7112ab1b + docs/models/operations/getgenerationsbyuseridgeneratedimages.md: + id: 2b6d2d9ba907 + last_write_checksum: sha1:53ad47d231e81de0878c6e152659cb70dc66412b + pristine_git_object: ceff2ec614bd70a2b05bdf6edda0ce39a8714859 + docs/models/operations/getgenerationsbyuseridgeneratedimagevariationgeneric.md: + id: 7c35f3ef0161 + last_write_checksum: sha1:88d9c132a07764b0754a1f6838c24a5aa42b6ac7 + pristine_git_object: 899eeeb7f7afd69e317a5028e75fbd8c669a5e72 + docs/models/operations/getgenerationsbyuseridgenerationelements.md: + id: 92733a008554 + last_write_checksum: sha1:de4fcead9b8ee6d0b79ad1f58758e5afbd88a380 + pristine_git_object: 3d2d6e7ba025bc1825c9af31e8a4ce7e147a5374 + docs/models/operations/getgenerationsbyuseridgenerations.md: + id: beab9315cf90 + last_write_checksum: sha1:d5e2a4596068dbc7748d0708ea1d20aa08bd471b + pristine_git_object: 7768031f7c6fc3888cb49e9d8d156a2c35e0d82c + docs/models/operations/getgenerationsbyuseridrequest.md: + id: ec254493effd + last_write_checksum: sha1:2bf6213a3b7df1f2734b0c435fbb8b367b135d15 + pristine_git_object: 700e6676f19fe7cbc3e71debb93c9a37919f527d + docs/models/operations/getgenerationsbyuseridresponse.md: + id: d7084c59cf42 + last_write_checksum: sha1:3af4fc95f95f7657bd486a72ac12d16c9df27d4e + pristine_git_object: 93008c74e547cbc655007d69298be30e97a7da0a + docs/models/operations/getgenerationsbyuseridresponsebody.md: + id: 81c111dfd42c + last_write_checksum: sha1:94058c461635d3a449ccba39569e5f69ece6d0fb + pristine_git_object: 346020dcad8f807c4d83945b36bf3a1678fcfc15 + docs/models/operations/getinitimagebyidinitimages.md: + id: 0d7b908927b0 + last_write_checksum: sha1:a48a74022e9d6efe69ffeacc5bc2e6a817cd56f6 + pristine_git_object: f055c4c65eaf20e6df6718cc41f989edbbf94023 + docs/models/operations/getinitimagebyidrequest.md: + id: 34a78b90b9bf + last_write_checksum: sha1:646cb1b58872918a8d02e47cd3cb6f9d58087a78 + pristine_git_object: 5ec121fb2a83450042706ab3b9c361ea78d7c4f8 + docs/models/operations/getinitimagebyidresponse.md: + id: 689f056c1075 + last_write_checksum: sha1:cf02d36f4e44535eadf03f12c36363937d8dc369 + pristine_git_object: ba01b30f3e89946a21ce02314158d29a70c4b839 + docs/models/operations/getinitimagebyidresponsebody.md: + id: 64f569c145cd + last_write_checksum: sha1:ba555402ab5460c308df125b1bbdc8ef91a6a102 + pristine_git_object: dadf9ae8cb46eda61f13dc393f4a7aa5949028b3 + docs/models/operations/getmodelbyidcustommodels.md: + id: ecd331e109b2 + last_write_checksum: sha1:2b7886fbc73478727b8775013080c736baab71a9 + pristine_git_object: ef3618d9519dc91955644b246cf0f05d35cb0be1 + docs/models/operations/getmodelbyidrequest.md: + id: bd7dd481c108 + last_write_checksum: sha1:6174fab8cce47a3830e6e26b3128cf239e69d9a4 + pristine_git_object: 9f3c9984d96893de0657b521c1f7c4a548501bb6 + docs/models/operations/getmodelbyidresponse.md: + id: c610b22e8be3 + last_write_checksum: sha1:28b71a34ca1979e4bb8ee7a9511498262c5d53bf + pristine_git_object: a9b2b5832246914df227553d2d336c070162ea9b + docs/models/operations/getmodelbyidresponsebody.md: + id: 49d1982d754c + last_write_checksum: sha1:e93c822864dd35249270d4fad49cf1b414fb2667 + pristine_git_object: a21bcd6c2588d7ee91f15d29bf2d1d3e1682d922 + docs/models/operations/getmotionvariationbyidrequest.md: + id: e9243c4837cc + last_write_checksum: sha1:51bfbf7cef726fc402c6f47f64ce5f63f72ec52e + pristine_git_object: c26db13a270acd2579360e5b444e513162f98ef3 + docs/models/operations/getmotionvariationbyidresponse.md: + id: e6c333c66f72 + last_write_checksum: sha1:61dc2a29cc5146728ccab241783a4a9366f0f6bc + pristine_git_object: 6c401dd07f9326f80dea5471aecf1e6f58dcfd2a + docs/models/operations/getmotionvariationbyidresponsebody.md: + id: c261492ad1d6 + last_write_checksum: sha1:20668d790093e8858feb1ec2489da29c000f91f7 + pristine_git_object: 294a6fdc5c95afb4eaa1d7542d1f01875808d768 + docs/models/operations/gettexturegenerationbyidmodelassettexturegenerations.md: + id: bcf1850a2016 + last_write_checksum: sha1:1ab42bca66ee0cb5aa2dcf8d4200f7a8a18cd076 + pristine_git_object: 5c6e5f7d79d6a5c10d971a5be73cde0fee86f5d2 + docs/models/operations/gettexturegenerationbyidrequest.md: + id: 14da353e9c38 + last_write_checksum: sha1:19fe7da070dffe39e80debcdb3e2e52f73fb1dba + pristine_git_object: 6387b0183afd15eafe76f6b51add241eea565963 + docs/models/operations/gettexturegenerationbyidrequestbody.md: + id: 6b2450cb0b3d + last_write_checksum: sha1:612d8dbc08fecb54fc71c06919c75b098c4dcef5 + pristine_git_object: 60b6ef4f4dbaa8368392ded4fecc7fe98762636c + docs/models/operations/gettexturegenerationbyidresponse.md: + id: 719d05398578 + last_write_checksum: sha1:87b9bf6beca31697d9fbadae502931f50472d265 + pristine_git_object: 624ca355e8566546aef3bbf6abf4637297dbea7f + docs/models/operations/gettexturegenerationbyidresponsebody.md: + id: 7e3366568770 + last_write_checksum: sha1:b99ede66e6cadb200f551f0395c29428622c2c34 + pristine_git_object: b1313273d69b84d807245e71577a2bccab304844 + docs/models/operations/gettexturegenerationsbymodelidmodelassettexturegenerations.md: + id: 0cc2fa334383 + last_write_checksum: sha1:1c2ec5b3accd5b5f83b25fec4c870d62395a0b80 + pristine_git_object: 399bce6817bc2eea7b93627f7447c5b40051ede4 + docs/models/operations/gettexturegenerationsbymodelidmodelassettextureimages.md: + id: 194cfbac6cc7 + last_write_checksum: sha1:2c64473cd95f461ee3ca43f77e7396523f2381e1 + pristine_git_object: df9d66b3fd51e938d159c76d8379be58d3ca2d17 + docs/models/operations/gettexturegenerationsbymodelidrequest.md: + id: f356f0090213 + last_write_checksum: sha1:440a5f9589a4d1af282f25930019d710419eba15 + pristine_git_object: 7e9613856ac124c13d3d85e5a50ff560b33eae2a + docs/models/operations/gettexturegenerationsbymodelidrequestbody.md: + id: b202692b9e52 + last_write_checksum: sha1:17eb7c6ecc8cd32835b2e6187d8fae45d985f086 + pristine_git_object: 2d9ffcabb94b5d178c044156fb216392d28c0b25 + docs/models/operations/gettexturegenerationsbymodelidresponse.md: + id: 91e3bcf4820d + last_write_checksum: sha1:cf9f620034113382adbb072be242acb2594f181a + pristine_git_object: 3a7930c2afb68ce9010129e11dec71488aa3bebf + docs/models/operations/gettexturegenerationsbymodelidresponsebody.md: + id: da1570ddf791 + last_write_checksum: sha1:0dd18dc9dc06d39567eb68ef32c38485dbd40097 + pristine_git_object: b6b2593212fec46fac8c6f1388cbac50ff329d78 + docs/models/operations/getuserselfresponse.md: + id: af8e4f436502 + last_write_checksum: sha1:cb702201e99444b9fa531947573ecee1c3971222 + pristine_git_object: dc8676d8d28ed6e9c5b2da9aea9fff997973a03e + docs/models/operations/getuserselfresponsebody.md: + id: 995c522c6053 + last_write_checksum: sha1:ceb67a38d1d358aa08e9f08f1b657e50d22e3a8f + pristine_git_object: b024669a31386af5178d1de379d3936ece63f728 + docs/models/operations/getvariationbyidrequest.md: + id: 49a185c59d44 + last_write_checksum: sha1:28f1e7a449a2401e89b7720f828b97b2983c61fa + pristine_git_object: d2afc4615fa1a7655b2e9dbe92ffbe0109ef1dd0 + docs/models/operations/getvariationbyidresponse.md: + id: 82b79646c018 + last_write_checksum: sha1:e336a9ca1b2fae7de71ff0c9a268aa06deef7c34 + pristine_git_object: 2e87cb255c1b9e707a5c8fa0356495e843c7cefc + docs/models/operations/getvariationbyidresponsebody.md: + id: 091cebaa4a6e + last_write_checksum: sha1:3277665a9b2ed5072f90c1791fb9bbd8ad7e5701 + pristine_git_object: 31a7dd473ab97ae3a2577ade8dc8736bb132a842 + docs/models/operations/imagetype.md: + id: c995e88b2b4a + last_write_checksum: sha1:d0e4dad0280c3861f4bec5f70188e9383881212e + pristine_git_object: f3ff2bddd998f53660a9c4b0690dc1d87c606ae4 + docs/models/operations/initimages.md: + id: 6b87b56b7ad6 + last_write_checksum: sha1:74756e787f420716720753530b59a239b5473eea + pristine_git_object: cf48c8471f5fd42f8bd6e8ab6ba0d00810aa6868 + docs/models/operations/initimageuploadoutput.md: + id: d7707b0fea87 + last_write_checksum: sha1:b14a26ad4712637e1e03687cce3f8c042cabaaa0 + pristine_git_object: 2c3d22969baae6b4b25308beea7e2d9091ec0204 + docs/models/operations/lcmgenerationoutput.md: + id: 69faa8442177 + last_write_checksum: sha1:a6c3b8cc98fbf72b7912222ef659906858c230f3 + pristine_git_object: eb6f42b8fe0121454fe361a710a292a95fc00d80 + docs/models/operations/listelementsresponse.md: + id: 202c7ca1d580 + last_write_checksum: sha1:3c136d06d29d1e3650cf8c1721bea6d3c09d4d52 + pristine_git_object: bce10f4dfae6e18b43a47421183e2bdc023d870f + docs/models/operations/listelementsresponsebody.md: + id: 2eb8d22b19a7 + last_write_checksum: sha1:4e42bc79bdde9d785547cffe42ba080e868ac1c3 + pristine_git_object: 815a567eda38a8b59ff6994bbbd58a35d23c669c + docs/models/operations/listplatformmodelscustommodels.md: + id: 115d7111f15d + last_write_checksum: sha1:bd77780fb3085f5be2ddd636374c7983c8dc7489 + pristine_git_object: cf38081c9ef8da327674e60d75ab9924cc699108 + docs/models/operations/listplatformmodelsgeneratedimages.md: + id: 08fb24410197 + last_write_checksum: sha1:67735af0dda046614ac8b960b8aa376eae6b9460 + pristine_git_object: 18d3725c07d607bc12d486f6a683929bf796e157 + docs/models/operations/listplatformmodelsresponse.md: + id: 8aa3f4c05389 + last_write_checksum: sha1:3566d023944a265cc72399c1d59b3b3b7950fe4e + pristine_git_object: 8bad2f82a84c5c878dedfab2f127bf4f284b0991 + docs/models/operations/listplatformmodelsresponsebody.md: + id: 81e3dad37d9e + last_write_checksum: sha1:62842b64c7f7b97ecfc997e64785c631fa38c696 + pristine_git_object: 2e5150127a48f8c9f175c94837f406597ae9c32f + docs/models/operations/loras.md: + id: 26f16bace48c + last_write_checksum: sha1:7f29a6815782e5ec772b06e3443ef8ea90162c99 + pristine_git_object: 6f3f5768f86a2df14403858a5014810811fe08cb + docs/models/operations/modelassets.md: + id: 97e0f8165f73 + last_write_checksum: sha1:a7b5d6899e18a28bedb19688ce6bcb2b32eed0a5 + pristine_git_object: 4005c69bc0278ffa8121ba149e793e812dca9865 + docs/models/operations/modelassettexturegenerations.md: + id: 050680d6c461 + last_write_checksum: sha1:5ca1379e53b086c4c2a6e4fdb8582a20b5246604 + pristine_git_object: 1655c0c3a3fba3365eb35dcf7719c3a9d14ab159 + docs/models/operations/modelassettextureimages.md: + id: a14500dae268 + last_write_checksum: sha1:c732ebb21581c8c0b7f29e75c8961f001fa5843f + pristine_git_object: 385e2563ffaa30eab0d36c1c1f4b8b48dce8ddba + docs/models/operations/modelassetuploadoutput.md: + id: c26d8607328e + last_write_checksum: sha1:7d0378af36e6f0809dbed37f4c304aaa2f34d37a + pristine_git_object: 38195a182b3940d405cb3d682756cb762784d337 + docs/models/operations/motionsvdgenerationoutput.md: + id: 4bb44f8ce431 + last_write_checksum: sha1:1b06c76bb1bc681d385822508e45cb14fa16243d + pristine_git_object: 11b2e6b2382813422edc70e65e1aa5413c98a095 + docs/models/operations/motionvideogenerationoutput.md: + id: 3098e5febdd8 + last_write_checksum: sha1:59cd96062fb54928eb5ad3d8bc12a7944b0b0d16 + pristine_git_object: 262fe0f751f6e0eeed81e9b54487749e1e61eceb + docs/models/operations/object.md: + id: 1ca5f9e973b6 + last_write_checksum: sha1:f3f6d748b2b8b13c73080711859717700bb0a49d + pristine_git_object: 2581c88a3c7492424a8afcaabf0452ba13ca52b8 + docs/models/operations/performalchemyupscalelcmlcmgenerationoutput.md: + id: 4e8accfe8f12 + last_write_checksum: sha1:843c4e7d81fc2ced8823ac25a006724e82c31304 + pristine_git_object: 8f17d3021d8cea29f26cd336b02d602c4ac8a5b6 + docs/models/operations/performalchemyupscalelcmrequestbody.md: + id: 1dde06bd4e31 + last_write_checksum: sha1:b730ba275be7e70eb665e57dcc309f6ff784699a + pristine_git_object: 983d1bc4f6997c16c193592870a3c9097bd259c5 + docs/models/operations/performalchemyupscalelcmresponse.md: + id: bec2ed2dbd14 + last_write_checksum: sha1:69197660a33c0cc65deff97e63352490d90e67e4 + pristine_git_object: bae3b3defd94782be2f489618d0e4f3d66db8e2e + docs/models/operations/performalchemyupscalelcmresponsebody.md: + id: f62568ba69de + last_write_checksum: sha1:ec739fa6ed2ecbec5288f64de6458a0f151d5d86 + pristine_git_object: bd12668d9daf8f4d9a444ff1996ca59a45dcb46a + docs/models/operations/performinpaintinglcmlcmgenerationoutput.md: + id: fda6aaffd274 + last_write_checksum: sha1:8fb37a75a1c2f10ac29831c12908938696a92d39 + pristine_git_object: 4a75e9534f781641f88b6f23a05eacac2a833daa + docs/models/operations/performinpaintinglcmrequestbody.md: + id: 82916e7ed7cf + last_write_checksum: sha1:e0fc2b63ab93a4480021880f52b7ff135d10cd8a + pristine_git_object: 57ded138f8c6f7d61d84b10d1018c515f5d76f4a + docs/models/operations/performinpaintinglcmresponse.md: + id: 30e179f35999 + last_write_checksum: sha1:ca51192c9de2690eefc200c7459655feb7eb4345 + pristine_git_object: 09c0548e94b2d925c3de5dcfebb38bc486ebf9c6 + docs/models/operations/performinpaintinglcmresponsebody.md: + id: b2100cf08890 + last_write_checksum: sha1:3147a4101c1d6e11dbc470ff008d5a97caecbc4d + pristine_git_object: 9d21ea41abbf74db93e618aef62340abbbbcfbe5 + docs/models/operations/performinstantrefinelcmgenerationoutput.md: + id: 598fda4d5f75 + last_write_checksum: sha1:417aba2afe2cb66f6f5a87bff53920acf798b707 + pristine_git_object: 1521b395e036178030fc5cb00c9fa0a8c7a8068f + docs/models/operations/performinstantrefinerequestbody.md: + id: 5901db79213e + last_write_checksum: sha1:3ce79e4ab314feed0f55a621be81f030f5b6117e + pristine_git_object: a92758f01dd397155b8117b21c411a604d38c47a + docs/models/operations/performinstantrefineresponse.md: + id: b2894f515f63 + last_write_checksum: sha1:e64f57dfa73ea12ccb74b4e8e7c6d4f74b9b9dad + pristine_git_object: 67e7ba0b90a462f033d062864663da2669c68d44 + docs/models/operations/performinstantrefineresponsebody.md: + id: 144de67549f7 + last_write_checksum: sha1:774504ea0645d862be9d2001d902b763f6b4c2db + pristine_git_object: f06b5faa7a14fcf4c8b6e6a310825691783f9ef7 + docs/models/operations/pricingcalculatorobject.md: + id: cec14cc40c71 + last_write_checksum: sha1:18286c5f17a235f925cf89e20c563c80b150d18f + pristine_git_object: 2b1eb2c0fb315a004a01057b4721561dc4395f28 + docs/models/operations/pricingcalculatorpricingcalculatorobject.md: + id: 8aad157becc2 + last_write_checksum: sha1:0201d93791acbb3d4c9b58b467a758cbf20f2833 + pristine_git_object: fe8620d32192fcc2964c5db45e4c02b82acb53f4 + docs/models/operations/pricingcalculatorpricingcalculatorrequestobject.md: + id: 9f094c79f2e5 + last_write_checksum: sha1:b60de04d7368cc4a5df2b2a4e3d856deea6d531f + pristine_git_object: e64d64424f745a04f68f2da0d59d4be80c4257b2 + docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyobject.md: + id: 461e628e6253 + last_write_checksum: sha1:3ab63ff0caab049a9f2ecca6d8571ffd3ca9ed38 + pristine_git_object: 0577ea54961d359142dcb17743449050cc4b59e6 + docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsmotionsvdgenerationobject.md: + id: bff6eaad30b8 + last_write_checksum: sha1:8dd45d9500965bf8ef7f414aacf6c52173c13324 + pristine_git_object: f62a71add45a3edc3943d7711cbdc787e26c50a9 + docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsmotionvideogenerationobject.md: + id: 97019dbdd93d + last_write_checksum: sha1:603bba727a5402fd1f5b2b214570824ed3dd7a13 + pristine_git_object: 96961b696c1949c37b9592346f7e777bc3a31e3d + docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsobject.md: + id: 28aa828dbc93 + last_write_checksum: sha1:1c7e29ab6bf998b43b49d5fc5183a8d459085446 + pristine_git_object: 3e9d09cbe6b2c5cb7f30b29d3ef8e809035f4586 + docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamstexturegenerationobject.md: + id: 86a9a972b247 + last_write_checksum: sha1:3690a49b2c4bd2b8b3548bde96a0a0f7a976eb42 + pristine_git_object: da6751584dab83bb671d67c71389ad0bdbf0f989 + docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsuniversalupscalerobject.md: + id: c234b322bfbe + last_write_checksum: sha1:780aae848c1c018179585b8641b77914bd95755d + pristine_git_object: 2e61274050f586e23124f8ab87a57116565e3981 + docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsuniversalupscalerultraobject.md: + id: f5b847be3ad3 + last_write_checksum: sha1:4d8bc4a676143ee0b66dc3dd0748a1eed9961c2b + pristine_git_object: 6040bb39c66061a15576ca62da06bf5a7e059408 + docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsveo3motionvideogenerationobject.md: + id: f3d48cae7208 + last_write_checksum: sha1:5c40f67b6ebea407d4e3939b260e0d604bc50223 + pristine_git_object: 47d72a6ef68e9b9e83bcf6567c964ff9be5fa12a + docs/models/operations/pricingcalculatorrequestbody.md: + id: 1b617fc9108c + last_write_checksum: sha1:65a84cb46527bd034d7980813e5b86eef2c11054 + pristine_git_object: 1a383368f53e924dc627aa44f860a433e386cb44 + docs/models/operations/pricingcalculatorresponse.md: + id: d158df323388 + last_write_checksum: sha1:16baf82addaaca672f9113a8103ba2859f852322 + pristine_git_object: 9d24d3f684cc3b1b0f053da6d87a37b2d2347cb4 + docs/models/operations/pricingcalculatorresponsebody.md: + id: 257126c8e440 + last_write_checksum: sha1:ddaf26f1e2a46067174127171ece030d813251db + pristine_git_object: e1dba6071f11cae5e670cf42fd279eb69317f3cc + docs/models/operations/pricingcalculatorstring.md: + id: 212f6b2a237e + last_write_checksum: sha1:7b7156ea97ecfb3054c9314f540ef0dfba836bb8 + pristine_git_object: 205ccc6b0a261c2b2aa2f6ad101e9079f622c926 + docs/models/operations/promptgenerationoutput.md: + id: 481d569620e0 + last_write_checksum: sha1:d5422364eb1ee68559c888550a6718d3c152584a + pristine_git_object: 5320f414d8b8496e12888b81acb3dc34d1fc42bb + docs/models/operations/promptimproverequestbody.md: + id: ce3ff9b2119d + last_write_checksum: sha1:74b4f87ce5eafd47d86ad12b713176a9d74e5291 + pristine_git_object: 58f9c5bf9e75a51ec7154a77ac820c71522a9c25 + docs/models/operations/promptimproveresponse.md: + id: 65342e58b083 + last_write_checksum: sha1:c0c6b100bab2c30e76f66ee9e61645e133bfac2e + pristine_git_object: d9d48e8311a3ddb6fd78c4b7727bc35da19c42c1 + docs/models/operations/promptimproveresponsebody.md: + id: 642764297cac + last_write_checksum: sha1:627ee97d0e4b3ac00e6e40453c5425b18ea06232 + pristine_git_object: e84baaadfb2f687f761c3d9cdf19436bf4709fac + docs/models/operations/promptrandompromptgenerationoutput.md: + id: 9b91cd7e8d51 + last_write_checksum: sha1:6a3773ba5763b3a9cbcdab9001d154333459d74a + pristine_git_object: 50b76fcdf0eb1db25407aa8c5769487210ee2023 + docs/models/operations/promptrandomresponse.md: + id: b0de02e22ab1 + last_write_checksum: sha1:98ae2bd484a9b5e18249274c7913be0639d60e47 + pristine_git_object: de2af16b411698970a00bd40c4ce8f3007257295 + docs/models/operations/promptrandomresponsebody.md: + id: 9824683c2d7b + last_write_checksum: sha1:2f72d10b973021858c664678f093edd57a94c86a + pristine_git_object: 50f8ebc98fde1792cacf8013e720c47b718dd26e + docs/models/operations/sdgenerationoutput.md: + id: 9da258f88eef + last_write_checksum: sha1:ae88938b7e85553211fc591a5a07129938d75233 + pristine_git_object: 237785bba5485d822a5f04254c87e8e3a7e6d2c5 + docs/models/operations/sdtrainingoutput.md: + id: 94f947f33646 + last_write_checksum: sha1:a44fd7231a6ba296d143ba868e1e73fbe3ecd951 + pristine_git_object: 0348473d0e7258e04db34e38bdf48843c045acf6 + docs/models/operations/sdunzoomoutput.md: + id: 5a3e4911a45c + last_write_checksum: sha1:6f74b17ee6aed0face99b15dd1f1ca46eb3fb572 + pristine_git_object: f29355750f5547d256c8e1ebc1396465cd921224 + docs/models/operations/sdupscalejoboutput.md: + id: 76c3e546b00a + last_write_checksum: sha1:453e7f3f339fd73c530cf866ad78ce65a867cca6 + pristine_git_object: 76e29bd5f9bcb750e8edd237dac83c5ffc811e43 + docs/models/operations/sdversion.md: + id: aeedac83285a + last_write_checksum: sha1:ac2cdb5d155ec84c80eda4402d02f239e01a4f82 + pristine_git_object: 01967eb9080a5a5804f349039457e913816ea7f3 + docs/models/operations/sdversions.md: + id: 00e5f434aceb + last_write_checksum: sha1:bf04a2ed9b5fe910b616adbaf67d06e412664363 + pristine_git_object: 244d34c7dcd2a0d804267faf8d7466f85903e0f8 + docs/models/operations/string.md: + id: 478acf9bd0dd + last_write_checksum: sha1:e52af60fe991920b4321f669e8448781b8c70f5a + pristine_git_object: 71741b580a43e9cf7be074030e69989f17c100ec + docs/models/operations/texturegenerationjoboutput.md: + id: fddbefe2a2fb + last_write_checksum: sha1:7708e29dfa08e40636b3aceccf9d78501514dcb7 + pristine_git_object: c3213bffc1b519ab89972ef325ead2263cc41b04 + docs/models/operations/transparencytype.md: + id: 9f06a513bbd4 + last_write_checksum: sha1:f80034144ed313cfdbab9850eb1baa11777495ef + pristine_git_object: c97e249d9dc466c1555e36abc6841d75185d06ec + docs/models/operations/universalupscaleroutput.md: + id: 0145b7d48e1b + last_write_checksum: sha1:a534b3099616503df037a90cf5af2e0c183d5cc0 + pristine_git_object: 8efd39b147d807598405df4c749b2a6184f7081d + docs/models/operations/uploadcanvasinitimagerequestbody.md: + id: 86ea8d34c639 + last_write_checksum: sha1:941c785494d690e6ca17a0d1d0a8ff60c431f9cc + pristine_git_object: ca95af9817ff3a01141d93659d1b2d1ce8718c82 + docs/models/operations/uploadcanvasinitimageresponse.md: + id: a2b79049f737 + last_write_checksum: sha1:0761127b279ae445e5b2767235e1544ec8a67443 + pristine_git_object: 1401b3b17224e590678e772b3a082dd9b972ec8d + docs/models/operations/uploadcanvasinitimageresponsebody.md: + id: 4ff0b05f598c + last_write_checksum: sha1:661d57bcf5c1b5e26bde6e6f1f73b54fb032821f + pristine_git_object: 3e351661dacc1b0bf4c97b50c891ee66d85ca62e + docs/models/operations/uploaddatasetimagefromgenrequest.md: + id: a5baa58ab3dd + last_write_checksum: sha1:08caf86c9f41079d08f8452b0d75c499555d13dc + pristine_git_object: 238173956a1d2f9c6752e51f971751f2879bb7fb + docs/models/operations/uploaddatasetimagefromgenrequestbody.md: + id: 77e8fd1cca66 + last_write_checksum: sha1:6e3dba2bb9f1d12d6d83e8db237c2670d4274cd6 + pristine_git_object: f64e64d3068878a57ff693a0f4926c65326958ed + docs/models/operations/uploaddatasetimagefromgenresponse.md: + id: 9f8563bb7ca1 + last_write_checksum: sha1:28afbf1cfb2b0e9aba11088df088cc48d6c45b4f + pristine_git_object: d02ab56d6e209a9805cdb3c9768f124731f3de0d + docs/models/operations/uploaddatasetimagefromgenresponsebody.md: + id: 9e67cb4801aa + last_write_checksum: sha1:7746a2cf36fca7fe93a264eec26c0d148d78126e + pristine_git_object: c6bc8f54ac18e56ab86c1ea516ed45200a939cba + docs/models/operations/uploaddatasetimagerequest.md: + id: c05134c1b7e4 + last_write_checksum: sha1:4c0f1234d376f98d41d7867431b2a6e3d168583a + pristine_git_object: 34e59190dcacf98b1b23525ae95b431c7f489071 + docs/models/operations/uploaddatasetimagerequestbody.md: + id: e32cc6d3b216 + last_write_checksum: sha1:e7b80d7da21659ea6c279065ad320f5c5c9af015 + pristine_git_object: e268ccf9eb194d9307743c61a163fd626302424c + docs/models/operations/uploaddatasetimageresponse.md: + id: a8c1c18d045e + last_write_checksum: sha1:b7f7a730c0ca0b7c6ae95059ec7ca14d8563eb27 + pristine_git_object: ef18129cc577dc6fe5221f602c960f96d0c5ccdf + docs/models/operations/uploaddatasetimageresponsebody.md: + id: 725910dd0d89 + last_write_checksum: sha1:6d8f2e431dcff4adbf047c04b8cd36f6c318aecb + pristine_git_object: ca57efe4e7fb0dcfde7e9f05552e78144a1c30e6 + docs/models/operations/uploadinitimagerequestbody.md: + id: cf6fe88a65dc + last_write_checksum: sha1:fdca2acefd0f0c6ceebce8930eed611a005e9fb0 + pristine_git_object: c07266eb9df87ef62881b4689b217d372efd9188 + docs/models/operations/uploadinitimageresponse.md: + id: 3420df47d198 + last_write_checksum: sha1:5b70a9d4f3bf3ac631532159425149dcaa4d127e + pristine_git_object: 9d09740aedb7831883809e892ab7b2e95784c1f7 + docs/models/operations/uploadinitimageresponsebody.md: + id: a4eb71042889 + last_write_checksum: sha1:1bc6fd2258330d34ad9467058774989bead1d1ed + pristine_git_object: 1ed8141682e3b64b9dcb7b67f10cdc62b3a42326 + docs/models/operations/uploadmodelassetrequestbody.md: + id: eac12cb04473 + last_write_checksum: sha1:28c7c0802af014cbcc87af5a5498ede0274e6beb + pristine_git_object: f164e7d27d949a9b0a6f44cdb23d87ed57f12b47 + docs/models/operations/uploadmodelassetresponse.md: + id: c997169a92a5 + last_write_checksum: sha1:fefd60728e0bac995ecbf665c15a0c73f1278202 + pristine_git_object: f7125fbb5fe7adbeed6e7895de7acda2412908c7 + docs/models/operations/uploadmodelassetresponsebody.md: + id: b53052cd449c + last_write_checksum: sha1:34abdc4a880bdab552c600295017a450ea450c94 + pristine_git_object: 1822cd890207eecdcaa8afaa3da8dfb445cf4458 + docs/models/operations/userdetails.md: + id: f767a8493192 + last_write_checksum: sha1:468323f23fdfd3e9396f15daf6216babd35bfc44 + pristine_git_object: 973890fff1cc396134f22634845ae8c934a69896 + docs/models/operations/userloras.md: + id: 092a41954adf + last_write_checksum: sha1:a52deb73f7e33a9cba3d8fe60c731e722be66cbd + pristine_git_object: ec16bd40f174c002f5147df4f29891ee949b3908 + docs/models/operations/users.md: + id: 266c84d9837e + last_write_checksum: sha1:f9fd93bdb27cc66560437c846fe7fe765012a9f1 + pristine_git_object: bb1ee0b194e62e9b2ad9ac759aba698e910f3842 + docs/models/shared/canvasrequesttype.md: + id: 2a460c5ae2a0 + last_write_checksum: sha1:fe71f3336eef16f13f523407309301a2806c4589 + pristine_git_object: 6bb36e7aa4c7547ebaf2c5f3cc8c4e19d1a0a0f0 + docs/models/shared/controlnetinput.md: + id: 3ab2237abd0c + last_write_checksum: sha1:f1d98751811da6c40998a2c096b94871a8f06f81 + pristine_git_object: 382972236815675bd9068652901154a299d5b0cc + docs/models/shared/controlnettype.md: + id: ad0722a2cb8a + last_write_checksum: sha1:ae8c5b8692782725e9d2afa8559422552d83e65f + pristine_git_object: 7dc0dc383b2e302962696b80e7063affd56abe58 + docs/models/shared/custommodeltype.md: + id: 0879b59a214a + last_write_checksum: sha1:34ab7c7a3f4d7f37e9663af3d3d96a304467fab2 + pristine_git_object: 005d047c174f662a094ab65138ab189bc20df4fc + docs/models/shared/elementinput.md: + id: 2cc1f71720e2 + last_write_checksum: sha1:05a76b6ade653a6f9c316ec2d88a96c5eaa31261 + pristine_git_object: 0dd2e81382e85d88e4b62c6b527ecc8bcb4a513c + docs/models/shared/initimagetype.md: + id: 180ec8722821 + last_write_checksum: sha1:9dbbbf0886a747e30885c0378c032ebbde242522 + pristine_git_object: 37601610d0c1c751969c6341a1d94593af702fbb + docs/models/shared/jobstatus.md: + id: 94fff3c6f31a + last_write_checksum: sha1:568a2c67d1c26bf89ce6be3f06f079cc3830b7a2 + pristine_git_object: 5248e7fbd11e3d440b0110f6f632966401069f0c + docs/models/shared/lcmgenerationstyle.md: + id: 23ddfba7fb2e + last_write_checksum: sha1:6327d5b24c4fe87640047a10036cbb353951b424 + pristine_git_object: 93a8d52dd873f28e7980ecd2562257cdcccc2f2e + docs/models/shared/modelassettexturetypes.md: + id: 38c8719bcf7d + last_write_checksum: sha1:bef02e1517157f256adbbc95e2416d9e66d68ce5 + pristine_git_object: e21fb57842de3db339c32125789d59dd229fb58b + docs/models/shared/motionresolution.md: + id: 40ab96891e23 + last_write_checksum: sha1:bcfca9505b6610ab4362fe6ab0a51331fbbcc0f6 + pristine_git_object: 17f9b578ec9247458a799be223f80e063cf31a63 + docs/models/shared/motionvariationtype.md: + id: 7485fa1a8a61 + last_write_checksum: sha1:bf43fe1a54bce869f1756a4b9468d226d211b9c4 + pristine_git_object: 10aefe3f948be7e170fd513a6b936d437aa48a7a + docs/models/shared/pricingcalculatorservices.md: + id: 42149c474c7a + last_write_checksum: sha1:0af74b7f4be4b0b361f4988c2d5b5bdcad096c24 + pristine_git_object: b32162609a5dc00f55237da851956d5420d82c36 + docs/models/shared/sdgenerationschedulers.md: + id: 948a29617535 + last_write_checksum: sha1:f7e8fdaf79f9d19dc234caba6e68b507e34b4966 + pristine_git_object: 4606699fb68d174426179c0e7f12a7c6eff143bf + docs/models/shared/sdgenerationstyle.md: + id: 37329a656c59 + last_write_checksum: sha1:69e6c94f11ccbac0a2f8c26a6caf64c6620b436e + pristine_git_object: 6dbe8407abd3cbd3227a362d1258b205c349c23d + docs/models/shared/sdversions.md: + id: 1da14c81e069 + last_write_checksum: sha1:67151faeca53e03a08ecb3738aed2108b6dcfda9 + pristine_git_object: 672cf926e9bdd11b15097407d65a88833fcc0595 + docs/models/shared/security.md: + id: 3035c5c37727 + last_write_checksum: sha1:745572e344516e941da7093c8bdf34061fa9e292 + pristine_git_object: f218fa1efc4f957fa52215140d475e7b2758128a + docs/models/shared/strength.md: + id: f7e396f283f4 + last_write_checksum: sha1:caaf3906ec1657508cdb63ae22f836824a56ebdf + pristine_git_object: ec58567f5f63b2265b1dee6f6058050565ca9030 + docs/models/shared/strengthtype.md: + id: ddf9d11190a3 + last_write_checksum: sha1:40db9250b1168e32694e93b8cce7a18189ac72e4 + pristine_git_object: 5a9d1283a510adfef736f8f2ffa7583b3adb8da8 + docs/models/shared/universalupscalerstyle.md: + id: 64703774e6e9 + last_write_checksum: sha1:cd8b819f00b7533af1764d85641edd962cb78cc8 + pristine_git_object: 2c1ca515ef026dc409dea8e8f2271e2a578ed31b + docs/models/shared/universalupscalerultrastyle.md: + id: 125efad3822d + last_write_checksum: sha1:76953522880f19783e175de0762437c48b3cd830 + pristine_git_object: 1c7b0c6ce0a0b6bd2e2899f76ca254d2a0d381df + docs/models/shared/userelementsinput.md: + id: 095d08ef6e26 + last_write_checksum: sha1:eb72847debff8ac447c8cbd3642b32144f609ceb + pristine_git_object: 9ef1100dc93f06685e8fb491b9f42f246be9d326 + docs/models/shared/variationtype.md: + id: 4554fb2c1aa7 + last_write_checksum: sha1:7343f4a03b10ff1896907f58a1abd0ff8d0ff383 + pristine_git_object: fe68789da87168633ac0f9ffcace586dc1247584 + docs/models/utils/retryconfig.md: + id: 4343ac43161c + last_write_checksum: sha1:562c0f21e308ad10c27f85f75704c15592c6929d + pristine_git_object: 69dd549ec7f5f885101d08dd502e25748183aebf + docs/sdks/dataset/README.md: + id: 500cff374f02 + last_write_checksum: sha1:533c43a906708f3164a2ea6f0c35fc85e524d5cb + pristine_git_object: 7052f76c6e3b9ce54a4fbaa8caf6e5bf350f358f + docs/sdks/elements/README.md: + id: 0fc58d8bcd33 + last_write_checksum: sha1:2d4334efe3499e0aa09b6c028c5a8b5d7d9cb3d4 + pristine_git_object: cfb3d36faccb424ea1f396d751abc3bac88a8be1 + docs/sdks/image/README.md: + id: 38c1b6d9e149 + last_write_checksum: sha1:dacbac2aed3103c431fbf91a519c8944f080c4eb + pristine_git_object: 572c2b9061151804be619d116f63db8dbe46c189 + docs/sdks/initimages/README.md: + id: d50293f4578c + last_write_checksum: sha1:d1dec9d4620b4bf2a57d613380fdda01de09fe52 + pristine_git_object: d338c7f6ef5d4479f0ce33ecc4f278853606d79c + docs/sdks/models/README.md: + id: b35bdf4bc7ed + last_write_checksum: sha1:89d21183fa28534d7ad2e62a4aecc84bffb1dbe7 + pristine_git_object: 6fec09deb37e975c6b5204ff46f0294194841587 + docs/sdks/motion/README.md: + id: 22bfbae59b21 + last_write_checksum: sha1:a6c701f789ab2452d69a12c38db39a3b29b06f31 + pristine_git_object: 55a0eb684aa3fb11b1138c4eb46f128719924f20 + docs/sdks/pricingcalculator/README.md: + id: 8cd7e7bc4fee + last_write_checksum: sha1:55350453daa42d9d2390a2f67589ac992bfab719 + pristine_git_object: 2917f18549ecef7547a8b4fc668e1240b9fff4a0 + docs/sdks/prompt/README.md: + id: 58101834a0c9 + last_write_checksum: sha1:58177b6b6f86610f674404458829ad322d7fbff5 + pristine_git_object: 2421492bccbe7d79fe73965c62c4680f47112773 + docs/sdks/realtimecanvas/README.md: + id: fc1aad77933c + last_write_checksum: sha1:237bb60265ca6fe7fa56e153e9af6ab9dec569c0 + pristine_git_object: aa5688bb84018be495cd89439970fe85e9837a66 + docs/sdks/texture/README.md: + id: b92da8e9b53d + last_write_checksum: sha1:243ddb1d6136089972a34283c8161f8e6d2f07af + pristine_git_object: 9222352caf2ac43e67882d5cc1f61d356aeda440 + docs/sdks/threedmodelassets/README.md: + id: 39d957ae7651 + last_write_checksum: sha1:83f6052f1711b932ce12d24507b5d1dde05763eb + pristine_git_object: 73a891e8d87faad442306c18a41ff95f39e04fdf + docs/sdks/user/README.md: + id: 437dd7dc6e30 + last_write_checksum: sha1:8e568bfb7b553611ff3a370ed36e16f748b076c9 + pristine_git_object: c20cb73910209e8899905ef94bd846bcd3c5482c + docs/sdks/variation/README.md: + id: 7aa430a1dc8d + last_write_checksum: sha1:e72b2926c5d3bc46eda96e734ffe45e5050c227a + pristine_git_object: b233d921756fa24f24e79b803331b4f6230cbc69 + poetry.toml: + id: a81ade82122a + last_write_checksum: sha1:2242305e29dc6921bdf5b200aea5d4bf67830230 + pristine_git_object: cd3492ac9dc870fdcf23dbd94fd1d40cc753cc8e + py.typed: + id: 258c3ed47ae4 + last_write_checksum: sha1:8efc425ffe830805ffcc0f3055871bdcdc542c60 + pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 + pylintrc: + id: 7ce8b9f946e6 + last_write_checksum: sha1:db2aebd83e553dd59d3965e79104a3fb780c403a + pristine_git_object: e8cd3e85682cd3d489cf3c5be75a0563d0c9f4bf + pyproject.toml: + id: 5d07e7d72637 + last_write_checksum: sha1:8e126fdc25e3f7fafc699ebb8861d75d641d3cef + pristine_git_object: a1ef60f777f326684136768536736e4ee5cb4e94 + scripts/prepare_readme.py: + id: e0c5957a6035 + last_write_checksum: sha1:ff1b921b167a166b622adb1b6c2386392d8b3b95 + pristine_git_object: a15b9de0f62f8fd18af1731a2c4a0a68921f4f00 + scripts/publish.sh: + id: fe273b08f514 + last_write_checksum: sha1:b31bafc19c15ab5ea925fdf8d5d4adce2b115a63 + pristine_git_object: 2a3ead70ccc6228cbae1c5c8a319b1399f3804ea + src/leonardo_ai_sdk/__init__.py: + id: 345b05b61be0 + last_write_checksum: sha1:da077c0bdfcef64a4a5aea91a17292f72fa2b088 + pristine_git_object: 833c68cd526fe34aab2b7e7c45f974f7f4b9e120 + src/leonardo_ai_sdk/_hooks/__init__.py: + id: 1932f83d47c6 + last_write_checksum: sha1:45a380490e968d8d95994dd97554ac60eeb6ae60 + pristine_git_object: e763be4b171bbcf9c16caeaf381f8c92ce8d8e6e + src/leonardo_ai_sdk/_hooks/sdkhooks.py: + id: d874a7eeb46a + last_write_checksum: sha1:dd0a62d6eaf2718c69edbce8000ada4d6f271fd1 + pristine_git_object: ea30ea9cba7bee9086982b1059d39d7a0afab04b + src/leonardo_ai_sdk/_hooks/types.py: + id: 014ef95934d0 + last_write_checksum: sha1:12576867aa0e83784877594239f44f12a796888f + pristine_git_object: 557948ef601c69042c2bbb6e7b3f478352a7b6c5 + src/leonardo_ai_sdk/_version.py: + id: c3aea14ac140 + last_write_checksum: sha1:67e8c333911e94caa37174ee0241212f68e8423a + pristine_git_object: 969992effa5cfa1f0e6f558347b7f5b2f62d64d1 + src/leonardo_ai_sdk/basesdk.py: + id: 19c98acc9d1a + last_write_checksum: sha1:3454509613c8bff230a4dc3f8bd817f0d7792d1d + pristine_git_object: f7218a4fc5f278c6594107d14c2230812c5b0d16 + src/leonardo_ai_sdk/dataset.py: + id: edb510b284be + last_write_checksum: sha1:62178ef26603905441abce01c6f71dc0b2d89a7c + pristine_git_object: 8c4aa417e22300ff8321c5a6462290542309dab4 + src/leonardo_ai_sdk/elements.py: + id: 49aee7ce93c0 + last_write_checksum: sha1:f46dc4c865c0252b536219ef603af2bcb895c149 + pristine_git_object: 902c57dd6c08cd39df186ebfc8e43cf820d1ffd8 + src/leonardo_ai_sdk/httpclient.py: + id: 036f31d2a484 + last_write_checksum: sha1:5e55338d6ee9f01ab648cad4380201a8a3da7dd7 + pristine_git_object: 89560b566073785535643e694c112bedbd3db13d + src/leonardo_ai_sdk/image.py: + id: e26b4fcf50a1 + last_write_checksum: sha1:bf536ad10887592b6313976a778ebd9759df1da7 + pristine_git_object: f6bd60823d9bb54459cd41bbc215de70fe657476 + src/leonardo_ai_sdk/init_images.py: + id: 0b7a85ead201 + last_write_checksum: sha1:4f4f323f1e89947f5a6ab027883ec3c4742a6965 + pristine_git_object: f209897ef13483abf1dace56188db9d6f15cf36b + src/leonardo_ai_sdk/models/__init__.py: + id: d274593c4667 + last_write_checksum: sha1:fd931d5c2d58b5f9189cc897e038d6d78e362dab + pristine_git_object: 726fc5eb391035492b4bea383d91cb7e23da04d3 + src/leonardo_ai_sdk/models/errors/__init__.py: + id: a4f2aed4d1c8 + last_write_checksum: sha1:62575f7b2482b87f856e343f2286b7c5ca43a51c + pristine_git_object: 045b185ff6132ab5574270926f2a62b2ba975ece + src/leonardo_ai_sdk/models/errors/leonardoaisdkerror.py: + id: f030146781c9 + last_write_checksum: sha1:c65bd10f0edbf6880985c334b78df36da06c7345 + pristine_git_object: 92c003e2301d4d0bd4e2d3dd6c39d2b015348b1b + src/leonardo_ai_sdk/models/errors/no_response_error.py: + id: 57261a78cbbf + last_write_checksum: sha1:7f326424a7d5ae1bcd5c89a0d6b3dbda9138942f + pristine_git_object: 1deab64bc43e1e65bf3c412d326a4032ce342366 + src/leonardo_ai_sdk/models/errors/responsevalidationerror.py: + id: 57074a689513 + last_write_checksum: sha1:77ab9e913dd75e8074f5db632f184ad30d566877 + pristine_git_object: 216ee80940cc1f1d126b29e8e8f26dd50f3a7c7f + src/leonardo_ai_sdk/models/errors/sdkerror.py: + id: 4b4c4255b3ce + last_write_checksum: sha1:bc303396aa8c0ecc2aedad7ffaa6f8a8b778b407 + pristine_git_object: 9846506f0df113afeb9cf9351e9822671ef4796d + src/leonardo_ai_sdk/models/operations/__init__.py: + id: 5cbc6c99c6a3 + last_write_checksum: sha1:7709bfffc7f2d5b48a0df346559d397351b20608 + pristine_git_object: 30c1147b0602cdf5bcabbf845117c66f876dade1 + src/leonardo_ai_sdk/models/operations/createdataset.py: + id: 045e4ea50aac + last_write_checksum: sha1:a15928621d97731424fe0643858ff04b515e78a3 + pristine_git_object: 324fe2457dad5b78c3665fdb288eecd8da1aee5c + src/leonardo_ai_sdk/models/operations/createelement.py: + id: 6080882c70ea + last_write_checksum: sha1:7e85cb744ee62f57648a66ab31d635380a0b9881 + pristine_git_object: aecf54bf2ef10b29845b9d9ea751d133aefb128b + src/leonardo_ai_sdk/models/operations/creategeneration.py: + id: d7634d006dcc + last_write_checksum: sha1:d1e61921d00c4f0e6509a221918f7eb1d105fe64 + pristine_git_object: b7469f7f3c4673d166c541616c35a5fc729c9620 + src/leonardo_ai_sdk/models/operations/createimagetovideogeneration.py: + id: bad8760d4612 + last_write_checksum: sha1:36f3da92ae256b7b0aeee7fac42241fc42d02fac + pristine_git_object: 0ac5e21fffa30052cf37b83aae16a760984e2efc + src/leonardo_ai_sdk/models/operations/createlcmgeneration.py: + id: cf40d412beae + last_write_checksum: sha1:bf758541bfc8be075c7ea5c3e6cf73cc9c8a1a88 + pristine_git_object: 63bf0a64de84cdc48b68743dfa058c664ab79024 + src/leonardo_ai_sdk/models/operations/createmodel.py: + id: 0fba98d300ae + last_write_checksum: sha1:528d1aaad31f25154ed1f1239ec2c13f5624a951 + pristine_git_object: 67b393475d8fddd02b0041924410ea2d0a80038a + src/leonardo_ai_sdk/models/operations/createsvdmotiongeneration.py: + id: aff8effa04d8 + last_write_checksum: sha1:4cfb418c6912798b7804b0add18ad0c570c4bfdf + pristine_git_object: 78991f2910c9154f2789262e1fd98506ef616236 + src/leonardo_ai_sdk/models/operations/createtexttovideogeneration.py: + id: 87af8bcccc8c + last_write_checksum: sha1:188c3f5528a90adb6db00efd63b3766838803e2d + pristine_git_object: b41d4394fa11c9ad8f3943bbec9338a2ef7acf3a + src/leonardo_ai_sdk/models/operations/createtexturegeneration.py: + id: 07fa74e387b1 + last_write_checksum: sha1:d25dae173e9ce9513fa308b75bfd721b48337528 + pristine_git_object: 399a58f9b19df2499e0a58cb433ebbbabec7ffe7 + src/leonardo_ai_sdk/models/operations/createuniversalupscalerjob.py: + id: 96cff1819251 + last_write_checksum: sha1:d1f892987b31cd2bed91e048692a0accdd5758b2 + pristine_git_object: 690195fbcff4158abbaf4e2b76780522c8065031 + src/leonardo_ai_sdk/models/operations/createvariationnobg.py: + id: 7977213abd25 + last_write_checksum: sha1:b0ff12276d571dca81e827af37a7ddb6b9624ab3 + pristine_git_object: 1145f2cb5331ff2f20aa214d68df5708d810d97d + src/leonardo_ai_sdk/models/operations/createvariationunzoom.py: + id: 0e5d40ee0f9b + last_write_checksum: sha1:b60c1924d615f3a12d2af4689ea8d488fb052bab + pristine_git_object: a2bd69ac4b16a715dda9a841ea886028817b7907 + src/leonardo_ai_sdk/models/operations/createvariationupscale.py: + id: 8f1a06a70efb + last_write_checksum: sha1:49ac5300214b74d9b6425d658f3d15a1d770be2f + pristine_git_object: 005ada8fdccb7779faed65d8501c5d3164f98771 + src/leonardo_ai_sdk/models/operations/createvideoupscale.py: + id: 1697e1efba6a + last_write_checksum: sha1:8c2b02b0e98769467d3fe901a57bf18128687276 + pristine_git_object: 047443d98ee0b1e4e83f3027ff2cf5b8e20d6a8f + src/leonardo_ai_sdk/models/operations/delete3dmodelbyid.py: + id: 5ed233a373a8 + last_write_checksum: sha1:13a8aafe7b751d46d2bb4d9ffe0825a16c617a78 + pristine_git_object: 98ea6fdaec6466c43586f1a2a393f908456490de + src/leonardo_ai_sdk/models/operations/deletedatasetbyid.py: + id: d733071158a9 + last_write_checksum: sha1:2eba9ae39e1c00a062b19d595d55bad6a8fa48eb + pristine_git_object: f1858c38b8fc8136ef60a6aa5f6f5c41c7fca006 + src/leonardo_ai_sdk/models/operations/deleteelementbyid.py: + id: 4a93fa8b0fe4 + last_write_checksum: sha1:5ca15db6fec288faeaede7f2acbb52ce84e16ca8 + pristine_git_object: f6a2580fd695294272c07a3b85481490c0339c6b + src/leonardo_ai_sdk/models/operations/deletegenerationbyid.py: + id: 7fb75810e15b + last_write_checksum: sha1:05c5e9a4ac5bce95467aaed6def42776b8cc0be8 + pristine_git_object: 003c790aa82bd6aff3969376dd0896a85880cc49 + src/leonardo_ai_sdk/models/operations/deleteinitimagebyid.py: + id: 29cf0793c550 + last_write_checksum: sha1:c02c9016834825add6396f12f6e0466d6f50cc97 + pristine_git_object: a6d7e04ddc99ca61ce49421fc02d4b140236dabf + src/leonardo_ai_sdk/models/operations/deletemodelbyid.py: + id: 568a9ad3cb10 + last_write_checksum: sha1:357c084eaa348107f5e7791372f7ad9f543c7bd6 + pristine_git_object: 903f01b89c789a5ac4db18398a2b1c77b08414c1 + src/leonardo_ai_sdk/models/operations/deletetexturegenerationbyid.py: + id: d08d6f60940a + last_write_checksum: sha1:101a3232429f1af1f9203b817d5b5c11a2ed9416 + pristine_git_object: 04b8e14f8564576195a0b66856542aac39d0e552 + src/leonardo_ai_sdk/models/operations/get3dmodelbyid.py: + id: 8d0bd6634029 + last_write_checksum: sha1:26a78b3cf3ddacc5b58478e2234fdd00be0b23ef + pristine_git_object: d515b38900411bfb3e288c773187d353986c7cae + src/leonardo_ai_sdk/models/operations/get3dmodelsbyuserid.py: + id: 8b4361078ce7 + last_write_checksum: sha1:4ac5acb0e32154e3c50f4bacc5ae9d6bd8fd7811 + pristine_git_object: e75418e966f05bf68146a0f04dddd69a9da48cf8 + src/leonardo_ai_sdk/models/operations/getcustomelementsbyuserid.py: + id: cd171502e05d + last_write_checksum: sha1:560cca1db3266bb82fe2f1fa82640692f2fe8d9d + pristine_git_object: d68baf77b8e701e619f9644adfa95c5f2e91f9eb + src/leonardo_ai_sdk/models/operations/getcustommodelsbyuserid.py: + id: 11b7f7e165d8 + last_write_checksum: sha1:38be3432d210d21a7ee2517af0d35507106d1332 + pristine_git_object: 00060295ac7aedeb3b27a8e162b68ce5a99eb69a + src/leonardo_ai_sdk/models/operations/getdatasetbyid.py: + id: be684df5e965 + last_write_checksum: sha1:670619a38e30eccb9093a50595d2d0d27b8e0571 + pristine_git_object: 58eea998cae6cbeb7fdf1b16d967561379dff997 + src/leonardo_ai_sdk/models/operations/getelementbyid.py: + id: 8688925bfe3d + last_write_checksum: sha1:9f53100a318114f64374dd3beb0d9f70bf8f03eb + pristine_git_object: bd64e86afa6315a30d14625d62a26463a0d251d6 + src/leonardo_ai_sdk/models/operations/getgenerationbyid.py: + id: 12f2218a09da + last_write_checksum: sha1:63201f3486c5666ffadbd72686f6da1fd97cf00c + pristine_git_object: 54c09c14f23020ed3b8baeefe4d8fa8d986c57fc + src/leonardo_ai_sdk/models/operations/getgenerationsbyuserid.py: + id: f0ca03b7c386 + last_write_checksum: sha1:4c4ab736f12137ac5a5fd40d2358591fa9e18d00 + pristine_git_object: e80eb87ddf1a47dbcc18f7e41f3f0c795cbb7520 + src/leonardo_ai_sdk/models/operations/getinitimagebyid.py: + id: ee53381a5c56 + last_write_checksum: sha1:077f5ce13982a3ed55853b7c9c1fc8103ad0d733 + pristine_git_object: 4ee4b3027865f07c2a22d7aa6e727ebc43500a03 + src/leonardo_ai_sdk/models/operations/getmodelbyid.py: + id: deec0cff4063 + last_write_checksum: sha1:69576287077252ee9448e1ef89b69e78c7cc12bf + pristine_git_object: b5fef15f39ac47b5f7f20237ab14ac0b903fd6f2 + src/leonardo_ai_sdk/models/operations/getmotionvariationbyid.py: + id: bf56b03ca576 + last_write_checksum: sha1:b65d393d43d03d2c427242f081500a8a62560b4f + pristine_git_object: e50d0e074a5f61db5f714635eea806df166aeb5c + src/leonardo_ai_sdk/models/operations/gettexturegenerationbyid.py: + id: 710254b9e1b5 + last_write_checksum: sha1:d73ddfa9753c8ad12d103c4ac30623e09a38e7d0 + pristine_git_object: c9e336abcde25749c437e053873fe12d8dea5fc0 + src/leonardo_ai_sdk/models/operations/gettexturegenerationsbymodelid.py: + id: 781f313ed9f3 + last_write_checksum: sha1:d6b24e87bc279fa0999c017907f23a2cf71486fe + pristine_git_object: ef05a863340add0bc58865400651db377db25c79 + src/leonardo_ai_sdk/models/operations/getuserself.py: + id: cd4e689e06a1 + last_write_checksum: sha1:80a7a925938e07bd782cd514165c759622c18c9f + pristine_git_object: 22ca87286b08bcf410ae542b002b417889562378 + src/leonardo_ai_sdk/models/operations/getvariationbyid.py: + id: ddd2c1c648b5 + last_write_checksum: sha1:69e1ee85d7847ea8a164ef260cb8fd9729782009 + pristine_git_object: a9880c88718ba86c1bc8240637fb587d34343507 + src/leonardo_ai_sdk/models/operations/listelements.py: + id: 2ba024ee0be5 + last_write_checksum: sha1:dad29bafb623420367e5200148770812a3d95fd9 + pristine_git_object: 75f0b999d6c1e12ee8f449e59b6cd0b8d18e8ded + src/leonardo_ai_sdk/models/operations/listplatformmodels.py: + id: dfa035b89293 + last_write_checksum: sha1:df547e25717b0e88e2aefc7e13c8820b162d96be + pristine_git_object: 4e5893daa65252d4c778b1d411d984f0e3596227 + src/leonardo_ai_sdk/models/operations/performalchemyupscalelcm.py: + id: d1e30d4f2195 + last_write_checksum: sha1:c9a8aefe094725da64778762223b4e7eaed8061f + pristine_git_object: b6b34e3e9ddfaa3460b1e44f1f22dc42b1bfcc32 + src/leonardo_ai_sdk/models/operations/performinpaintinglcm.py: + id: 0cc656539c57 + last_write_checksum: sha1:f8ba76735a1f78e42a02ef7445b7738f502e3f9f + pristine_git_object: a557802717fbc120ff52eaa92575ac436eda4928 + src/leonardo_ai_sdk/models/operations/performinstantrefine.py: + id: 7ae418bd4c00 + last_write_checksum: sha1:b963e7d0182bc9ffbc90458af788230c9a6a32ef + pristine_git_object: 5418ae86d1806adc2f5b7b01e4822944ecc019e7 + src/leonardo_ai_sdk/models/operations/pricingcalculator.py: + id: df3cee04585f + last_write_checksum: sha1:ec0af308c426e744e5962641e2c1b761a0401071 + pristine_git_object: 6c777f26293ae310ddc0d72e5493b3a89e926d07 + src/leonardo_ai_sdk/models/operations/promptimprove.py: + id: 9616a6b8ffc6 + last_write_checksum: sha1:a668b68c57a09de641740403ad7aea293fff45b0 + pristine_git_object: 405c73d8524b831dfee09c03e0ac5accb81b9052 + src/leonardo_ai_sdk/models/operations/promptrandom.py: + id: d24dcaab5fe9 + last_write_checksum: sha1:ea5c2b2d3af051cac7992d4406db5a2dce976b15 + pristine_git_object: a45c3c9c59e630ae46c87383c16239c79c2457e6 + src/leonardo_ai_sdk/models/operations/uploadcanvasinitimage.py: + id: 7aab72c6230b + last_write_checksum: sha1:71a22aa01728b6df55aae89af336e8aa07d9a99b + pristine_git_object: 64d2906f537678069120f6fe0ca2c53e26d68b0f + src/leonardo_ai_sdk/models/operations/uploaddatasetimage.py: + id: 97c241fc5971 + last_write_checksum: sha1:ca8acddb721b9354588b870f146c789f63e49564 + pristine_git_object: 8bb4f3de123163dba60b26946ce733eebffc7473 + src/leonardo_ai_sdk/models/operations/uploaddatasetimagefromgen.py: + id: db8ab0e298f4 + last_write_checksum: sha1:18e173d62d38afc79f54e486322d7096255a0499 + pristine_git_object: 1521442cfe91a60283966e9bf31f59fb641e34cb + src/leonardo_ai_sdk/models/operations/uploadinitimage.py: + id: 7c79d202783b + last_write_checksum: sha1:45ce343dfa90a8af8a87783141c638db12e09dd6 + pristine_git_object: c2c1fe34b76a57a332c9236cef7f9e8dde9fa86c + src/leonardo_ai_sdk/models/operations/uploadmodelasset.py: + id: 00eb51a6351b + last_write_checksum: sha1:c0ebba0f67c3a3dda4c0272eb98e0e04a5c5c7d7 + pristine_git_object: 5622258a3204e1777ee2de1a13e5d6e836a8db45 + src/leonardo_ai_sdk/models/shared/__init__.py: + id: de1ccc636ec7 + last_write_checksum: sha1:8117d458ae610b4331b391d49f8db8565ef52759 + pristine_git_object: 8a072c7bdd6ad66d9957bd4cd4c19797ce5721fd + src/leonardo_ai_sdk/models/shared/canvasrequesttype.py: + id: 7b1e1c54f2db + last_write_checksum: sha1:6f7f6b41a44062563d8e2818d0a3ab4e4f7a0436 + pristine_git_object: 14474812d62b65bc15775558a3279914a26bfd5d + src/leonardo_ai_sdk/models/shared/controlnet_input.py: + id: 51c6dcd1665d + last_write_checksum: sha1:aac09b609a0f74517a32e5c4c6ea1cf137d7ef85 + pristine_git_object: 7c40f48d6bf884b1e915482703790ab9927e04bf + src/leonardo_ai_sdk/models/shared/controlnet_type.py: + id: 884db64f547c + last_write_checksum: sha1:f9b9b600f8f47a6c20e55ea54566dbd08e76c83d + pristine_git_object: 00a367cf1f298a6392ac1e9ff2799b57083f5e77 + src/leonardo_ai_sdk/models/shared/custom_model_type.py: + id: a031cc0e1c9c + last_write_checksum: sha1:994822979f47bcfb183312ebd52de0d1bd8778d6 + pristine_git_object: 8cd19f559db6adfb126fabbfc01eb194e50febbd + src/leonardo_ai_sdk/models/shared/element_input.py: + id: f5d5f7689eec + last_write_checksum: sha1:53dd1188d1842d00f83e6cbe31ba0fcfc9c7e548 + pristine_git_object: 5a98da3419b9d8af14594ad23d4b09d3e6387e74 + src/leonardo_ai_sdk/models/shared/job_status.py: + id: 829bb9e24b4e + last_write_checksum: sha1:91b4f316af8d54362d5bf5c78b5acacaa27bc748 + pristine_git_object: f976b60ed0947419f59ded07d18098bd26a64f78 + src/leonardo_ai_sdk/models/shared/lcm_generation_style.py: + id: efd05f1b89a6 + last_write_checksum: sha1:03c372f112981a657c635bfdfd205325be58d12a + pristine_git_object: b865b9e6985c8309ed037dc236da6796ea59528b + src/leonardo_ai_sdk/models/shared/model_asset_texture_types.py: + id: 32b156735425 + last_write_checksum: sha1:a96a03dc5a4ca4f6c4b968b54e987b1afb59b719 + pristine_git_object: f667ffaa147d4ef4f5472e4965d9fcf79b7f922e + src/leonardo_ai_sdk/models/shared/motion_resolution.py: + id: b6350bc0d09c + last_write_checksum: sha1:85a3cc7f3219c3177bd1bd828e5320845d022a33 + pristine_git_object: c9388ce71b66e18de4e60b5cd4d46ceb8ddfba50 + src/leonardo_ai_sdk/models/shared/motion_variation_type.py: + id: 65ee1a2312c6 + last_write_checksum: sha1:a5d1117bc2a562619a4473353ca2bfc09b72f5a6 + pristine_git_object: 20fe85438c59dbe9a7baabd5ae72fa83904a2033 + src/leonardo_ai_sdk/models/shared/pricingcalculatorservices.py: + id: aadd90f2317e + last_write_checksum: sha1:e6f10df4ff02f8a241cf38c9ca64f2cc6abacddd + pristine_git_object: 5369d9261b0ce140f0c2b30cafa16083b84934ca + src/leonardo_ai_sdk/models/shared/sd_generation_schedulers.py: + id: 34877b8aab76 + last_write_checksum: sha1:12ef20e4dbca95df0ab739b5a269412b69153c70 + pristine_git_object: aea392ff432fd5cffb582cff9c1ae78b5022895f + src/leonardo_ai_sdk/models/shared/sd_generation_style.py: + id: ece3cfe78835 + last_write_checksum: sha1:e6a2d3a925e39d0d65fdd86e523a3e5f78fbaa0f + pristine_git_object: 27fe7d67ba7b5a1f8277cc19d9f5c1facaf39037 + src/leonardo_ai_sdk/models/shared/sd_versions.py: + id: 566163947ef3 + last_write_checksum: sha1:14590297c98c2fe78ae4fd1f086bf4690315581a + pristine_git_object: a6634be445d1db929cd60529460132724f6b4bea + src/leonardo_ai_sdk/models/shared/security.py: + id: 51222d9ece56 + last_write_checksum: sha1:332d60e46c87a7ea771498ac4572606386eabfe8 + pristine_git_object: 902ed1cf6e6b1715a788dfa02f06e7cb57b5e5df + src/leonardo_ai_sdk/models/shared/strength.py: + id: 16c5a0c4f262 + last_write_checksum: sha1:51242c214e65eeda43090e6c6e8bd5584b5bc200 + pristine_git_object: efe82e35760d6df12d92bb708732af9dfe7c6b3d + src/leonardo_ai_sdk/models/shared/universal_upscaler_style.py: + id: 8bca2c2763ae + last_write_checksum: sha1:ceda1775aa6cbb55415caa76ddd980233fabd9ce + pristine_git_object: ce005a555bb694b95a6f50d2324d45ed916b90f6 + src/leonardo_ai_sdk/models/shared/universal_upscaler_ultra_style.py: + id: 2d728c1dfb3b + last_write_checksum: sha1:f897342be256e134cc8ffc7d3bcfc5b48a2893d4 + pristine_git_object: d0b8a7aabd592c54823a50bfd8d5e96dd7ce7f11 + src/leonardo_ai_sdk/models/shared/user_elements_input.py: + id: ae4df090c9bd + last_write_checksum: sha1:a5b833169fe5e9bffbd57a51c7c36a442ea2bf8d + pristine_git_object: 5175f571412ddfa474dc03c1f90c99bb72353576 + src/leonardo_ai_sdk/models/shared/variation_type.py: + id: 0d9e8c6d3c96 + last_write_checksum: sha1:a6965e99c5bcd225a3c26c3850260e34ff91a4a2 + pristine_git_object: 09200f0544f8d065838374b19b1be2e3a6a34e31 + src/leonardo_ai_sdk/models_.py: + id: 9f96042872f1 + last_write_checksum: sha1:a808e8c7133ba2ed52b805a27020e9b807e95c0c + pristine_git_object: ee9fd2d60c2d0a90a6b8af6ff64f5793f953b2c8 + src/leonardo_ai_sdk/motion.py: + id: 31e3b3b519e0 + last_write_checksum: sha1:a47f747e00bd8d6088bced05fa6f5dc01675d574 + pristine_git_object: 4bf04d88d67714b09d7f20408e2a4f82f0650c15 + src/leonardo_ai_sdk/pricing_calculator.py: + id: c09afc8c1bfe + last_write_checksum: sha1:5bdeb7effc66340f659f8c53c0587f87c18ed6a7 + pristine_git_object: 64fa6e0585ad54f734d453dad2559fb71b98620c + src/leonardo_ai_sdk/prompt.py: + id: 7dbbc90f3db8 + last_write_checksum: sha1:12d87a8c5b62dccf5813148f88c655de34457efc + pristine_git_object: de2fabc429acff3cf96efc65f84e909213ee25c4 + src/leonardo_ai_sdk/py.typed: + id: 43a62723a6e2 + last_write_checksum: sha1:8efc425ffe830805ffcc0f3055871bdcdc542c60 + pristine_git_object: 3e38f1a929f7d6b1d6de74604aa87e3d8f010544 + src/leonardo_ai_sdk/realtime_canvas.py: + id: 802fb070314c + last_write_checksum: sha1:460d9a1f18fce34c63886ce7d66a9d608486ebd5 + pristine_git_object: c079049c99ec2422c99aa0c9b030bab1ffc766c4 + src/leonardo_ai_sdk/sdk.py: + id: 0c5ecd584447 + last_write_checksum: sha1:826665ae1c5cb52f9f4a9303c769203e8ecee822 + pristine_git_object: 10eec437419dcf32fd250ef3d719e4e0be7539a5 + src/leonardo_ai_sdk/sdkconfiguration.py: + id: 05169c3c0475 + last_write_checksum: sha1:c100605a62667ac0968f648acb8b894af7db30da + pristine_git_object: 6c5e7971002d973646706857194a8d485a7bd9fb + src/leonardo_ai_sdk/texture.py: + id: 058228c3e64d + last_write_checksum: sha1:ec450125ebb37b1981f70d5e1424b8119fd34200 + pristine_git_object: 150716487d6baf76391285138b41ed2caed47b3d + src/leonardo_ai_sdk/threed_model_assets.py: + id: 3db8bbc7ae65 + last_write_checksum: sha1:ab8ad909cb44cc9f5a8a614a0b363c989825eb2b + pristine_git_object: 0a6b61604e4f44c7c6fac263e647c7e839e1cd01 + src/leonardo_ai_sdk/types/__init__.py: + id: 16845b7057a8 + last_write_checksum: sha1:140ebdd01a46f92ffc710c52c958c4eba3cf68ed + pristine_git_object: fc76fe0c5505e29859b5d2bb707d48fd27661b8c + src/leonardo_ai_sdk/types/basemodel.py: + id: 70f03cddbcd3 + last_write_checksum: sha1:10d84aedeb9d35edfdadf2c3020caa1d24d8b584 + pristine_git_object: a9a640a1a7048736383f96c67c6290c86bf536ee + src/leonardo_ai_sdk/user.py: + id: e64131f023cd + last_write_checksum: sha1:5f6280bcaeaeeb820383be7c36155d9d8cfe1ecc + pristine_git_object: 76d41b38fcd25602bcff7fba47cc623caddd1cf3 + src/leonardo_ai_sdk/utils/__init__.py: + id: dcba1dea311a + last_write_checksum: sha1:398211d49b762a067ec6d10197a4b11dfd258ff5 + pristine_git_object: c906e1e0192e9017fc13851eb23fc0c2753429c8 + src/leonardo_ai_sdk/utils/annotations.py: + id: af86b21e8717 + last_write_checksum: sha1:a4824ad65f730303e4e1e3ec1febf87b4eb46dbc + pristine_git_object: 12e0aa4f1151bb52474cc02e88397329b90703f6 + src/leonardo_ai_sdk/utils/datetimes.py: + id: 17c769e0934f + last_write_checksum: sha1:c721e4123000e7dc61ec52b28a739439d9e17341 + pristine_git_object: a6c52cd61bbe2d459046c940ce5e8c469f2f0664 + src/leonardo_ai_sdk/utils/enums.py: + id: 412d22e640f9 + last_write_checksum: sha1:bc8c3c1285ae09ba8a094ee5c3d9c7f41fa1284d + pristine_git_object: 3324e1bc2668c54c4d5f5a1a845675319757a828 + src/leonardo_ai_sdk/utils/eventstreaming.py: + id: 031bef878e00 + last_write_checksum: sha1:bababae5d54b7efc360db701daa49e18a92c2f3b + pristine_git_object: 0969899bfc491e5e408d05643525f347ea95e4fc + src/leonardo_ai_sdk/utils/forms.py: + id: b299101f1f14 + last_write_checksum: sha1:15fa7e9ab1611e062a9984cf06cb20969713d295 + pristine_git_object: f961e76beaf0a8b1fe0dda44754a74eebd3608e7 + src/leonardo_ai_sdk/utils/headers.py: + id: c65234d55209 + last_write_checksum: sha1:7c6df233ee006332b566a8afa9ce9a245941d935 + pristine_git_object: 37864cbbbc40d1a47112bbfdd3ba79568fc8818a + src/leonardo_ai_sdk/utils/logger.py: + id: f27ee92eddb3 + last_write_checksum: sha1:f3fdb154a3f09b8cc43d74c7e9c02f899f8086e4 + pristine_git_object: b661aff65d38b77d035149699aea09b2785d2fc6 + src/leonardo_ai_sdk/utils/metadata.py: + id: 030b4710dc9a + last_write_checksum: sha1:c6a560bd0c63ab158582f34dadb69433ea73b3d4 + pristine_git_object: 173b3e5ce658675c2f504222a56b3daaaa68107d + src/leonardo_ai_sdk/utils/queryparams.py: + id: 9a387d3e0f1e + last_write_checksum: sha1:b94c3f314fd3da0d1d215afc2731f48748e2aa59 + pristine_git_object: c04e0db82b68eca041f2cb2614d748fbac80fd41 + src/leonardo_ai_sdk/utils/requestbodies.py: + id: c003f58fea4a + last_write_checksum: sha1:41e2d2d2d3ecc394c8122ca4d4b85e1c3e03f054 + pristine_git_object: 1de32b6d26f46590232f398fdba6ce0072f1659c + src/leonardo_ai_sdk/utils/retries.py: + id: cda72ee21f8c + last_write_checksum: sha1:5b97ac4f59357d70c2529975d50364c88bcad607 + pristine_git_object: 88a91b10cd2076b4a2c6cff2ac6bfaa5e3c5ad13 + src/leonardo_ai_sdk/utils/security.py: + id: fc9558e3abcb + last_write_checksum: sha1:a17130ace2c0db6394f38dd941ad2b700cc755c8 + pristine_git_object: 295a3f40031dbb40073ad227fd4a355660f97ab2 + src/leonardo_ai_sdk/utils/serializers.py: + id: cb9ed480897f + last_write_checksum: sha1:ce1d8d7f500a9ccba0aeca5057cee9c271f4dfd7 + pristine_git_object: 14321eb479de81d0d9580ec8291e0ff91bf29e57 + src/leonardo_ai_sdk/utils/unmarshal_json_response.py: + id: ff30a1d1db54 + last_write_checksum: sha1:d59ac7c24ee25e5525eb2a3367adad63bde0b57d + pristine_git_object: 0634379ffaae46f409bbe908847f5db257470e9f + src/leonardo_ai_sdk/utils/url.py: + id: 65d4c7216b59 + last_write_checksum: sha1:6479961baa90432ca25626f8e40a7bbc32e73b41 + pristine_git_object: c78ccbae426ce6d385709d97ce0b1c2813ea2418 + src/leonardo_ai_sdk/utils/values.py: + id: 049556198ec8 + last_write_checksum: sha1:acaa178a7c41ddd000f58cc691e4632d925b2553 + pristine_git_object: dae01a44384ac3bc13ae07453a053bf6c898ebe3 + src/leonardo_ai_sdk/variation.py: + id: ef24451372f2 + last_write_checksum: sha1:990b3632ef2d08679d162dc91e5d39401fe22e32 + pristine_git_object: 1891ec819c601ed31c3feac18d45cd5d8de0582c examples: deleteInitImageById: speakeasy-default-delete-init-image-by-id: @@ -423,7 +1679,7 @@ examples: uploadInitImage: speakeasy-default-upload-init-image: requestBody: - application/json: {"extension": "png"} + application/json: {"extension": "gif"} responses: "200": application/json: {} @@ -456,7 +1712,7 @@ examples: path: datasetId: "" requestBody: - application/json: {"extension": "mp4v"} + application/json: {"extension": "shtml"} responses: "200": application/json: {} @@ -473,7 +1729,7 @@ examples: createElement: speakeasy-default-create-element: requestBody: - application/json: {"datasetId": "", "description": "", "instance_prompt": "a character", "learning_rate": 0.000001, "lora_focus": "General", "name": "placeholder", "num_train_epochs": 100, "resolution": 1024, "sd_version": "SDXL_0_9", "train_text_encoder": true} + application/json: {"datasetId": "", "description": "", "instance_prompt": "", "learning_rate": 3344.47, "lora_focus": "", "name": "placeholder", "num_train_epochs": 543724, "resolution": 1024, "sd_version": "FLUX_DEV", "train_text_encoder": true} responses: "200": application/json: {} @@ -481,7 +1737,7 @@ examples: speakeasy-default-delete-element-by-id: parameters: path: - id: 39024 + id: 709546 responses: "200": application/json: {} @@ -497,7 +1753,7 @@ examples: speakeasy-default-get-element-by-id: parameters: path: - id: 665696 + id: 320312 responses: "200": application/json: {} @@ -509,7 +1765,7 @@ examples: createGeneration: speakeasy-default-create-generation: requestBody: - application/json: {"alchemy": true, "height": 768, "modelId": "b24e16ff-06e3-43eb-8d33-4416c2d75876", "num_images": 4, "presetStyle": "DYNAMIC", "prompt": "A majestic cat in the snow", "width": 1024} + application/json: {"alchemy": true, "contrast": 3.5, "height": 768, "modelId": "b24e16ff-06e3-43eb-8d33-4416c2d75876", "num_images": 4, "presetStyle": "DYNAMIC", "prompt": "A majestic cat in the snow", "width": 1024} responses: "200": application/json: {} @@ -540,6 +1796,26 @@ examples: responses: "200": application/json: {} + createImageToVideoGeneration: + speakeasy-default-create-image-to-video-generation: + responses: + "200": + application/json: {} + createSVDMotionGeneration: + speakeasy-default-create-SVD-motion-generation: + responses: + "200": + application/json: {} + createTextToVideoGeneration: + speakeasy-default-create-text-to-video-generation: + responses: + "200": + application/json: {} + createVideoUpscale: + speakeasy-default-create-video-upscale: + responses: + "200": + application/json: {} createLCMGeneration: speakeasy-default-create-LCM-generation: responses: @@ -560,11 +1836,6 @@ examples: responses: "200": application/json: {} - createSVDMotionGeneration: - speakeasy-default-create-SVD-motion-generation: - responses: - "200": - application/json: {} createTextureGeneration: speakeasy-default-create-texture-generation: responses: @@ -676,23 +1947,6 @@ examples: responses: "200": application/json: {} - pricingCalculator: - speakeasy-default-pricing-calculator: - responses: - "200": - application/json: {} - promptImprove: - speakeasy-default-prompt-improve: - requestBody: - application/json: {"prompt": ""} - responses: - "200": - application/json: {} - promptRandom: - speakeasy-default-prompt-random: - responses: - "200": - application/json: {} CreateUniversalUpscalerJob: speakeasy-default-create-universal-upscaler-job: requestBody: @@ -717,6 +1971,14 @@ examples: responses: "200": application/json: {} + getMotionVariationById: + speakeasy-default-get-motion-variation-by-id: + parameters: + path: + id: "" + responses: + "200": + application/json: {} getVariationById: speakeasy-default-get-variation-by-id: parameters: @@ -725,5 +1987,388 @@ examples: responses: "200": application/json: {} -examplesVersion: 1.0.0 + pricingCalculator: + speakeasy-default-pricing-calculator: + responses: + "200": + application/json: {} + promptImprove: + speakeasy-default-prompt-improve: + requestBody: + application/json: {"isVideo": true, "prompt": ""} + responses: + "200": + application/json: {} + promptRandom: + speakeasy-default-prompt-random: + responses: + "200": + application/json: {} +examplesVersion: 1.0.2 generatedTests: {} +releaseNotes: "## Python SDK Changes:\n* `leonardo_ai_sdk.elements.create_element()`: `request` **Changed** **Breaking** :warning:\n* `leonardo_ai_sdk.image.create_generation()`: `request` **Changed** **Breaking** :warning:\n* `leonardo_ai_sdk.pricing_calculator.pricing_calculator()`: \n * `request.service_params` **Changed** **Breaking** :warning:\n* `leonardo_ai_sdk.motion.create_image_to_video_generation()`: **Added**\n* `leonardo_ai_sdk.motion.create_text_to_video_generation()`: **Added**\n* `leonardo_ai_sdk.motion.create_video_upscale()`: **Added**\n* `leonardo_ai_sdk.variation.get_motion_variation_by_id()`: **Added**\n* `leonardo_ai_sdk.prompt.prompt_improve()`: \n * `request.is_video` **Added**\n" +generatedFiles: + - .devcontainer/README.md + - .devcontainer/devcontainer.json + - .devcontainer/setup.sh + - .gitattributes + - .python-version + - .vscode/settings.json + - USAGE.md + - docs/models/operations/calculateproductionapiservicecost.md + - docs/models/operations/canvasinitimageuploadoutput.md + - docs/models/operations/createdatasetrequestbody.md + - docs/models/operations/createdatasetresponse.md + - docs/models/operations/createdatasetresponsebody.md + - docs/models/operations/createelementrequestbody.md + - docs/models/operations/createelementresponse.md + - docs/models/operations/createelementresponsebody.md + - docs/models/operations/creategenerationrequestbody.md + - docs/models/operations/creategenerationresponse.md + - docs/models/operations/creategenerationresponsebody.md + - docs/models/operations/createlcmgenerationrequestbody.md + - docs/models/operations/createlcmgenerationresponse.md + - docs/models/operations/createlcmgenerationresponsebody.md + - docs/models/operations/createmodelrequestbody.md + - docs/models/operations/createmodelresponse.md + - docs/models/operations/createmodelresponsebody.md + - docs/models/operations/createmodelsdtrainingoutput.md + - docs/models/operations/createmodelsdversions.md + - docs/models/operations/createsvdmotiongenerationrequestbody.md + - docs/models/operations/createsvdmotiongenerationresponse.md + - docs/models/operations/createsvdmotiongenerationresponsebody.md + - docs/models/operations/createtexturegenerationrequestbody.md + - docs/models/operations/createtexturegenerationresponse.md + - docs/models/operations/createtexturegenerationresponsebody.md + - docs/models/operations/createuniversalupscalerjobrequestbody.md + - docs/models/operations/createuniversalupscalerjobresponse.md + - docs/models/operations/createuniversalupscalerjobresponsebody.md + - docs/models/operations/createvariationnobgrequestbody.md + - docs/models/operations/createvariationnobgresponse.md + - docs/models/operations/createvariationnobgresponsebody.md + - docs/models/operations/createvariationunzoomrequestbody.md + - docs/models/operations/createvariationunzoomresponse.md + - docs/models/operations/createvariationunzoomresponsebody.md + - docs/models/operations/createvariationupscalerequestbody.md + - docs/models/operations/createvariationupscaleresponse.md + - docs/models/operations/createvariationupscaleresponsebody.md + - docs/models/operations/createvariationupscalesdupscalejoboutput.md + - docs/models/operations/custommodels.md + - docs/models/operations/datasetgenuploadoutput.md + - docs/models/operations/datasetimages.md + - docs/models/operations/datasets.md + - docs/models/operations/datasetuploadoutput.md + - docs/models/operations/delete3dmodelbyidrequest.md + - docs/models/operations/delete3dmodelbyidrequestbody.md + - docs/models/operations/delete3dmodelbyidresponse.md + - docs/models/operations/delete3dmodelbyidresponsebody.md + - docs/models/operations/deletedatasetbyiddatasets.md + - docs/models/operations/deletedatasetbyidrequest.md + - docs/models/operations/deletedatasetbyidresponse.md + - docs/models/operations/deletedatasetbyidresponsebody.md + - docs/models/operations/deleteelementbyidrequest.md + - docs/models/operations/deleteelementbyidresponse.md + - docs/models/operations/deleteelementbyidresponsebody.md + - docs/models/operations/deletegenerationbyidrequest.md + - docs/models/operations/deletegenerationbyidresponse.md + - docs/models/operations/deletegenerationbyidresponsebody.md + - docs/models/operations/deleteinitimagebyidrequest.md + - docs/models/operations/deleteinitimagebyidresponse.md + - docs/models/operations/deleteinitimagebyidresponsebody.md + - docs/models/operations/deletemodelbyidrequest.md + - docs/models/operations/deletemodelbyidresponse.md + - docs/models/operations/deletemodelbyidresponsebody.md + - docs/models/operations/deletetexturegenerationbyidrequest.md + - docs/models/operations/deletetexturegenerationbyidrequestbody.md + - docs/models/operations/deletetexturegenerationbyidresponse.md + - docs/models/operations/deletetexturegenerationbyidresponsebody.md + - docs/models/operations/elements.md + - docs/models/operations/generatedimages.md + - docs/models/operations/generatedimagevariationgeneric.md + - docs/models/operations/generationelements.md + - docs/models/operations/generations.md + - docs/models/operations/get3dmodelbyidmodelassets.md + - docs/models/operations/get3dmodelbyidrequest.md + - docs/models/operations/get3dmodelbyidrequestbody.md + - docs/models/operations/get3dmodelbyidresponse.md + - docs/models/operations/get3dmodelbyidresponsebody.md + - docs/models/operations/get3dmodelsbyuseridmodelassets.md + - docs/models/operations/get3dmodelsbyuseridrequest.md + - docs/models/operations/get3dmodelsbyuseridrequestbody.md + - docs/models/operations/get3dmodelsbyuseridresponse.md + - docs/models/operations/get3dmodelsbyuseridresponsebody.md + - docs/models/operations/getcustomelementsbyuseridrequest.md + - docs/models/operations/getcustomelementsbyuseridresponse.md + - docs/models/operations/getcustomelementsbyuseridresponsebody.md + - docs/models/operations/getcustomelementsbyuseriduserloras.md + - docs/models/operations/getcustommodelsbyuseridcustommodels.md + - docs/models/operations/getcustommodelsbyuseridrequest.md + - docs/models/operations/getcustommodelsbyuseridresponse.md + - docs/models/operations/getcustommodelsbyuseridresponsebody.md + - docs/models/operations/getdatasetbyiddatasets.md + - docs/models/operations/getdatasetbyidrequest.md + - docs/models/operations/getdatasetbyidresponse.md + - docs/models/operations/getdatasetbyidresponsebody.md + - docs/models/operations/getelementbyidrequest.md + - docs/models/operations/getelementbyidresponse.md + - docs/models/operations/getelementbyidresponsebody.md + - docs/models/operations/getelementbyiduserloras.md + - docs/models/operations/getgenerationbyidgeneratedimagevariationgeneric.md + - docs/models/operations/getgenerationbyidgenerations.md + - docs/models/operations/getgenerationbyidloras.md + - docs/models/operations/getgenerationbyidrequest.md + - docs/models/operations/getgenerationbyidresponse.md + - docs/models/operations/getgenerationbyidresponsebody.md + - docs/models/operations/getgenerationsbyuseridgeneratedimages.md + - docs/models/operations/getgenerationsbyuseridgeneratedimagevariationgeneric.md + - docs/models/operations/getgenerationsbyuseridgenerationelements.md + - docs/models/operations/getgenerationsbyuseridgenerations.md + - docs/models/operations/getgenerationsbyuseridrequest.md + - docs/models/operations/getgenerationsbyuseridresponse.md + - docs/models/operations/getgenerationsbyuseridresponsebody.md + - docs/models/operations/getinitimagebyidinitimages.md + - docs/models/operations/getinitimagebyidrequest.md + - docs/models/operations/getinitimagebyidresponse.md + - docs/models/operations/getinitimagebyidresponsebody.md + - docs/models/operations/getmodelbyidcustommodels.md + - docs/models/operations/getmodelbyidrequest.md + - docs/models/operations/getmodelbyidresponse.md + - docs/models/operations/getmodelbyidresponsebody.md + - docs/models/operations/gettexturegenerationbyidmodelassettexturegenerations.md + - docs/models/operations/gettexturegenerationbyidrequest.md + - docs/models/operations/gettexturegenerationbyidrequestbody.md + - docs/models/operations/gettexturegenerationbyidresponse.md + - docs/models/operations/gettexturegenerationbyidresponsebody.md + - docs/models/operations/gettexturegenerationsbymodelidmodelassettexturegenerations.md + - docs/models/operations/gettexturegenerationsbymodelidmodelassettextureimages.md + - docs/models/operations/gettexturegenerationsbymodelidrequest.md + - docs/models/operations/gettexturegenerationsbymodelidrequestbody.md + - docs/models/operations/gettexturegenerationsbymodelidresponse.md + - docs/models/operations/gettexturegenerationsbymodelidresponsebody.md + - docs/models/operations/getuserselfresponse.md + - docs/models/operations/getuserselfresponsebody.md + - docs/models/operations/getvariationbyidrequest.md + - docs/models/operations/getvariationbyidresponse.md + - docs/models/operations/getvariationbyidresponsebody.md + - docs/models/operations/initimages.md + - docs/models/operations/initimageuploadoutput.md + - docs/models/operations/lcmgenerationoutput.md + - docs/models/operations/listelementsresponse.md + - docs/models/operations/listelementsresponsebody.md + - docs/models/operations/listplatformmodelscustommodels.md + - docs/models/operations/listplatformmodelsgeneratedimages.md + - docs/models/operations/listplatformmodelsresponse.md + - docs/models/operations/listplatformmodelsresponsebody.md + - docs/models/operations/loras.md + - docs/models/operations/modelassets.md + - docs/models/operations/modelassettexturegenerations.md + - docs/models/operations/modelassettextureimages.md + - docs/models/operations/modelassetuploadoutput.md + - docs/models/operations/motionsvdgenerationoutput.md + - docs/models/operations/object.md + - docs/models/operations/performalchemyupscalelcmlcmgenerationoutput.md + - docs/models/operations/performalchemyupscalelcmrequestbody.md + - docs/models/operations/performalchemyupscalelcmresponse.md + - docs/models/operations/performalchemyupscalelcmresponsebody.md + - docs/models/operations/performinpaintinglcmlcmgenerationoutput.md + - docs/models/operations/performinpaintinglcmrequestbody.md + - docs/models/operations/performinpaintinglcmresponse.md + - docs/models/operations/performinpaintinglcmresponsebody.md + - docs/models/operations/performinstantrefinelcmgenerationoutput.md + - docs/models/operations/performinstantrefinerequestbody.md + - docs/models/operations/performinstantrefineresponse.md + - docs/models/operations/performinstantrefineresponsebody.md + - docs/models/operations/pricingcalculatorobject.md + - docs/models/operations/pricingcalculatorpricingcalculatorobject.md + - docs/models/operations/pricingcalculatorpricingcalculatorrequestobject.md + - docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyobject.md + - docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsobject.md + - docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamstexturegenerationobject.md + - docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsuniversalupscalerobject.md + - docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsuniversalupscalerultraobject.md + - docs/models/operations/pricingcalculatorrequestbody.md + - docs/models/operations/pricingcalculatorresponse.md + - docs/models/operations/pricingcalculatorresponsebody.md + - docs/models/operations/promptgenerationoutput.md + - docs/models/operations/promptimproverequestbody.md + - docs/models/operations/promptimproveresponse.md + - docs/models/operations/promptimproveresponsebody.md + - docs/models/operations/promptrandompromptgenerationoutput.md + - docs/models/operations/promptrandomresponse.md + - docs/models/operations/promptrandomresponsebody.md + - docs/models/operations/sdgenerationoutput.md + - docs/models/operations/sdtrainingoutput.md + - docs/models/operations/sdunzoomoutput.md + - docs/models/operations/sdupscalejoboutput.md + - docs/models/operations/sdversions.md + - docs/models/operations/texturegenerationjoboutput.md + - docs/models/operations/transparencytype.md + - docs/models/operations/universalupscaleroutput.md + - docs/models/operations/uploadcanvasinitimagerequestbody.md + - docs/models/operations/uploadcanvasinitimageresponse.md + - docs/models/operations/uploadcanvasinitimageresponsebody.md + - docs/models/operations/uploaddatasetimagefromgenrequest.md + - docs/models/operations/uploaddatasetimagefromgenrequestbody.md + - docs/models/operations/uploaddatasetimagefromgenresponse.md + - docs/models/operations/uploaddatasetimagefromgenresponsebody.md + - docs/models/operations/uploaddatasetimagerequest.md + - docs/models/operations/uploaddatasetimagerequestbody.md + - docs/models/operations/uploaddatasetimageresponse.md + - docs/models/operations/uploaddatasetimageresponsebody.md + - docs/models/operations/uploadinitimagerequestbody.md + - docs/models/operations/uploadinitimageresponse.md + - docs/models/operations/uploadinitimageresponsebody.md + - docs/models/operations/uploadmodelassetrequestbody.md + - docs/models/operations/uploadmodelassetresponse.md + - docs/models/operations/uploadmodelassetresponsebody.md + - docs/models/operations/userdetails.md + - docs/models/operations/userloras.md + - docs/models/operations/users.md + - docs/models/shared/canvasrequesttype.md + - docs/models/shared/controlnetinput.md + - docs/models/shared/controlnettype.md + - docs/models/shared/custommodeltype.md + - docs/models/shared/elementinput.md + - docs/models/shared/initimagetype.md + - docs/models/shared/jobstatus.md + - docs/models/shared/lcmgenerationstyle.md + - docs/models/shared/modelassettexturetypes.md + - docs/models/shared/pricingcalculatorservices.md + - docs/models/shared/sdgenerationschedulers.md + - docs/models/shared/sdgenerationstyle.md + - docs/models/shared/sdversions.md + - docs/models/shared/security.md + - docs/models/shared/strength.md + - docs/models/shared/strengthtype.md + - docs/models/shared/universalupscalerstyle.md + - docs/models/shared/universalupscalerultrastyle.md + - docs/models/shared/userelementsinput.md + - docs/models/shared/variationtype.md + - docs/models/utils/retryconfig.md + - docs/sdks/dataset/README.md + - docs/sdks/elements/README.md + - docs/sdks/image/README.md + - docs/sdks/initimages/README.md + - docs/sdks/leonardoaisdk/README.md + - docs/sdks/models/README.md + - docs/sdks/motion/README.md + - docs/sdks/pricingcalculator/README.md + - docs/sdks/prompt/README.md + - docs/sdks/realtimecanvas/README.md + - docs/sdks/texture/README.md + - docs/sdks/threedmodelassets/README.md + - docs/sdks/user/README.md + - docs/sdks/variation/README.md + - poetry.toml + - py.typed + - pylintrc + - pyproject.toml + - scripts/prepare-readme.py + - scripts/publish.sh + - src/leonardo_ai_sdk/__init__.py + - src/leonardo_ai_sdk/_hooks/__init__.py + - src/leonardo_ai_sdk/_hooks/sdkhooks.py + - src/leonardo_ai_sdk/_hooks/types.py + - src/leonardo_ai_sdk/_version.py + - src/leonardo_ai_sdk/basesdk.py + - src/leonardo_ai_sdk/dataset.py + - src/leonardo_ai_sdk/elements.py + - src/leonardo_ai_sdk/httpclient.py + - src/leonardo_ai_sdk/image.py + - src/leonardo_ai_sdk/init_images.py + - src/leonardo_ai_sdk/models/errors/__init__.py + - src/leonardo_ai_sdk/models/errors/sdkerror.py + - src/leonardo_ai_sdk/models/operations/__init__.py + - src/leonardo_ai_sdk/models/operations/createdataset.py + - src/leonardo_ai_sdk/models/operations/createelement.py + - src/leonardo_ai_sdk/models/operations/creategeneration.py + - src/leonardo_ai_sdk/models/operations/createlcmgeneration.py + - src/leonardo_ai_sdk/models/operations/createmodel.py + - src/leonardo_ai_sdk/models/operations/createsvdmotiongeneration.py + - src/leonardo_ai_sdk/models/operations/createtexturegeneration.py + - src/leonardo_ai_sdk/models/operations/createuniversalupscalerjob.py + - src/leonardo_ai_sdk/models/operations/createvariationnobg.py + - src/leonardo_ai_sdk/models/operations/createvariationunzoom.py + - src/leonardo_ai_sdk/models/operations/createvariationupscale.py + - src/leonardo_ai_sdk/models/operations/delete3dmodelbyid.py + - src/leonardo_ai_sdk/models/operations/deletedatasetbyid.py + - src/leonardo_ai_sdk/models/operations/deleteelementbyid.py + - src/leonardo_ai_sdk/models/operations/deletegenerationbyid.py + - src/leonardo_ai_sdk/models/operations/deleteinitimagebyid.py + - src/leonardo_ai_sdk/models/operations/deletemodelbyid.py + - src/leonardo_ai_sdk/models/operations/deletetexturegenerationbyid.py + - src/leonardo_ai_sdk/models/operations/get3dmodelbyid.py + - src/leonardo_ai_sdk/models/operations/get3dmodelsbyuserid.py + - src/leonardo_ai_sdk/models/operations/getcustomelementsbyuserid.py + - src/leonardo_ai_sdk/models/operations/getcustommodelsbyuserid.py + - src/leonardo_ai_sdk/models/operations/getdatasetbyid.py + - src/leonardo_ai_sdk/models/operations/getelementbyid.py + - src/leonardo_ai_sdk/models/operations/getgenerationbyid.py + - src/leonardo_ai_sdk/models/operations/getgenerationsbyuserid.py + - src/leonardo_ai_sdk/models/operations/getinitimagebyid.py + - src/leonardo_ai_sdk/models/operations/getmodelbyid.py + - src/leonardo_ai_sdk/models/operations/gettexturegenerationbyid.py + - src/leonardo_ai_sdk/models/operations/gettexturegenerationsbymodelid.py + - src/leonardo_ai_sdk/models/operations/getuserself.py + - src/leonardo_ai_sdk/models/operations/getvariationbyid.py + - src/leonardo_ai_sdk/models/operations/listelements.py + - src/leonardo_ai_sdk/models/operations/listplatformmodels.py + - src/leonardo_ai_sdk/models/operations/performalchemyupscalelcm.py + - src/leonardo_ai_sdk/models/operations/performinpaintinglcm.py + - src/leonardo_ai_sdk/models/operations/performinstantrefine.py + - src/leonardo_ai_sdk/models/operations/pricingcalculator.py + - src/leonardo_ai_sdk/models/operations/promptimprove.py + - src/leonardo_ai_sdk/models/operations/promptrandom.py + - src/leonardo_ai_sdk/models/operations/uploadcanvasinitimage.py + - src/leonardo_ai_sdk/models/operations/uploaddatasetimage.py + - src/leonardo_ai_sdk/models/operations/uploaddatasetimagefromgen.py + - src/leonardo_ai_sdk/models/operations/uploadinitimage.py + - src/leonardo_ai_sdk/models/operations/uploadmodelasset.py + - src/leonardo_ai_sdk/models/shared/__init__.py + - src/leonardo_ai_sdk/models/shared/canvasrequesttype.py + - src/leonardo_ai_sdk/models/shared/controlnet_input.py + - src/leonardo_ai_sdk/models/shared/controlnet_type.py + - src/leonardo_ai_sdk/models/shared/custom_model_type.py + - src/leonardo_ai_sdk/models/shared/element_input.py + - src/leonardo_ai_sdk/models/shared/job_status.py + - src/leonardo_ai_sdk/models/shared/lcm_generation_style.py + - src/leonardo_ai_sdk/models/shared/model_asset_texture_types.py + - src/leonardo_ai_sdk/models/shared/pricingcalculatorservices.py + - src/leonardo_ai_sdk/models/shared/sd_generation_schedulers.py + - src/leonardo_ai_sdk/models/shared/sd_generation_style.py + - src/leonardo_ai_sdk/models/shared/sd_versions.py + - src/leonardo_ai_sdk/models/shared/security.py + - src/leonardo_ai_sdk/models/shared/strength.py + - src/leonardo_ai_sdk/models/shared/universal_upscaler_style.py + - src/leonardo_ai_sdk/models/shared/universal_upscaler_ultra_style.py + - src/leonardo_ai_sdk/models/shared/user_elements_input.py + - src/leonardo_ai_sdk/models/shared/variation_type.py + - src/leonardo_ai_sdk/models_.py + - src/leonardo_ai_sdk/motion.py + - src/leonardo_ai_sdk/pricing_calculator.py + - src/leonardo_ai_sdk/prompt.py + - src/leonardo_ai_sdk/py.typed + - src/leonardo_ai_sdk/realtime_canvas.py + - src/leonardo_ai_sdk/sdk.py + - src/leonardo_ai_sdk/sdkconfiguration.py + - src/leonardo_ai_sdk/texture.py + - src/leonardo_ai_sdk/threed_model_assets.py + - src/leonardo_ai_sdk/types/__init__.py + - src/leonardo_ai_sdk/types/basemodel.py + - src/leonardo_ai_sdk/user.py + - src/leonardo_ai_sdk/utils/__init__.py + - src/leonardo_ai_sdk/utils/annotations.py + - src/leonardo_ai_sdk/utils/enums.py + - src/leonardo_ai_sdk/utils/eventstreaming.py + - src/leonardo_ai_sdk/utils/forms.py + - src/leonardo_ai_sdk/utils/headers.py + - src/leonardo_ai_sdk/utils/logger.py + - src/leonardo_ai_sdk/utils/metadata.py + - src/leonardo_ai_sdk/utils/queryparams.py + - src/leonardo_ai_sdk/utils/requestbodies.py + - src/leonardo_ai_sdk/utils/retries.py + - src/leonardo_ai_sdk/utils/security.py + - src/leonardo_ai_sdk/utils/serializers.py + - src/leonardo_ai_sdk/utils/url.py + - src/leonardo_ai_sdk/utils/values.py + - src/leonardo_ai_sdk/variation.py diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 75ddcb4d..fcf8ae59 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,21 +1,21 @@ -speakeasyVersion: 1.488.0 +speakeasyVersion: 1.688.0 sources: my-source: sourceNamespace: my-source - sourceRevisionDigest: sha256:c0003dac49c5ef097a7add6c026d46352de355736400b4ac337b907e99f30fde - sourceBlobDigest: sha256:4ead44bcaac5b14a8184f8fcc7512d53a00a5a029b3085c55d7eb331256f1dcc + sourceRevisionDigest: sha256:8935b5fb6c514e645b8521764b8993fc41bae71073b7f0f45d1be51ec1e70ac7 + sourceBlobDigest: sha256:a4d8d754f7c313c5ebb51c99f70fff61aae7295a5d270a4289d9602fad16600c tags: - latest - - speakeasy-sdk-regen-1739240004 + - speakeasy-sdk-regen-1758759959 - v1.0.0 targets: leonardo-python-sdk: source: my-source sourceNamespace: my-source - sourceRevisionDigest: sha256:c0003dac49c5ef097a7add6c026d46352de355736400b4ac337b907e99f30fde - sourceBlobDigest: sha256:4ead44bcaac5b14a8184f8fcc7512d53a00a5a029b3085c55d7eb331256f1dcc + sourceRevisionDigest: sha256:8935b5fb6c514e645b8521764b8993fc41bae71073b7f0f45d1be51ec1e70ac7 + sourceBlobDigest: sha256:a4d8d754f7c313c5ebb51c99f70fff61aae7295a5d270a4289d9602fad16600c codeSamplesNamespace: my-source-python-code-samples - codeSamplesRevisionDigest: sha256:ecf688a971e1f9e4a34ebef8f973e8d86442a51b1d811e50fad073c10498043e + codeSamplesRevisionDigest: sha256:988078b45a11f6099c9acbc857c3039d80905ad87ee0a99aa3843744ab754e76 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README.md b/README.md index f8bd74cd..ff1d6d14 100755 --- a/README.md +++ b/README.md @@ -34,7 +34,15 @@ Rest Endpoints: Leonardo.Ai API OpenAPI specification. > > Once a Python version reaches its [official end of life date](https://devguide.python.org/versions/), a 3-month grace period is provided for users to upgrade. Following this grace period, the minimum python version supported in the SDK will be updated. -The SDK can be installed with either *pip* or *poetry* package managers. +The SDK can be installed with *uv*, *pip*, or *poetry* package managers. + +### uv + +*uv* is a fast Python package installer and resolver, designed as a drop-in replacement for pip and pip-tools. It's recommended for its speed and modern Python tooling capabilities. + +```bash +uv add Leonardo-Ai-SDK +``` ### PIP @@ -103,6 +111,7 @@ Generally, the SDK will work well with most IDEs out of the box. However, when u # Synchronous Example from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -117,13 +126,15 @@ with LeonardoAiSDK(
-The same SDK client can also be used to make asychronous requests by importing asyncio. +The same SDK client can also be used to make asynchronous requests by importing asyncio. + ```python # Asynchronous Example import asyncio from leonardo_ai_sdk import LeonardoAiSDK async def main(): + async with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -145,7 +156,14 @@ asyncio.run(main())
Available methods -### [dataset](docs/sdks/dataset/README.md) +### [ThreeDModelAssets](docs/sdks/threedmodelassets/README.md) + +* [delete3_d_model_by_id](docs/sdks/threedmodelassets/README.md#delete3_d_model_by_id) - Delete 3D Model by ID +* [get3_d_model_by_id](docs/sdks/threedmodelassets/README.md#get3_d_model_by_id) - Get 3D Model by ID +* [get3_d_models_by_user_id](docs/sdks/threedmodelassets/README.md#get3_d_models_by_user_id) - Get 3D models by user ID +* [upload_model_asset](docs/sdks/threedmodelassets/README.md#upload_model_asset) - Upload 3D Model + +### [Dataset](docs/sdks/dataset/README.md) * [create_dataset](docs/sdks/dataset/README.md#create_dataset) - Create a Dataset * [delete_dataset_by_id](docs/sdks/dataset/README.md#delete_dataset_by_id) - Delete a Single Dataset by ID @@ -153,7 +171,7 @@ asyncio.run(main()) * [upload_dataset_image](docs/sdks/dataset/README.md#upload_dataset_image) - Upload dataset image * [upload_dataset_image_from_gen](docs/sdks/dataset/README.md#upload_dataset_image_from_gen) - Upload a Single Generated Image to a Dataset -### [elements](docs/sdks/elements/README.md) +### [Elements](docs/sdks/elements/README.md) * [create_element](docs/sdks/elements/README.md#create_element) - Train a Custom Element * [delete_element_by_id](docs/sdks/elements/README.md#delete_element_by_id) - Delete a Single Custom Element by ID @@ -161,22 +179,21 @@ asyncio.run(main()) * [get_element_by_id](docs/sdks/elements/README.md#get_element_by_id) - Get a Single Custom Element by ID * [list_elements](docs/sdks/elements/README.md#list_elements) - List Elements -### [image](docs/sdks/image/README.md) +### [Image](docs/sdks/image/README.md) * [create_generation](docs/sdks/image/README.md#create_generation) - Create a Generation of Images * [delete_generation_by_id](docs/sdks/image/README.md#delete_generation_by_id) - Delete a Single Generation * [get_generation_by_id](docs/sdks/image/README.md#get_generation_by_id) - Get a Single Generation * [get_generations_by_user_id](docs/sdks/image/README.md#get_generations_by_user_id) - Get generations by user ID -### [init_images](docs/sdks/initimages/README.md) +### [InitImages](docs/sdks/initimages/README.md) * [delete_init_image_by_id](docs/sdks/initimages/README.md#delete_init_image_by_id) - Delete init image * [get_init_image_by_id](docs/sdks/initimages/README.md#get_init_image_by_id) - Get single init image * [upload_canvas_init_image](docs/sdks/initimages/README.md#upload_canvas_init_image) - Upload Canvas Editor init and mask image * [upload_init_image](docs/sdks/initimages/README.md#upload_init_image) - Upload init image - -### [models](docs/sdks/models/README.md) +### [Models](docs/sdks/models/README.md) * [create_model](docs/sdks/models/README.md#create_model) - Train a Custom Model * [delete_model_by_id](docs/sdks/models/README.md#delete_model_by_id) - Delete a Single Custom Model by ID @@ -184,50 +201,47 @@ asyncio.run(main()) * [get_model_by_id](docs/sdks/models/README.md#get_model_by_id) - Get a Single Custom Model by ID * [list_platform_models](docs/sdks/models/README.md#list_platform_models) - List Platform Models -### [motion](docs/sdks/motion/README.md) +### [Motion](docs/sdks/motion/README.md) +* [create_image_to_video_generation](docs/sdks/motion/README.md#create_image_to_video_generation) - Create a video generation from an image * [create_svd_motion_generation](docs/sdks/motion/README.md#create_svd_motion_generation) - Create SVD Motion Generation +* [create_text_to_video_generation](docs/sdks/motion/README.md#create_text_to_video_generation) - Create a video generation from a text prompt +* [create_video_upscale](docs/sdks/motion/README.md#create_video_upscale) - Upscale a generated video -### [pricing_calculator](docs/sdks/pricingcalculator/README.md) +### [PricingCalculator](docs/sdks/pricingcalculator/README.md) * [pricing_calculator](docs/sdks/pricingcalculator/README.md#pricing_calculator) - Calculating API Cost -### [prompt](docs/sdks/prompt/README.md) +### [Prompt](docs/sdks/prompt/README.md) * [prompt_improve](docs/sdks/prompt/README.md#prompt_improve) - Improve a Prompt * [prompt_random](docs/sdks/prompt/README.md#prompt_random) - Generate a Random prompt -### [realtime_canvas](docs/sdks/realtimecanvas/README.md) +### [RealtimeCanvas](docs/sdks/realtimecanvas/README.md) * [create_lcm_generation](docs/sdks/realtimecanvas/README.md#create_lcm_generation) - Create LCM Generation * [perform_alchemy_upscale_lcm](docs/sdks/realtimecanvas/README.md#perform_alchemy_upscale_lcm) - Perform Alchemy Upscale on a LCM image * [perform_inpainting_lcm](docs/sdks/realtimecanvas/README.md#perform_inpainting_lcm) - Perform inpainting on a LCM image * [perform_instant_refine](docs/sdks/realtimecanvas/README.md#perform_instant_refine) - Perform instant refine on a LCM image -### [texture](docs/sdks/texture/README.md) +### [Texture](docs/sdks/texture/README.md) * [create_texture_generation](docs/sdks/texture/README.md#create_texture_generation) - Create Texture Generation * [delete_texture_generation_by_id](docs/sdks/texture/README.md#delete_texture_generation_by_id) - Delete Texture Generation by ID * [get_texture_generation_by_id](docs/sdks/texture/README.md#get_texture_generation_by_id) - Get Texture Generation by ID * [get_texture_generations_by_model_id](docs/sdks/texture/README.md#get_texture_generations_by_model_id) - Get texture generations by 3D Model ID -### [three_d_model_assets](docs/sdks/threedmodelassets/README.md) - -* [delete3_d_model_by_id](docs/sdks/threedmodelassets/README.md#delete3_d_model_by_id) - Delete 3D Model by ID -* [get3_d_model_by_id](docs/sdks/threedmodelassets/README.md#get3_d_model_by_id) - Get 3D Model by ID -* [get3_d_models_by_user_id](docs/sdks/threedmodelassets/README.md#get3_d_models_by_user_id) - Get 3D models by user ID -* [upload_model_asset](docs/sdks/threedmodelassets/README.md#upload_model_asset) - Upload 3D Model - -### [user](docs/sdks/user/README.md) +### [User](docs/sdks/user/README.md) * [get_user_self](docs/sdks/user/README.md#get_user_self) - Get user information -### [variation](docs/sdks/variation/README.md) +### [Variation](docs/sdks/variation/README.md) * [create_universal_upscaler_job](docs/sdks/variation/README.md#create_universal_upscaler_job) - Create using Universal Upscaler * [create_variation_no_bg](docs/sdks/variation/README.md#create_variation_no_bg) - Create no background * [create_variation_unzoom](docs/sdks/variation/README.md#create_variation_unzoom) - Create unzoom * [create_variation_upscale](docs/sdks/variation/README.md#create_variation_upscale) - Create upscale +* [get_motion_variation_by_id](docs/sdks/variation/README.md#get_motion_variation_by_id) - Get motion variation by ID * [get_variation_by_id](docs/sdks/variation/README.md#get_variation_by_id) - Get variation by ID
@@ -249,6 +263,7 @@ To change the default retry strategy for a single API call, simply provide a `Re from leonardo_ai_sdk import LeonardoAiSDK from leonardo_ai_sdk.utils import BackoffStrategy, RetryConfig + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -268,6 +283,7 @@ If you'd like to override the default retry strategy for all operations that sup from leonardo_ai_sdk import LeonardoAiSDK from leonardo_ai_sdk.utils import BackoffStrategy, RetryConfig + with LeonardoAiSDK( retry_config=RetryConfig("backoff", BackoffStrategy(1, 50, 1.1, 100), False), bearer_auth="", @@ -286,29 +302,22 @@ with LeonardoAiSDK( ## Error Handling -Handling errors in this SDK should largely match your expectations. All operations return a response object or raise an exception. - -By default, an API error will raise a errors.SDKError exception, which has the following properties: +[`LeonardoAiSDKError`](./src/leonardo_ai_sdk/models/errors/leonardoaisdkerror.py) is the base class for all HTTP error responses. It has the following properties: -| Property | Type | Description | -|-----------------|------------------|-----------------------| -| `.status_code` | *int* | The HTTP status code | -| `.message` | *str* | The error message | -| `.raw_response` | *httpx.Response* | The raw HTTP response | -| `.body` | *str* | The response content | - -When custom error responses are specified for an operation, the SDK may also raise their associated exceptions. You can refer to respective *Errors* tables in SDK docs for more details on possible exception types for each operation. For example, the `delete_init_image_by_id_async` method may raise the following exceptions: - -| Error Type | Status Code | Content Type | -| --------------- | ----------- | ------------ | -| errors.SDKError | 4XX, 5XX | \*/\* | +| Property | Type | Description | +| ------------------ | ---------------- | ------------------------------------------------------ | +| `err.message` | `str` | Error message | +| `err.status_code` | `int` | HTTP response status code eg `404` | +| `err.headers` | `httpx.Headers` | HTTP response headers | +| `err.body` | `str` | HTTP body. Can be empty string if no body is returned. | +| `err.raw_response` | `httpx.Response` | Raw HTTP response | ### Example - ```python from leonardo_ai_sdk import LeonardoAiSDK from leonardo_ai_sdk.models import errors + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -322,10 +331,35 @@ with LeonardoAiSDK( # Handle response print(res.object) - except errors.SDKError as e: - # handle exception - raise(e) + + except errors.LeonardoAiSDKError as e: + # The base class for HTTP error responses + print(e.message) + print(e.status_code) + print(e.body) + print(e.headers) + print(e.raw_response) + ``` + +### Error Classes +**Primary error:** +* [`LeonardoAiSDKError`](./src/leonardo_ai_sdk/models/errors/leonardoaisdkerror.py): The base class for HTTP error responses. + +
Less common errors (5) + +
+ +**Network errors:** +* [`httpx.RequestError`](https://www.python-httpx.org/exceptions/#httpx.RequestError): Base class for request errors. + * [`httpx.ConnectError`](https://www.python-httpx.org/exceptions/#httpx.ConnectError): HTTP client was unable to make a request to a server. + * [`httpx.TimeoutException`](https://www.python-httpx.org/exceptions/#httpx.TimeoutException): HTTP request timed out. + + +**Inherit from [`LeonardoAiSDKError`](./src/leonardo_ai_sdk/models/errors/leonardoaisdkerror.py)**: +* [`ResponseValidationError`](./src/leonardo_ai_sdk/models/errors/responsevalidationerror.py): Type mismatch between the response data and the expected Pydantic model. Provides access to the Pydantic validation error via the `cause` attribute. + +
@@ -418,10 +452,11 @@ s = LeonardoAiSDK(async_client=CustomClient(httpx.AsyncClient())) ### Override Server URL Per-Client -The default server can also be overridden globally by passing a URL to the `server_url: str` optional parameter when initializing the SDK client instance. For example: +The default server can be overridden globally by passing a URL to the `server_url: str` optional parameter when initializing the SDK client instance. For example: ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( server_url="https://cloud.leonardo.ai/api/rest/v1", bearer_auth="", @@ -454,6 +489,7 @@ To authenticate with the API the `bearer_auth` parameter must be set when initia ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -478,6 +514,7 @@ The `LeonardoAiSDK` class implements the context manager protocol and registers ```python from leonardo_ai_sdk import LeonardoAiSDK def main(): + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -486,6 +523,7 @@ def main(): # Or when using async: async def amain(): + async with LeonardoAiSDK( bearer_auth="", ) as las_client: diff --git a/RELEASES.md b/RELEASES.md index 60cc2980..f34f377e 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1326,4 +1326,14 @@ Based on: ### Generated - [python v6.5.1] . ### Releases -- [PyPI v6.5.1] https://pypi.org/project/Leonardo-Ai-SDK/6.5.1 - . \ No newline at end of file +- [PyPI v6.5.1] https://pypi.org/project/Leonardo-Ai-SDK/6.5.1 - . + +## 2026-01-19 00:32:27 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.688.0 (2.796.4) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v6.6.0] . +### Releases +- [PyPI v6.6.0] https://pypi.org/project/Leonardo-Ai-SDK/6.6.0 - . \ No newline at end of file diff --git a/USAGE.md b/USAGE.md index ddbb071b..d7b2c1f2 100644 --- a/USAGE.md +++ b/USAGE.md @@ -3,6 +3,7 @@ # Synchronous Example from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -17,13 +18,15 @@ with LeonardoAiSDK(
-The same SDK client can also be used to make asychronous requests by importing asyncio. +The same SDK client can also be used to make asynchronous requests by importing asyncio. + ```python # Asynchronous Example import asyncio from leonardo_ai_sdk import LeonardoAiSDK async def main(): + async with LeonardoAiSDK( bearer_auth="", ) as las_client: diff --git a/docs/models/operations/createdatasetrequestbody.md b/docs/models/operations/createdatasetrequestbody.md index fc8dbe42..f1ab2570 100644 --- a/docs/models/operations/createdatasetrequestbody.md +++ b/docs/models/operations/createdatasetrequestbody.md @@ -7,5 +7,5 @@ Query parameters to be provided in the request body as a JSON object | Field | Type | Required | Description | | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | -| `name` | *str* | :heavy_check_mark: | The name of the dataset. | -| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | A description for the dataset. | \ No newline at end of file +| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | A description for the dataset. | +| `name` | *str* | :heavy_check_mark: | The name of the dataset. | \ No newline at end of file diff --git a/docs/models/operations/createelementrequestbody.md b/docs/models/operations/createelementrequestbody.md index e99f6b37..f509620d 100644 --- a/docs/models/operations/createelementrequestbody.md +++ b/docs/models/operations/createelementrequestbody.md @@ -5,15 +5,15 @@ Query parameters to be provided in the request body as a JSON object. ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | -| `dataset_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the dataset to train the element on. | -| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | The description of the element. | -| `instance_prompt` | *Optional[str]* | :heavy_minus_sign: | The instance prompt to use during training.Try “a” by a noun. E.g. a castle | -| `learning_rate` | *Optional[float]* | :heavy_minus_sign: | The speed of element learns. | -| `lora_focus` | *Optional[str]* | :heavy_minus_sign: | The category determines how the element will be trained. Options are 'General' \| 'Character' \| 'Style' \| 'Object'. | -| `name` | *Optional[str]* | :heavy_minus_sign: | The name of the element. | -| `num_train_epochs` | *Optional[int]* | :heavy_minus_sign: | The number of times the entire training dataset is passed through the element. | -| `resolution` | *OptionalNullable[int]* | :heavy_minus_sign: | The resolution for training. Must be 1024. | -| `sd_version` | [Optional[operations.SdVersions]](../../models/operations/sdversions.md) | :heavy_minus_sign: | The base version of stable diffusion to use if not using a custom model. | -| `train_text_encoder` | *Optional[bool]* | :heavy_minus_sign: | Whether or not encode the train text. | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `dataset_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the dataset to train the element on. | +| `description` | *OptionalNullable[str]* | :heavy_minus_sign: | The description of the element. | +| `instance_prompt` | *OptionalNullable[str]* | :heavy_minus_sign: | Use a word that is closely related to what you're training that isn't too common. For example, instead of 'dog,' try something unique like 'jackthedog' or 'magicdonut'. Required for all non-FLUX_DEV models and FLUX_DEV Character model training. | +| `learning_rate` | *float* | :heavy_check_mark: | The speed at which the model learns during training.

Model TypeLora FocusMinMaxDefault
DefaultGeneral \| Style \| Character \| Object0.000000010.000010.000001
FLUX_DEVStyle0.0000010.000030.00001
Object0.000010.0010.0004
Character0.000010.0010.0005
GeneralNA
| +| `lora_focus` | *str* | :heavy_check_mark: | The category determines how the element will be trained. Options are 'General' \| 'Character' \| 'Style' \| 'Object'. FLUX_DEV doesn't support General category. | +| `name` | *Optional[str]* | :heavy_minus_sign: | The name of the element. | +| `num_train_epochs` | *int* | :heavy_check_mark: | The number of times the entire training dataset is passed through the element.

Model TypeLora FocusMinMaxDefault
DefaultGeneral \| Style \| Character \| Object1250100
FLUX_DEVStyle3012060
Object120220140
Character100200135
GeneralNA
| +| `resolution` | *OptionalNullable[int]* | :heavy_minus_sign: | The resolution for training. Must be 1024. | +| `sd_version` | [Optional[operations.SdVersions]](../../models/operations/sdversions.md) | :heavy_minus_sign: | The base version to use if not using a custom model. | +| `train_text_encoder` | *Optional[bool]* | :heavy_minus_sign: | Whether or not encode the train text. | \ No newline at end of file diff --git a/docs/models/operations/creategenerationrequestbody.md b/docs/models/operations/creategenerationrequestbody.md index 437460f2..fd30d7c4 100644 --- a/docs/models/operations/creategenerationrequestbody.md +++ b/docs/models/operations/creategenerationrequestbody.md @@ -5,53 +5,54 @@ Query parameters to be provided in the request body as a JSON object ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `alchemy` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Alchemy. Note: The appropriate Alchemy version is selected for the specified model. For example, XL models will use Alchemy V2. | -| `canvas_init_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The ID of an initial image to use in Canvas Editor request. | -| `canvas_mask_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The ID of a mask image to use in Canvas Editor request. | -| `canvas_request` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the generation is for the Canvas Editor feature. | -| `canvas_request_type` | [OptionalNullable[shared.CanvasRequestType]](../../models/shared/canvasrequesttype.md) | :heavy_minus_sign: | The type of request for the Canvas Editor. | -| `contrast_ratio` | *OptionalNullable[float]* | :heavy_minus_sign: | Contrast Ratio to use with Alchemy. Must be a float between 0 and 1 inclusive. | -| ~~`control_net`~~ | *OptionalNullable[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

This parameter will be deprecated in September 2024. Please use the controlnets array instead. | -| ~~`control_net_type`~~ | [Optional[shared.ControlnetType]](../../models/shared/controlnettype.md) | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

This parameter will be deprecated in September 2024. Please use the controlnets array instead. | -| `controlnets` | List[[shared.ControlnetInput](../../models/shared/controlnetinput.md)] | :heavy_minus_sign: | N/A | -| `elements` | List[[shared.ElementInput](../../models/shared/elementinput.md)] | :heavy_minus_sign: | N/A | -| `enhance_prompt` | *OptionalNullable[bool]* | :heavy_minus_sign: | When enabled, your prompt is expanded to include more detail. | -| `enhance_prompt_instruction` | *OptionalNullable[str]* | :heavy_minus_sign: | When enhancePrompt is enabled, the prompt is enhanced based on the given instructions. | -| `expanded_domain` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use the Expanded Domain feature of Alchemy. | -| `fantasy_avatar` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use the Fantasy Avatar feature. | -| `guidance_scale` | *OptionalNullable[int]* | :heavy_minus_sign: | How strongly the generation should reflect the prompt. 7 is recommended. Must be between 1 and 20. | -| `height` | *OptionalNullable[int]* | :heavy_minus_sign: | The input height of the images. Must be between 32 and 1536 and be a multiple of 8. Note: Input resolution is not always the same as output resolution due to upscaling from other features. | -| `high_contrast` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use the High Contrast feature of Prompt Magic. Note: Controls RAW mode. Set to false to enable RAW mode. | -| `high_resolution` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use the High Resolution feature of Prompt Magic. | -| `image_prompt_weight` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | -| `image_prompts` | List[*str*] | :heavy_minus_sign: | N/A | -| `init_generation_image_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The ID of an existing image to use in image2image. | -| `init_image_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The ID of an Init Image to use in image2image. | -| `init_strength` | *OptionalNullable[float]* | :heavy_minus_sign: | How strongly the generated images should reflect the original image in image2image. Must be a float between 0.1 and 0.9. | -| `model_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The model ID used for image generation. If not provided, uses sd_version to determine the version of Stable Diffusion to use. In-app, model IDs are under the Finetune Models menu. Click on the platform model or your custom model, then click View More. For platform models, you can also use the List Platform Models API. | -| `negative_prompt` | *OptionalNullable[str]* | :heavy_minus_sign: | The negative prompt used for the image generation | -| `num_images` | *OptionalNullable[int]* | :heavy_minus_sign: | The number of images to generate. Must be between 1 and 8. If either width or height is over 768, must be between 1 and 4. | -| `num_inference_steps` | *OptionalNullable[int]* | :heavy_minus_sign: | The Step Count to use for the generation. Must be between 10 and 60. Default is 15. | -| `photo_real` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable the photoReal feature. Requires enabling alchemy and unspecifying modelId (for photoRealVersion V1). | -| `photo_real_strength` | *OptionalNullable[float]* | :heavy_minus_sign: | Depth of field of photoReal. Must be 0.55 for low, 0.5 for medium, or 0.45 for high. Defaults to 0.55 if not specified. | -| `photo_real_version` | *OptionalNullable[str]* | :heavy_minus_sign: | The version of photoReal to use. Must be v1 or v2. | -| `preset_style` | [OptionalNullable[shared.SdGenerationStyle]](../../models/shared/sdgenerationstyle.md) | :heavy_minus_sign: | The style to generate images with. When photoReal is enabled, refer to the Guide section for a full list. When alchemy is disabled, use LEONARDO or NONE. When alchemy is enabled, use ANIME, CREATIVE, DYNAMIC, ENVIRONMENT, GENERAL, ILLUSTRATION, PHOTOGRAPHY, RAYTRACED, RENDER_3D, SKETCH_BW, SKETCH_COLOR, or NONE. | -| `prompt` | *Optional[str]* | :heavy_minus_sign: | The prompt used to generate images | -| `prompt_magic` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Prompt Magic. | -| `prompt_magic_strength` | *OptionalNullable[float]* | :heavy_minus_sign: | Strength of prompt magic. Must be a float between 0.1 and 1.0 | -| `prompt_magic_version` | *OptionalNullable[str]* | :heavy_minus_sign: | Prompt magic version v2 or v3, for use when promptMagic: true | -| `public` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the generated images should show in the community feed. | -| `scheduler` | [Optional[shared.SdGenerationSchedulers]](../../models/shared/sdgenerationschedulers.md) | :heavy_minus_sign: | The scheduler to generate images with. Defaults to EULER_DISCRETE if not specified. | -| `sd_version` | [Optional[shared.SdVersions]](../../models/shared/sdversions.md) | :heavy_minus_sign: | The base version of stable diffusion to use if not using a custom model. v1_5 is 1.5, v2 is 2.1, if not specified it will default to v1_5. Also includes SDXL and SDXL Lightning models | -| `seed` | *OptionalNullable[int]* | :heavy_minus_sign: | Apply a fixed seed to maintain consistency across generation sets. The maximum seed value is 2147483637 for Flux and 9999999998 for other models | -| `tiling` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the generated images should tile on all axis. | -| `transparency` | [OptionalNullable[operations.TransparencyType]](../../models/operations/transparencytype.md) | :heavy_minus_sign: | Which type of transparency this image should use | -| `ultra` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Ultra mode. Note: can not be used with Alchemy. | -| `unzoom` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the generated images should be unzoomed (requires unzoomAmount and init_image_id to be set). | -| `unzoom_amount` | *OptionalNullable[float]* | :heavy_minus_sign: | How much the image should be unzoomed (requires an init_image_id and unzoom to be set to true). | -| `upscale_ratio` | *OptionalNullable[float]* | :heavy_minus_sign: | How much the image should be upscaled. (Enterprise Only) | -| `user_elements` | List[[shared.UserElementsInput](../../models/shared/userelementsinput.md)] | :heavy_minus_sign: | N/A | -| ~~`weighting`~~ | *OptionalNullable[float]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

This parameter will be deprecated in September 2024. Please use the controlnets array instead. | -| `width` | *OptionalNullable[int]* | :heavy_minus_sign: | The input width of the images. Must be between 32 and 1536 and be a multiple of 8. Note: Input resolution is not always the same as output resolution due to upscaling from other features. | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `alchemy` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Alchemy. Note: The appropriate Alchemy version is selected for the specified model. For example, XL models will use Alchemy V2. | | +| `canvas_init_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The ID of an initial image to use in Canvas Editor request. | | +| `canvas_mask_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The ID of a mask image to use in Canvas Editor request. | | +| `canvas_request` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the generation is for the Canvas Editor feature. | | +| `canvas_request_type` | [OptionalNullable[shared.CanvasRequestType]](../../models/shared/canvasrequesttype.md) | :heavy_minus_sign: | The type of request for the Canvas Editor. | | +| `contrast` | *OptionalNullable[float]* | :heavy_minus_sign: | Adjusts the contrast level of the generated image. Used in Phoenix and Flux models. Accepts values [1.0, 1.3, 1.8, 2.5, 3, 3.5, 4, 4.5]. For Phoenix, if alchemy is true, contrast needs to be 2.5 or higher. | 3.5 | +| `contrast_ratio` | *OptionalNullable[float]* | :heavy_minus_sign: | Contrast Ratio to use with Alchemy. Must be a float between 0 and 1 inclusive. | | +| ~~`control_net`~~ | *OptionalNullable[bool]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

This parameter will be deprecated in September 2024. Please use the controlnets array instead. | | +| ~~`control_net_type`~~ | [Optional[shared.ControlnetType]](../../models/shared/controlnettype.md) | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

This parameter will be deprecated in September 2024. Please use the controlnets array instead. | | +| `controlnets` | List[[shared.ControlnetInput](../../models/shared/controlnetinput.md)] | :heavy_minus_sign: | N/A | | +| `elements` | List[[shared.ElementInput](../../models/shared/elementinput.md)] | :heavy_minus_sign: | N/A | | +| `enhance_prompt` | *OptionalNullable[bool]* | :heavy_minus_sign: | When enabled, your prompt is expanded to include more detail. | | +| `enhance_prompt_instruction` | *OptionalNullable[str]* | :heavy_minus_sign: | When enhancePrompt is enabled, the prompt is enhanced based on the given instructions. | | +| `expanded_domain` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use the Expanded Domain feature of Alchemy. | | +| `fantasy_avatar` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use the Fantasy Avatar feature. | | +| `guidance_scale` | *OptionalNullable[int]* | :heavy_minus_sign: | How strongly the generation should reflect the prompt. 7 is recommended. Must be between 1 and 20. | | +| `height` | *OptionalNullable[int]* | :heavy_minus_sign: | The input height of the images. Must be between 32 and 1536 and be a multiple of 8. Note: Input resolution is not always the same as output resolution due to upscaling from other features. | | +| `high_contrast` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use the High Contrast feature of Prompt Magic. Note: Controls RAW mode. Set to false to enable RAW mode. | | +| `high_resolution` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use the High Resolution feature of Prompt Magic. | | +| `image_prompt_weight` | *OptionalNullable[float]* | :heavy_minus_sign: | N/A | | +| `image_prompts` | List[*Nullable[str]*] | :heavy_minus_sign: | N/A | | +| `init_generation_image_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The ID of an existing image to use in image2image. | | +| `init_image_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The ID of an Init Image to use in image2image. | | +| `init_strength` | *OptionalNullable[float]* | :heavy_minus_sign: | How strongly the generated images should reflect the original image in image2image. Must be a float between 0.1 and 0.9. | | +| `model_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The model ID used for image generation. If not provided, uses sd_version to determine the version of Stable Diffusion to use. In-app, model IDs are under the Finetune Models menu. Click on the platform model or your custom model, then click View More. For platform models, you can also use the List Platform Models API. | | +| `negative_prompt` | *OptionalNullable[str]* | :heavy_minus_sign: | The negative prompt used for the image generation | | +| `num_images` | *OptionalNullable[int]* | :heavy_minus_sign: | The number of images to generate. Must be between 1 and 8. If either width or height is over 768, must be between 1 and 4. | | +| `num_inference_steps` | *OptionalNullable[int]* | :heavy_minus_sign: | The Step Count to use for the generation. Must be between 10 and 60. Default is 15. | | +| `photo_real` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable the photoReal feature. Requires enabling alchemy and unspecifying modelId (for photoRealVersion V1). | | +| `photo_real_strength` | *OptionalNullable[float]* | :heavy_minus_sign: | Depth of field of photoReal. Must be 0.55 for low, 0.5 for medium, or 0.45 for high. Defaults to 0.55 if not specified. | | +| `photo_real_version` | *OptionalNullable[str]* | :heavy_minus_sign: | The version of photoReal to use. Must be v1 or v2. | | +| `preset_style` | [OptionalNullable[shared.SdGenerationStyle]](../../models/shared/sdgenerationstyle.md) | :heavy_minus_sign: | The style to generate images with. When photoReal is enabled, refer to the Guide section for a full list. When alchemy is disabled, use LEONARDO or NONE. When alchemy is enabled, use ANIME, CREATIVE, DYNAMIC, ENVIRONMENT, GENERAL, ILLUSTRATION, PHOTOGRAPHY, RAYTRACED, RENDER_3D, SKETCH_BW, SKETCH_COLOR, or NONE. | | +| `prompt` | *Optional[str]* | :heavy_minus_sign: | The prompt used to generate images | | +| `prompt_magic` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Prompt Magic. | | +| `prompt_magic_strength` | *OptionalNullable[float]* | :heavy_minus_sign: | Strength of prompt magic. Must be a float between 0.1 and 1.0 | | +| `prompt_magic_version` | *OptionalNullable[str]* | :heavy_minus_sign: | Prompt magic version v2 or v3, for use when promptMagic: true | | +| `public` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the generated images should show in the community feed. | | +| `scheduler` | [Optional[shared.SdGenerationSchedulers]](../../models/shared/sdgenerationschedulers.md) | :heavy_minus_sign: | The scheduler to generate images with. Defaults to EULER_DISCRETE if not specified. | | +| `sd_version` | [Optional[shared.SdVersions]](../../models/shared/sdversions.md) | :heavy_minus_sign: | The base version of stable diffusion to use if not using a custom model. v1_5 is 1.5, v2 is 2.1, if not specified it will default to v1_5. Also includes SDXL and SDXL Lightning models | | +| `seed` | *OptionalNullable[int]* | :heavy_minus_sign: | Apply a fixed seed to maintain consistency across generation sets. The maximum seed value is 2147483637 for Flux and 9999999998 for other models | | +| `tiling` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the generated images should tile on all axis. | | +| `transparency` | [OptionalNullable[operations.TransparencyType]](../../models/operations/transparencytype.md) | :heavy_minus_sign: | Which type of transparency this image should use | | +| `ultra` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Ultra mode. Note: can not be used with Alchemy. | | +| `unzoom` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the generated images should be unzoomed (requires unzoomAmount and init_image_id to be set). | | +| `unzoom_amount` | *OptionalNullable[float]* | :heavy_minus_sign: | How much the image should be unzoomed (requires an init_image_id and unzoom to be set to true). | | +| `upscale_ratio` | *OptionalNullable[float]* | :heavy_minus_sign: | How much the image should be upscaled. (Enterprise Only) | | +| `user_elements` | List[[shared.UserElementsInput](../../models/shared/userelementsinput.md)] | :heavy_minus_sign: | N/A | | +| ~~`weighting`~~ | *OptionalNullable[float]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

This parameter will be deprecated in September 2024. Please use the controlnets array instead. | | +| `width` | *OptionalNullable[int]* | :heavy_minus_sign: | The input width of the images. Must be between 32 and 1536 and be a multiple of 8. Note: Input resolution is not always the same as output resolution due to upscaling from other features. | | \ No newline at end of file diff --git a/docs/models/operations/createimagetovideogenerationmotionstring.md b/docs/models/operations/createimagetovideogenerationmotionstring.md new file mode 100644 index 00000000..5882d58e --- /dev/null +++ b/docs/models/operations/createimagetovideogenerationmotionstring.md @@ -0,0 +1,12 @@ +# CreateImageToVideoGenerationMotionString + +The resolution of the output video. Acceptable values vary based on model + + +## Values + +| Name | Value | +| ----------------- | ----------------- | +| `RESOLUTION_480` | RESOLUTION_480 | +| `RESOLUTION_720` | RESOLUTION_720 | +| `RESOLUTION_1080` | RESOLUTION_1080 | \ No newline at end of file diff --git a/docs/models/operations/createimagetovideogenerationrequestbody.md b/docs/models/operations/createimagetovideogenerationrequestbody.md new file mode 100644 index 00000000..b0b04ee8 --- /dev/null +++ b/docs/models/operations/createimagetovideogenerationrequestbody.md @@ -0,0 +1,26 @@ +# CreateImageToVideoGenerationRequestBody + +Query parameters can also be provided in the request body as a JSON object + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `duration` | *OptionalNullable[int]* | :heavy_minus_sign: | Duration of the output video in seconds. Allowed values: 4, 6, or 8 on models VEO3 and VEO3FAST (default: 8) and 5 or 10 on model KLING2_5 (default: 5). | +| `elements` | List[[shared.ElementInput](../../models/shared/elementinput.md)] | :heavy_minus_sign: | An array of elements/loras objects that will be applied sequentially to the output. Elements are only supported for Motion2.0 generations. | +| `end_frame_image` | [OptionalNullable[operations.Object]](../../models/operations/object.md) | :heavy_minus_sign: | The end frame image. Supported only on kling2_1 model when used in conjunction with an init image. | +| `frame_interpolation` | *OptionalNullable[bool]* | :heavy_minus_sign: | Smoothly blend frames for fluid video transitions using Interpolation. | +| `height` | *OptionalNullable[int]* | :heavy_minus_sign: | Height of the output video. Acceptable values vary based on model | +| `image_id` | *str* | :heavy_check_mark: | The ID of the image, supports generated images and init images. Use only image or imageId with imageType. | +| `image_type` | [operations.ImageType](../../models/operations/imagetype.md) | :heavy_check_mark: | Type indicating whether the init image is uploaded or generated. Use only image or imageId with imageType. | +| `is_public` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the generation is public or not | +| `model` | [OptionalNullable[operations.CreateImageToVideoGenerationString]](../../models/operations/createimagetovideogenerationstring.md) | :heavy_minus_sign: | The model to use for the video generation. Defaults to MOTION2 if not specified. | +| `negative_prompt` | *OptionalNullable[str]* | :heavy_minus_sign: | The negative prompt used for the video generation. | +| `prompt` | *str* | :heavy_check_mark: | The prompt used to generate video | +| `prompt_enhance` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enhance the prompt. | +| `prompt_enhance_instruction` | *OptionalNullable[str]* | :heavy_minus_sign: | A natural language instruction used to modify the main prompt. For example, 'make it cinematic', 'add a rainbow', or 'change the subject to a cat'. | +| `resolution` | [OptionalNullable[operations.CreateImageToVideoGenerationMotionString]](../../models/operations/createimagetovideogenerationmotionstring.md) | :heavy_minus_sign: | The resolution of the output video. Acceptable values vary based on model | +| `seed` | *OptionalNullable[int]* | :heavy_minus_sign: | Apply a fixed seed to maintain consistency across generation sets. The maximum seed value is 2147483637 for Motion 2.0. | +| `style_ids` | List[*str*] | :heavy_minus_sign: | Predefined styles to enhance the prompt. This accepts a list of style uuids. | +| `width` | *OptionalNullable[int]* | :heavy_minus_sign: | Width of the output video. Acceptable values vary based on model | \ No newline at end of file diff --git a/docs/models/operations/createimagetovideogenerationresponse.md b/docs/models/operations/createimagetovideogenerationresponse.md new file mode 100644 index 00000000..459eaf2d --- /dev/null +++ b/docs/models/operations/createimagetovideogenerationresponse.md @@ -0,0 +1,11 @@ +# CreateImageToVideoGenerationResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [httpx.Response](https://www.python-httpx.org/api/#response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.CreateImageToVideoGenerationResponseBody]](../../models/operations/createimagetovideogenerationresponsebody.md) | :heavy_minus_sign: | Responses for POST /generations-image-to-video | \ No newline at end of file diff --git a/docs/models/operations/createimagetovideogenerationresponsebody.md b/docs/models/operations/createimagetovideogenerationresponsebody.md new file mode 100644 index 00000000..e3a2531b --- /dev/null +++ b/docs/models/operations/createimagetovideogenerationresponsebody.md @@ -0,0 +1,10 @@ +# CreateImageToVideoGenerationResponseBody + +Responses for POST /generations-image-to-video + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `motion_video_generation_job` | [OptionalNullable[operations.MotionVideoGenerationOutput]](../../models/operations/motionvideogenerationoutput.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/createimagetovideogenerationstring.md b/docs/models/operations/createimagetovideogenerationstring.md new file mode 100644 index 00000000..cdced643 --- /dev/null +++ b/docs/models/operations/createimagetovideogenerationstring.md @@ -0,0 +1,15 @@ +# CreateImageToVideoGenerationString + +The model to use for the video generation. Defaults to MOTION2 if not specified. + + +## Values + +| Name | Value | +| -------------- | -------------- | +| `MOTION2` | MOTION2 | +| `VEO3` | VEO3 | +| `MOTION2_FAST` | MOTION2FAST | +| `VEO3_FAST` | VEO3FAST | +| `KLING2_1` | KLING2_1 | +| `KLING2_5` | KLING2_5 | \ No newline at end of file diff --git a/docs/models/operations/createlcmgenerationrequestbody.md b/docs/models/operations/createlcmgenerationrequestbody.md index a728c6b7..4bb9f6c0 100644 --- a/docs/models/operations/createlcmgenerationrequestbody.md +++ b/docs/models/operations/createlcmgenerationrequestbody.md @@ -7,10 +7,10 @@ Query parameters can also be provided in the request body as a JSON object | Field | Type | Required | Description | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `image_data_url` | *str* | :heavy_check_mark: | Image data used to generate image. In base64 format. Prefix: `data:image/jpeg;base64,` | -| `prompt` | *str* | :heavy_check_mark: | The prompt used to generate images | | `guidance` | *OptionalNullable[float]* | :heavy_minus_sign: | How strongly the generation should reflect the prompt. Must be a float between 0.5 and 20. | | `height` | *OptionalNullable[int]* | :heavy_minus_sign: | The output width of the image. Must be 512, 640 or 1024. | +| `image_data_url` | *str* | :heavy_check_mark: | Image data used to generate image. In base64 format. Prefix: `data:image/jpeg;base64,` | +| `prompt` | *str* | :heavy_check_mark: | The prompt used to generate images | | `request_timestamp` | *Optional[str]* | :heavy_minus_sign: | N/A | | `seed` | *OptionalNullable[int]* | :heavy_minus_sign: | Apply a fixed seed to maintain consistency across generation sets. The maximum seed value is 2147483637 for Flux and 9999999998 for other models | | `steps` | *OptionalNullable[int]* | :heavy_minus_sign: | The number of steps to use for the generation. Must be between 4 and 16. | diff --git a/docs/models/operations/createmodelrequestbody.md b/docs/models/operations/createmodelrequestbody.md index 1be26916..9595d764 100644 --- a/docs/models/operations/createmodelrequestbody.md +++ b/docs/models/operations/createmodelrequestbody.md @@ -8,10 +8,10 @@ Query parameters to be provided in the request body as a JSON object | Field | Type | Required | Description | | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | | `dataset_id` | *str* | :heavy_check_mark: | The ID of the dataset to train the model on. | -| `instance_prompt` | *str* | :heavy_check_mark: | The instance prompt to use during training. | -| `name` | *str* | :heavy_check_mark: | The name of the model. | | `description` | *OptionalNullable[str]* | :heavy_minus_sign: | The description of the model. | +| `instance_prompt` | *str* | :heavy_check_mark: | The instance prompt to use during training. | | `model_type` | [Optional[shared.CustomModelType]](../../models/shared/custommodeltype.md) | :heavy_minus_sign: | The category the most accurately reflects the model. | +| `name` | *str* | :heavy_check_mark: | The name of the model. | | `nsfw` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether or not the model is NSFW. | | `resolution` | *OptionalNullable[int]* | :heavy_minus_sign: | The resolution for training. Must be 512 or 768. | | `sd_version` | [OptionalNullable[operations.CreateModelSdVersions]](../../models/operations/createmodelsdversions.md) | :heavy_minus_sign: | The base version of stable diffusion to use if not using a custom model. v1_5 is 1.5, v2 is 2.1, if not specified it will default to v1_5. | diff --git a/docs/models/operations/createtexttovideogenerationmotionstring.md b/docs/models/operations/createtexttovideogenerationmotionstring.md new file mode 100644 index 00000000..a6e775f5 --- /dev/null +++ b/docs/models/operations/createtexttovideogenerationmotionstring.md @@ -0,0 +1,12 @@ +# CreateTextToVideoGenerationMotionString + +The resolution of the output video. Acceptable values vary based on model + + +## Values + +| Name | Value | +| ----------------- | ----------------- | +| `RESOLUTION_480` | RESOLUTION_480 | +| `RESOLUTION_720` | RESOLUTION_720 | +| `RESOLUTION_1080` | RESOLUTION_1080 | \ No newline at end of file diff --git a/docs/models/operations/createtexttovideogenerationmotionvideogenerationoutput.md b/docs/models/operations/createtexttovideogenerationmotionvideogenerationoutput.md new file mode 100644 index 00000000..5c82d597 --- /dev/null +++ b/docs/models/operations/createtexttovideogenerationmotionvideogenerationoutput.md @@ -0,0 +1,9 @@ +# CreateTextToVideoGenerationMotionVideoGenerationOutput + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `api_credit_cost` | *OptionalNullable[int]* | :heavy_minus_sign: | API credits cost, available for Production API users. | +| `generation_id` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/createtexttovideogenerationrequestbody.md b/docs/models/operations/createtexttovideogenerationrequestbody.md new file mode 100644 index 00000000..9bee43fd --- /dev/null +++ b/docs/models/operations/createtexttovideogenerationrequestbody.md @@ -0,0 +1,23 @@ +# CreateTextToVideoGenerationRequestBody + +Query parameters can also be provided in the request body as a JSON object + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| `duration` | *OptionalNullable[int]* | :heavy_minus_sign: | Duration of the output video in seconds. Defaults to 8 seconds if not specified. Allowed values: 4, 6, or 8. Supported on models VEO3 and VEO3FAST. | +| `elements` | List[[shared.ElementInput](../../models/shared/elementinput.md)] | :heavy_minus_sign: | An array of elements/loras objects that will be applied sequentially to the output. Elements are only supported for Motion2.0 generations. | +| `frame_interpolation` | *OptionalNullable[bool]* | :heavy_minus_sign: | Smoothly blend frames for fluid video transitions using Interpolation. | +| `height` | *OptionalNullable[int]* | :heavy_minus_sign: | Height of the output video. Acceptable values vary based on model | +| `is_public` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether the generation is public or not | +| `model` | [OptionalNullable[operations.CreateTextToVideoGenerationString]](../../models/operations/createtexttovideogenerationstring.md) | :heavy_minus_sign: | The model to use for the video generation. Defaults to MOTION2 if not specified. | +| `negative_prompt` | *OptionalNullable[str]* | :heavy_minus_sign: | The negative prompt used for the video generation. | +| `prompt` | *str* | :heavy_check_mark: | The prompt used to generate video | +| `prompt_enhance` | *OptionalNullable[bool]* | :heavy_minus_sign: | Whether to enhance the prompt. | +| `prompt_enhance_instruction` | *OptionalNullable[str]* | :heavy_minus_sign: | A natural language instruction used to modify the main prompt. For example, 'make it cinematic', 'add a rainbow', or 'change the subject to a cat'. | +| `resolution` | [OptionalNullable[operations.CreateTextToVideoGenerationMotionString]](../../models/operations/createtexttovideogenerationmotionstring.md) | :heavy_minus_sign: | The resolution of the output video. Acceptable values vary based on model | +| `seed` | *OptionalNullable[int]* | :heavy_minus_sign: | Apply a fixed seed to maintain consistency across generation sets. The maximum seed value is 2147483637 for Motion 2.0 and 4294967293 for Veo3. | +| `style_ids` | List[*str*] | :heavy_minus_sign: | Predefined styles to enhance the prompt. This accepts a list of style uuids. | +| `width` | *OptionalNullable[int]* | :heavy_minus_sign: | Width of the output video. Acceptable values vary based on model | \ No newline at end of file diff --git a/docs/models/operations/createtexttovideogenerationresponse.md b/docs/models/operations/createtexttovideogenerationresponse.md new file mode 100644 index 00000000..6ea818a2 --- /dev/null +++ b/docs/models/operations/createtexttovideogenerationresponse.md @@ -0,0 +1,11 @@ +# CreateTextToVideoGenerationResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [httpx.Response](https://www.python-httpx.org/api/#response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.CreateTextToVideoGenerationResponseBody]](../../models/operations/createtexttovideogenerationresponsebody.md) | :heavy_minus_sign: | Responses for POST /generations-text-to-video | \ No newline at end of file diff --git a/docs/models/operations/createtexttovideogenerationresponsebody.md b/docs/models/operations/createtexttovideogenerationresponsebody.md new file mode 100644 index 00000000..ecfbb51f --- /dev/null +++ b/docs/models/operations/createtexttovideogenerationresponsebody.md @@ -0,0 +1,10 @@ +# CreateTextToVideoGenerationResponseBody + +Responses for POST /generations-text-to-video + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `motion_video_generation_job` | [OptionalNullable[operations.CreateTextToVideoGenerationMotionVideoGenerationOutput]](../../models/operations/createtexttovideogenerationmotionvideogenerationoutput.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/createtexttovideogenerationstring.md b/docs/models/operations/createtexttovideogenerationstring.md new file mode 100644 index 00000000..d095d8c1 --- /dev/null +++ b/docs/models/operations/createtexttovideogenerationstring.md @@ -0,0 +1,15 @@ +# CreateTextToVideoGenerationString + +The model to use for the video generation. Defaults to MOTION2 if not specified. + + +## Values + +| Name | Value | +| -------------- | -------------- | +| `MOTION2` | MOTION2 | +| `VEO3` | VEO3 | +| `MOTION2_FAST` | MOTION2FAST | +| `VEO3_FAST` | VEO3FAST | +| `KLING2_1` | KLING2_1 | +| `KLING2_5` | KLING2_5 | \ No newline at end of file diff --git a/docs/models/operations/createvideoupscalemotionvideogenerationoutput.md b/docs/models/operations/createvideoupscalemotionvideogenerationoutput.md new file mode 100644 index 00000000..35bd2280 --- /dev/null +++ b/docs/models/operations/createvideoupscalemotionvideogenerationoutput.md @@ -0,0 +1,10 @@ +# CreateVideoUpscaleMotionVideoGenerationOutput + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `api_credit_cost` | *OptionalNullable[int]* | :heavy_minus_sign: | API credits cost, available for Production API users. | +| `generation_id` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `variation_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the upscale variation. | \ No newline at end of file diff --git a/docs/models/operations/createvideoupscalerequestbody.md b/docs/models/operations/createvideoupscalerequestbody.md new file mode 100644 index 00000000..fe3b22d6 --- /dev/null +++ b/docs/models/operations/createvideoupscalerequestbody.md @@ -0,0 +1,11 @@ +# CreateVideoUpscaleRequestBody + +Query parameters can also be provided in the request body as a JSON object + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `resolution` | [operations.CreateVideoUpscaleString](../../models/operations/createvideoupscalestring.md) | :heavy_check_mark: | The resolution of the upscaled video. RESOLUTION_720 is the only option for now. | +| `source_generation_id` | *str* | :heavy_check_mark: | The ID of the source video generation to upscale. | \ No newline at end of file diff --git a/docs/models/operations/createvideoupscaleresponse.md b/docs/models/operations/createvideoupscaleresponse.md new file mode 100644 index 00000000..1cd49352 --- /dev/null +++ b/docs/models/operations/createvideoupscaleresponse.md @@ -0,0 +1,11 @@ +# CreateVideoUpscaleResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [httpx.Response](https://www.python-httpx.org/api/#response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.CreateVideoUpscaleResponseBody]](../../models/operations/createvideoupscaleresponsebody.md) | :heavy_minus_sign: | Responses for POST /generations-text-to-video | \ No newline at end of file diff --git a/docs/models/operations/createvideoupscaleresponsebody.md b/docs/models/operations/createvideoupscaleresponsebody.md new file mode 100644 index 00000000..54bc13bb --- /dev/null +++ b/docs/models/operations/createvideoupscaleresponsebody.md @@ -0,0 +1,10 @@ +# CreateVideoUpscaleResponseBody + +Responses for POST /generations-text-to-video + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `motion_video_generation_job` | [OptionalNullable[operations.CreateVideoUpscaleMotionVideoGenerationOutput]](../../models/operations/createvideoupscalemotionvideogenerationoutput.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/createvideoupscalestring.md b/docs/models/operations/createvideoupscalestring.md new file mode 100644 index 00000000..bdf3873b --- /dev/null +++ b/docs/models/operations/createvideoupscalestring.md @@ -0,0 +1,10 @@ +# CreateVideoUpscaleString + +The resolution of the upscaled video. RESOLUTION_720 is the only option for now. + + +## Values + +| Name | Value | +| ---------------- | ---------------- | +| `RESOLUTION_720` | RESOLUTION_720 | \ No newline at end of file diff --git a/docs/models/operations/delete3dmodelbyidrequest.md b/docs/models/operations/delete3dmodelbyidrequest.md index 4d807680..7b6a3f96 100644 --- a/docs/models/operations/delete3dmodelbyidrequest.md +++ b/docs/models/operations/delete3dmodelbyidrequest.md @@ -5,5 +5,5 @@ | Field | Type | Required | Description | | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | -| `id` | *str* | :heavy_check_mark: | _"id" is required (enter it either in parameters or request body)_ | -| `request_body` | [Optional[operations.Delete3DModelByIDRequestBody]](../../models/operations/delete3dmodelbyidrequestbody.md) | :heavy_minus_sign: | Query parameters can also be provided in the request body as a JSON object | \ No newline at end of file +| `request_body` | [Optional[operations.Delete3DModelByIDRequestBody]](../../models/operations/delete3dmodelbyidrequestbody.md) | :heavy_minus_sign: | Query parameters can also be provided in the request body as a JSON object | +| `id` | *str* | :heavy_check_mark: | _"id" is required (enter it either in parameters or request body)_ | \ No newline at end of file diff --git a/docs/models/operations/deletetexturegenerationbyidrequest.md b/docs/models/operations/deletetexturegenerationbyidrequest.md index 55564ec5..b9e13670 100644 --- a/docs/models/operations/deletetexturegenerationbyidrequest.md +++ b/docs/models/operations/deletetexturegenerationbyidrequest.md @@ -5,5 +5,5 @@ | Field | Type | Required | Description | | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -| `id` | *str* | :heavy_check_mark: | _"id" is required (enter it either in parameters or request body)_ | -| `request_body` | [Optional[operations.DeleteTextureGenerationByIDRequestBody]](../../models/operations/deletetexturegenerationbyidrequestbody.md) | :heavy_minus_sign: | Query parameters can also be provided in the request body as a JSON object | \ No newline at end of file +| `request_body` | [Optional[operations.DeleteTextureGenerationByIDRequestBody]](../../models/operations/deletetexturegenerationbyidrequestbody.md) | :heavy_minus_sign: | Query parameters can also be provided in the request body as a JSON object | +| `id` | *str* | :heavy_check_mark: | _"id" is required (enter it either in parameters or request body)_ | \ No newline at end of file diff --git a/docs/models/operations/generatedimagevariationmotion.md b/docs/models/operations/generatedimagevariationmotion.md new file mode 100644 index 00000000..49a70b3e --- /dev/null +++ b/docs/models/operations/generatedimagevariationmotion.md @@ -0,0 +1,15 @@ +# GeneratedImageVariationMotion + +columns and relationships of "generated_image_variation_motion" + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `created_at` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | +| `motion_transform_type` | [Optional[shared.MotionVariationType]](../../models/shared/motionvariationtype.md) | :heavy_minus_sign: | The type of motion variation. | +| `resolution` | [Optional[shared.MotionResolution]](../../models/shared/motionresolution.md) | :heavy_minus_sign: | The resolution of the upscaled video. RESOLUTION_720 is the only option for now. | +| `status` | [Optional[shared.JobStatus]](../../models/shared/jobstatus.md) | :heavy_minus_sign: | The status of the current task. | +| `url` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/get3dmodelbyidrequest.md b/docs/models/operations/get3dmodelbyidrequest.md index 8314d89c..92e42855 100644 --- a/docs/models/operations/get3dmodelbyidrequest.md +++ b/docs/models/operations/get3dmodelbyidrequest.md @@ -5,7 +5,7 @@ | Field | Type | Required | Description | | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| `id` | *str* | :heavy_check_mark: | _"id" is required (enter it either in parameters or request body)_ | | `request_body` | [Optional[operations.Get3DModelByIDRequestBody]](../../models/operations/get3dmodelbyidrequestbody.md) | :heavy_minus_sign: | Query parameters can also be provided in the request body as a JSON object | +| `id` | *str* | :heavy_check_mark: | _"id" is required (enter it either in parameters or request body)_ | | `limit` | *Optional[int]* | :heavy_minus_sign: | N/A | | `offset` | *Optional[int]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/get3dmodelsbyuseridrequest.md b/docs/models/operations/get3dmodelsbyuseridrequest.md index e3498144..e0357e0e 100644 --- a/docs/models/operations/get3dmodelsbyuseridrequest.md +++ b/docs/models/operations/get3dmodelsbyuseridrequest.md @@ -5,7 +5,7 @@ | Field | Type | Required | Description | | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -| `user_id` | *str* | :heavy_check_mark: | N/A | | `request_body` | [Optional[operations.Get3DModelsByUserIDRequestBody]](../../models/operations/get3dmodelsbyuseridrequestbody.md) | :heavy_minus_sign: | Query parameters can also be provided in the request body as a JSON object | | `limit` | *Optional[int]* | :heavy_minus_sign: | N/A | -| `offset` | *Optional[int]* | :heavy_minus_sign: | N/A | \ No newline at end of file +| `offset` | *Optional[int]* | :heavy_minus_sign: | N/A | +| `user_id` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getcustomelementsbyuseridresponsebody.md b/docs/models/operations/getcustomelementsbyuseridresponsebody.md index 690af1d7..dbaedb2f 100644 --- a/docs/models/operations/getcustomelementsbyuseridresponsebody.md +++ b/docs/models/operations/getcustomelementsbyuseridresponsebody.md @@ -5,6 +5,6 @@ Responses for GET /elements/user/{userId}. ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| `user_loras` | List[[operations.GetCustomElementsByUserIDUserLoras](../../models/operations/getcustomelementsbyuseriduserloras.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `user_loras` | List[[Nullable[operations.GetCustomElementsByUserIDUserLoras]](../../models/operations/getcustomelementsbyuseriduserloras.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getcustommodelsbyuseridresponsebody.md b/docs/models/operations/getcustommodelsbyuseridresponsebody.md index 8958fa6f..86659903 100644 --- a/docs/models/operations/getcustommodelsbyuseridresponsebody.md +++ b/docs/models/operations/getcustommodelsbyuseridresponsebody.md @@ -5,6 +5,6 @@ Responses for GET /models/user/{userId} ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -| `custom_models` | List[[operations.GetCustomModelsByUserIDCustomModels](../../models/operations/getcustommodelsbyuseridcustommodels.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | +| `custom_models` | List[[Nullable[operations.GetCustomModelsByUserIDCustomModels]](../../models/operations/getcustommodelsbyuseridcustommodels.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getgenerationsbyuseridrequest.md b/docs/models/operations/getgenerationsbyuseridrequest.md index 3d809c04..700e6676 100644 --- a/docs/models/operations/getgenerationsbyuseridrequest.md +++ b/docs/models/operations/getgenerationsbyuseridrequest.md @@ -5,6 +5,6 @@ | Field | Type | Required | Description | | ------------------ | ------------------ | ------------------ | ------------------ | -| `user_id` | *str* | :heavy_check_mark: | N/A | | `limit` | *Optional[int]* | :heavy_minus_sign: | N/A | -| `offset` | *Optional[int]* | :heavy_minus_sign: | N/A | \ No newline at end of file +| `offset` | *Optional[int]* | :heavy_minus_sign: | N/A | +| `user_id` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getmotionvariationbyidrequest.md b/docs/models/operations/getmotionvariationbyidrequest.md new file mode 100644 index 00000000..c26db13a --- /dev/null +++ b/docs/models/operations/getmotionvariationbyidrequest.md @@ -0,0 +1,8 @@ +# GetMotionVariationByIDRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | "id" is required | \ No newline at end of file diff --git a/docs/models/operations/getmotionvariationbyidresponse.md b/docs/models/operations/getmotionvariationbyidresponse.md new file mode 100644 index 00000000..6c401dd0 --- /dev/null +++ b/docs/models/operations/getmotionvariationbyidresponse.md @@ -0,0 +1,11 @@ +# GetMotionVariationByIDResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [httpx.Response](https://www.python-httpx.org/api/#response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetMotionVariationByIDResponseBody]](../../models/operations/getmotionvariationbyidresponsebody.md) | :heavy_minus_sign: | Responses for GET /motion-variations/{id} | \ No newline at end of file diff --git a/docs/models/operations/getmotionvariationbyidresponsebody.md b/docs/models/operations/getmotionvariationbyidresponsebody.md new file mode 100644 index 00000000..294a6fdc --- /dev/null +++ b/docs/models/operations/getmotionvariationbyidresponsebody.md @@ -0,0 +1,10 @@ +# GetMotionVariationByIDResponseBody + +Responses for GET /motion-variations/{id} + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `generated_image_variation_motion` | List[[operations.GeneratedImageVariationMotion](../../models/operations/generatedimagevariationmotion.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/gettexturegenerationbyidrequest.md b/docs/models/operations/gettexturegenerationbyidrequest.md index 939b82f0..6387b018 100644 --- a/docs/models/operations/gettexturegenerationbyidrequest.md +++ b/docs/models/operations/gettexturegenerationbyidrequest.md @@ -5,7 +5,7 @@ | Field | Type | Required | Description | | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -| `id` | *str* | :heavy_check_mark: | _"id" is required (enter it either in parameters or request body)_ | | `request_body` | [Optional[operations.GetTextureGenerationByIDRequestBody]](../../models/operations/gettexturegenerationbyidrequestbody.md) | :heavy_minus_sign: | Query parameters can also be provided in the request body as a JSON object | +| `id` | *str* | :heavy_check_mark: | _"id" is required (enter it either in parameters or request body)_ | | `limit` | *Optional[int]* | :heavy_minus_sign: | N/A | | `offset` | *Optional[int]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/gettexturegenerationsbymodelidrequest.md b/docs/models/operations/gettexturegenerationsbymodelidrequest.md index 17776681..7e961385 100644 --- a/docs/models/operations/gettexturegenerationsbymodelidrequest.md +++ b/docs/models/operations/gettexturegenerationsbymodelidrequest.md @@ -5,7 +5,7 @@ | Field | Type | Required | Description | | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -| `model_id` | *str* | :heavy_check_mark: | _"modelId" is required (enter it either in parameters or request body)_ | | `request_body` | [Optional[operations.GetTextureGenerationsByModelIDRequestBody]](../../models/operations/gettexturegenerationsbymodelidrequestbody.md) | :heavy_minus_sign: | Query parameters can also be provided in the request body as a JSON object | | `limit` | *Optional[int]* | :heavy_minus_sign: | N/A | +| `model_id` | *str* | :heavy_check_mark: | _"modelId" is required (enter it either in parameters or request body)_ | | `offset` | *Optional[int]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/imagetype.md b/docs/models/operations/imagetype.md new file mode 100644 index 00000000..f3ff2bdd --- /dev/null +++ b/docs/models/operations/imagetype.md @@ -0,0 +1,11 @@ +# ImageType + +Type indicating whether the init image is uploaded or generated. Use only image or imageId with imageType. + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `GENERATED` | GENERATED | +| `UPLOADED` | UPLOADED | \ No newline at end of file diff --git a/docs/models/operations/motionvideogenerationoutput.md b/docs/models/operations/motionvideogenerationoutput.md new file mode 100644 index 00000000..262fe0f7 --- /dev/null +++ b/docs/models/operations/motionvideogenerationoutput.md @@ -0,0 +1,9 @@ +# MotionVideoGenerationOutput + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `api_credit_cost` | *OptionalNullable[int]* | :heavy_minus_sign: | API credits cost, available for Production API users. | +| `generation_id` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/object.md b/docs/models/operations/object.md index 49c2b369..2581c88a 100644 --- a/docs/models/operations/object.md +++ b/docs/models/operations/object.md @@ -1,17 +1,11 @@ # Object -Parameters for the service +The end frame image. Supported only on kling2_1 model when used in conjunction with an init image. ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `fantasy_avatar_generation` | [OptionalNullable[operations.PricingCalculatorObject]](../../models/operations/pricingcalculatorobject.md) | :heavy_minus_sign: | Parameters for FANTASY_AVATAR_GENERATION service | -| `image_generation` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorObject]](../../models/operations/pricingcalculatorpricingcalculatorobject.md) | :heavy_minus_sign: | Parameters for IMAGE_GENERATION service | -| `lcm_generation` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestobject.md) | :heavy_minus_sign: | Parameters for LCM_GENERATION service | -| `model_training` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyobject.md) | :heavy_minus_sign: | Parameters for MODEL_TRAINING service | -| `motion_generation` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsobject.md) | :heavy_minus_sign: | Parameters for MOTION_GENERATION service | -| `texture_generation` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsTEXTUREGENERATIONObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamstexturegenerationobject.md) | :heavy_minus_sign: | Parameters for TEXTURE_GENERATION service | -| `universal_upscaler` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsuniversalupscalerobject.md) | :heavy_minus_sign: | Parameters for UNIVERSAL_UPSCALER service | -| `universal_upscaler_ultra` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERULTRAObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsuniversalupscalerultraobject.md) | :heavy_minus_sign: | Parameters for UNIVERSAL_UPSCALER_ULTRA service | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `id` | *str* | :heavy_check_mark: | The ID of the end frame image. | +| `type` | [operations.String](../../models/operations/string.md) | :heavy_check_mark: | Type indicating whether the end frame image is uploaded or generated. | \ No newline at end of file diff --git a/docs/models/operations/performalchemyupscalelcmrequestbody.md b/docs/models/operations/performalchemyupscalelcmrequestbody.md index 4e44a5e6..983d1bc4 100644 --- a/docs/models/operations/performalchemyupscalelcmrequestbody.md +++ b/docs/models/operations/performalchemyupscalelcmrequestbody.md @@ -7,10 +7,10 @@ Query parameters can also be provided in the request body as a JSON object | Field | Type | Required | Description | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `image_data_url` | *str* | :heavy_check_mark: | Image data used to generate image. In base64 format. Prefix: `data:image/jpeg;base64,` | -| `prompt` | *str* | :heavy_check_mark: | The prompt used to generate images | | `guidance` | *OptionalNullable[float]* | :heavy_minus_sign: | How strongly the generation should reflect the prompt. Must be a float between 0.5 and 20. | | `height` | *OptionalNullable[int]* | :heavy_minus_sign: | The output width of the image. Must be 512, 640 or 1024. | +| `image_data_url` | *str* | :heavy_check_mark: | Image data used to generate image. In base64 format. Prefix: `data:image/jpeg;base64,` | +| `prompt` | *str* | :heavy_check_mark: | The prompt used to generate images | | `refine_creative` | *OptionalNullable[bool]* | :heavy_minus_sign: | Refine creative | | `refine_strength` | *OptionalNullable[float]* | :heavy_minus_sign: | Must be a float between 0.5 and 0.9. | | `request_timestamp` | *Optional[str]* | :heavy_minus_sign: | N/A | diff --git a/docs/models/operations/performinpaintinglcmrequestbody.md b/docs/models/operations/performinpaintinglcmrequestbody.md index 5d4d86b0..57ded138 100644 --- a/docs/models/operations/performinpaintinglcmrequestbody.md +++ b/docs/models/operations/performinpaintinglcmrequestbody.md @@ -7,11 +7,11 @@ Query parameters can also be provided in the request body as a JSON object | Field | Type | Required | Description | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `guidance` | *OptionalNullable[float]* | :heavy_minus_sign: | How strongly the generation should reflect the prompt. Must be a float between 0.5 and 20. | +| `height` | *OptionalNullable[int]* | :heavy_minus_sign: | The output width of the image. Must be 512, 640 or 1024. | | `image_data_url` | *str* | :heavy_check_mark: | Image data used to generate image. In base64 format. Prefix: `data:image/jpeg;base64,` | | `mask_data_url` | *str* | :heavy_check_mark: | Image data of the mask layer used for inpainting. In base64 format. Prefix: `data:image/jpeg;base64,`. Mask should be white on black where generation is applied to the white area. | | `prompt` | *str* | :heavy_check_mark: | The prompt used to generate images | -| `guidance` | *OptionalNullable[float]* | :heavy_minus_sign: | How strongly the generation should reflect the prompt. Must be a float between 0.5 and 20. | -| `height` | *OptionalNullable[int]* | :heavy_minus_sign: | The output width of the image. Must be 512, 640 or 1024. | | `request_timestamp` | *Optional[str]* | :heavy_minus_sign: | N/A | | `seed` | *OptionalNullable[int]* | :heavy_minus_sign: | Apply a fixed seed to maintain consistency across generation sets. The maximum seed value is 2147483637 for Flux and 9999999998 for other models | | `steps` | *OptionalNullable[int]* | :heavy_minus_sign: | The number of steps to use for the generation. Must be between 4 and 16. | diff --git a/docs/models/operations/performinstantrefinerequestbody.md b/docs/models/operations/performinstantrefinerequestbody.md index 991da3b7..a92758f0 100644 --- a/docs/models/operations/performinstantrefinerequestbody.md +++ b/docs/models/operations/performinstantrefinerequestbody.md @@ -7,10 +7,10 @@ Query parameters can also be provided in the request body as a JSON object | Field | Type | Required | Description | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `image_data_url` | *str* | :heavy_check_mark: | Image data used to generate image. In base64 format. Prefix: `data:image/jpeg;base64,` | -| `prompt` | *str* | :heavy_check_mark: | The prompt used to generate images | | `guidance` | *OptionalNullable[float]* | :heavy_minus_sign: | How strongly the generation should reflect the prompt. Must be a float between 0.5 and 20. | | `height` | *OptionalNullable[int]* | :heavy_minus_sign: | The output width of the image. Must be 512, 640 or 1024. | +| `image_data_url` | *str* | :heavy_check_mark: | Image data used to generate image. In base64 format. Prefix: `data:image/jpeg;base64,` | +| `prompt` | *str* | :heavy_check_mark: | The prompt used to generate images | | `request_timestamp` | *Optional[str]* | :heavy_minus_sign: | N/A | | `seed` | *OptionalNullable[int]* | :heavy_minus_sign: | Apply a fixed seed to maintain consistency across generation sets. The maximum seed value is 2147483637 for Flux and 9999999998 for other models | | `steps` | *OptionalNullable[int]* | :heavy_minus_sign: | The number of steps to use for the generation. Must be between 4 and 16. | diff --git a/docs/models/operations/pricingcalculatorobject.md b/docs/models/operations/pricingcalculatorobject.md index 6bde830b..2b1eb2c0 100644 --- a/docs/models/operations/pricingcalculatorobject.md +++ b/docs/models/operations/pricingcalculatorobject.md @@ -1,12 +1,19 @@ # PricingCalculatorObject -Parameters for FANTASY_AVATAR_GENERATION service +Parameters for the service ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `image_height` | *Optional[int]* | :heavy_minus_sign: | The input height of the images. Must be between 32 and 1024 and be a multiple of 8. Note: Input resolution is not always the same as output resolution due to upscaling from other features | -| `image_width` | *Optional[int]* | :heavy_minus_sign: | The input height of the images. Must be between 32 and 1024 and be a multiple of 8. Note: Input resolution is not always the same as output resolution due to upscaling from other features | -| `num_images` | *Optional[int]* | :heavy_minus_sign: | The number of images to generate. Must be between 1 and 8. If either width or height is over 768, must be between 1 and 4. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `fantasy_avatar_generation` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorObject]](../../models/operations/pricingcalculatorpricingcalculatorobject.md) | :heavy_minus_sign: | Parameters for FANTASY_AVATAR_GENERATION service | +| `image_generation` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestobject.md) | :heavy_minus_sign: | Parameters for IMAGE_GENERATION service | +| `lcm_generation` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyobject.md) | :heavy_minus_sign: | Parameters for LCM_GENERATION service | +| `model_training` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsobject.md) | :heavy_minus_sign: | Parameters for MODEL_TRAINING service | +| `motion_svd_generation` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONSVDGENERATIONObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsmotionsvdgenerationobject.md) | :heavy_minus_sign: | Parameters for MOTION_SVD_GENERATION service | +| `motion_video_generation` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONVIDEOGENERATIONObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsmotionvideogenerationobject.md) | :heavy_minus_sign: | Parameters for MOTION_VIDEO_GENERATION service | +| `texture_generation` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsTEXTUREGENERATIONObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamstexturegenerationobject.md) | :heavy_minus_sign: | Parameters for TEXTURE_GENERATION service | +| `universal_upscaler` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsuniversalupscalerobject.md) | :heavy_minus_sign: | Parameters for UNIVERSAL_UPSCALER service | +| `universal_upscaler_ultra` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERULTRAObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsuniversalupscalerultraobject.md) | :heavy_minus_sign: | Parameters for UNIVERSAL_UPSCALER_ULTRA service | +| `veo3_motion_video_generation` | [OptionalNullable[operations.PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsVeo3MOTIONVIDEOGENERATIONObject]](../../models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsveo3motionvideogenerationobject.md) | :heavy_minus_sign: | Parameters for VEO3_MOTION_VIDEO_GENERATION service | \ No newline at end of file diff --git a/docs/models/operations/pricingcalculatorpricingcalculatorobject.md b/docs/models/operations/pricingcalculatorpricingcalculatorobject.md index 50139f89..fe8620d3 100644 --- a/docs/models/operations/pricingcalculatorpricingcalculatorobject.md +++ b/docs/models/operations/pricingcalculatorpricingcalculatorobject.md @@ -1,28 +1,12 @@ # PricingCalculatorPricingCalculatorObject -Parameters for IMAGE_GENERATION service +Parameters for FANTASY_AVATAR_GENERATION service ## Fields | Field | Type | Required | Description | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `alchemy_mode` | *Optional[bool]* | :heavy_minus_sign: | Enable to use Alchemy. | -| `controlnets_cost` | *OptionalNullable[int]* | :heavy_minus_sign: | The total cost of controlnets input. | -| `high_resolution` | *Optional[bool]* | :heavy_minus_sign: | Enable to use high resolution. | | `image_height` | *Optional[int]* | :heavy_minus_sign: | The input height of the images. Must be between 32 and 1024 and be a multiple of 8. Note: Input resolution is not always the same as output resolution due to upscaling from other features | | `image_width` | *Optional[int]* | :heavy_minus_sign: | The input height of the images. Must be between 32 and 1024 and be a multiple of 8. Note: Input resolution is not always the same as output resolution due to upscaling from other features | -| `inference_steps` | *Optional[int]* | :heavy_minus_sign: | The Step Count to use for the generation. Must be between 10 and 60. | -| `is_model_custom` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use custom model. | -| `is_phoenix` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Phoenix model. | -| `is_sdxl` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use SDXL model. | -| `is_sdxl_lightning` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use SDXL Lightning model. | -| `lora_count` | *OptionalNullable[int]* | :heavy_minus_sign: | The number of elements used for the generation. | -| `num_images` | *Optional[int]* | :heavy_minus_sign: | The number of images to generate. Must be between 1 and 8. If either width or height is over 768, must be between 1 and 4. | -| `photo_real_mode` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use PhotoReal. Requires enabling alchemy. | -| `photo_real_strength` | *OptionalNullable[float]* | :heavy_minus_sign: | Depth of field of photoReal. Must be 0.55 for low, 0.5 for medium, or 0.45 for high. Defaults to 0.55 if not specified. | -| `photo_real_version` | *OptionalNullable[str]* | :heavy_minus_sign: | The version of photoReal to use. Must be v1 or v2. | -| `prompt_magic` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Prompt Magic. | -| `prompt_magic_strength` | *OptionalNullable[float]* | :heavy_minus_sign: | Strength of prompt magic. Must be a float between 0.1 and 1.0 | -| `prompt_magic_version` | *OptionalNullable[str]* | :heavy_minus_sign: | Prompt magic version v2 or v3, for use when promptMagic: true | -| `ultra` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Ultra mode. | \ No newline at end of file +| `num_images` | *Optional[int]* | :heavy_minus_sign: | The number of images to generate. Must be between 1 and 8. If either width or height is over 768, must be between 1 and 4. | \ No newline at end of file diff --git a/docs/models/operations/pricingcalculatorpricingcalculatorrequestobject.md b/docs/models/operations/pricingcalculatorpricingcalculatorrequestobject.md index 322be0c9..e64d6442 100644 --- a/docs/models/operations/pricingcalculatorpricingcalculatorrequestobject.md +++ b/docs/models/operations/pricingcalculatorpricingcalculatorrequestobject.md @@ -1,13 +1,31 @@ # PricingCalculatorPricingCalculatorRequestObject -Parameters for LCM_GENERATION service +Parameters for IMAGE_GENERATION service ## Fields -| Field | Type | Required | Description | -| --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -| `height` | *OptionalNullable[int]* | :heavy_minus_sign: | The output height of the image. Must be 512, 640 or 1024. | -| `instant_refine` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable for instant upscale | -| `refine` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable for normal alchemy upscale | -| `width` | *OptionalNullable[int]* | :heavy_minus_sign: | The output width of the image. Must be 512, 640 or 1024. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `alchemy_mode` | *Optional[bool]* | :heavy_minus_sign: | Enable to use Alchemy. | +| `controlnets_cost` | *OptionalNullable[int]* | :heavy_minus_sign: | The total cost of controlnets input. | +| `high_resolution` | *Optional[bool]* | :heavy_minus_sign: | Enable to use high resolution. | +| `image_height` | *Optional[int]* | :heavy_minus_sign: | The input height of the images. Must be between 32 and 1024 and be a multiple of 8. Note: Input resolution is not always the same as output resolution due to upscaling from other features | +| `image_width` | *Optional[int]* | :heavy_minus_sign: | The input height of the images. Must be between 32 and 1024 and be a multiple of 8. Note: Input resolution is not always the same as output resolution due to upscaling from other features | +| `inference_steps` | *Optional[int]* | :heavy_minus_sign: | The Step Count to use for the generation. Must be between 10 and 60. | +| `is_flux_dev` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Flux Dev model. | +| `is_flux_kontext` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Flux Kontext model. | +| `is_flux_schnell` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Flux Schnell model. | +| `is_model_custom` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use custom model. | +| `is_phoenix` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Phoenix model. | +| `is_sdxl` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use SDXL model. | +| `is_sdxl_lightning` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use SDXL Lightning model. | +| `is_ultra` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Ultra mode. | +| `lora_count` | *OptionalNullable[int]* | :heavy_minus_sign: | The number of elements used for the generation. | +| `num_images` | *Optional[int]* | :heavy_minus_sign: | The number of images to generate. Must be between 1 and 8. If either width or height is over 768, must be between 1 and 4. | +| `photo_real_mode` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use PhotoReal. Requires enabling alchemy. | +| `photo_real_strength` | *OptionalNullable[float]* | :heavy_minus_sign: | Depth of field of photoReal. Must be 0.55 for low, 0.5 for medium, or 0.45 for high. Defaults to 0.55 if not specified. | +| `photo_real_version` | *OptionalNullable[str]* | :heavy_minus_sign: | The version of photoReal to use. Must be v1 or v2. | +| `prompt_magic` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable to use Prompt Magic. | +| `prompt_magic_strength` | *OptionalNullable[float]* | :heavy_minus_sign: | Strength of prompt magic. Must be a float between 0.1 and 1.0 | +| `prompt_magic_version` | *OptionalNullable[str]* | :heavy_minus_sign: | Prompt magic version v2 or v3, for use when promptMagic: true | \ No newline at end of file diff --git a/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyobject.md b/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyobject.md index 46212f1e..0577ea54 100644 --- a/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyobject.md +++ b/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyobject.md @@ -1,10 +1,13 @@ # PricingCalculatorPricingCalculatorRequestRequestBodyObject -Parameters for MODEL_TRAINING service +Parameters for LCM_GENERATION service ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | -| `resolution` | *Optional[int]* | :heavy_minus_sign: | The resolution for training. Must be 512 or 768. | \ No newline at end of file +| Field | Type | Required | Description | +| --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | +| `height` | *OptionalNullable[int]* | :heavy_minus_sign: | The output height of the image. Must be 512, 640 or 1024. | +| `instant_refine` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable for instant upscale | +| `refine` | *OptionalNullable[bool]* | :heavy_minus_sign: | Enable for normal alchemy upscale | +| `width` | *OptionalNullable[int]* | :heavy_minus_sign: | The output width of the image. Must be 512, 640 or 1024. | \ No newline at end of file diff --git a/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsmotionsvdgenerationobject.md b/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsmotionsvdgenerationobject.md new file mode 100644 index 00000000..f62a71ad --- /dev/null +++ b/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsmotionsvdgenerationobject.md @@ -0,0 +1,9 @@ +# PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONSVDGENERATIONObject + +Parameters for MOTION_SVD_GENERATION service + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsmotionvideogenerationobject.md b/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsmotionvideogenerationobject.md new file mode 100644 index 00000000..96961b69 --- /dev/null +++ b/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsmotionvideogenerationobject.md @@ -0,0 +1,10 @@ +# PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONVIDEOGENERATIONObject + +Parameters for MOTION_VIDEO_GENERATION service + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `resolution` | *Optional[str]* | :heavy_minus_sign: | The resolution of the video. Must be RESOLUTION_480 or RESOLUTION_720. | \ No newline at end of file diff --git a/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsobject.md b/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsobject.md index 1b4e8325..3e9d09cb 100644 --- a/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsobject.md +++ b/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsobject.md @@ -1,10 +1,12 @@ # PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObject -Parameters for MOTION_GENERATION service +Parameters for MODEL_TRAINING service ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | -| `duration_seconds` | *Optional[int]* | :heavy_minus_sign: | The total duration of the motion generation in seconds. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `dataset_image_count` | *OptionalNullable[int]* | :heavy_minus_sign: | The number of images in the training dataset when sd_version is set to 'FLUX_DEV'. Must be between 1 and 50. | +| `resolution` | *Optional[int]* | :heavy_minus_sign: | The resolution for training. Must be 512, 768, or 1024. | +| `sd_version` | [OptionalNullable[operations.SdVersion]](../../models/operations/sdversion.md) | :heavy_minus_sign: | The model for the training. Can be set to 'FLUX_DEV' for FLUX_DEV specific pricing or can be omitted. | \ No newline at end of file diff --git a/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsveo3motionvideogenerationobject.md b/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsveo3motionvideogenerationobject.md new file mode 100644 index 00000000..47d72a6e --- /dev/null +++ b/docs/models/operations/pricingcalculatorpricingcalculatorrequestrequestbodyserviceparamsveo3motionvideogenerationobject.md @@ -0,0 +1,10 @@ +# PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsVeo3MOTIONVIDEOGENERATIONObject + +Parameters for VEO3_MOTION_VIDEO_GENERATION service + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `resolution` | [Optional[operations.PricingCalculatorString]](../../models/operations/pricingcalculatorstring.md) | :heavy_minus_sign: | The resolution of the video. Supported resolution for VEO3 is RESOLUTION_720. | \ No newline at end of file diff --git a/docs/models/operations/pricingcalculatorrequestbody.md b/docs/models/operations/pricingcalculatorrequestbody.md index 36e80757..1a383368 100644 --- a/docs/models/operations/pricingcalculatorrequestbody.md +++ b/docs/models/operations/pricingcalculatorrequestbody.md @@ -3,7 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `service` | [Optional[shared.PricingCalculatorServices]](../../models/shared/pricingcalculatorservices.md) | :heavy_minus_sign: | The services to be chosen for calculating the API credit cost. | -| `service_params` | [Optional[operations.Object]](../../models/operations/object.md) | :heavy_minus_sign: | Parameters for the service | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `service` | [Optional[shared.PricingCalculatorServices]](../../models/shared/pricingcalculatorservices.md) | :heavy_minus_sign: | The services to be chosen for calculating the API credit cost. | +| `service_params` | [Optional[operations.PricingCalculatorObject]](../../models/operations/pricingcalculatorobject.md) | :heavy_minus_sign: | Parameters for the service | \ No newline at end of file diff --git a/docs/models/operations/pricingcalculatorstring.md b/docs/models/operations/pricingcalculatorstring.md new file mode 100644 index 00000000..205ccc6b --- /dev/null +++ b/docs/models/operations/pricingcalculatorstring.md @@ -0,0 +1,10 @@ +# PricingCalculatorString + +The resolution of the video. Supported resolution for VEO3 is RESOLUTION_720. + + +## Values + +| Name | Value | +| ---------------- | ---------------- | +| `RESOLUTION_720` | RESOLUTION_720 | \ No newline at end of file diff --git a/docs/models/operations/promptimproverequestbody.md b/docs/models/operations/promptimproverequestbody.md index 871ff645..58f9c5bf 100644 --- a/docs/models/operations/promptimproverequestbody.md +++ b/docs/models/operations/promptimproverequestbody.md @@ -5,7 +5,8 @@ Query parameters to be provided in the request body as a JSON object ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | -| `prompt` | *str* | :heavy_check_mark: | The prompt to improve. | -| `prompt_instructions` | *OptionalNullable[str]* | :heavy_minus_sign: | The prompt is improved based on the given instructions. | \ No newline at end of file +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| `is_video` | *OptionalNullable[bool]* | :heavy_minus_sign: | Specifies whether the prompt is for a video generation. Defaults to false (image prompt). | true | +| `prompt` | *str* | :heavy_check_mark: | The prompt to improve. | | +| `prompt_instructions` | *OptionalNullable[str]* | :heavy_minus_sign: | The prompt is improved based on the given instructions. | | \ No newline at end of file diff --git a/docs/models/operations/sdversion.md b/docs/models/operations/sdversion.md new file mode 100644 index 00000000..01967eb9 --- /dev/null +++ b/docs/models/operations/sdversion.md @@ -0,0 +1,10 @@ +# SdVersion + +The model for the training. Can be set to 'FLUX_DEV' for FLUX_DEV specific pricing or can be omitted. + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `FLUX_DEV` | FLUX_DEV | \ No newline at end of file diff --git a/docs/models/operations/sdversions.md b/docs/models/operations/sdversions.md index 0b688d67..244d34c7 100644 --- a/docs/models/operations/sdversions.md +++ b/docs/models/operations/sdversions.md @@ -1,6 +1,6 @@ # SdVersions -The base version of stable diffusion to use if not using a custom model. +The base version to use if not using a custom model. ## Values @@ -13,4 +13,5 @@ The base version of stable diffusion to use if not using a custom model. | `LEONARDO_LIGHTNING_XL` | LEONARDO_LIGHTNING_XL | | `VISION_XL` | VISION_XL | | `KINO_XL` | KINO_XL | -| `ALBEDO_XL` | ALBEDO_XL | \ No newline at end of file +| `ALBEDO_XL` | ALBEDO_XL | +| `FLUX_DEV` | FLUX_DEV | \ No newline at end of file diff --git a/docs/models/operations/string.md b/docs/models/operations/string.md new file mode 100644 index 00000000..71741b58 --- /dev/null +++ b/docs/models/operations/string.md @@ -0,0 +1,11 @@ +# String + +Type indicating whether the end frame image is uploaded or generated. + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `GENERATED` | GENERATED | +| `UPLOADED` | UPLOADED | \ No newline at end of file diff --git a/docs/models/shared/elementinput.md b/docs/models/shared/elementinput.md index d55d61e7..0dd2e813 100644 --- a/docs/models/shared/elementinput.md +++ b/docs/models/shared/elementinput.md @@ -5,5 +5,5 @@ | Field | Type | Required | Description | | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -| `ak_uuid` | *OptionalNullable[str]* | :heavy_minus_sign: | Unique identifier for element. Elements can be found from the List Elements endpoint. | +| `ak_uuid` | *str* | :heavy_check_mark: | Unique identifier for element. Elements can be found from the List Elements endpoint. | | `weight` | *OptionalNullable[float]* | :heavy_minus_sign: | Weight for the element | \ No newline at end of file diff --git a/docs/models/shared/motionresolution.md b/docs/models/shared/motionresolution.md new file mode 100644 index 00000000..17f9b578 --- /dev/null +++ b/docs/models/shared/motionresolution.md @@ -0,0 +1,10 @@ +# MotionResolution + +The resolution of the upscaled video. RESOLUTION_720 is the only option for now. + + +## Values + +| Name | Value | +| ---------------- | ---------------- | +| `RESOLUTION_720` | RESOLUTION_720 | \ No newline at end of file diff --git a/docs/models/shared/motionvariationtype.md b/docs/models/shared/motionvariationtype.md new file mode 100644 index 00000000..10aefe3f --- /dev/null +++ b/docs/models/shared/motionvariationtype.md @@ -0,0 +1,10 @@ +# MotionVariationType + +The type of motion variation. + + +## Values + +| Name | Value | +| --------- | --------- | +| `UPSCALE` | UPSCALE | \ No newline at end of file diff --git a/docs/models/shared/pricingcalculatorservices.md b/docs/models/shared/pricingcalculatorservices.md index 279cd9f2..b3216260 100644 --- a/docs/models/shared/pricingcalculatorservices.md +++ b/docs/models/shared/pricingcalculatorservices.md @@ -5,13 +5,15 @@ The services to be chosen for calculating the API credit cost. ## Values -| Name | Value | -| --------------------------- | --------------------------- | -| `IMAGE_GENERATION` | IMAGE_GENERATION | -| `FANTASY_AVATAR_GENERATION` | FANTASY_AVATAR_GENERATION | -| `MOTION_GENERATION` | MOTION_GENERATION | -| `LCM_GENERATION` | LCM_GENERATION | -| `MODEL_TRAINING` | MODEL_TRAINING | -| `TEXTURE_GENERATION` | TEXTURE_GENERATION | -| `UNIVERSAL_UPSCALER` | UNIVERSAL_UPSCALER | -| `UNIVERSAL_UPSCALER_ULTRA` | UNIVERSAL_UPSCALER_ULTRA | \ No newline at end of file +| Name | Value | +| ------------------------------ | ------------------------------ | +| `IMAGE_GENERATION` | IMAGE_GENERATION | +| `FANTASY_AVATAR_GENERATION` | FANTASY_AVATAR_GENERATION | +| `MOTION_SVD_GENERATION` | MOTION_SVD_GENERATION | +| `MOTION_VIDEO_GENERATION` | MOTION_VIDEO_GENERATION | +| `VEO3_MOTION_VIDEO_GENERATION` | VEO3_MOTION_VIDEO_GENERATION | +| `LCM_GENERATION` | LCM_GENERATION | +| `MODEL_TRAINING` | MODEL_TRAINING | +| `TEXTURE_GENERATION` | TEXTURE_GENERATION | +| `UNIVERSAL_UPSCALER` | UNIVERSAL_UPSCALER | +| `UNIVERSAL_UPSCALER_ULTRA` | UNIVERSAL_UPSCALER_ULTRA | \ No newline at end of file diff --git a/docs/models/shared/sdversions.md b/docs/models/shared/sdversions.md index fd36f227..672cf926 100644 --- a/docs/models/shared/sdversions.md +++ b/docs/models/shared/sdversions.md @@ -16,4 +16,5 @@ The base version of stable diffusion to use if not using a custom model. v1_5 is | `SDXL_LIGHTNING` | SDXL_LIGHTNING | | `PHOENIX` | PHOENIX | | `FLUX` | FLUX | -| `FLUX_DEV` | FLUX_DEV | \ No newline at end of file +| `FLUX_DEV` | FLUX_DEV | +| `KINO_2_0` | KINO_2_0 | \ No newline at end of file diff --git a/docs/sdks/dataset/README.md b/docs/sdks/dataset/README.md index 82f92b39..7052f76c 100644 --- a/docs/sdks/dataset/README.md +++ b/docs/sdks/dataset/README.md @@ -1,5 +1,4 @@ # Dataset -(*dataset*) ## Overview @@ -17,9 +16,11 @@ This endpoint creates a new dataset ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -58,9 +59,11 @@ This endpoint deletes the specific dataset ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -97,9 +100,11 @@ This endpoint gets the specific dataset ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -136,15 +141,17 @@ This endpoint returns presigned details to upload a dataset image to S3 ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: res = las_client.dataset.upload_dataset_image(dataset_id="", request_body={ - "extension": "mp4v", + "extension": "shtml", }) assert res.object is not None @@ -178,9 +185,11 @@ This endpoint will upload a previously generated image to the dataset ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: diff --git a/docs/sdks/elements/README.md b/docs/sdks/elements/README.md index f15ce4eb..cfb3d36f 100644 --- a/docs/sdks/elements/README.md +++ b/docs/sdks/elements/README.md @@ -1,5 +1,4 @@ # Elements -(*elements*) ## Overview @@ -17,14 +16,20 @@ This endpoint will train a new custom element. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: - res = las_client.elements.create_element(request={}) + res = las_client.elements.create_element(request={ + "learning_rate": 3344.47, + "lora_focus": "", + "num_train_epochs": 543724, + }) assert res.object is not None @@ -56,14 +61,16 @@ This endpoint will delete a specific custom model. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: - res = las_client.elements.delete_element_by_id(id=39024) + res = las_client.elements.delete_element_by_id(id=709546) assert res.object is not None @@ -95,9 +102,11 @@ This endpoint gets the list of custom elements belongs to the user. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -134,14 +143,16 @@ This endpoint gets the specific custom element. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: - res = las_client.elements.get_element_by_id(id=665696) + res = las_client.elements.get_element_by_id(id=320312) assert res.object is not None @@ -173,9 +184,11 @@ Get a list of public Elements available for use with generations. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: diff --git a/docs/sdks/image/README.md b/docs/sdks/image/README.md index 953e5193..572c2b90 100644 --- a/docs/sdks/image/README.md +++ b/docs/sdks/image/README.md @@ -1,5 +1,4 @@ # Image -(*image*) ## Overview @@ -16,14 +15,18 @@ This endpoint will generate images ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: - res = las_client.image.create_generation(request={}) + res = las_client.image.create_generation(request={ + "contrast": 3.5, + }) assert res.object is not None @@ -55,9 +58,11 @@ This endpoint deletes a specific generation ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -94,9 +99,11 @@ This endpoint will provide information about a specific generation ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -133,14 +140,16 @@ This endpoint returns all generations by a specific user ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: - res = las_client.image.get_generations_by_user_id(user_id="") + res = las_client.image.get_generations_by_user_id(user_id="", limit=10, offset=0) assert res.object is not None diff --git a/docs/sdks/initimages/README.md b/docs/sdks/initimages/README.md index f75ad380..d338c7f6 100644 --- a/docs/sdks/initimages/README.md +++ b/docs/sdks/initimages/README.md @@ -1,5 +1,4 @@ # InitImages -(*init_images*) ## Overview @@ -16,9 +15,11 @@ This endpoint deletes an init image ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -55,9 +56,11 @@ This endpoint will return a single init image ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -94,9 +97,11 @@ This endpoint returns presigned details to upload an init image and a mask image ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -136,15 +141,17 @@ This endpoint returns presigned details to upload an init image to S3 ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: res = las_client.init_images.upload_init_image(request={ - "extension": "png", + "extension": "gif", }) assert res.object is not None diff --git a/docs/sdks/leonardoaisdk/README.md b/docs/sdks/leonardoaisdk/README.md deleted file mode 100644 index 1fb20312..00000000 --- a/docs/sdks/leonardoaisdk/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# LeonardoAiSDK - -## Overview - -Rest Endpoints: Leonardo.Ai API OpenAPI specification. - -### Available Operations diff --git a/docs/sdks/models/README.md b/docs/sdks/models/README.md index 357ae12f..6fec09de 100644 --- a/docs/sdks/models/README.md +++ b/docs/sdks/models/README.md @@ -1,5 +1,4 @@ # Models -(*models*) ## Overview @@ -17,9 +16,11 @@ This endpoint will train a new custom model ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -60,9 +61,11 @@ This endpoint will delete a specific custom model ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -99,9 +102,11 @@ This endpoint gets the list of custom models belongs to the user. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -138,9 +143,11 @@ This endpoint gets the specific custom model ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -177,9 +184,11 @@ Get a list of public Platform Models available for use with generations. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: diff --git a/docs/sdks/motion/README.md b/docs/sdks/motion/README.md index cb1a9879..55a0eb68 100644 --- a/docs/sdks/motion/README.md +++ b/docs/sdks/motion/README.md @@ -1,11 +1,54 @@ # Motion -(*motion*) ## Overview ### Available Operations +* [create_image_to_video_generation](#create_image_to_video_generation) - Create a video generation from an image * [create_svd_motion_generation](#create_svd_motion_generation) - Create SVD Motion Generation +* [create_text_to_video_generation](#create_text_to_video_generation) - Create a video generation from a text prompt +* [create_video_upscale](#create_video_upscale) - Upscale a generated video + +## create_image_to_video_generation + +This endpoint will generate a video using an uploaded or generated image. + +### Example Usage + + +```python +from leonardo_ai_sdk import LeonardoAiSDK + + +with LeonardoAiSDK( + bearer_auth="", +) as las_client: + + res = las_client.motion.create_image_to_video_generation() + + assert res.object is not None + + # Handle response + print(res.object) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.CreateImageToVideoGenerationRequestBody](../../models/operations/createimagetovideogenerationrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[operations.CreateImageToVideoGenerationResponse](../../models/operations/createimagetovideogenerationresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4XX, 5XX | \*/\* | ## create_svd_motion_generation @@ -13,9 +56,11 @@ This endpoint will generate a SVD motion generation. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -42,6 +87,88 @@ with LeonardoAiSDK( ### Errors +| Error Type | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4XX, 5XX | \*/\* | + +## create_text_to_video_generation + +This endpoint will generate a video using a text prompt + +### Example Usage + + +```python +from leonardo_ai_sdk import LeonardoAiSDK + + +with LeonardoAiSDK( + bearer_auth="", +) as las_client: + + res = las_client.motion.create_text_to_video_generation() + + assert res.object is not None + + # Handle response + print(res.object) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `request` | [operations.CreateTextToVideoGenerationRequestBody](../../models/operations/createtexttovideogenerationrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[operations.CreateTextToVideoGenerationResponse](../../models/operations/createtexttovideogenerationresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4XX, 5XX | \*/\* | + +## create_video_upscale + +This endpoint will upscale a generated video to a higher resolution. + +### Example Usage + + +```python +from leonardo_ai_sdk import LeonardoAiSDK + + +with LeonardoAiSDK( + bearer_auth="", +) as las_client: + + res = las_client.motion.create_video_upscale() + + assert res.object is not None + + # Handle response + print(res.object) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `request` | [operations.CreateVideoUpscaleRequestBody](../../models/operations/createvideoupscalerequestbody.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[operations.CreateVideoUpscaleResponse](../../models/operations/createvideoupscaleresponse.md)** + +### Errors + | Error Type | Status Code | Content Type | | --------------- | --------------- | --------------- | | errors.SDKError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/pricingcalculator/README.md b/docs/sdks/pricingcalculator/README.md index d2e76266..2917f185 100644 --- a/docs/sdks/pricingcalculator/README.md +++ b/docs/sdks/pricingcalculator/README.md @@ -1,5 +1,4 @@ # PricingCalculator -(*pricing_calculator*) ## Overview @@ -13,9 +12,11 @@ This endpoint returns the cost used for generating images using a particular ser ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: diff --git a/docs/sdks/prompt/README.md b/docs/sdks/prompt/README.md index e928d391..2421492b 100644 --- a/docs/sdks/prompt/README.md +++ b/docs/sdks/prompt/README.md @@ -1,5 +1,4 @@ # Prompt -(*prompt*) ## Overview @@ -14,14 +13,17 @@ This endpoint returns a improved prompt ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: res = las_client.prompt.prompt_improve(request={ + "is_video": True, "prompt": "", }) @@ -55,9 +57,11 @@ This endpoint returns a random prompt ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: diff --git a/docs/sdks/realtimecanvas/README.md b/docs/sdks/realtimecanvas/README.md index 43a61e3f..aa5688bb 100644 --- a/docs/sdks/realtimecanvas/README.md +++ b/docs/sdks/realtimecanvas/README.md @@ -1,5 +1,4 @@ # RealtimeCanvas -(*realtime_canvas*) ## Overview @@ -16,9 +15,11 @@ This endpoint will generate a LCM image generation. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -55,9 +56,11 @@ This endpoint will perform Alchemy Upscale on a LCM image ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -94,9 +97,11 @@ This endpoint will perform a inpainting on a LCM image ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -133,9 +138,11 @@ This endpoint will perform instant refine on a LCM image ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: diff --git a/docs/sdks/texture/README.md b/docs/sdks/texture/README.md index 5866ffb3..9222352c 100644 --- a/docs/sdks/texture/README.md +++ b/docs/sdks/texture/README.md @@ -1,5 +1,4 @@ # Texture -(*texture*) ## Overview @@ -16,9 +15,11 @@ This endpoint will generate a texture generation. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -55,9 +56,11 @@ This endpoint deletes the specific texture generation. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -95,14 +98,16 @@ This endpoint gets the specific texture generation. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: - res = las_client.texture.get_texture_generation_by_id(id="") + res = las_client.texture.get_texture_generation_by_id(id="", limit=10, offset=0) assert res.object is not None @@ -137,14 +142,16 @@ This endpoint gets the specific texture generations by the 3d model id. ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: - res = las_client.texture.get_texture_generations_by_model_id(model_id="") + res = las_client.texture.get_texture_generations_by_model_id(model_id="", limit=10, offset=0) assert res.object is not None diff --git a/docs/sdks/threedmodelassets/README.md b/docs/sdks/threedmodelassets/README.md index 958a9811..73a891e8 100644 --- a/docs/sdks/threedmodelassets/README.md +++ b/docs/sdks/threedmodelassets/README.md @@ -1,5 +1,4 @@ # ThreeDModelAssets -(*three_d_model_assets*) ## Overview @@ -16,9 +15,11 @@ This endpoint deletes the specific 3D Model ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -56,14 +57,16 @@ This endpoint gets the specific 3D model ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: - res = las_client.three_d_model_assets.get3_d_model_by_id(id="") + res = las_client.three_d_model_assets.get3_d_model_by_id(id="", limit=10, offset=0) assert res.object is not None @@ -98,14 +101,16 @@ This endpoint returns all 3D models by a specific user ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: - res = las_client.three_d_model_assets.get3_d_models_by_user_id(user_id="") + res = las_client.three_d_model_assets.get3_d_models_by_user_id(user_id="", limit=10, offset=0) assert res.object is not None @@ -140,9 +145,11 @@ This endpoint returns presigned details to upload a 3D model to S3 ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: diff --git a/docs/sdks/user/README.md b/docs/sdks/user/README.md index ab6ba4c9..c20cb739 100644 --- a/docs/sdks/user/README.md +++ b/docs/sdks/user/README.md @@ -1,5 +1,4 @@ # User -(*user*) ## Overview @@ -13,9 +12,11 @@ This endpoint will return your user information such as your user id, username, ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: diff --git a/docs/sdks/variation/README.md b/docs/sdks/variation/README.md index ea038863..b233d921 100644 --- a/docs/sdks/variation/README.md +++ b/docs/sdks/variation/README.md @@ -1,5 +1,4 @@ # Variation -(*variation*) ## Overview @@ -9,6 +8,7 @@ * [create_variation_no_bg](#create_variation_no_bg) - Create no background * [create_variation_unzoom](#create_variation_unzoom) - Create unzoom * [create_variation_upscale](#create_variation_upscale) - Create upscale +* [get_motion_variation_by_id](#get_motion_variation_by_id) - Get motion variation by ID * [get_variation_by_id](#get_variation_by_id) - Get variation by ID ## create_universal_upscaler_job @@ -17,9 +17,11 @@ This endpoint will create a high resolution image using Universal Upscaler ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -56,9 +58,11 @@ This endpoint will create a no background variation of the provided image ID ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -97,9 +101,11 @@ This endpoint will create an unzoom variation for the provided image ID ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -136,9 +142,11 @@ This endpoint will create an upscale for the provided image ID ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: @@ -169,15 +177,58 @@ with LeonardoAiSDK( | --------------- | --------------- | --------------- | | errors.SDKError | 4XX, 5XX | \*/\* | +## get_motion_variation_by_id + +This endpoint will get the motion variation by ID + +### Example Usage + + +```python +from leonardo_ai_sdk import LeonardoAiSDK + + +with LeonardoAiSDK( + bearer_auth="", +) as las_client: + + res = las_client.variation.get_motion_variation_by_id(id="") + + assert res.object is not None + + # Handle response + print(res.object) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `id` | *str* | :heavy_check_mark: | "id" is required | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[operations.GetMotionVariationByIDResponse](../../models/operations/getmotionvariationbyidresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4XX, 5XX | \*/\* | + ## get_variation_by_id This endpoint will get the variation by ID ### Example Usage + ```python from leonardo_ai_sdk import LeonardoAiSDK + with LeonardoAiSDK( bearer_auth="", ) as las_client: diff --git a/gen.yaml b/gen.yaml index b0e3772f..e024f6a9 100644 --- a/gen.yaml +++ b/gen.yaml @@ -6,21 +6,40 @@ generation: sdkClassName: LeonardoAiSDK usageSnippets: optionalPropertyRendering: withExample + sdkInitStyle: constructor fixes: - nameResolutionDec2023: false + nameResolutionFeb2025: false parameterOrderingFeb2024: false requestResponseComponentNamesFeb2024: false + securityFeb2025: false + sharedErrorComponentsApr2025: false + sharedNestedComponentsJan2026: false auth: oAuth2ClientCredentialsEnabled: false oAuth2PasswordEnabled: false + hoistGlobalSecurity: true + schemas: + allOfMergeStrategy: shallowMerge + requestBodyFieldName: "" + persistentEdits: {} + tests: + generateTests: true + generateNewTests: false + skipResponseBodyAssertions: false python: - version: 6.5.1 + version: 6.6.0 additionalDependencies: dev: {} main: {} + allowedRedefinedBuiltins: + - id + - object + asyncMode: both authors: - Leonardo-Ai + baseErrorName: LeonardoAiSDKError clientServerStatusCodesAsErrors: true + constFieldCasing: upper defaultErrorName: SDKError description: Leonardo AI Python Client SDK enableCustomCodeRegions: false @@ -38,11 +57,21 @@ python: operations: models/operations shared: models/shared webhooks: models/webhooks + inferUnionDiscriminators: true inputModelSuffix: input + license: "" maxMethodParams: 4 methodArguments: require-security-and-request + moduleName: "" + multipartArrayFormat: legacy outputModelSuffix: output + packageManager: poetry packageName: Leonardo-Ai-SDK + preApplyUnionDiscriminators: false projectUrls: {} + pytestFilterWarnings: [] + pytestTimeout: 0 responseFormat: envelope + sseFlatResponse: false templateVersion: v2 + useAsyncHooks: false diff --git a/poetry.lock b/poetry.lock index ca2a050d..28184ea5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.3.0 and should not be changed by hand. [[package]] name = "annotated-types" @@ -32,7 +32,7 @@ typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\""] trio = ["trio (>=0.23)"] [[package]] @@ -91,21 +91,6 @@ files = [ graph = ["objgraph (>=1.7.2)"] profile = ["gprof2dot (>=2022.7.29)"] -[[package]] -name = "eval-type-backport" -version = "0.2.0" -description = "Like `typing._eval_type`, but lets older Python versions use newer typing features." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "eval_type_backport-0.2.0-py3-none-any.whl", hash = "sha256:ac2f73d30d40c5a30a80b8739a789d6bb5e49fdffa66d7912667e2015d9c9933"}, - {file = "eval_type_backport-0.2.0.tar.gz", hash = "sha256:68796cfbc7371ebf923f03bdf7bef415f3ec098aeced24e054b253a0e78f7b37"}, -] - -[package.extras] -tests = ["pytest"] - [[package]] name = "exceptiongroup" version = "1.2.2" @@ -124,37 +109,37 @@ test = ["pytest (>=6)"] [[package]] name = "h11" -version = "0.14.0" +version = "0.16.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" groups = ["main"] files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, ] [[package]] name = "httpcore" -version = "1.0.5" +version = "1.0.9" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" groups = ["main"] files = [ - {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, - {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, + {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, + {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, ] [package.dependencies] certifi = "*" -h11 = ">=0.13,<0.15" +h11 = ">=0.16" [package.extras] asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.26.0)"] +trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httpx" @@ -175,7 +160,7 @@ httpcore = "==1.*" idna = "*" [package.extras] -brotli = ["brotli", "brotlicffi"] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] @@ -222,50 +207,44 @@ files = [ [[package]] name = "mypy" -version = "1.14.1" +version = "1.15.0" description = "Optional static typing for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["dev"] files = [ - {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, - {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, - {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d"}, - {file = "mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b"}, - {file = "mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427"}, - {file = "mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f"}, - {file = "mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c"}, - {file = "mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1"}, - {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8"}, - {file = "mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f"}, - {file = "mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1"}, - {file = "mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae"}, - {file = "mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14"}, - {file = "mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9"}, - {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11"}, - {file = "mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e"}, - {file = "mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89"}, - {file = "mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b"}, - {file = "mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255"}, - {file = "mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34"}, - {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a"}, - {file = "mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9"}, - {file = "mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd"}, - {file = "mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107"}, - {file = "mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31"}, - {file = "mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6"}, - {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319"}, - {file = "mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac"}, - {file = "mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b"}, - {file = "mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837"}, - {file = "mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35"}, - {file = "mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc"}, - {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9"}, - {file = "mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb"}, - {file = "mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60"}, - {file = "mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c"}, - {file = "mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1"}, - {file = "mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6"}, + {file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"}, + {file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"}, + {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be68172e9fd9ad8fb876c6389f16d1c1b5f100ffa779f77b1fb2176fcc9ab95b"}, + {file = "mypy-1.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7be1e46525adfa0d97681432ee9fcd61a3964c2446795714699a998d193f1a3"}, + {file = "mypy-1.15.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2e2c2e6d3593f6451b18588848e66260ff62ccca522dd231cd4dd59b0160668b"}, + {file = "mypy-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:6983aae8b2f653e098edb77f893f7b6aca69f6cffb19b2cc7443f23cce5f4828"}, + {file = "mypy-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2922d42e16d6de288022e5ca321cd0618b238cfc5570e0263e5ba0a77dbef56f"}, + {file = "mypy-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2ee2d57e01a7c35de00f4634ba1bbf015185b219e4dc5909e281016df43f5ee5"}, + {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:973500e0774b85d9689715feeffcc980193086551110fd678ebe1f4342fb7c5e"}, + {file = "mypy-1.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a95fb17c13e29d2d5195869262f8125dfdb5c134dc8d9a9d0aecf7525b10c2c"}, + {file = "mypy-1.15.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1905f494bfd7d85a23a88c5d97840888a7bd516545fc5aaedff0267e0bb54e2f"}, + {file = "mypy-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9817fa23833ff189db061e6d2eff49b2f3b6ed9856b4a0a73046e41932d744f"}, + {file = "mypy-1.15.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:aea39e0583d05124836ea645f412e88a5c7d0fd77a6d694b60d9b6b2d9f184fd"}, + {file = "mypy-1.15.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f2147ab812b75e5b5499b01ade1f4a81489a147c01585cda36019102538615f"}, + {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce436f4c6d218a070048ed6a44c0bbb10cd2cc5e272b29e7845f6a2f57ee4464"}, + {file = "mypy-1.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8023ff13985661b50a5928fc7a5ca15f3d1affb41e5f0a9952cb68ef090b31ee"}, + {file = "mypy-1.15.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1124a18bc11a6a62887e3e137f37f53fbae476dc36c185d549d4f837a2a6a14e"}, + {file = "mypy-1.15.0-cp312-cp312-win_amd64.whl", hash = "sha256:171a9ca9a40cd1843abeca0e405bc1940cd9b305eaeea2dda769ba096932bb22"}, + {file = "mypy-1.15.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93faf3fdb04768d44bf28693293f3904bbb555d076b781ad2530214ee53e3445"}, + {file = "mypy-1.15.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:811aeccadfb730024c5d3e326b2fbe9249bb7413553f15499a4050f7c30e801d"}, + {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98b7b9b9aedb65fe628c62a6dc57f6d5088ef2dfca37903a7d9ee374d03acca5"}, + {file = "mypy-1.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c43a7682e24b4f576d93072216bf56eeff70d9140241f9edec0c104d0c515036"}, + {file = "mypy-1.15.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:baefc32840a9f00babd83251560e0ae1573e2f9d1b067719479bfb0e987c6357"}, + {file = "mypy-1.15.0-cp313-cp313-win_amd64.whl", hash = "sha256:b9378e2c00146c44793c98b8d5a61039a048e31f429fb0eb546d93f4b000bedf"}, + {file = "mypy-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e601a7fa172c2131bff456bb3ee08a88360760d0d2f8cbd7a75a65497e2df078"}, + {file = "mypy-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:712e962a6357634fef20412699a3655c610110e01cdaa6180acec7fc9f8513ba"}, + {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95579473af29ab73a10bada2f9722856792a36ec5af5399b653aa28360290a5"}, + {file = "mypy-1.15.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f8722560a14cde92fdb1e31597760dc35f9f5524cce17836c0d22841830fd5b"}, + {file = "mypy-1.15.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1fbb8da62dc352133d7d7ca90ed2fb0e9d42bb1a32724c287d3c76c58cbaa9c2"}, + {file = "mypy-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:d10d994b41fb3497719bbf866f227b3489048ea4bbbb5015357db306249f7980"}, + {file = "mypy-1.15.0-py3-none-any.whl", hash = "sha256:5469affef548bd1895d86d3bf10ce2b44e33d86923c29e4d675b3e323437ea3e"}, + {file = "mypy-1.15.0.tar.gz", hash = "sha256:404534629d51d3efea5c800ee7c42b72a6554d6c400e6a79eafe15d11341fd43"}, ] [package.dependencies] @@ -286,12 +265,24 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" -groups = ["main", "dev"] +groups = ["dev"] files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "nodeenv" +version = "1.10.0" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +files = [ + {file = "nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827"}, + {file = "nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb"}, +] + [[package]] name = "platformdirs" version = "4.3.2" @@ -311,133 +302,133 @@ type = ["mypy (>=1.11.2)"] [[package]] name = "pydantic" -version = "2.10.3" +version = "2.11.10" description = "Data validation using Python type hints" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pydantic-2.10.3-py3-none-any.whl", hash = "sha256:be04d85bbc7b65651c5f8e6b9976ed9c6f41782a55524cef079a34a0bb82144d"}, - {file = "pydantic-2.10.3.tar.gz", hash = "sha256:cb5ac360ce894ceacd69c403187900a02c4b20b693a9dd1d643e1effab9eadf9"}, + {file = "pydantic-2.11.10-py3-none-any.whl", hash = "sha256:802a655709d49bd004c31e865ef37da30b540786a46bfce02333e0e24b5fe29a"}, + {file = "pydantic-2.11.10.tar.gz", hash = "sha256:dc280f0982fbda6c38fada4e476dc0a4f3aeaf9c6ad4c28df68a666ec3c61423"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.27.1" +pydantic-core = "2.33.2" typing-extensions = ">=4.12.2" +typing-inspection = ">=0.4.0" [package.extras] email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] [[package]] name = "pydantic-core" -version = "2.27.1" +version = "2.33.2" description = "Core functionality for Pydantic validation and serialization" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, - {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, - {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, - {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, - {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, - {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, - {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, - {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, - {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, - {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, - {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, - {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, - {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, - {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, - {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, - {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, - {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, - {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, - {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, - {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, - {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, - {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, - {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, - {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, - {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, - {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, - {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, - {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, - {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, - {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, - {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, - {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, - {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, - {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, - {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, - {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, - {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, - {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, - {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, - {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, - {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, - {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, - {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, - {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, - {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, - {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, - {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, - {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, - {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, - {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, - {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, - {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, - {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, - {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, + {file = "pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8"}, + {file = "pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b"}, + {file = "pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22"}, + {file = "pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640"}, + {file = "pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7"}, + {file = "pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65"}, + {file = "pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc"}, + {file = "pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab"}, + {file = "pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f"}, + {file = "pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a2b911a5b90e0374d03813674bf0a5fbbb7741570dcd4b4e85a2e48d17def29d"}, + {file = "pydantic_core-2.33.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6fa6dfc3e4d1f734a34710f391ae822e0a8eb8559a85c6979e14e65ee6ba2954"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e"}, + {file = "pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:87acbfcf8e90ca885206e98359d7dca4bcbb35abdc0ff66672a293e1d7a19101"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f92c15cd1e97d4b12acd1cc9004fa092578acfa57b67ad5e43a197175d01a64"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27"}, + {file = "pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc"}, ] [package.dependencies] @@ -456,12 +447,12 @@ files = [ ] [package.dependencies] -astroid = ">=3.2.2,<=3.3.0-dev0" +astroid = ">=3.2.2,<=3.3.0.dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ {version = ">=0.2", markers = "python_version < \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, + {version = ">=0.3.6", markers = "python_version == \"3.11\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" @@ -475,31 +466,25 @@ spelling = ["pyenchant (>=3.2,<4.0)"] testutils = ["gitpython (>3)"] [[package]] -name = "python-dateutil" -version = "2.8.2" -description = "Extensions to the standard Python datetime module" +name = "pyright" +version = "1.1.398" +description = "Command line wrapper for pyright" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] +python-versions = ">=3.7" +groups = ["dev"] files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "pyright-1.1.398-py3-none-any.whl", hash = "sha256:0a70bfd007d9ea7de1cf9740e1ad1a40a122592cfe22a3f6791b06162ad08753"}, + {file = "pyright-1.1.398.tar.gz", hash = "sha256:357a13edd9be8082dc73be51190913e475fa41a6efb6ec0d4b7aab3bc11638d8"}, ] [package.dependencies] -six = ">=1.5" +nodeenv = ">=1.6.0" +typing-extensions = ">=4.1" -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -groups = ["main"] -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] +[package.extras] +all = ["nodejs-wheel-binaries", "twine (>=3.4.1)"] +dev = ["twine (>=3.4.1)"] +nodejs = ["nodejs-wheel-binaries"] [[package]] name = "sniffio" @@ -538,18 +523,6 @@ files = [ {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, ] -[[package]] -name = "types-python-dateutil" -version = "2.9.0.20240906" -description = "Typing stubs for python-dateutil" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "types-python-dateutil-2.9.0.20240906.tar.gz", hash = "sha256:9706c3b68284c25adffc47319ecc7947e5bb86b3773f843c73906fd598bc176e"}, - {file = "types_python_dateutil-2.9.0.20240906-py3-none-any.whl", hash = "sha256:27c8cc2d058ccb14946eebcaaa503088f4f6dbc4fb6093d3d456a49aef2753f6"}, -] - [[package]] name = "typing-extensions" version = "4.12.2" @@ -563,22 +536,21 @@ files = [ ] [[package]] -name = "typing-inspect" -version = "0.9.0" -description = "Runtime inspection utilities for typing module." +name = "typing-inspection" +version = "0.4.2" +description = "Runtime typing introspection tools" optional = false -python-versions = "*" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, - {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, + {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, + {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, ] [package.dependencies] -mypy-extensions = ">=0.3.0" -typing-extensions = ">=3.7.4" +typing-extensions = ">=4.12.0" [metadata] lock-version = "2.1" -python-versions = ">=3.9" -content-hash = "1f0dcb22a1bf4d933c50fbaab2e7f694592f680adf1171c2dc13507e4259a9c0" +python-versions = ">=3.9.2" +content-hash = "c0dd101f07fb15e54d4562dfdf249e128fb9507759d84012283e316c226a3b8c" diff --git a/poetry.toml b/poetry.toml index ab1033bd..cd3492ac 100644 --- a/poetry.toml +++ b/poetry.toml @@ -1,2 +1,3 @@ + [virtualenvs] in-project = true diff --git a/pylintrc b/pylintrc index f2385e87..e8cd3e85 100644 --- a/pylintrc +++ b/pylintrc @@ -454,7 +454,11 @@ disable=raw-checker-failed, bare-except, broad-exception-caught, fixme, - relative-beyond-top-level + relative-beyond-top-level, + consider-using-with, + wildcard-import, + unused-wildcard-import, + too-many-return-statements # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option @@ -655,4 +659,4 @@ init-import=no # List of qualified module names which can have objects that can redefine # builtins. -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 18faed42..a1ef60f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,16 +1,15 @@ + [project] name = "Leonardo-Ai-SDK" -version = "6.5.1" +version = "6.6.0" description = "Leonardo AI Python Client SDK" authors = [{ name = "Leonardo-Ai" },] readme = "README-PYPI.md" -requires-python = ">=3.9" +requires-python = ">=3.9.2" dependencies = [ - "eval-type-backport >=0.2.0", + "httpcore >=1.0.9", "httpx >=0.28.1", - "pydantic >=2.10.3", - "python-dateutil >=2.8.2", - "typing-inspect >=0.9.0", + "pydantic >=2.11.2", ] [tool.poetry] @@ -27,9 +26,9 @@ include = ["py.typed", "src/leonardo_ai_sdk/py.typed"] in-project = true [tool.poetry.group.dev.dependencies] -mypy = "==1.14.1" +mypy = "==1.15.0" pylint = "==3.2.3" -types-python-dateutil = "^2.9.0.20240316" +pyright = "==1.1.398" [build-system] requires = ["poetry-core"] @@ -41,6 +40,8 @@ pythonpath = ["src"] [tool.mypy] disable_error_code = "misc" +explicit_package_bases = true +mypy_path = "src" [[tool.mypy.overrides]] module = "typing_inspect" diff --git a/scripts/prepare-readme.py b/scripts/prepare_readme.py similarity index 73% rename from scripts/prepare-readme.py rename to scripts/prepare_readme.py index c5abeb8b..a15b9de0 100644 --- a/scripts/prepare-readme.py +++ b/scripts/prepare_readme.py @@ -4,30 +4,35 @@ import shutil try: - with open("README.md", "r") as rh: + with open("README.md", "r", encoding="utf-8") as rh: readme_contents = rh.read() GITHUB_URL = "https://github.com/Leonardo-Interactive/leonardo-python-sdk.git" GITHUB_URL = ( GITHUB_URL[: -len(".git")] if GITHUB_URL.endswith(".git") else GITHUB_URL ) + REPO_SUBDIR = "." + # Ensure the subdirectory has a trailing slash + if not REPO_SUBDIR.endswith("/"): + REPO_SUBDIR += "/" # links on PyPI should have absolute URLs readme_contents = re.sub( r"(\[[^\]]+\]\()((?!https?:)[^\)]+)(\))", lambda m: m.group(1) + GITHUB_URL + "/blob/master/" + + REPO_SUBDIR + m.group(2) + m.group(3), readme_contents, ) - with open("README-PYPI.md", "w") as wh: + with open("README-PYPI.md", "w", encoding="utf-8") as wh: wh.write(readme_contents) except Exception as e: try: print("Failed to rewrite README.md to README-PYPI.md, copying original instead") print(e) shutil.copyfile("README.md", "README-PYPI.md") - except Exception as e: + except Exception as ie: print("Failed to copy README.md to README-PYPI.md") - print(e) + print(ie) diff --git a/scripts/publish.sh b/scripts/publish.sh index ab45b1f9..2a3ead70 100755 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash - export POETRY_PYPI_TOKEN_PYPI=${PYPI_TOKEN} -poetry run python scripts/prepare-readme.py +poetry run python scripts/prepare_readme.py poetry publish --build --skip-existing diff --git a/src/leonardo_ai_sdk/_hooks/types.py b/src/leonardo_ai_sdk/_hooks/types.py index bf3ec6e5..557948ef 100644 --- a/src/leonardo_ai_sdk/_hooks/types.py +++ b/src/leonardo_ai_sdk/_hooks/types.py @@ -3,20 +3,27 @@ from abc import ABC, abstractmethod import httpx from leonardo_ai_sdk.httpclient import HttpClient +from leonardo_ai_sdk.sdkconfiguration import SDKConfiguration from typing import Any, Callable, List, Optional, Tuple, Union class HookContext: + config: SDKConfiguration + base_url: str operation_id: str oauth2_scopes: Optional[List[str]] = None security_source: Optional[Union[Any, Callable[[], Any]]] = None def __init__( self, + config: SDKConfiguration, + base_url: str, operation_id: str, oauth2_scopes: Optional[List[str]], security_source: Optional[Union[Any, Callable[[], Any]]], ): + self.config = config + self.base_url = base_url self.operation_id = operation_id self.oauth2_scopes = oauth2_scopes self.security_source = security_source @@ -25,21 +32,33 @@ def __init__( class BeforeRequestContext(HookContext): def __init__(self, hook_ctx: HookContext): super().__init__( - hook_ctx.operation_id, hook_ctx.oauth2_scopes, hook_ctx.security_source + hook_ctx.config, + hook_ctx.base_url, + hook_ctx.operation_id, + hook_ctx.oauth2_scopes, + hook_ctx.security_source, ) class AfterSuccessContext(HookContext): def __init__(self, hook_ctx: HookContext): super().__init__( - hook_ctx.operation_id, hook_ctx.oauth2_scopes, hook_ctx.security_source + hook_ctx.config, + hook_ctx.base_url, + hook_ctx.operation_id, + hook_ctx.oauth2_scopes, + hook_ctx.security_source, ) class AfterErrorContext(HookContext): def __init__(self, hook_ctx: HookContext): super().__init__( - hook_ctx.operation_id, hook_ctx.oauth2_scopes, hook_ctx.security_source + hook_ctx.config, + hook_ctx.base_url, + hook_ctx.operation_id, + hook_ctx.oauth2_scopes, + hook_ctx.security_source, ) diff --git a/src/leonardo_ai_sdk/_version.py b/src/leonardo_ai_sdk/_version.py index ba47cd84..969992ef 100644 --- a/src/leonardo_ai_sdk/_version.py +++ b/src/leonardo_ai_sdk/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "Leonardo-Ai-SDK" -__version__: str = "6.5.1" +__version__: str = "6.6.0" __openapi_doc_version__: str = "v1.0.0" -__gen_version__: str = "2.506.0" -__user_agent__: str = "speakeasy-sdk/python 6.5.1 2.506.0 v1.0.0 Leonardo-Ai-SDK" +__gen_version__: str = "2.796.4" +__user_agent__: str = "speakeasy-sdk/python 6.6.0 2.796.4 v1.0.0 Leonardo-Ai-SDK" try: if __package__ is not None: diff --git a/src/leonardo_ai_sdk/basesdk.py b/src/leonardo_ai_sdk/basesdk.py index 4034bcb3..f7218a4f 100644 --- a/src/leonardo_ai_sdk/basesdk.py +++ b/src/leonardo_ai_sdk/basesdk.py @@ -9,16 +9,31 @@ BeforeRequestContext, ) from leonardo_ai_sdk.models import errors -from leonardo_ai_sdk.utils import RetryConfig, SerializedRequestBody, get_body_content +from leonardo_ai_sdk.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 class BaseSDK: sdk_configuration: SDKConfiguration + parent_ref: Optional[object] = None + """ + Reference to the root SDK instance, if any. This will prevent it from + being garbage collected while there are active streams. + """ - def __init__(self, sdk_config: SDKConfiguration) -> None: + def __init__( + self, + sdk_config: SDKConfiguration, + parent_ref: Optional[object] = None, + ) -> None: self.sdk_configuration = sdk_config + self.parent_ref = parent_ref def _get_url(self, base_url, url_variables): sdk_url, sdk_variables = self.sdk_configuration.get_server_details() @@ -51,6 +66,7 @@ def _build_request_async( ] = None, url_override: Optional[str] = None, http_headers: Optional[Mapping[str, str]] = None, + allow_empty_value: Optional[List[str]] = None, ) -> httpx.Request: client = self.sdk_configuration.async_client return self._build_request_with_client( @@ -71,6 +87,7 @@ def _build_request_async( get_serialized_body, url_override, http_headers, + allow_empty_value, ) def _build_request( @@ -93,6 +110,7 @@ def _build_request( ] = None, url_override: Optional[str] = None, http_headers: Optional[Mapping[str, str]] = None, + allow_empty_value: Optional[List[str]] = None, ) -> httpx.Request: client = self.sdk_configuration.client return self._build_request_with_client( @@ -113,6 +131,7 @@ def _build_request( get_serialized_body, url_override, http_headers, + allow_empty_value, ) def _build_request_with_client( @@ -136,6 +155,7 @@ def _build_request_with_client( ] = None, url_override: Optional[str] = None, http_headers: Optional[Mapping[str, str]] = None, + allow_empty_value: Optional[List[str]] = None, ) -> httpx.Request: query_params = {} @@ -151,6 +171,7 @@ def _build_request_with_client( query_params = utils.get_query_params( request if request_has_query_params else None, _globals if request_has_query_params else None, + allow_empty_value, ) else: # Pick up the query parameter from the override so they can be @@ -219,12 +240,12 @@ def do_request( client = self.sdk_configuration.client logger = self.sdk_configuration.debug_logger + hooks = self.sdk_configuration.__dict__["_hooks"] + def do(): http_res = None try: - req = self.sdk_configuration.get_hooks().before_request( - BeforeRequestContext(hook_ctx), request - ) + req = hooks.before_request(BeforeRequestContext(hook_ctx), request) logger.debug( "Request:\nMethod: %s\nURL: %s\nHeaders: %s\nBody: %s", req.method, @@ -232,18 +253,20 @@ def do(): req.headers, get_body_content(req), ) + + if client is None: + raise ValueError("client is required") + http_res = client.send(req, stream=stream) except Exception as e: - _, e = self.sdk_configuration.get_hooks().after_error( - AfterErrorContext(hook_ctx), None, e - ) + _, e = hooks.after_error(AfterErrorContext(hook_ctx), None, e) if e is not None: logger.debug("Request Exception", exc_info=True) raise e if http_res is None: logger.debug("Raising no response SDK error") - raise errors.SDKError("No response received") + raise errors.NoResponseError("No response received") logger.debug( "Response:\nStatus Code: %s\nURL: %s\nHeaders: %s\nBody: %s", @@ -254,7 +277,7 @@ def do(): ) if utils.match_status_codes(error_status_codes, http_res.status_code): - result, err = self.sdk_configuration.get_hooks().after_error( + result, err = hooks.after_error( AfterErrorContext(hook_ctx), http_res, None ) if err is not None: @@ -264,7 +287,7 @@ def do(): http_res = result else: logger.debug("Raising unexpected SDK error") - raise errors.SDKError("Unexpected error occurred") + raise errors.SDKError("Unexpected error occurred", http_res) return http_res @@ -274,9 +297,7 @@ def do(): http_res = do() if not utils.match_status_codes(error_status_codes, http_res.status_code): - http_res = self.sdk_configuration.get_hooks().after_success( - AfterSuccessContext(hook_ctx), http_res - ) + http_res = hooks.after_success(AfterSuccessContext(hook_ctx), http_res) return http_res @@ -291,12 +312,15 @@ async def do_request_async( client = self.sdk_configuration.async_client logger = self.sdk_configuration.debug_logger + hooks = self.sdk_configuration.__dict__["_hooks"] + async def do(): http_res = None try: - req = self.sdk_configuration.get_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, @@ -304,18 +328,23 @@ async def do(): req.headers, get_body_content(req), ) + + if client is None: + raise ValueError("client is required") + http_res = await client.send(req, stream=stream) except Exception as e: - _, e = self.sdk_configuration.get_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 if http_res is None: logger.debug("Raising no response SDK error") - raise errors.SDKError("No response received") + raise errors.NoResponseError("No response received") logger.debug( "Response:\nStatus Code: %s\nURL: %s\nHeaders: %s\nBody: %s", @@ -326,9 +355,10 @@ async def do(): ) if utils.match_status_codes(error_status_codes, http_res.status_code): - result, err = self.sdk_configuration.get_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 @@ -336,7 +366,7 @@ async def do(): http_res = result else: logger.debug("Raising unexpected SDK error") - raise errors.SDKError("Unexpected error occurred") + raise errors.SDKError("Unexpected error occurred", http_res) return http_res @@ -348,8 +378,8 @@ async def do(): http_res = await do() if not utils.match_status_codes(error_status_codes, http_res.status_code): - http_res = self.sdk_configuration.get_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/leonardo_ai_sdk/dataset.py b/src/leonardo_ai_sdk/dataset.py index 11c044e7..8c4aa417 100644 --- a/src/leonardo_ai_sdk/dataset.py +++ b/src/leonardo_ai_sdk/dataset.py @@ -5,6 +5,7 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import BaseModel, OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional, Union, cast @@ -38,6 +39,8 @@ def create_dataset( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal(request, operations.CreateDatasetRequestBody) @@ -59,6 +62,7 @@ def create_dataset( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.CreateDatasetRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -72,8 +76,10 @@ def create_dataset( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createDataset", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -83,8 +89,8 @@ def create_dataset( if utils.match_response(http_res, "200", "application/json"): return operations.CreateDatasetResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.CreateDatasetResponseBody] + object=unmarshal_json_response( + Optional[operations.CreateDatasetResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -92,23 +98,12 @@ def create_dataset( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def create_dataset_async( self, @@ -139,6 +134,8 @@ async def create_dataset_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal(request, operations.CreateDatasetRequestBody) @@ -160,6 +157,7 @@ async def create_dataset_async( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.CreateDatasetRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -173,8 +171,10 @@ async def create_dataset_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createDataset", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -184,8 +184,8 @@ async def create_dataset_async( if utils.match_response(http_res, "200", "application/json"): return operations.CreateDatasetResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.CreateDatasetResponseBody] + object=unmarshal_json_response( + Optional[operations.CreateDatasetResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -193,23 +193,12 @@ async def create_dataset_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def delete_dataset_by_id( self, @@ -237,6 +226,8 @@ def delete_dataset_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.DeleteDatasetByIDRequest( id=id, @@ -255,6 +246,7 @@ def delete_dataset_by_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -268,8 +260,10 @@ def delete_dataset_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="deleteDatasetById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -279,8 +273,8 @@ def delete_dataset_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.DeleteDatasetByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.DeleteDatasetByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.DeleteDatasetByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -288,23 +282,12 @@ def delete_dataset_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def delete_dataset_by_id_async( self, @@ -332,6 +315,8 @@ async def delete_dataset_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.DeleteDatasetByIDRequest( id=id, @@ -350,6 +335,7 @@ async def delete_dataset_by_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -363,8 +349,10 @@ async def delete_dataset_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="deleteDatasetById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -374,8 +362,8 @@ async def delete_dataset_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.DeleteDatasetByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.DeleteDatasetByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.DeleteDatasetByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -383,23 +371,12 @@ async def delete_dataset_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def get_dataset_by_id( self, @@ -427,6 +404,8 @@ def get_dataset_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetDatasetByIDRequest( id=id, @@ -445,6 +424,7 @@ def get_dataset_by_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -458,8 +438,10 @@ def get_dataset_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getDatasetById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -469,8 +451,8 @@ def get_dataset_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.GetDatasetByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetDatasetByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.GetDatasetByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -478,23 +460,12 @@ def get_dataset_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get_dataset_by_id_async( self, @@ -522,6 +493,8 @@ async def get_dataset_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetDatasetByIDRequest( id=id, @@ -540,6 +513,7 @@ async def get_dataset_by_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -553,8 +527,10 @@ async def get_dataset_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getDatasetById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -564,8 +540,8 @@ async def get_dataset_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.GetDatasetByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetDatasetByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.GetDatasetByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -573,23 +549,12 @@ async def get_dataset_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def upload_dataset_image( self, @@ -622,6 +587,8 @@ def upload_dataset_image( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.UploadDatasetImageRequest( dataset_id=dataset_id, @@ -650,6 +617,7 @@ def upload_dataset_image( "json", operations.UploadDatasetImageRequestBody, ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -663,8 +631,10 @@ def upload_dataset_image( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="uploadDatasetImage", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -674,8 +644,8 @@ def upload_dataset_image( if utils.match_response(http_res, "200", "application/json"): return operations.UploadDatasetImageResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.UploadDatasetImageResponseBody] + object=unmarshal_json_response( + Optional[operations.UploadDatasetImageResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -683,23 +653,12 @@ def upload_dataset_image( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def upload_dataset_image_async( self, @@ -732,6 +691,8 @@ async def upload_dataset_image_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.UploadDatasetImageRequest( dataset_id=dataset_id, @@ -760,6 +721,7 @@ async def upload_dataset_image_async( "json", operations.UploadDatasetImageRequestBody, ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -773,8 +735,10 @@ async def upload_dataset_image_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="uploadDatasetImage", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -784,8 +748,8 @@ async def upload_dataset_image_async( if utils.match_response(http_res, "200", "application/json"): return operations.UploadDatasetImageResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.UploadDatasetImageResponseBody] + object=unmarshal_json_response( + Optional[operations.UploadDatasetImageResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -793,23 +757,12 @@ async def upload_dataset_image_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def upload_dataset_image_from_gen( self, @@ -842,6 +795,8 @@ def upload_dataset_image_from_gen( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.UploadDatasetImageFromGenRequest( dataset_id=dataset_id, @@ -870,6 +825,7 @@ def upload_dataset_image_from_gen( "json", operations.UploadDatasetImageFromGenRequestBody, ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -883,8 +839,10 @@ def upload_dataset_image_from_gen( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="uploadDatasetImageFromGen", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -894,9 +852,8 @@ def upload_dataset_image_from_gen( if utils.match_response(http_res, "200", "application/json"): return operations.UploadDatasetImageFromGenResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.UploadDatasetImageFromGenResponseBody], + object=unmarshal_json_response( + Optional[operations.UploadDatasetImageFromGenResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -904,23 +861,12 @@ def upload_dataset_image_from_gen( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def upload_dataset_image_from_gen_async( self, @@ -953,6 +899,8 @@ async def upload_dataset_image_from_gen_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.UploadDatasetImageFromGenRequest( dataset_id=dataset_id, @@ -981,6 +929,7 @@ async def upload_dataset_image_from_gen_async( "json", operations.UploadDatasetImageFromGenRequestBody, ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -994,8 +943,10 @@ async def upload_dataset_image_from_gen_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="uploadDatasetImageFromGen", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -1005,9 +956,8 @@ async def upload_dataset_image_from_gen_async( if utils.match_response(http_res, "200", "application/json"): return operations.UploadDatasetImageFromGenResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.UploadDatasetImageFromGenResponseBody], + object=unmarshal_json_response( + Optional[operations.UploadDatasetImageFromGenResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -1015,20 +965,9 @@ async def upload_dataset_image_from_gen_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) diff --git a/src/leonardo_ai_sdk/elements.py b/src/leonardo_ai_sdk/elements.py index f47d6de6..902c57dd 100644 --- a/src/leonardo_ai_sdk/elements.py +++ b/src/leonardo_ai_sdk/elements.py @@ -5,6 +5,7 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import BaseModel, OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional, Union, cast @@ -38,6 +39,8 @@ def create_element( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal(request, operations.CreateElementRequestBody) @@ -59,6 +62,7 @@ def create_element( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.CreateElementRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -72,8 +76,10 @@ def create_element( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createElement", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -83,8 +89,8 @@ def create_element( if utils.match_response(http_res, "200", "application/json"): return operations.CreateElementResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.CreateElementResponseBody] + object=unmarshal_json_response( + Optional[operations.CreateElementResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -92,23 +98,12 @@ def create_element( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def create_element_async( self, @@ -139,6 +134,8 @@ async def create_element_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal(request, operations.CreateElementRequestBody) @@ -160,6 +157,7 @@ async def create_element_async( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.CreateElementRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -173,8 +171,10 @@ async def create_element_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createElement", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -184,8 +184,8 @@ async def create_element_async( if utils.match_response(http_res, "200", "application/json"): return operations.CreateElementResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.CreateElementResponseBody] + object=unmarshal_json_response( + Optional[operations.CreateElementResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -193,23 +193,12 @@ async def create_element_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def delete_element_by_id( self, @@ -237,6 +226,8 @@ def delete_element_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.DeleteElementByIDRequest( id=id, @@ -255,6 +246,7 @@ def delete_element_by_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -268,8 +260,10 @@ def delete_element_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="deleteElementById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -279,8 +273,8 @@ def delete_element_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.DeleteElementByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.DeleteElementByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.DeleteElementByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -288,23 +282,12 @@ def delete_element_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def delete_element_by_id_async( self, @@ -332,6 +315,8 @@ async def delete_element_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.DeleteElementByIDRequest( id=id, @@ -350,6 +335,7 @@ async def delete_element_by_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -363,8 +349,10 @@ async def delete_element_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="deleteElementById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -374,8 +362,8 @@ async def delete_element_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.DeleteElementByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.DeleteElementByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.DeleteElementByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -383,23 +371,12 @@ async def delete_element_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def get_custom_elements_by_user_id( self, @@ -427,6 +404,8 @@ def get_custom_elements_by_user_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetCustomElementsByUserIDRequest( user_id=user_id, @@ -445,6 +424,7 @@ def get_custom_elements_by_user_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -458,8 +438,10 @@ def get_custom_elements_by_user_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getCustomElementsByUserId", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -469,9 +451,8 @@ def get_custom_elements_by_user_id( if utils.match_response(http_res, "200", "application/json"): return operations.GetCustomElementsByUserIDResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.GetCustomElementsByUserIDResponseBody], + object=unmarshal_json_response( + Optional[operations.GetCustomElementsByUserIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -479,23 +460,12 @@ def get_custom_elements_by_user_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get_custom_elements_by_user_id_async( self, @@ -523,6 +493,8 @@ async def get_custom_elements_by_user_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetCustomElementsByUserIDRequest( user_id=user_id, @@ -541,6 +513,7 @@ async def get_custom_elements_by_user_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -554,8 +527,10 @@ async def get_custom_elements_by_user_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getCustomElementsByUserId", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -565,9 +540,8 @@ async def get_custom_elements_by_user_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.GetCustomElementsByUserIDResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.GetCustomElementsByUserIDResponseBody], + object=unmarshal_json_response( + Optional[operations.GetCustomElementsByUserIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -575,23 +549,12 @@ async def get_custom_elements_by_user_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def get_element_by_id( self, @@ -619,6 +582,8 @@ def get_element_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetElementByIDRequest( id=id, @@ -637,6 +602,7 @@ def get_element_by_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -650,8 +616,10 @@ def get_element_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getElementById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -661,8 +629,8 @@ def get_element_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.GetElementByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetElementByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.GetElementByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -670,23 +638,12 @@ def get_element_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get_element_by_id_async( self, @@ -714,6 +671,8 @@ async def get_element_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetElementByIDRequest( id=id, @@ -732,6 +691,7 @@ async def get_element_by_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -745,8 +705,10 @@ async def get_element_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getElementById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -756,8 +718,8 @@ async def get_element_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.GetElementByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetElementByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.GetElementByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -765,23 +727,12 @@ async def get_element_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def list_elements( self, @@ -807,6 +758,8 @@ def list_elements( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) req = self._build_request( method="GET", path="/elements", @@ -820,6 +773,7 @@ def list_elements( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -833,8 +787,10 @@ def list_elements( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="listElements", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -844,8 +800,8 @@ def list_elements( if utils.match_response(http_res, "200", "application/json"): return operations.ListElementsResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.ListElementsResponseBody] + object=unmarshal_json_response( + Optional[operations.ListElementsResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -853,23 +809,12 @@ def list_elements( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def list_elements_async( self, @@ -895,6 +840,8 @@ async def list_elements_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) req = self._build_request_async( method="GET", path="/elements", @@ -908,6 +855,7 @@ async def list_elements_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -921,8 +869,10 @@ async def list_elements_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="listElements", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -932,8 +882,8 @@ async def list_elements_async( if utils.match_response(http_res, "200", "application/json"): return operations.ListElementsResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.ListElementsResponseBody] + object=unmarshal_json_response( + Optional[operations.ListElementsResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -941,20 +891,9 @@ async def list_elements_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) diff --git a/src/leonardo_ai_sdk/httpclient.py b/src/leonardo_ai_sdk/httpclient.py index 9dc43cb0..89560b56 100644 --- a/src/leonardo_ai_sdk/httpclient.py +++ b/src/leonardo_ai_sdk/httpclient.py @@ -2,7 +2,6 @@ # pyright: reportReturnType = false import asyncio -from concurrent.futures import ThreadPoolExecutor from typing_extensions import Protocol, runtime_checkable import httpx from typing import Any, Optional, Union @@ -94,7 +93,9 @@ class ClientOwner(Protocol): def close_clients( owner: ClientOwner, sync_client: Union[HttpClient, None], + sync_client_supplied: bool, async_client: Union[AsyncHttpClient, None], + async_client_supplied: bool, ) -> None: """ A finalizer function that is meant to be used with weakref.finalize to close @@ -106,29 +107,19 @@ def close_clients( # to them from the owning SDK instance and they can be reaped. owner.client = None owner.async_client = None - - if sync_client is not None: + if sync_client is not None and not sync_client_supplied: try: sync_client.close() except Exception: pass - if async_client is not None: - is_async = False + if async_client is not None and not async_client_supplied: try: - asyncio.get_running_loop() - is_async = True + loop = asyncio.get_running_loop() + asyncio.run_coroutine_threadsafe(async_client.aclose(), loop) except RuntimeError: - pass - - try: - # If this function is called in an async loop then start another - # loop in a separate thread to close the async http client. - if is_async: - with ThreadPoolExecutor(max_workers=1) as executor: - future = executor.submit(asyncio.run, async_client.aclose()) - future.result() - else: + try: asyncio.run(async_client.aclose()) - except Exception: - pass + except RuntimeError: + # best effort + pass diff --git a/src/leonardo_ai_sdk/image.py b/src/leonardo_ai_sdk/image.py index e5df86dc..f6bd6082 100644 --- a/src/leonardo_ai_sdk/image.py +++ b/src/leonardo_ai_sdk/image.py @@ -5,6 +5,7 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import BaseModel, OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional, Union, cast @@ -38,6 +39,8 @@ def create_generation( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal(request, operations.CreateGenerationRequestBody) @@ -59,6 +62,7 @@ def create_generation( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.CreateGenerationRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -72,8 +76,10 @@ def create_generation( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createGeneration", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -83,8 +89,8 @@ def create_generation( if utils.match_response(http_res, "200", "application/json"): return operations.CreateGenerationResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.CreateGenerationResponseBody] + object=unmarshal_json_response( + Optional[operations.CreateGenerationResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -92,23 +98,12 @@ def create_generation( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def create_generation_async( self, @@ -139,6 +134,8 @@ async def create_generation_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal(request, operations.CreateGenerationRequestBody) @@ -160,6 +157,7 @@ async def create_generation_async( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.CreateGenerationRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -173,8 +171,10 @@ async def create_generation_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createGeneration", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -184,8 +184,8 @@ async def create_generation_async( if utils.match_response(http_res, "200", "application/json"): return operations.CreateGenerationResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.CreateGenerationResponseBody] + object=unmarshal_json_response( + Optional[operations.CreateGenerationResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -193,23 +193,12 @@ async def create_generation_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def delete_generation_by_id( self, @@ -237,6 +226,8 @@ def delete_generation_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.DeleteGenerationByIDRequest( id=id, @@ -255,6 +246,7 @@ def delete_generation_by_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -268,8 +260,10 @@ def delete_generation_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="deleteGenerationById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -279,8 +273,8 @@ def delete_generation_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.DeleteGenerationByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.DeleteGenerationByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.DeleteGenerationByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -288,23 +282,12 @@ def delete_generation_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def delete_generation_by_id_async( self, @@ -332,6 +315,8 @@ async def delete_generation_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.DeleteGenerationByIDRequest( id=id, @@ -350,6 +335,7 @@ async def delete_generation_by_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -363,8 +349,10 @@ async def delete_generation_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="deleteGenerationById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -374,8 +362,8 @@ async def delete_generation_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.DeleteGenerationByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.DeleteGenerationByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.DeleteGenerationByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -383,23 +371,12 @@ async def delete_generation_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def get_generation_by_id( self, @@ -427,6 +404,8 @@ def get_generation_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetGenerationByIDRequest( id=id, @@ -445,6 +424,7 @@ def get_generation_by_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -458,8 +438,10 @@ def get_generation_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getGenerationById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -469,8 +451,8 @@ def get_generation_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.GetGenerationByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetGenerationByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.GetGenerationByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -478,23 +460,12 @@ def get_generation_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get_generation_by_id_async( self, @@ -522,6 +493,8 @@ async def get_generation_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetGenerationByIDRequest( id=id, @@ -540,6 +513,7 @@ async def get_generation_by_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -553,8 +527,10 @@ async def get_generation_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getGenerationById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -564,8 +540,8 @@ async def get_generation_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.GetGenerationByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetGenerationByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.GetGenerationByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -573,23 +549,12 @@ async def get_generation_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def get_generations_by_user_id( self, @@ -621,6 +586,8 @@ def get_generations_by_user_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetGenerationsByUserIDRequest( limit=limit, @@ -641,6 +608,7 @@ def get_generations_by_user_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -654,8 +622,10 @@ def get_generations_by_user_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getGenerationsByUserId", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -665,9 +635,8 @@ def get_generations_by_user_id( if utils.match_response(http_res, "200", "application/json"): return operations.GetGenerationsByUserIDResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.GetGenerationsByUserIDResponseBody], + object=unmarshal_json_response( + Optional[operations.GetGenerationsByUserIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -675,23 +644,12 @@ def get_generations_by_user_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get_generations_by_user_id_async( self, @@ -723,6 +681,8 @@ async def get_generations_by_user_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetGenerationsByUserIDRequest( limit=limit, @@ -743,6 +703,7 @@ async def get_generations_by_user_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -756,8 +717,10 @@ async def get_generations_by_user_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getGenerationsByUserId", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -767,9 +730,8 @@ async def get_generations_by_user_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.GetGenerationsByUserIDResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.GetGenerationsByUserIDResponseBody], + object=unmarshal_json_response( + Optional[operations.GetGenerationsByUserIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -777,20 +739,9 @@ async def get_generations_by_user_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) diff --git a/src/leonardo_ai_sdk/init_images.py b/src/leonardo_ai_sdk/init_images.py index d21083f4..f209897e 100644 --- a/src/leonardo_ai_sdk/init_images.py +++ b/src/leonardo_ai_sdk/init_images.py @@ -5,6 +5,7 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import BaseModel, OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional, Union, cast @@ -35,6 +36,8 @@ def delete_init_image_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.DeleteInitImageByIDRequest( id=id, @@ -53,6 +56,7 @@ def delete_init_image_by_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -66,8 +70,10 @@ def delete_init_image_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="deleteInitImageById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -77,8 +83,8 @@ def delete_init_image_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.DeleteInitImageByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.DeleteInitImageByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.DeleteInitImageByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -86,23 +92,12 @@ def delete_init_image_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def delete_init_image_by_id_async( self, @@ -130,6 +125,8 @@ async def delete_init_image_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.DeleteInitImageByIDRequest( id=id, @@ -148,6 +145,7 @@ async def delete_init_image_by_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -161,8 +159,10 @@ async def delete_init_image_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="deleteInitImageById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -172,8 +172,8 @@ async def delete_init_image_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.DeleteInitImageByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.DeleteInitImageByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.DeleteInitImageByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -181,23 +181,12 @@ async def delete_init_image_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def get_init_image_by_id( self, @@ -225,6 +214,8 @@ def get_init_image_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetInitImageByIDRequest( id=id, @@ -243,6 +234,7 @@ def get_init_image_by_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -256,8 +248,10 @@ def get_init_image_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getInitImageById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -267,8 +261,8 @@ def get_init_image_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.GetInitImageByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetInitImageByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.GetInitImageByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -276,23 +270,12 @@ def get_init_image_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get_init_image_by_id_async( self, @@ -320,6 +303,8 @@ async def get_init_image_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetInitImageByIDRequest( id=id, @@ -338,6 +323,7 @@ async def get_init_image_by_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -351,8 +337,10 @@ async def get_init_image_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getInitImageById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -362,8 +350,8 @@ async def get_init_image_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.GetInitImageByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetInitImageByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.GetInitImageByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -371,23 +359,12 @@ async def get_init_image_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def upload_canvas_init_image( self, @@ -418,6 +395,8 @@ def upload_canvas_init_image( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -445,6 +424,7 @@ def upload_canvas_init_image( "json", operations.UploadCanvasInitImageRequestBody, ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -458,8 +438,10 @@ def upload_canvas_init_image( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="uploadCanvasInitImage", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -469,9 +451,8 @@ def upload_canvas_init_image( if utils.match_response(http_res, "200", "application/json"): return operations.UploadCanvasInitImageResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.UploadCanvasInitImageResponseBody], + object=unmarshal_json_response( + Optional[operations.UploadCanvasInitImageResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -479,23 +460,12 @@ def upload_canvas_init_image( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def upload_canvas_init_image_async( self, @@ -526,6 +496,8 @@ async def upload_canvas_init_image_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -553,6 +525,7 @@ async def upload_canvas_init_image_async( "json", operations.UploadCanvasInitImageRequestBody, ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -566,8 +539,10 @@ async def upload_canvas_init_image_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="uploadCanvasInitImage", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -577,9 +552,8 @@ async def upload_canvas_init_image_async( if utils.match_response(http_res, "200", "application/json"): return operations.UploadCanvasInitImageResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.UploadCanvasInitImageResponseBody], + object=unmarshal_json_response( + Optional[operations.UploadCanvasInitImageResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -587,23 +561,12 @@ async def upload_canvas_init_image_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def upload_init_image( self, @@ -634,6 +597,8 @@ def upload_init_image( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal(request, operations.UploadInitImageRequestBody) @@ -655,6 +620,7 @@ def upload_init_image( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.UploadInitImageRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -668,8 +634,10 @@ def upload_init_image( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="uploadInitImage", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -679,8 +647,8 @@ def upload_init_image( if utils.match_response(http_res, "200", "application/json"): return operations.UploadInitImageResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.UploadInitImageResponseBody] + object=unmarshal_json_response( + Optional[operations.UploadInitImageResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -688,23 +656,12 @@ def upload_init_image( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def upload_init_image_async( self, @@ -735,6 +692,8 @@ async def upload_init_image_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal(request, operations.UploadInitImageRequestBody) @@ -756,6 +715,7 @@ async def upload_init_image_async( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.UploadInitImageRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -769,8 +729,10 @@ async def upload_init_image_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="uploadInitImage", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -780,8 +742,8 @@ async def upload_init_image_async( if utils.match_response(http_res, "200", "application/json"): return operations.UploadInitImageResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.UploadInitImageResponseBody] + object=unmarshal_json_response( + Optional[operations.UploadInitImageResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -789,20 +751,9 @@ async def upload_init_image_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) diff --git a/src/leonardo_ai_sdk/models/__init__.py b/src/leonardo_ai_sdk/models/__init__.py new file mode 100644 index 00000000..726fc5eb --- /dev/null +++ b/src/leonardo_ai_sdk/models/__init__.py @@ -0,0 +1,3 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +# package diff --git a/src/leonardo_ai_sdk/models/errors/__init__.py b/src/leonardo_ai_sdk/models/errors/__init__.py index a9f7c532..045b185f 100644 --- a/src/leonardo_ai_sdk/models/errors/__init__.py +++ b/src/leonardo_ai_sdk/models/errors/__init__.py @@ -1,6 +1,63 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" -from .sdkerror import SDKError +from .leonardoaisdkerror import LeonardoAiSDKError +from typing import TYPE_CHECKING +from importlib import import_module +import builtins +import sys +if TYPE_CHECKING: + from .no_response_error import NoResponseError + from .responsevalidationerror import ResponseValidationError + from .sdkerror import SDKError -__all__ = ["SDKError"] +__all__ = [ + "LeonardoAiSDKError", + "NoResponseError", + "ResponseValidationError", + "SDKError", +] + +_dynamic_imports: dict[str, str] = { + "NoResponseError": ".no_response_error", + "ResponseValidationError": ".responsevalidationerror", + "SDKError": ".sdkerror", +} + + +def dynamic_import(modname, retries=3): + for attempt in range(retries): + try: + return import_module(modname, __package__) + except KeyError: + # Clear any half-initialized module and retry + sys.modules.pop(modname, None) + if attempt == retries - 1: + break + raise KeyError(f"Failed to import module '{modname}' after {retries} attempts") + + +def __getattr__(attr_name: str) -> object: + module_name = _dynamic_imports.get(attr_name) + if module_name is None: + raise AttributeError( + f"No {attr_name} found in _dynamic_imports for module name -> {__name__} " + ) + + try: + module = dynamic_import(module_name) + result = getattr(module, attr_name) + return result + except ImportError as e: + raise ImportError( + f"Failed to import {attr_name} from {module_name}: {e}" + ) from e + except AttributeError as e: + raise AttributeError( + f"Failed to get {attr_name} from {module_name}: {e}" + ) from e + + +def __dir__(): + lazy_attrs = builtins.list(_dynamic_imports.keys()) + return builtins.sorted(lazy_attrs) diff --git a/src/leonardo_ai_sdk/models/errors/leonardoaisdkerror.py b/src/leonardo_ai_sdk/models/errors/leonardoaisdkerror.py new file mode 100644 index 00000000..92c003e2 --- /dev/null +++ b/src/leonardo_ai_sdk/models/errors/leonardoaisdkerror.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +import httpx +from typing import Optional +from dataclasses import dataclass, field + + +@dataclass(unsafe_hash=True) +class LeonardoAiSDKError(Exception): + """The base class for all HTTP error responses.""" + + message: str + status_code: int + body: str + headers: httpx.Headers = field(hash=False) + raw_response: httpx.Response = field(hash=False) + + def __init__( + self, message: str, raw_response: httpx.Response, body: Optional[str] = None + ): + object.__setattr__(self, "message", message) + object.__setattr__(self, "status_code", raw_response.status_code) + object.__setattr__( + self, "body", body if body is not None else raw_response.text + ) + object.__setattr__(self, "headers", raw_response.headers) + object.__setattr__(self, "raw_response", raw_response) + + def __str__(self): + return self.message diff --git a/src/leonardo_ai_sdk/models/errors/no_response_error.py b/src/leonardo_ai_sdk/models/errors/no_response_error.py new file mode 100644 index 00000000..1deab64b --- /dev/null +++ b/src/leonardo_ai_sdk/models/errors/no_response_error.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from dataclasses import dataclass + + +@dataclass(unsafe_hash=True) +class NoResponseError(Exception): + """Error raised when no HTTP response is received from the server.""" + + message: str + + def __init__(self, message: str = "No response received"): + object.__setattr__(self, "message", message) + super().__init__(message) + + def __str__(self): + return self.message diff --git a/src/leonardo_ai_sdk/models/errors/responsevalidationerror.py b/src/leonardo_ai_sdk/models/errors/responsevalidationerror.py new file mode 100644 index 00000000..216ee809 --- /dev/null +++ b/src/leonardo_ai_sdk/models/errors/responsevalidationerror.py @@ -0,0 +1,27 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +import httpx +from typing import Optional +from dataclasses import dataclass + +from leonardo_ai_sdk.models.errors import LeonardoAiSDKError + + +@dataclass(unsafe_hash=True) +class ResponseValidationError(LeonardoAiSDKError): + """Error raised when there is a type mismatch between the response data and the expected Pydantic model.""" + + def __init__( + self, + message: str, + raw_response: httpx.Response, + cause: Exception, + body: Optional[str] = None, + ): + message = f"{message}: {cause}" + super().__init__(message, raw_response, body) + + @property + def cause(self): + """Normally the Pydantic ValidationError""" + return self.__cause__ diff --git a/src/leonardo_ai_sdk/models/errors/sdkerror.py b/src/leonardo_ai_sdk/models/errors/sdkerror.py index 03216cbf..9846506f 100644 --- a/src/leonardo_ai_sdk/models/errors/sdkerror.py +++ b/src/leonardo_ai_sdk/models/errors/sdkerror.py @@ -1,22 +1,40 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" -from dataclasses import dataclass -from typing import Optional import httpx +from typing import Optional +from dataclasses import dataclass + +from leonardo_ai_sdk.models.errors import LeonardoAiSDKError + +MAX_MESSAGE_LEN = 10_000 + + +@dataclass(unsafe_hash=True) +class SDKError(LeonardoAiSDKError): + """The fallback error class if no more specific error class is matched.""" + + def __init__( + self, message: str, raw_response: httpx.Response, body: Optional[str] = None + ): + body_display = body or raw_response.text or '""' + if message: + message += ": " + message += f"Status {raw_response.status_code}" -@dataclass -class SDKError(Exception): - """Represents an error returned by the API.""" + headers = raw_response.headers + content_type = headers.get("content-type", '""') + if content_type != "application/json": + if " " in content_type: + content_type = f'"{content_type}"' + message += f" Content-Type {content_type}" - message: str - status_code: int = -1 - body: str = "" - raw_response: Optional[httpx.Response] = None + if len(body_display) > MAX_MESSAGE_LEN: + truncated = body_display[:MAX_MESSAGE_LEN] + remaining = len(body_display) - MAX_MESSAGE_LEN + body_display = f"{truncated}...and {remaining} more chars" - def __str__(self): - body = "" - if len(self.body) > 0: - body = f"\n{self.body}" + message += f". Body: {body_display}" + message = message.strip() - return f"{self.message}: Status {self.status_code}{body}" + super().__init__(message, raw_response, body) diff --git a/src/leonardo_ai_sdk/models/operations/__init__.py b/src/leonardo_ai_sdk/models/operations/__init__.py index 843c32b4..30c1147b 100644 --- a/src/leonardo_ai_sdk/models/operations/__init__.py +++ b/src/leonardo_ai_sdk/models/operations/__init__.py @@ -1,511 +1,571 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" -from .createdataset import ( - CreateDatasetRequestBody, - CreateDatasetRequestBodyTypedDict, - CreateDatasetResponse, - CreateDatasetResponseBody, - CreateDatasetResponseBodyTypedDict, - CreateDatasetResponseTypedDict, - Datasets, - DatasetsTypedDict, -) -from .createelement import ( - CreateElementRequestBody, - CreateElementRequestBodyTypedDict, - CreateElementResponse, - CreateElementResponseBody, - CreateElementResponseBodyTypedDict, - CreateElementResponseTypedDict, - SDTrainingOutput, - SDTrainingOutputTypedDict, - SdVersions, -) -from .creategeneration import ( - CreateGenerationRequestBody, - CreateGenerationRequestBodyTypedDict, - CreateGenerationResponse, - CreateGenerationResponseBody, - CreateGenerationResponseBodyTypedDict, - CreateGenerationResponseTypedDict, - SDGenerationOutput, - SDGenerationOutputTypedDict, - TransparencyType, -) -from .createlcmgeneration import ( - CreateLCMGenerationRequestBody, - CreateLCMGenerationRequestBodyTypedDict, - CreateLCMGenerationResponse, - CreateLCMGenerationResponseBody, - CreateLCMGenerationResponseBodyTypedDict, - CreateLCMGenerationResponseTypedDict, - LcmGenerationOutput, - LcmGenerationOutputTypedDict, -) -from .createmodel import ( - CreateModelRequestBody, - CreateModelRequestBodyTypedDict, - CreateModelResponse, - CreateModelResponseBody, - CreateModelResponseBodyTypedDict, - CreateModelResponseTypedDict, - CreateModelSDTrainingOutput, - CreateModelSDTrainingOutputTypedDict, - CreateModelSdVersions, -) -from .createsvdmotiongeneration import ( - CreateSVDMotionGenerationRequestBody, - CreateSVDMotionGenerationRequestBodyTypedDict, - CreateSVDMotionGenerationResponse, - CreateSVDMotionGenerationResponseBody, - CreateSVDMotionGenerationResponseBodyTypedDict, - CreateSVDMotionGenerationResponseTypedDict, - MotionSvdGenerationOutput, - MotionSvdGenerationOutputTypedDict, -) -from .createtexturegeneration import ( - CreateTextureGenerationRequestBody, - CreateTextureGenerationRequestBodyTypedDict, - CreateTextureGenerationResponse, - CreateTextureGenerationResponseBody, - CreateTextureGenerationResponseBodyTypedDict, - CreateTextureGenerationResponseTypedDict, - TextureGenerationJobOutput, - TextureGenerationJobOutputTypedDict, -) -from .createuniversalupscalerjob import ( - CreateUniversalUpscalerJobRequestBody, - CreateUniversalUpscalerJobRequestBodyTypedDict, - CreateUniversalUpscalerJobResponse, - CreateUniversalUpscalerJobResponseBody, - CreateUniversalUpscalerJobResponseBodyTypedDict, - CreateUniversalUpscalerJobResponseTypedDict, - UniversalUpscalerOutput, - UniversalUpscalerOutputTypedDict, -) -from .createvariationnobg import ( - CreateVariationNoBGRequestBody, - CreateVariationNoBGRequestBodyTypedDict, - CreateVariationNoBGResponse, - CreateVariationNoBGResponseBody, - CreateVariationNoBGResponseBodyTypedDict, - CreateVariationNoBGResponseTypedDict, - SDUpscaleJobOutput, - SDUpscaleJobOutputTypedDict, -) -from .createvariationunzoom import ( - CreateVariationUnzoomRequestBody, - CreateVariationUnzoomRequestBodyTypedDict, - CreateVariationUnzoomResponse, - CreateVariationUnzoomResponseBody, - CreateVariationUnzoomResponseBodyTypedDict, - CreateVariationUnzoomResponseTypedDict, - SDUnzoomOutput, - SDUnzoomOutputTypedDict, -) -from .createvariationupscale import ( - CreateVariationUpscaleRequestBody, - CreateVariationUpscaleRequestBodyTypedDict, - CreateVariationUpscaleResponse, - CreateVariationUpscaleResponseBody, - CreateVariationUpscaleResponseBodyTypedDict, - CreateVariationUpscaleResponseTypedDict, - CreateVariationUpscaleSDUpscaleJobOutput, - CreateVariationUpscaleSDUpscaleJobOutputTypedDict, -) -from .delete3dmodelbyid import ( - Delete3DModelByIDRequest, - Delete3DModelByIDRequestBody, - Delete3DModelByIDRequestBodyTypedDict, - Delete3DModelByIDRequestTypedDict, - Delete3DModelByIDResponse, - Delete3DModelByIDResponseBody, - Delete3DModelByIDResponseBodyTypedDict, - Delete3DModelByIDResponseTypedDict, - ModelAssets, - ModelAssetsTypedDict, -) -from .deletedatasetbyid import ( - DeleteDatasetByIDDatasets, - DeleteDatasetByIDDatasetsTypedDict, - DeleteDatasetByIDRequest, - DeleteDatasetByIDRequestTypedDict, - DeleteDatasetByIDResponse, - DeleteDatasetByIDResponseBody, - DeleteDatasetByIDResponseBodyTypedDict, - DeleteDatasetByIDResponseTypedDict, -) -from .deleteelementbyid import ( - DeleteElementByIDRequest, - DeleteElementByIDRequestTypedDict, - DeleteElementByIDResponse, - DeleteElementByIDResponseBody, - DeleteElementByIDResponseBodyTypedDict, - DeleteElementByIDResponseTypedDict, - UserLoras, - UserLorasTypedDict, -) -from .deletegenerationbyid import ( - DeleteGenerationByIDRequest, - DeleteGenerationByIDRequestTypedDict, - DeleteGenerationByIDResponse, - DeleteGenerationByIDResponseBody, - DeleteGenerationByIDResponseBodyTypedDict, - DeleteGenerationByIDResponseTypedDict, - Generations, - GenerationsTypedDict, -) -from .deleteinitimagebyid import ( - DeleteInitImageByIDRequest, - DeleteInitImageByIDRequestTypedDict, - DeleteInitImageByIDResponse, - DeleteInitImageByIDResponseBody, - DeleteInitImageByIDResponseBodyTypedDict, - DeleteInitImageByIDResponseTypedDict, - InitImages, - InitImagesTypedDict, -) -from .deletemodelbyid import ( - CustomModels, - CustomModelsTypedDict, - DeleteModelByIDRequest, - DeleteModelByIDRequestTypedDict, - DeleteModelByIDResponse, - DeleteModelByIDResponseBody, - DeleteModelByIDResponseBodyTypedDict, - DeleteModelByIDResponseTypedDict, -) -from .deletetexturegenerationbyid import ( - DeleteTextureGenerationByIDRequest, - DeleteTextureGenerationByIDRequestBody, - DeleteTextureGenerationByIDRequestBodyTypedDict, - DeleteTextureGenerationByIDRequestTypedDict, - DeleteTextureGenerationByIDResponse, - DeleteTextureGenerationByIDResponseBody, - DeleteTextureGenerationByIDResponseBodyTypedDict, - DeleteTextureGenerationByIDResponseTypedDict, - ModelAssetTextureGenerations, - ModelAssetTextureGenerationsTypedDict, -) -from .get3dmodelbyid import ( - Get3DModelByIDModelAssets, - Get3DModelByIDModelAssetsTypedDict, - Get3DModelByIDRequest, - Get3DModelByIDRequestBody, - Get3DModelByIDRequestBodyTypedDict, - Get3DModelByIDRequestTypedDict, - Get3DModelByIDResponse, - Get3DModelByIDResponseBody, - Get3DModelByIDResponseBodyTypedDict, - Get3DModelByIDResponseTypedDict, -) -from .get3dmodelsbyuserid import ( - Get3DModelsByUserIDModelAssets, - Get3DModelsByUserIDModelAssetsTypedDict, - Get3DModelsByUserIDRequest, - Get3DModelsByUserIDRequestBody, - Get3DModelsByUserIDRequestBodyTypedDict, - Get3DModelsByUserIDRequestTypedDict, - Get3DModelsByUserIDResponse, - Get3DModelsByUserIDResponseBody, - Get3DModelsByUserIDResponseBodyTypedDict, - Get3DModelsByUserIDResponseTypedDict, -) -from .getcustomelementsbyuserid import ( - GetCustomElementsByUserIDRequest, - GetCustomElementsByUserIDRequestTypedDict, - GetCustomElementsByUserIDResponse, - GetCustomElementsByUserIDResponseBody, - GetCustomElementsByUserIDResponseBodyTypedDict, - GetCustomElementsByUserIDResponseTypedDict, - GetCustomElementsByUserIDUserLoras, - GetCustomElementsByUserIDUserLorasTypedDict, -) -from .getcustommodelsbyuserid import ( - GetCustomModelsByUserIDCustomModels, - GetCustomModelsByUserIDCustomModelsTypedDict, - GetCustomModelsByUserIDRequest, - GetCustomModelsByUserIDRequestTypedDict, - GetCustomModelsByUserIDResponse, - GetCustomModelsByUserIDResponseBody, - GetCustomModelsByUserIDResponseBodyTypedDict, - GetCustomModelsByUserIDResponseTypedDict, -) -from .getdatasetbyid import ( - DatasetImages, - DatasetImagesTypedDict, - GetDatasetByIDDatasets, - GetDatasetByIDDatasetsTypedDict, - GetDatasetByIDRequest, - GetDatasetByIDRequestTypedDict, - GetDatasetByIDResponse, - GetDatasetByIDResponseBody, - GetDatasetByIDResponseBodyTypedDict, - GetDatasetByIDResponseTypedDict, -) -from .getelementbyid import ( - GetElementByIDRequest, - GetElementByIDRequestTypedDict, - GetElementByIDResponse, - GetElementByIDResponseBody, - GetElementByIDResponseBodyTypedDict, - GetElementByIDResponseTypedDict, - GetElementByIDUserLoras, - GetElementByIDUserLorasTypedDict, -) -from .getgenerationbyid import ( - GeneratedImages, - GeneratedImagesTypedDict, - GenerationElements, - GenerationElementsTypedDict, - GetGenerationByIDGeneratedImageVariationGeneric, - GetGenerationByIDGeneratedImageVariationGenericTypedDict, - GetGenerationByIDGenerations, - GetGenerationByIDGenerationsTypedDict, - GetGenerationByIDLoras, - GetGenerationByIDLorasTypedDict, - GetGenerationByIDRequest, - GetGenerationByIDRequestTypedDict, - GetGenerationByIDResponse, - GetGenerationByIDResponseBody, - GetGenerationByIDResponseBodyTypedDict, - GetGenerationByIDResponseTypedDict, -) -from .getgenerationsbyuserid import ( - Elements, - ElementsTypedDict, - GetGenerationsByUserIDGeneratedImageVariationGeneric, - GetGenerationsByUserIDGeneratedImageVariationGenericTypedDict, - GetGenerationsByUserIDGeneratedImages, - GetGenerationsByUserIDGeneratedImagesTypedDict, - GetGenerationsByUserIDGenerationElements, - GetGenerationsByUserIDGenerationElementsTypedDict, - GetGenerationsByUserIDGenerations, - GetGenerationsByUserIDGenerationsTypedDict, - GetGenerationsByUserIDRequest, - GetGenerationsByUserIDRequestTypedDict, - GetGenerationsByUserIDResponse, - GetGenerationsByUserIDResponseBody, - GetGenerationsByUserIDResponseBodyTypedDict, - GetGenerationsByUserIDResponseTypedDict, -) -from .getinitimagebyid import ( - GetInitImageByIDInitImages, - GetInitImageByIDInitImagesTypedDict, - GetInitImageByIDRequest, - GetInitImageByIDRequestTypedDict, - GetInitImageByIDResponse, - GetInitImageByIDResponseBody, - GetInitImageByIDResponseBodyTypedDict, - GetInitImageByIDResponseTypedDict, -) -from .getmodelbyid import ( - GetModelByIDCustomModels, - GetModelByIDCustomModelsTypedDict, - GetModelByIDRequest, - GetModelByIDRequestTypedDict, - GetModelByIDResponse, - GetModelByIDResponseBody, - GetModelByIDResponseBodyTypedDict, - GetModelByIDResponseTypedDict, -) -from .gettexturegenerationbyid import ( - GetTextureGenerationByIDModelAssetTextureGenerations, - GetTextureGenerationByIDModelAssetTextureGenerationsTypedDict, - GetTextureGenerationByIDRequest, - GetTextureGenerationByIDRequestBody, - GetTextureGenerationByIDRequestBodyTypedDict, - GetTextureGenerationByIDRequestTypedDict, - GetTextureGenerationByIDResponse, - GetTextureGenerationByIDResponseBody, - GetTextureGenerationByIDResponseBodyTypedDict, - GetTextureGenerationByIDResponseTypedDict, - ModelAssetTextureImages, - ModelAssetTextureImagesTypedDict, -) -from .gettexturegenerationsbymodelid import ( - GetTextureGenerationsByModelIDModelAssetTextureGenerations, - GetTextureGenerationsByModelIDModelAssetTextureGenerationsTypedDict, - GetTextureGenerationsByModelIDModelAssetTextureImages, - GetTextureGenerationsByModelIDModelAssetTextureImagesTypedDict, - GetTextureGenerationsByModelIDRequest, - GetTextureGenerationsByModelIDRequestBody, - GetTextureGenerationsByModelIDRequestBodyTypedDict, - GetTextureGenerationsByModelIDRequestTypedDict, - GetTextureGenerationsByModelIDResponse, - GetTextureGenerationsByModelIDResponseBody, - GetTextureGenerationsByModelIDResponseBodyTypedDict, - GetTextureGenerationsByModelIDResponseTypedDict, -) -from .getuserself import ( - GetUserSelfResponse, - GetUserSelfResponseBody, - GetUserSelfResponseBodyTypedDict, - GetUserSelfResponseTypedDict, - UserDetails, - UserDetailsTypedDict, - Users, - UsersTypedDict, -) -from .getvariationbyid import ( - GeneratedImageVariationGeneric, - GeneratedImageVariationGenericTypedDict, - GetVariationByIDRequest, - GetVariationByIDRequestTypedDict, - GetVariationByIDResponse, - GetVariationByIDResponseBody, - GetVariationByIDResponseBodyTypedDict, - GetVariationByIDResponseTypedDict, -) -from .listelements import ( - ListElementsResponse, - ListElementsResponseBody, - ListElementsResponseBodyTypedDict, - ListElementsResponseTypedDict, - Loras, - LorasTypedDict, -) -from .listplatformmodels import ( - ListPlatformModelsCustomModels, - ListPlatformModelsCustomModelsTypedDict, - ListPlatformModelsGeneratedImages, - ListPlatformModelsGeneratedImagesTypedDict, - ListPlatformModelsResponse, - ListPlatformModelsResponseBody, - ListPlatformModelsResponseBodyTypedDict, - ListPlatformModelsResponseTypedDict, -) -from .performalchemyupscalelcm import ( - PerformAlchemyUpscaleLCMLCMGenerationOutput, - PerformAlchemyUpscaleLCMLCMGenerationOutputTypedDict, - PerformAlchemyUpscaleLCMRequestBody, - PerformAlchemyUpscaleLCMRequestBodyTypedDict, - PerformAlchemyUpscaleLCMResponse, - PerformAlchemyUpscaleLCMResponseBody, - PerformAlchemyUpscaleLCMResponseBodyTypedDict, - PerformAlchemyUpscaleLCMResponseTypedDict, -) -from .performinpaintinglcm import ( - PerformInpaintingLCMLCMGenerationOutput, - PerformInpaintingLCMLCMGenerationOutputTypedDict, - PerformInpaintingLCMRequestBody, - PerformInpaintingLCMRequestBodyTypedDict, - PerformInpaintingLCMResponse, - PerformInpaintingLCMResponseBody, - PerformInpaintingLCMResponseBodyTypedDict, - PerformInpaintingLCMResponseTypedDict, -) -from .performinstantrefine import ( - PerformInstantRefineLcmGenerationOutput, - PerformInstantRefineLcmGenerationOutputTypedDict, - PerformInstantRefineRequestBody, - PerformInstantRefineRequestBodyTypedDict, - PerformInstantRefineResponse, - PerformInstantRefineResponseBody, - PerformInstantRefineResponseBodyTypedDict, - PerformInstantRefineResponseTypedDict, -) -from .pricingcalculator import ( - CalculateProductionAPIServiceCost, - CalculateProductionAPIServiceCostTypedDict, - Object, - ObjectTypedDict, - PricingCalculatorObject, - PricingCalculatorObjectTypedDict, - PricingCalculatorPricingCalculatorObject, - PricingCalculatorPricingCalculatorObjectTypedDict, - PricingCalculatorPricingCalculatorRequestObject, - PricingCalculatorPricingCalculatorRequestObjectTypedDict, - PricingCalculatorPricingCalculatorRequestRequestBodyObject, - PricingCalculatorPricingCalculatorRequestRequestBodyObjectTypedDict, - PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObject, - PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObjectTypedDict, - PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsTEXTUREGENERATIONObject, - PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsTEXTUREGENERATIONObjectTypedDict, - PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERObject, - PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERObjectTypedDict, - PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERULTRAObject, - PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERULTRAObjectTypedDict, - PricingCalculatorRequestBody, - PricingCalculatorRequestBodyTypedDict, - PricingCalculatorResponse, - PricingCalculatorResponseBody, - PricingCalculatorResponseBodyTypedDict, - PricingCalculatorResponseTypedDict, -) -from .promptimprove import ( - PromptGenerationOutput, - PromptGenerationOutputTypedDict, - PromptImproveRequestBody, - PromptImproveRequestBodyTypedDict, - PromptImproveResponse, - PromptImproveResponseBody, - PromptImproveResponseBodyTypedDict, - PromptImproveResponseTypedDict, -) -from .promptrandom import ( - PromptRandomPromptGenerationOutput, - PromptRandomPromptGenerationOutputTypedDict, - PromptRandomResponse, - PromptRandomResponseBody, - PromptRandomResponseBodyTypedDict, - PromptRandomResponseTypedDict, -) -from .uploadcanvasinitimage import ( - CanvasInitImageUploadOutput, - CanvasInitImageUploadOutputTypedDict, - UploadCanvasInitImageRequestBody, - UploadCanvasInitImageRequestBodyTypedDict, - UploadCanvasInitImageResponse, - UploadCanvasInitImageResponseBody, - UploadCanvasInitImageResponseBodyTypedDict, - UploadCanvasInitImageResponseTypedDict, -) -from .uploaddatasetimage import ( - DatasetUploadOutput, - DatasetUploadOutputTypedDict, - UploadDatasetImageRequest, - UploadDatasetImageRequestBody, - UploadDatasetImageRequestBodyTypedDict, - UploadDatasetImageRequestTypedDict, - UploadDatasetImageResponse, - UploadDatasetImageResponseBody, - UploadDatasetImageResponseBodyTypedDict, - UploadDatasetImageResponseTypedDict, -) -from .uploaddatasetimagefromgen import ( - DatasetGenUploadOutput, - DatasetGenUploadOutputTypedDict, - UploadDatasetImageFromGenRequest, - UploadDatasetImageFromGenRequestBody, - UploadDatasetImageFromGenRequestBodyTypedDict, - UploadDatasetImageFromGenRequestTypedDict, - UploadDatasetImageFromGenResponse, - UploadDatasetImageFromGenResponseBody, - UploadDatasetImageFromGenResponseBodyTypedDict, - UploadDatasetImageFromGenResponseTypedDict, -) -from .uploadinitimage import ( - InitImageUploadOutput, - InitImageUploadOutputTypedDict, - UploadInitImageRequestBody, - UploadInitImageRequestBodyTypedDict, - UploadInitImageResponse, - UploadInitImageResponseBody, - UploadInitImageResponseBodyTypedDict, - UploadInitImageResponseTypedDict, -) -from .uploadmodelasset import ( - ModelAssetUploadOutput, - ModelAssetUploadOutputTypedDict, - UploadModelAssetRequestBody, - UploadModelAssetRequestBodyTypedDict, - UploadModelAssetResponse, - UploadModelAssetResponseBody, - UploadModelAssetResponseBodyTypedDict, - UploadModelAssetResponseTypedDict, -) +from typing import TYPE_CHECKING +from importlib import import_module +import builtins +import sys +if TYPE_CHECKING: + from .createdataset import ( + CreateDatasetRequestBody, + CreateDatasetRequestBodyTypedDict, + CreateDatasetResponse, + CreateDatasetResponseBody, + CreateDatasetResponseBodyTypedDict, + CreateDatasetResponseTypedDict, + Datasets, + DatasetsTypedDict, + ) + from .createelement import ( + CreateElementRequestBody, + CreateElementRequestBodyTypedDict, + CreateElementResponse, + CreateElementResponseBody, + CreateElementResponseBodyTypedDict, + CreateElementResponseTypedDict, + SDTrainingOutput, + SDTrainingOutputTypedDict, + SdVersions, + ) + from .creategeneration import ( + CreateGenerationRequestBody, + CreateGenerationRequestBodyTypedDict, + CreateGenerationResponse, + CreateGenerationResponseBody, + CreateGenerationResponseBodyTypedDict, + CreateGenerationResponseTypedDict, + SDGenerationOutput, + SDGenerationOutputTypedDict, + TransparencyType, + ) + from .createimagetovideogeneration import ( + CreateImageToVideoGenerationMotionString, + CreateImageToVideoGenerationRequestBody, + CreateImageToVideoGenerationRequestBodyTypedDict, + CreateImageToVideoGenerationResponse, + CreateImageToVideoGenerationResponseBody, + CreateImageToVideoGenerationResponseBodyTypedDict, + CreateImageToVideoGenerationResponseTypedDict, + CreateImageToVideoGenerationString, + ImageType, + MotionVideoGenerationOutput, + MotionVideoGenerationOutputTypedDict, + Object, + ObjectTypedDict, + String, + ) + from .createlcmgeneration import ( + CreateLCMGenerationRequestBody, + CreateLCMGenerationRequestBodyTypedDict, + CreateLCMGenerationResponse, + CreateLCMGenerationResponseBody, + CreateLCMGenerationResponseBodyTypedDict, + CreateLCMGenerationResponseTypedDict, + LcmGenerationOutput, + LcmGenerationOutputTypedDict, + ) + from .createmodel import ( + CreateModelRequestBody, + CreateModelRequestBodyTypedDict, + CreateModelResponse, + CreateModelResponseBody, + CreateModelResponseBodyTypedDict, + CreateModelResponseTypedDict, + CreateModelSDTrainingOutput, + CreateModelSDTrainingOutputTypedDict, + CreateModelSdVersions, + ) + from .createsvdmotiongeneration import ( + CreateSVDMotionGenerationRequestBody, + CreateSVDMotionGenerationRequestBodyTypedDict, + CreateSVDMotionGenerationResponse, + CreateSVDMotionGenerationResponseBody, + CreateSVDMotionGenerationResponseBodyTypedDict, + CreateSVDMotionGenerationResponseTypedDict, + MotionSvdGenerationOutput, + MotionSvdGenerationOutputTypedDict, + ) + from .createtexttovideogeneration import ( + CreateTextToVideoGenerationMotionString, + CreateTextToVideoGenerationMotionVideoGenerationOutput, + CreateTextToVideoGenerationMotionVideoGenerationOutputTypedDict, + CreateTextToVideoGenerationRequestBody, + CreateTextToVideoGenerationRequestBodyTypedDict, + CreateTextToVideoGenerationResponse, + CreateTextToVideoGenerationResponseBody, + CreateTextToVideoGenerationResponseBodyTypedDict, + CreateTextToVideoGenerationResponseTypedDict, + CreateTextToVideoGenerationString, + ) + from .createtexturegeneration import ( + CreateTextureGenerationRequestBody, + CreateTextureGenerationRequestBodyTypedDict, + CreateTextureGenerationResponse, + CreateTextureGenerationResponseBody, + CreateTextureGenerationResponseBodyTypedDict, + CreateTextureGenerationResponseTypedDict, + TextureGenerationJobOutput, + TextureGenerationJobOutputTypedDict, + ) + from .createuniversalupscalerjob import ( + CreateUniversalUpscalerJobRequestBody, + CreateUniversalUpscalerJobRequestBodyTypedDict, + CreateUniversalUpscalerJobResponse, + CreateUniversalUpscalerJobResponseBody, + CreateUniversalUpscalerJobResponseBodyTypedDict, + CreateUniversalUpscalerJobResponseTypedDict, + UniversalUpscalerOutput, + UniversalUpscalerOutputTypedDict, + ) + from .createvariationnobg import ( + CreateVariationNoBGRequestBody, + CreateVariationNoBGRequestBodyTypedDict, + CreateVariationNoBGResponse, + CreateVariationNoBGResponseBody, + CreateVariationNoBGResponseBodyTypedDict, + CreateVariationNoBGResponseTypedDict, + SDUpscaleJobOutput, + SDUpscaleJobOutputTypedDict, + ) + from .createvariationunzoom import ( + CreateVariationUnzoomRequestBody, + CreateVariationUnzoomRequestBodyTypedDict, + CreateVariationUnzoomResponse, + CreateVariationUnzoomResponseBody, + CreateVariationUnzoomResponseBodyTypedDict, + CreateVariationUnzoomResponseTypedDict, + SDUnzoomOutput, + SDUnzoomOutputTypedDict, + ) + from .createvariationupscale import ( + CreateVariationUpscaleRequestBody, + CreateVariationUpscaleRequestBodyTypedDict, + CreateVariationUpscaleResponse, + CreateVariationUpscaleResponseBody, + CreateVariationUpscaleResponseBodyTypedDict, + CreateVariationUpscaleResponseTypedDict, + CreateVariationUpscaleSDUpscaleJobOutput, + CreateVariationUpscaleSDUpscaleJobOutputTypedDict, + ) + from .createvideoupscale import ( + CreateVideoUpscaleMotionVideoGenerationOutput, + CreateVideoUpscaleMotionVideoGenerationOutputTypedDict, + CreateVideoUpscaleRequestBody, + CreateVideoUpscaleRequestBodyTypedDict, + CreateVideoUpscaleResponse, + CreateVideoUpscaleResponseBody, + CreateVideoUpscaleResponseBodyTypedDict, + CreateVideoUpscaleResponseTypedDict, + CreateVideoUpscaleString, + ) + from .delete3dmodelbyid import ( + Delete3DModelByIDRequest, + Delete3DModelByIDRequestBody, + Delete3DModelByIDRequestBodyTypedDict, + Delete3DModelByIDRequestTypedDict, + Delete3DModelByIDResponse, + Delete3DModelByIDResponseBody, + Delete3DModelByIDResponseBodyTypedDict, + Delete3DModelByIDResponseTypedDict, + ModelAssets, + ModelAssetsTypedDict, + ) + from .deletedatasetbyid import ( + DeleteDatasetByIDDatasets, + DeleteDatasetByIDDatasetsTypedDict, + DeleteDatasetByIDRequest, + DeleteDatasetByIDRequestTypedDict, + DeleteDatasetByIDResponse, + DeleteDatasetByIDResponseBody, + DeleteDatasetByIDResponseBodyTypedDict, + DeleteDatasetByIDResponseTypedDict, + ) + from .deleteelementbyid import ( + DeleteElementByIDRequest, + DeleteElementByIDRequestTypedDict, + DeleteElementByIDResponse, + DeleteElementByIDResponseBody, + DeleteElementByIDResponseBodyTypedDict, + DeleteElementByIDResponseTypedDict, + UserLoras, + UserLorasTypedDict, + ) + from .deletegenerationbyid import ( + DeleteGenerationByIDRequest, + DeleteGenerationByIDRequestTypedDict, + DeleteGenerationByIDResponse, + DeleteGenerationByIDResponseBody, + DeleteGenerationByIDResponseBodyTypedDict, + DeleteGenerationByIDResponseTypedDict, + Generations, + GenerationsTypedDict, + ) + from .deleteinitimagebyid import ( + DeleteInitImageByIDRequest, + DeleteInitImageByIDRequestTypedDict, + DeleteInitImageByIDResponse, + DeleteInitImageByIDResponseBody, + DeleteInitImageByIDResponseBodyTypedDict, + DeleteInitImageByIDResponseTypedDict, + InitImages, + InitImagesTypedDict, + ) + from .deletemodelbyid import ( + CustomModels, + CustomModelsTypedDict, + DeleteModelByIDRequest, + DeleteModelByIDRequestTypedDict, + DeleteModelByIDResponse, + DeleteModelByIDResponseBody, + DeleteModelByIDResponseBodyTypedDict, + DeleteModelByIDResponseTypedDict, + ) + from .deletetexturegenerationbyid import ( + DeleteTextureGenerationByIDRequest, + DeleteTextureGenerationByIDRequestBody, + DeleteTextureGenerationByIDRequestBodyTypedDict, + DeleteTextureGenerationByIDRequestTypedDict, + DeleteTextureGenerationByIDResponse, + DeleteTextureGenerationByIDResponseBody, + DeleteTextureGenerationByIDResponseBodyTypedDict, + DeleteTextureGenerationByIDResponseTypedDict, + ModelAssetTextureGenerations, + ModelAssetTextureGenerationsTypedDict, + ) + from .get3dmodelbyid import ( + Get3DModelByIDModelAssets, + Get3DModelByIDModelAssetsTypedDict, + Get3DModelByIDRequest, + Get3DModelByIDRequestBody, + Get3DModelByIDRequestBodyTypedDict, + Get3DModelByIDRequestTypedDict, + Get3DModelByIDResponse, + Get3DModelByIDResponseBody, + Get3DModelByIDResponseBodyTypedDict, + Get3DModelByIDResponseTypedDict, + ) + from .get3dmodelsbyuserid import ( + Get3DModelsByUserIDModelAssets, + Get3DModelsByUserIDModelAssetsTypedDict, + Get3DModelsByUserIDRequest, + Get3DModelsByUserIDRequestBody, + Get3DModelsByUserIDRequestBodyTypedDict, + Get3DModelsByUserIDRequestTypedDict, + Get3DModelsByUserIDResponse, + Get3DModelsByUserIDResponseBody, + Get3DModelsByUserIDResponseBodyTypedDict, + Get3DModelsByUserIDResponseTypedDict, + ) + from .getcustomelementsbyuserid import ( + GetCustomElementsByUserIDRequest, + GetCustomElementsByUserIDRequestTypedDict, + GetCustomElementsByUserIDResponse, + GetCustomElementsByUserIDResponseBody, + GetCustomElementsByUserIDResponseBodyTypedDict, + GetCustomElementsByUserIDResponseTypedDict, + GetCustomElementsByUserIDUserLoras, + GetCustomElementsByUserIDUserLorasTypedDict, + ) + from .getcustommodelsbyuserid import ( + GetCustomModelsByUserIDCustomModels, + GetCustomModelsByUserIDCustomModelsTypedDict, + GetCustomModelsByUserIDRequest, + GetCustomModelsByUserIDRequestTypedDict, + GetCustomModelsByUserIDResponse, + GetCustomModelsByUserIDResponseBody, + GetCustomModelsByUserIDResponseBodyTypedDict, + GetCustomModelsByUserIDResponseTypedDict, + ) + from .getdatasetbyid import ( + DatasetImages, + DatasetImagesTypedDict, + GetDatasetByIDDatasets, + GetDatasetByIDDatasetsTypedDict, + GetDatasetByIDRequest, + GetDatasetByIDRequestTypedDict, + GetDatasetByIDResponse, + GetDatasetByIDResponseBody, + GetDatasetByIDResponseBodyTypedDict, + GetDatasetByIDResponseTypedDict, + ) + from .getelementbyid import ( + GetElementByIDRequest, + GetElementByIDRequestTypedDict, + GetElementByIDResponse, + GetElementByIDResponseBody, + GetElementByIDResponseBodyTypedDict, + GetElementByIDResponseTypedDict, + GetElementByIDUserLoras, + GetElementByIDUserLorasTypedDict, + ) + from .getgenerationbyid import ( + GeneratedImages, + GeneratedImagesTypedDict, + GenerationElements, + GenerationElementsTypedDict, + GetGenerationByIDGeneratedImageVariationGeneric, + GetGenerationByIDGeneratedImageVariationGenericTypedDict, + GetGenerationByIDGenerations, + GetGenerationByIDGenerationsTypedDict, + GetGenerationByIDLoras, + GetGenerationByIDLorasTypedDict, + GetGenerationByIDRequest, + GetGenerationByIDRequestTypedDict, + GetGenerationByIDResponse, + GetGenerationByIDResponseBody, + GetGenerationByIDResponseBodyTypedDict, + GetGenerationByIDResponseTypedDict, + ) + from .getgenerationsbyuserid import ( + Elements, + ElementsTypedDict, + GetGenerationsByUserIDGeneratedImageVariationGeneric, + GetGenerationsByUserIDGeneratedImageVariationGenericTypedDict, + GetGenerationsByUserIDGeneratedImages, + GetGenerationsByUserIDGeneratedImagesTypedDict, + GetGenerationsByUserIDGenerationElements, + GetGenerationsByUserIDGenerationElementsTypedDict, + GetGenerationsByUserIDGenerations, + GetGenerationsByUserIDGenerationsTypedDict, + GetGenerationsByUserIDRequest, + GetGenerationsByUserIDRequestTypedDict, + GetGenerationsByUserIDResponse, + GetGenerationsByUserIDResponseBody, + GetGenerationsByUserIDResponseBodyTypedDict, + GetGenerationsByUserIDResponseTypedDict, + ) + from .getinitimagebyid import ( + GetInitImageByIDInitImages, + GetInitImageByIDInitImagesTypedDict, + GetInitImageByIDRequest, + GetInitImageByIDRequestTypedDict, + GetInitImageByIDResponse, + GetInitImageByIDResponseBody, + GetInitImageByIDResponseBodyTypedDict, + GetInitImageByIDResponseTypedDict, + ) + from .getmodelbyid import ( + GetModelByIDCustomModels, + GetModelByIDCustomModelsTypedDict, + GetModelByIDRequest, + GetModelByIDRequestTypedDict, + GetModelByIDResponse, + GetModelByIDResponseBody, + GetModelByIDResponseBodyTypedDict, + GetModelByIDResponseTypedDict, + ) + from .getmotionvariationbyid import ( + GeneratedImageVariationMotion, + GeneratedImageVariationMotionTypedDict, + GetMotionVariationByIDRequest, + GetMotionVariationByIDRequestTypedDict, + GetMotionVariationByIDResponse, + GetMotionVariationByIDResponseBody, + GetMotionVariationByIDResponseBodyTypedDict, + GetMotionVariationByIDResponseTypedDict, + ) + from .gettexturegenerationbyid import ( + GetTextureGenerationByIDModelAssetTextureGenerations, + GetTextureGenerationByIDModelAssetTextureGenerationsTypedDict, + GetTextureGenerationByIDRequest, + GetTextureGenerationByIDRequestBody, + GetTextureGenerationByIDRequestBodyTypedDict, + GetTextureGenerationByIDRequestTypedDict, + GetTextureGenerationByIDResponse, + GetTextureGenerationByIDResponseBody, + GetTextureGenerationByIDResponseBodyTypedDict, + GetTextureGenerationByIDResponseTypedDict, + ModelAssetTextureImages, + ModelAssetTextureImagesTypedDict, + ) + from .gettexturegenerationsbymodelid import ( + GetTextureGenerationsByModelIDModelAssetTextureGenerations, + GetTextureGenerationsByModelIDModelAssetTextureGenerationsTypedDict, + GetTextureGenerationsByModelIDModelAssetTextureImages, + GetTextureGenerationsByModelIDModelAssetTextureImagesTypedDict, + GetTextureGenerationsByModelIDRequest, + GetTextureGenerationsByModelIDRequestBody, + GetTextureGenerationsByModelIDRequestBodyTypedDict, + GetTextureGenerationsByModelIDRequestTypedDict, + GetTextureGenerationsByModelIDResponse, + GetTextureGenerationsByModelIDResponseBody, + GetTextureGenerationsByModelIDResponseBodyTypedDict, + GetTextureGenerationsByModelIDResponseTypedDict, + ) + from .getuserself import ( + GetUserSelfResponse, + GetUserSelfResponseBody, + GetUserSelfResponseBodyTypedDict, + GetUserSelfResponseTypedDict, + UserDetails, + UserDetailsTypedDict, + Users, + UsersTypedDict, + ) + from .getvariationbyid import ( + GeneratedImageVariationGeneric, + GeneratedImageVariationGenericTypedDict, + GetVariationByIDRequest, + GetVariationByIDRequestTypedDict, + GetVariationByIDResponse, + GetVariationByIDResponseBody, + GetVariationByIDResponseBodyTypedDict, + GetVariationByIDResponseTypedDict, + ) + from .listelements import ( + ListElementsResponse, + ListElementsResponseBody, + ListElementsResponseBodyTypedDict, + ListElementsResponseTypedDict, + Loras, + LorasTypedDict, + ) + from .listplatformmodels import ( + ListPlatformModelsCustomModels, + ListPlatformModelsCustomModelsTypedDict, + ListPlatformModelsGeneratedImages, + ListPlatformModelsGeneratedImagesTypedDict, + ListPlatformModelsResponse, + ListPlatformModelsResponseBody, + ListPlatformModelsResponseBodyTypedDict, + ListPlatformModelsResponseTypedDict, + ) + from .performalchemyupscalelcm import ( + PerformAlchemyUpscaleLCMLCMGenerationOutput, + PerformAlchemyUpscaleLCMLCMGenerationOutputTypedDict, + PerformAlchemyUpscaleLCMRequestBody, + PerformAlchemyUpscaleLCMRequestBodyTypedDict, + PerformAlchemyUpscaleLCMResponse, + PerformAlchemyUpscaleLCMResponseBody, + PerformAlchemyUpscaleLCMResponseBodyTypedDict, + PerformAlchemyUpscaleLCMResponseTypedDict, + ) + from .performinpaintinglcm import ( + PerformInpaintingLCMLCMGenerationOutput, + PerformInpaintingLCMLCMGenerationOutputTypedDict, + PerformInpaintingLCMRequestBody, + PerformInpaintingLCMRequestBodyTypedDict, + PerformInpaintingLCMResponse, + PerformInpaintingLCMResponseBody, + PerformInpaintingLCMResponseBodyTypedDict, + PerformInpaintingLCMResponseTypedDict, + ) + from .performinstantrefine import ( + PerformInstantRefineLcmGenerationOutput, + PerformInstantRefineLcmGenerationOutputTypedDict, + PerformInstantRefineRequestBody, + PerformInstantRefineRequestBodyTypedDict, + PerformInstantRefineResponse, + PerformInstantRefineResponseBody, + PerformInstantRefineResponseBodyTypedDict, + PerformInstantRefineResponseTypedDict, + ) + from .pricingcalculator import ( + CalculateProductionAPIServiceCost, + CalculateProductionAPIServiceCostTypedDict, + PricingCalculatorObject, + PricingCalculatorObjectTypedDict, + PricingCalculatorPricingCalculatorObject, + PricingCalculatorPricingCalculatorObjectTypedDict, + PricingCalculatorPricingCalculatorRequestObject, + PricingCalculatorPricingCalculatorRequestObjectTypedDict, + PricingCalculatorPricingCalculatorRequestRequestBodyObject, + PricingCalculatorPricingCalculatorRequestRequestBodyObjectTypedDict, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONSVDGENERATIONObject, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONSVDGENERATIONObjectTypedDict, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONVIDEOGENERATIONObject, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONVIDEOGENERATIONObjectTypedDict, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObject, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObjectTypedDict, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsTEXTUREGENERATIONObject, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsTEXTUREGENERATIONObjectTypedDict, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERObject, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERObjectTypedDict, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERULTRAObject, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERULTRAObjectTypedDict, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsVeo3MOTIONVIDEOGENERATIONObject, + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsVeo3MOTIONVIDEOGENERATIONObjectTypedDict, + PricingCalculatorRequestBody, + PricingCalculatorRequestBodyTypedDict, + PricingCalculatorResponse, + PricingCalculatorResponseBody, + PricingCalculatorResponseBodyTypedDict, + PricingCalculatorResponseTypedDict, + PricingCalculatorString, + SdVersion, + ) + from .promptimprove import ( + PromptGenerationOutput, + PromptGenerationOutputTypedDict, + PromptImproveRequestBody, + PromptImproveRequestBodyTypedDict, + PromptImproveResponse, + PromptImproveResponseBody, + PromptImproveResponseBodyTypedDict, + PromptImproveResponseTypedDict, + ) + from .promptrandom import ( + PromptRandomPromptGenerationOutput, + PromptRandomPromptGenerationOutputTypedDict, + PromptRandomResponse, + PromptRandomResponseBody, + PromptRandomResponseBodyTypedDict, + PromptRandomResponseTypedDict, + ) + from .uploadcanvasinitimage import ( + CanvasInitImageUploadOutput, + CanvasInitImageUploadOutputTypedDict, + UploadCanvasInitImageRequestBody, + UploadCanvasInitImageRequestBodyTypedDict, + UploadCanvasInitImageResponse, + UploadCanvasInitImageResponseBody, + UploadCanvasInitImageResponseBodyTypedDict, + UploadCanvasInitImageResponseTypedDict, + ) + from .uploaddatasetimage import ( + DatasetUploadOutput, + DatasetUploadOutputTypedDict, + UploadDatasetImageRequest, + UploadDatasetImageRequestBody, + UploadDatasetImageRequestBodyTypedDict, + UploadDatasetImageRequestTypedDict, + UploadDatasetImageResponse, + UploadDatasetImageResponseBody, + UploadDatasetImageResponseBodyTypedDict, + UploadDatasetImageResponseTypedDict, + ) + from .uploaddatasetimagefromgen import ( + DatasetGenUploadOutput, + DatasetGenUploadOutputTypedDict, + UploadDatasetImageFromGenRequest, + UploadDatasetImageFromGenRequestBody, + UploadDatasetImageFromGenRequestBodyTypedDict, + UploadDatasetImageFromGenRequestTypedDict, + UploadDatasetImageFromGenResponse, + UploadDatasetImageFromGenResponseBody, + UploadDatasetImageFromGenResponseBodyTypedDict, + UploadDatasetImageFromGenResponseTypedDict, + ) + from .uploadinitimage import ( + InitImageUploadOutput, + InitImageUploadOutputTypedDict, + UploadInitImageRequestBody, + UploadInitImageRequestBodyTypedDict, + UploadInitImageResponse, + UploadInitImageResponseBody, + UploadInitImageResponseBodyTypedDict, + UploadInitImageResponseTypedDict, + ) + from .uploadmodelasset import ( + ModelAssetUploadOutput, + ModelAssetUploadOutputTypedDict, + UploadModelAssetRequestBody, + UploadModelAssetRequestBodyTypedDict, + UploadModelAssetResponse, + UploadModelAssetResponseBody, + UploadModelAssetResponseBodyTypedDict, + UploadModelAssetResponseTypedDict, + ) __all__ = [ "CalculateProductionAPIServiceCost", @@ -530,6 +590,14 @@ "CreateGenerationResponseBody", "CreateGenerationResponseBodyTypedDict", "CreateGenerationResponseTypedDict", + "CreateImageToVideoGenerationMotionString", + "CreateImageToVideoGenerationRequestBody", + "CreateImageToVideoGenerationRequestBodyTypedDict", + "CreateImageToVideoGenerationResponse", + "CreateImageToVideoGenerationResponseBody", + "CreateImageToVideoGenerationResponseBodyTypedDict", + "CreateImageToVideoGenerationResponseTypedDict", + "CreateImageToVideoGenerationString", "CreateLCMGenerationRequestBody", "CreateLCMGenerationRequestBodyTypedDict", "CreateLCMGenerationResponse", @@ -551,6 +619,16 @@ "CreateSVDMotionGenerationResponseBody", "CreateSVDMotionGenerationResponseBodyTypedDict", "CreateSVDMotionGenerationResponseTypedDict", + "CreateTextToVideoGenerationMotionString", + "CreateTextToVideoGenerationMotionVideoGenerationOutput", + "CreateTextToVideoGenerationMotionVideoGenerationOutputTypedDict", + "CreateTextToVideoGenerationRequestBody", + "CreateTextToVideoGenerationRequestBodyTypedDict", + "CreateTextToVideoGenerationResponse", + "CreateTextToVideoGenerationResponseBody", + "CreateTextToVideoGenerationResponseBodyTypedDict", + "CreateTextToVideoGenerationResponseTypedDict", + "CreateTextToVideoGenerationString", "CreateTextureGenerationRequestBody", "CreateTextureGenerationRequestBodyTypedDict", "CreateTextureGenerationResponse", @@ -583,6 +661,15 @@ "CreateVariationUpscaleResponseTypedDict", "CreateVariationUpscaleSDUpscaleJobOutput", "CreateVariationUpscaleSDUpscaleJobOutputTypedDict", + "CreateVideoUpscaleMotionVideoGenerationOutput", + "CreateVideoUpscaleMotionVideoGenerationOutputTypedDict", + "CreateVideoUpscaleRequestBody", + "CreateVideoUpscaleRequestBodyTypedDict", + "CreateVideoUpscaleResponse", + "CreateVideoUpscaleResponseBody", + "CreateVideoUpscaleResponseBodyTypedDict", + "CreateVideoUpscaleResponseTypedDict", + "CreateVideoUpscaleString", "CustomModels", "CustomModelsTypedDict", "DatasetGenUploadOutput", @@ -645,6 +732,8 @@ "ElementsTypedDict", "GeneratedImageVariationGeneric", "GeneratedImageVariationGenericTypedDict", + "GeneratedImageVariationMotion", + "GeneratedImageVariationMotionTypedDict", "GeneratedImages", "GeneratedImagesTypedDict", "GenerationElements", @@ -745,6 +834,12 @@ "GetModelByIDResponseBody", "GetModelByIDResponseBodyTypedDict", "GetModelByIDResponseTypedDict", + "GetMotionVariationByIDRequest", + "GetMotionVariationByIDRequestTypedDict", + "GetMotionVariationByIDResponse", + "GetMotionVariationByIDResponseBody", + "GetMotionVariationByIDResponseBodyTypedDict", + "GetMotionVariationByIDResponseTypedDict", "GetTextureGenerationByIDModelAssetTextureGenerations", "GetTextureGenerationByIDModelAssetTextureGenerationsTypedDict", "GetTextureGenerationByIDRequest", @@ -777,6 +872,7 @@ "GetVariationByIDResponseBody", "GetVariationByIDResponseBodyTypedDict", "GetVariationByIDResponseTypedDict", + "ImageType", "InitImageUploadOutput", "InitImageUploadOutputTypedDict", "InitImages", @@ -807,6 +903,8 @@ "ModelAssetsTypedDict", "MotionSvdGenerationOutput", "MotionSvdGenerationOutputTypedDict", + "MotionVideoGenerationOutput", + "MotionVideoGenerationOutputTypedDict", "Object", "ObjectTypedDict", "PerformAlchemyUpscaleLCMLCMGenerationOutput", @@ -841,6 +939,10 @@ "PricingCalculatorPricingCalculatorRequestObjectTypedDict", "PricingCalculatorPricingCalculatorRequestRequestBodyObject", "PricingCalculatorPricingCalculatorRequestRequestBodyObjectTypedDict", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONSVDGENERATIONObject", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONSVDGENERATIONObjectTypedDict", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONVIDEOGENERATIONObject", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONVIDEOGENERATIONObjectTypedDict", "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObject", "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObjectTypedDict", "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsTEXTUREGENERATIONObject", @@ -849,12 +951,15 @@ "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERObjectTypedDict", "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERULTRAObject", "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERULTRAObjectTypedDict", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsVeo3MOTIONVIDEOGENERATIONObject", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsVeo3MOTIONVIDEOGENERATIONObjectTypedDict", "PricingCalculatorRequestBody", "PricingCalculatorRequestBodyTypedDict", "PricingCalculatorResponse", "PricingCalculatorResponseBody", "PricingCalculatorResponseBodyTypedDict", "PricingCalculatorResponseTypedDict", + "PricingCalculatorString", "PromptGenerationOutput", "PromptGenerationOutputTypedDict", "PromptImproveRequestBody", @@ -877,7 +982,9 @@ "SDUnzoomOutputTypedDict", "SDUpscaleJobOutput", "SDUpscaleJobOutputTypedDict", + "SdVersion", "SdVersions", + "String", "TextureGenerationJobOutput", "TextureGenerationJobOutputTypedDict", "TransparencyType", @@ -924,3 +1031,506 @@ "Users", "UsersTypedDict", ] + +_dynamic_imports: dict[str, str] = { + "CreateDatasetRequestBody": ".createdataset", + "CreateDatasetRequestBodyTypedDict": ".createdataset", + "CreateDatasetResponse": ".createdataset", + "CreateDatasetResponseBody": ".createdataset", + "CreateDatasetResponseBodyTypedDict": ".createdataset", + "CreateDatasetResponseTypedDict": ".createdataset", + "Datasets": ".createdataset", + "DatasetsTypedDict": ".createdataset", + "CreateElementRequestBody": ".createelement", + "CreateElementRequestBodyTypedDict": ".createelement", + "CreateElementResponse": ".createelement", + "CreateElementResponseBody": ".createelement", + "CreateElementResponseBodyTypedDict": ".createelement", + "CreateElementResponseTypedDict": ".createelement", + "SDTrainingOutput": ".createelement", + "SDTrainingOutputTypedDict": ".createelement", + "SdVersions": ".createelement", + "CreateGenerationRequestBody": ".creategeneration", + "CreateGenerationRequestBodyTypedDict": ".creategeneration", + "CreateGenerationResponse": ".creategeneration", + "CreateGenerationResponseBody": ".creategeneration", + "CreateGenerationResponseBodyTypedDict": ".creategeneration", + "CreateGenerationResponseTypedDict": ".creategeneration", + "SDGenerationOutput": ".creategeneration", + "SDGenerationOutputTypedDict": ".creategeneration", + "TransparencyType": ".creategeneration", + "CreateImageToVideoGenerationMotionString": ".createimagetovideogeneration", + "CreateImageToVideoGenerationRequestBody": ".createimagetovideogeneration", + "CreateImageToVideoGenerationRequestBodyTypedDict": ".createimagetovideogeneration", + "CreateImageToVideoGenerationResponse": ".createimagetovideogeneration", + "CreateImageToVideoGenerationResponseBody": ".createimagetovideogeneration", + "CreateImageToVideoGenerationResponseBodyTypedDict": ".createimagetovideogeneration", + "CreateImageToVideoGenerationResponseTypedDict": ".createimagetovideogeneration", + "CreateImageToVideoGenerationString": ".createimagetovideogeneration", + "ImageType": ".createimagetovideogeneration", + "MotionVideoGenerationOutput": ".createimagetovideogeneration", + "MotionVideoGenerationOutputTypedDict": ".createimagetovideogeneration", + "Object": ".createimagetovideogeneration", + "ObjectTypedDict": ".createimagetovideogeneration", + "String": ".createimagetovideogeneration", + "CreateLCMGenerationRequestBody": ".createlcmgeneration", + "CreateLCMGenerationRequestBodyTypedDict": ".createlcmgeneration", + "CreateLCMGenerationResponse": ".createlcmgeneration", + "CreateLCMGenerationResponseBody": ".createlcmgeneration", + "CreateLCMGenerationResponseBodyTypedDict": ".createlcmgeneration", + "CreateLCMGenerationResponseTypedDict": ".createlcmgeneration", + "LcmGenerationOutput": ".createlcmgeneration", + "LcmGenerationOutputTypedDict": ".createlcmgeneration", + "CreateModelRequestBody": ".createmodel", + "CreateModelRequestBodyTypedDict": ".createmodel", + "CreateModelResponse": ".createmodel", + "CreateModelResponseBody": ".createmodel", + "CreateModelResponseBodyTypedDict": ".createmodel", + "CreateModelResponseTypedDict": ".createmodel", + "CreateModelSDTrainingOutput": ".createmodel", + "CreateModelSDTrainingOutputTypedDict": ".createmodel", + "CreateModelSdVersions": ".createmodel", + "CreateSVDMotionGenerationRequestBody": ".createsvdmotiongeneration", + "CreateSVDMotionGenerationRequestBodyTypedDict": ".createsvdmotiongeneration", + "CreateSVDMotionGenerationResponse": ".createsvdmotiongeneration", + "CreateSVDMotionGenerationResponseBody": ".createsvdmotiongeneration", + "CreateSVDMotionGenerationResponseBodyTypedDict": ".createsvdmotiongeneration", + "CreateSVDMotionGenerationResponseTypedDict": ".createsvdmotiongeneration", + "MotionSvdGenerationOutput": ".createsvdmotiongeneration", + "MotionSvdGenerationOutputTypedDict": ".createsvdmotiongeneration", + "CreateTextToVideoGenerationMotionString": ".createtexttovideogeneration", + "CreateTextToVideoGenerationMotionVideoGenerationOutput": ".createtexttovideogeneration", + "CreateTextToVideoGenerationMotionVideoGenerationOutputTypedDict": ".createtexttovideogeneration", + "CreateTextToVideoGenerationRequestBody": ".createtexttovideogeneration", + "CreateTextToVideoGenerationRequestBodyTypedDict": ".createtexttovideogeneration", + "CreateTextToVideoGenerationResponse": ".createtexttovideogeneration", + "CreateTextToVideoGenerationResponseBody": ".createtexttovideogeneration", + "CreateTextToVideoGenerationResponseBodyTypedDict": ".createtexttovideogeneration", + "CreateTextToVideoGenerationResponseTypedDict": ".createtexttovideogeneration", + "CreateTextToVideoGenerationString": ".createtexttovideogeneration", + "CreateTextureGenerationRequestBody": ".createtexturegeneration", + "CreateTextureGenerationRequestBodyTypedDict": ".createtexturegeneration", + "CreateTextureGenerationResponse": ".createtexturegeneration", + "CreateTextureGenerationResponseBody": ".createtexturegeneration", + "CreateTextureGenerationResponseBodyTypedDict": ".createtexturegeneration", + "CreateTextureGenerationResponseTypedDict": ".createtexturegeneration", + "TextureGenerationJobOutput": ".createtexturegeneration", + "TextureGenerationJobOutputTypedDict": ".createtexturegeneration", + "CreateUniversalUpscalerJobRequestBody": ".createuniversalupscalerjob", + "CreateUniversalUpscalerJobRequestBodyTypedDict": ".createuniversalupscalerjob", + "CreateUniversalUpscalerJobResponse": ".createuniversalupscalerjob", + "CreateUniversalUpscalerJobResponseBody": ".createuniversalupscalerjob", + "CreateUniversalUpscalerJobResponseBodyTypedDict": ".createuniversalupscalerjob", + "CreateUniversalUpscalerJobResponseTypedDict": ".createuniversalupscalerjob", + "UniversalUpscalerOutput": ".createuniversalupscalerjob", + "UniversalUpscalerOutputTypedDict": ".createuniversalupscalerjob", + "CreateVariationNoBGRequestBody": ".createvariationnobg", + "CreateVariationNoBGRequestBodyTypedDict": ".createvariationnobg", + "CreateVariationNoBGResponse": ".createvariationnobg", + "CreateVariationNoBGResponseBody": ".createvariationnobg", + "CreateVariationNoBGResponseBodyTypedDict": ".createvariationnobg", + "CreateVariationNoBGResponseTypedDict": ".createvariationnobg", + "SDUpscaleJobOutput": ".createvariationnobg", + "SDUpscaleJobOutputTypedDict": ".createvariationnobg", + "CreateVariationUnzoomRequestBody": ".createvariationunzoom", + "CreateVariationUnzoomRequestBodyTypedDict": ".createvariationunzoom", + "CreateVariationUnzoomResponse": ".createvariationunzoom", + "CreateVariationUnzoomResponseBody": ".createvariationunzoom", + "CreateVariationUnzoomResponseBodyTypedDict": ".createvariationunzoom", + "CreateVariationUnzoomResponseTypedDict": ".createvariationunzoom", + "SDUnzoomOutput": ".createvariationunzoom", + "SDUnzoomOutputTypedDict": ".createvariationunzoom", + "CreateVariationUpscaleRequestBody": ".createvariationupscale", + "CreateVariationUpscaleRequestBodyTypedDict": ".createvariationupscale", + "CreateVariationUpscaleResponse": ".createvariationupscale", + "CreateVariationUpscaleResponseBody": ".createvariationupscale", + "CreateVariationUpscaleResponseBodyTypedDict": ".createvariationupscale", + "CreateVariationUpscaleResponseTypedDict": ".createvariationupscale", + "CreateVariationUpscaleSDUpscaleJobOutput": ".createvariationupscale", + "CreateVariationUpscaleSDUpscaleJobOutputTypedDict": ".createvariationupscale", + "CreateVideoUpscaleMotionVideoGenerationOutput": ".createvideoupscale", + "CreateVideoUpscaleMotionVideoGenerationOutputTypedDict": ".createvideoupscale", + "CreateVideoUpscaleRequestBody": ".createvideoupscale", + "CreateVideoUpscaleRequestBodyTypedDict": ".createvideoupscale", + "CreateVideoUpscaleResponse": ".createvideoupscale", + "CreateVideoUpscaleResponseBody": ".createvideoupscale", + "CreateVideoUpscaleResponseBodyTypedDict": ".createvideoupscale", + "CreateVideoUpscaleResponseTypedDict": ".createvideoupscale", + "CreateVideoUpscaleString": ".createvideoupscale", + "Delete3DModelByIDRequest": ".delete3dmodelbyid", + "Delete3DModelByIDRequestBody": ".delete3dmodelbyid", + "Delete3DModelByIDRequestBodyTypedDict": ".delete3dmodelbyid", + "Delete3DModelByIDRequestTypedDict": ".delete3dmodelbyid", + "Delete3DModelByIDResponse": ".delete3dmodelbyid", + "Delete3DModelByIDResponseBody": ".delete3dmodelbyid", + "Delete3DModelByIDResponseBodyTypedDict": ".delete3dmodelbyid", + "Delete3DModelByIDResponseTypedDict": ".delete3dmodelbyid", + "ModelAssets": ".delete3dmodelbyid", + "ModelAssetsTypedDict": ".delete3dmodelbyid", + "DeleteDatasetByIDDatasets": ".deletedatasetbyid", + "DeleteDatasetByIDDatasetsTypedDict": ".deletedatasetbyid", + "DeleteDatasetByIDRequest": ".deletedatasetbyid", + "DeleteDatasetByIDRequestTypedDict": ".deletedatasetbyid", + "DeleteDatasetByIDResponse": ".deletedatasetbyid", + "DeleteDatasetByIDResponseBody": ".deletedatasetbyid", + "DeleteDatasetByIDResponseBodyTypedDict": ".deletedatasetbyid", + "DeleteDatasetByIDResponseTypedDict": ".deletedatasetbyid", + "DeleteElementByIDRequest": ".deleteelementbyid", + "DeleteElementByIDRequestTypedDict": ".deleteelementbyid", + "DeleteElementByIDResponse": ".deleteelementbyid", + "DeleteElementByIDResponseBody": ".deleteelementbyid", + "DeleteElementByIDResponseBodyTypedDict": ".deleteelementbyid", + "DeleteElementByIDResponseTypedDict": ".deleteelementbyid", + "UserLoras": ".deleteelementbyid", + "UserLorasTypedDict": ".deleteelementbyid", + "DeleteGenerationByIDRequest": ".deletegenerationbyid", + "DeleteGenerationByIDRequestTypedDict": ".deletegenerationbyid", + "DeleteGenerationByIDResponse": ".deletegenerationbyid", + "DeleteGenerationByIDResponseBody": ".deletegenerationbyid", + "DeleteGenerationByIDResponseBodyTypedDict": ".deletegenerationbyid", + "DeleteGenerationByIDResponseTypedDict": ".deletegenerationbyid", + "Generations": ".deletegenerationbyid", + "GenerationsTypedDict": ".deletegenerationbyid", + "DeleteInitImageByIDRequest": ".deleteinitimagebyid", + "DeleteInitImageByIDRequestTypedDict": ".deleteinitimagebyid", + "DeleteInitImageByIDResponse": ".deleteinitimagebyid", + "DeleteInitImageByIDResponseBody": ".deleteinitimagebyid", + "DeleteInitImageByIDResponseBodyTypedDict": ".deleteinitimagebyid", + "DeleteInitImageByIDResponseTypedDict": ".deleteinitimagebyid", + "InitImages": ".deleteinitimagebyid", + "InitImagesTypedDict": ".deleteinitimagebyid", + "CustomModels": ".deletemodelbyid", + "CustomModelsTypedDict": ".deletemodelbyid", + "DeleteModelByIDRequest": ".deletemodelbyid", + "DeleteModelByIDRequestTypedDict": ".deletemodelbyid", + "DeleteModelByIDResponse": ".deletemodelbyid", + "DeleteModelByIDResponseBody": ".deletemodelbyid", + "DeleteModelByIDResponseBodyTypedDict": ".deletemodelbyid", + "DeleteModelByIDResponseTypedDict": ".deletemodelbyid", + "DeleteTextureGenerationByIDRequest": ".deletetexturegenerationbyid", + "DeleteTextureGenerationByIDRequestBody": ".deletetexturegenerationbyid", + "DeleteTextureGenerationByIDRequestBodyTypedDict": ".deletetexturegenerationbyid", + "DeleteTextureGenerationByIDRequestTypedDict": ".deletetexturegenerationbyid", + "DeleteTextureGenerationByIDResponse": ".deletetexturegenerationbyid", + "DeleteTextureGenerationByIDResponseBody": ".deletetexturegenerationbyid", + "DeleteTextureGenerationByIDResponseBodyTypedDict": ".deletetexturegenerationbyid", + "DeleteTextureGenerationByIDResponseTypedDict": ".deletetexturegenerationbyid", + "ModelAssetTextureGenerations": ".deletetexturegenerationbyid", + "ModelAssetTextureGenerationsTypedDict": ".deletetexturegenerationbyid", + "Get3DModelByIDModelAssets": ".get3dmodelbyid", + "Get3DModelByIDModelAssetsTypedDict": ".get3dmodelbyid", + "Get3DModelByIDRequest": ".get3dmodelbyid", + "Get3DModelByIDRequestBody": ".get3dmodelbyid", + "Get3DModelByIDRequestBodyTypedDict": ".get3dmodelbyid", + "Get3DModelByIDRequestTypedDict": ".get3dmodelbyid", + "Get3DModelByIDResponse": ".get3dmodelbyid", + "Get3DModelByIDResponseBody": ".get3dmodelbyid", + "Get3DModelByIDResponseBodyTypedDict": ".get3dmodelbyid", + "Get3DModelByIDResponseTypedDict": ".get3dmodelbyid", + "Get3DModelsByUserIDModelAssets": ".get3dmodelsbyuserid", + "Get3DModelsByUserIDModelAssetsTypedDict": ".get3dmodelsbyuserid", + "Get3DModelsByUserIDRequest": ".get3dmodelsbyuserid", + "Get3DModelsByUserIDRequestBody": ".get3dmodelsbyuserid", + "Get3DModelsByUserIDRequestBodyTypedDict": ".get3dmodelsbyuserid", + "Get3DModelsByUserIDRequestTypedDict": ".get3dmodelsbyuserid", + "Get3DModelsByUserIDResponse": ".get3dmodelsbyuserid", + "Get3DModelsByUserIDResponseBody": ".get3dmodelsbyuserid", + "Get3DModelsByUserIDResponseBodyTypedDict": ".get3dmodelsbyuserid", + "Get3DModelsByUserIDResponseTypedDict": ".get3dmodelsbyuserid", + "GetCustomElementsByUserIDRequest": ".getcustomelementsbyuserid", + "GetCustomElementsByUserIDRequestTypedDict": ".getcustomelementsbyuserid", + "GetCustomElementsByUserIDResponse": ".getcustomelementsbyuserid", + "GetCustomElementsByUserIDResponseBody": ".getcustomelementsbyuserid", + "GetCustomElementsByUserIDResponseBodyTypedDict": ".getcustomelementsbyuserid", + "GetCustomElementsByUserIDResponseTypedDict": ".getcustomelementsbyuserid", + "GetCustomElementsByUserIDUserLoras": ".getcustomelementsbyuserid", + "GetCustomElementsByUserIDUserLorasTypedDict": ".getcustomelementsbyuserid", + "GetCustomModelsByUserIDCustomModels": ".getcustommodelsbyuserid", + "GetCustomModelsByUserIDCustomModelsTypedDict": ".getcustommodelsbyuserid", + "GetCustomModelsByUserIDRequest": ".getcustommodelsbyuserid", + "GetCustomModelsByUserIDRequestTypedDict": ".getcustommodelsbyuserid", + "GetCustomModelsByUserIDResponse": ".getcustommodelsbyuserid", + "GetCustomModelsByUserIDResponseBody": ".getcustommodelsbyuserid", + "GetCustomModelsByUserIDResponseBodyTypedDict": ".getcustommodelsbyuserid", + "GetCustomModelsByUserIDResponseTypedDict": ".getcustommodelsbyuserid", + "DatasetImages": ".getdatasetbyid", + "DatasetImagesTypedDict": ".getdatasetbyid", + "GetDatasetByIDDatasets": ".getdatasetbyid", + "GetDatasetByIDDatasetsTypedDict": ".getdatasetbyid", + "GetDatasetByIDRequest": ".getdatasetbyid", + "GetDatasetByIDRequestTypedDict": ".getdatasetbyid", + "GetDatasetByIDResponse": ".getdatasetbyid", + "GetDatasetByIDResponseBody": ".getdatasetbyid", + "GetDatasetByIDResponseBodyTypedDict": ".getdatasetbyid", + "GetDatasetByIDResponseTypedDict": ".getdatasetbyid", + "GetElementByIDRequest": ".getelementbyid", + "GetElementByIDRequestTypedDict": ".getelementbyid", + "GetElementByIDResponse": ".getelementbyid", + "GetElementByIDResponseBody": ".getelementbyid", + "GetElementByIDResponseBodyTypedDict": ".getelementbyid", + "GetElementByIDResponseTypedDict": ".getelementbyid", + "GetElementByIDUserLoras": ".getelementbyid", + "GetElementByIDUserLorasTypedDict": ".getelementbyid", + "GeneratedImages": ".getgenerationbyid", + "GeneratedImagesTypedDict": ".getgenerationbyid", + "GenerationElements": ".getgenerationbyid", + "GenerationElementsTypedDict": ".getgenerationbyid", + "GetGenerationByIDGeneratedImageVariationGeneric": ".getgenerationbyid", + "GetGenerationByIDGeneratedImageVariationGenericTypedDict": ".getgenerationbyid", + "GetGenerationByIDGenerations": ".getgenerationbyid", + "GetGenerationByIDGenerationsTypedDict": ".getgenerationbyid", + "GetGenerationByIDLoras": ".getgenerationbyid", + "GetGenerationByIDLorasTypedDict": ".getgenerationbyid", + "GetGenerationByIDRequest": ".getgenerationbyid", + "GetGenerationByIDRequestTypedDict": ".getgenerationbyid", + "GetGenerationByIDResponse": ".getgenerationbyid", + "GetGenerationByIDResponseBody": ".getgenerationbyid", + "GetGenerationByIDResponseBodyTypedDict": ".getgenerationbyid", + "GetGenerationByIDResponseTypedDict": ".getgenerationbyid", + "Elements": ".getgenerationsbyuserid", + "ElementsTypedDict": ".getgenerationsbyuserid", + "GetGenerationsByUserIDGeneratedImageVariationGeneric": ".getgenerationsbyuserid", + "GetGenerationsByUserIDGeneratedImageVariationGenericTypedDict": ".getgenerationsbyuserid", + "GetGenerationsByUserIDGeneratedImages": ".getgenerationsbyuserid", + "GetGenerationsByUserIDGeneratedImagesTypedDict": ".getgenerationsbyuserid", + "GetGenerationsByUserIDGenerationElements": ".getgenerationsbyuserid", + "GetGenerationsByUserIDGenerationElementsTypedDict": ".getgenerationsbyuserid", + "GetGenerationsByUserIDGenerations": ".getgenerationsbyuserid", + "GetGenerationsByUserIDGenerationsTypedDict": ".getgenerationsbyuserid", + "GetGenerationsByUserIDRequest": ".getgenerationsbyuserid", + "GetGenerationsByUserIDRequestTypedDict": ".getgenerationsbyuserid", + "GetGenerationsByUserIDResponse": ".getgenerationsbyuserid", + "GetGenerationsByUserIDResponseBody": ".getgenerationsbyuserid", + "GetGenerationsByUserIDResponseBodyTypedDict": ".getgenerationsbyuserid", + "GetGenerationsByUserIDResponseTypedDict": ".getgenerationsbyuserid", + "GetInitImageByIDInitImages": ".getinitimagebyid", + "GetInitImageByIDInitImagesTypedDict": ".getinitimagebyid", + "GetInitImageByIDRequest": ".getinitimagebyid", + "GetInitImageByIDRequestTypedDict": ".getinitimagebyid", + "GetInitImageByIDResponse": ".getinitimagebyid", + "GetInitImageByIDResponseBody": ".getinitimagebyid", + "GetInitImageByIDResponseBodyTypedDict": ".getinitimagebyid", + "GetInitImageByIDResponseTypedDict": ".getinitimagebyid", + "GetModelByIDCustomModels": ".getmodelbyid", + "GetModelByIDCustomModelsTypedDict": ".getmodelbyid", + "GetModelByIDRequest": ".getmodelbyid", + "GetModelByIDRequestTypedDict": ".getmodelbyid", + "GetModelByIDResponse": ".getmodelbyid", + "GetModelByIDResponseBody": ".getmodelbyid", + "GetModelByIDResponseBodyTypedDict": ".getmodelbyid", + "GetModelByIDResponseTypedDict": ".getmodelbyid", + "GeneratedImageVariationMotion": ".getmotionvariationbyid", + "GeneratedImageVariationMotionTypedDict": ".getmotionvariationbyid", + "GetMotionVariationByIDRequest": ".getmotionvariationbyid", + "GetMotionVariationByIDRequestTypedDict": ".getmotionvariationbyid", + "GetMotionVariationByIDResponse": ".getmotionvariationbyid", + "GetMotionVariationByIDResponseBody": ".getmotionvariationbyid", + "GetMotionVariationByIDResponseBodyTypedDict": ".getmotionvariationbyid", + "GetMotionVariationByIDResponseTypedDict": ".getmotionvariationbyid", + "GetTextureGenerationByIDModelAssetTextureGenerations": ".gettexturegenerationbyid", + "GetTextureGenerationByIDModelAssetTextureGenerationsTypedDict": ".gettexturegenerationbyid", + "GetTextureGenerationByIDRequest": ".gettexturegenerationbyid", + "GetTextureGenerationByIDRequestBody": ".gettexturegenerationbyid", + "GetTextureGenerationByIDRequestBodyTypedDict": ".gettexturegenerationbyid", + "GetTextureGenerationByIDRequestTypedDict": ".gettexturegenerationbyid", + "GetTextureGenerationByIDResponse": ".gettexturegenerationbyid", + "GetTextureGenerationByIDResponseBody": ".gettexturegenerationbyid", + "GetTextureGenerationByIDResponseBodyTypedDict": ".gettexturegenerationbyid", + "GetTextureGenerationByIDResponseTypedDict": ".gettexturegenerationbyid", + "ModelAssetTextureImages": ".gettexturegenerationbyid", + "ModelAssetTextureImagesTypedDict": ".gettexturegenerationbyid", + "GetTextureGenerationsByModelIDModelAssetTextureGenerations": ".gettexturegenerationsbymodelid", + "GetTextureGenerationsByModelIDModelAssetTextureGenerationsTypedDict": ".gettexturegenerationsbymodelid", + "GetTextureGenerationsByModelIDModelAssetTextureImages": ".gettexturegenerationsbymodelid", + "GetTextureGenerationsByModelIDModelAssetTextureImagesTypedDict": ".gettexturegenerationsbymodelid", + "GetTextureGenerationsByModelIDRequest": ".gettexturegenerationsbymodelid", + "GetTextureGenerationsByModelIDRequestBody": ".gettexturegenerationsbymodelid", + "GetTextureGenerationsByModelIDRequestBodyTypedDict": ".gettexturegenerationsbymodelid", + "GetTextureGenerationsByModelIDRequestTypedDict": ".gettexturegenerationsbymodelid", + "GetTextureGenerationsByModelIDResponse": ".gettexturegenerationsbymodelid", + "GetTextureGenerationsByModelIDResponseBody": ".gettexturegenerationsbymodelid", + "GetTextureGenerationsByModelIDResponseBodyTypedDict": ".gettexturegenerationsbymodelid", + "GetTextureGenerationsByModelIDResponseTypedDict": ".gettexturegenerationsbymodelid", + "GetUserSelfResponse": ".getuserself", + "GetUserSelfResponseBody": ".getuserself", + "GetUserSelfResponseBodyTypedDict": ".getuserself", + "GetUserSelfResponseTypedDict": ".getuserself", + "UserDetails": ".getuserself", + "UserDetailsTypedDict": ".getuserself", + "Users": ".getuserself", + "UsersTypedDict": ".getuserself", + "GeneratedImageVariationGeneric": ".getvariationbyid", + "GeneratedImageVariationGenericTypedDict": ".getvariationbyid", + "GetVariationByIDRequest": ".getvariationbyid", + "GetVariationByIDRequestTypedDict": ".getvariationbyid", + "GetVariationByIDResponse": ".getvariationbyid", + "GetVariationByIDResponseBody": ".getvariationbyid", + "GetVariationByIDResponseBodyTypedDict": ".getvariationbyid", + "GetVariationByIDResponseTypedDict": ".getvariationbyid", + "ListElementsResponse": ".listelements", + "ListElementsResponseBody": ".listelements", + "ListElementsResponseBodyTypedDict": ".listelements", + "ListElementsResponseTypedDict": ".listelements", + "Loras": ".listelements", + "LorasTypedDict": ".listelements", + "ListPlatformModelsCustomModels": ".listplatformmodels", + "ListPlatformModelsCustomModelsTypedDict": ".listplatformmodels", + "ListPlatformModelsGeneratedImages": ".listplatformmodels", + "ListPlatformModelsGeneratedImagesTypedDict": ".listplatformmodels", + "ListPlatformModelsResponse": ".listplatformmodels", + "ListPlatformModelsResponseBody": ".listplatformmodels", + "ListPlatformModelsResponseBodyTypedDict": ".listplatformmodels", + "ListPlatformModelsResponseTypedDict": ".listplatformmodels", + "PerformAlchemyUpscaleLCMLCMGenerationOutput": ".performalchemyupscalelcm", + "PerformAlchemyUpscaleLCMLCMGenerationOutputTypedDict": ".performalchemyupscalelcm", + "PerformAlchemyUpscaleLCMRequestBody": ".performalchemyupscalelcm", + "PerformAlchemyUpscaleLCMRequestBodyTypedDict": ".performalchemyupscalelcm", + "PerformAlchemyUpscaleLCMResponse": ".performalchemyupscalelcm", + "PerformAlchemyUpscaleLCMResponseBody": ".performalchemyupscalelcm", + "PerformAlchemyUpscaleLCMResponseBodyTypedDict": ".performalchemyupscalelcm", + "PerformAlchemyUpscaleLCMResponseTypedDict": ".performalchemyupscalelcm", + "PerformInpaintingLCMLCMGenerationOutput": ".performinpaintinglcm", + "PerformInpaintingLCMLCMGenerationOutputTypedDict": ".performinpaintinglcm", + "PerformInpaintingLCMRequestBody": ".performinpaintinglcm", + "PerformInpaintingLCMRequestBodyTypedDict": ".performinpaintinglcm", + "PerformInpaintingLCMResponse": ".performinpaintinglcm", + "PerformInpaintingLCMResponseBody": ".performinpaintinglcm", + "PerformInpaintingLCMResponseBodyTypedDict": ".performinpaintinglcm", + "PerformInpaintingLCMResponseTypedDict": ".performinpaintinglcm", + "PerformInstantRefineLcmGenerationOutput": ".performinstantrefine", + "PerformInstantRefineLcmGenerationOutputTypedDict": ".performinstantrefine", + "PerformInstantRefineRequestBody": ".performinstantrefine", + "PerformInstantRefineRequestBodyTypedDict": ".performinstantrefine", + "PerformInstantRefineResponse": ".performinstantrefine", + "PerformInstantRefineResponseBody": ".performinstantrefine", + "PerformInstantRefineResponseBodyTypedDict": ".performinstantrefine", + "PerformInstantRefineResponseTypedDict": ".performinstantrefine", + "CalculateProductionAPIServiceCost": ".pricingcalculator", + "CalculateProductionAPIServiceCostTypedDict": ".pricingcalculator", + "PricingCalculatorObject": ".pricingcalculator", + "PricingCalculatorObjectTypedDict": ".pricingcalculator", + "PricingCalculatorPricingCalculatorObject": ".pricingcalculator", + "PricingCalculatorPricingCalculatorObjectTypedDict": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestObject": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestObjectTypedDict": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyObject": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyObjectTypedDict": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONSVDGENERATIONObject": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONSVDGENERATIONObjectTypedDict": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONVIDEOGENERATIONObject": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONVIDEOGENERATIONObjectTypedDict": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObject": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObjectTypedDict": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsTEXTUREGENERATIONObject": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsTEXTUREGENERATIONObjectTypedDict": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERObject": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERObjectTypedDict": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERULTRAObject": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERULTRAObjectTypedDict": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsVeo3MOTIONVIDEOGENERATIONObject": ".pricingcalculator", + "PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsVeo3MOTIONVIDEOGENERATIONObjectTypedDict": ".pricingcalculator", + "PricingCalculatorRequestBody": ".pricingcalculator", + "PricingCalculatorRequestBodyTypedDict": ".pricingcalculator", + "PricingCalculatorResponse": ".pricingcalculator", + "PricingCalculatorResponseBody": ".pricingcalculator", + "PricingCalculatorResponseBodyTypedDict": ".pricingcalculator", + "PricingCalculatorResponseTypedDict": ".pricingcalculator", + "PricingCalculatorString": ".pricingcalculator", + "SdVersion": ".pricingcalculator", + "PromptGenerationOutput": ".promptimprove", + "PromptGenerationOutputTypedDict": ".promptimprove", + "PromptImproveRequestBody": ".promptimprove", + "PromptImproveRequestBodyTypedDict": ".promptimprove", + "PromptImproveResponse": ".promptimprove", + "PromptImproveResponseBody": ".promptimprove", + "PromptImproveResponseBodyTypedDict": ".promptimprove", + "PromptImproveResponseTypedDict": ".promptimprove", + "PromptRandomPromptGenerationOutput": ".promptrandom", + "PromptRandomPromptGenerationOutputTypedDict": ".promptrandom", + "PromptRandomResponse": ".promptrandom", + "PromptRandomResponseBody": ".promptrandom", + "PromptRandomResponseBodyTypedDict": ".promptrandom", + "PromptRandomResponseTypedDict": ".promptrandom", + "CanvasInitImageUploadOutput": ".uploadcanvasinitimage", + "CanvasInitImageUploadOutputTypedDict": ".uploadcanvasinitimage", + "UploadCanvasInitImageRequestBody": ".uploadcanvasinitimage", + "UploadCanvasInitImageRequestBodyTypedDict": ".uploadcanvasinitimage", + "UploadCanvasInitImageResponse": ".uploadcanvasinitimage", + "UploadCanvasInitImageResponseBody": ".uploadcanvasinitimage", + "UploadCanvasInitImageResponseBodyTypedDict": ".uploadcanvasinitimage", + "UploadCanvasInitImageResponseTypedDict": ".uploadcanvasinitimage", + "DatasetUploadOutput": ".uploaddatasetimage", + "DatasetUploadOutputTypedDict": ".uploaddatasetimage", + "UploadDatasetImageRequest": ".uploaddatasetimage", + "UploadDatasetImageRequestBody": ".uploaddatasetimage", + "UploadDatasetImageRequestBodyTypedDict": ".uploaddatasetimage", + "UploadDatasetImageRequestTypedDict": ".uploaddatasetimage", + "UploadDatasetImageResponse": ".uploaddatasetimage", + "UploadDatasetImageResponseBody": ".uploaddatasetimage", + "UploadDatasetImageResponseBodyTypedDict": ".uploaddatasetimage", + "UploadDatasetImageResponseTypedDict": ".uploaddatasetimage", + "DatasetGenUploadOutput": ".uploaddatasetimagefromgen", + "DatasetGenUploadOutputTypedDict": ".uploaddatasetimagefromgen", + "UploadDatasetImageFromGenRequest": ".uploaddatasetimagefromgen", + "UploadDatasetImageFromGenRequestBody": ".uploaddatasetimagefromgen", + "UploadDatasetImageFromGenRequestBodyTypedDict": ".uploaddatasetimagefromgen", + "UploadDatasetImageFromGenRequestTypedDict": ".uploaddatasetimagefromgen", + "UploadDatasetImageFromGenResponse": ".uploaddatasetimagefromgen", + "UploadDatasetImageFromGenResponseBody": ".uploaddatasetimagefromgen", + "UploadDatasetImageFromGenResponseBodyTypedDict": ".uploaddatasetimagefromgen", + "UploadDatasetImageFromGenResponseTypedDict": ".uploaddatasetimagefromgen", + "InitImageUploadOutput": ".uploadinitimage", + "InitImageUploadOutputTypedDict": ".uploadinitimage", + "UploadInitImageRequestBody": ".uploadinitimage", + "UploadInitImageRequestBodyTypedDict": ".uploadinitimage", + "UploadInitImageResponse": ".uploadinitimage", + "UploadInitImageResponseBody": ".uploadinitimage", + "UploadInitImageResponseBodyTypedDict": ".uploadinitimage", + "UploadInitImageResponseTypedDict": ".uploadinitimage", + "ModelAssetUploadOutput": ".uploadmodelasset", + "ModelAssetUploadOutputTypedDict": ".uploadmodelasset", + "UploadModelAssetRequestBody": ".uploadmodelasset", + "UploadModelAssetRequestBodyTypedDict": ".uploadmodelasset", + "UploadModelAssetResponse": ".uploadmodelasset", + "UploadModelAssetResponseBody": ".uploadmodelasset", + "UploadModelAssetResponseBodyTypedDict": ".uploadmodelasset", + "UploadModelAssetResponseTypedDict": ".uploadmodelasset", +} + + +def dynamic_import(modname, retries=3): + for attempt in range(retries): + try: + return import_module(modname, __package__) + except KeyError: + # Clear any half-initialized module and retry + sys.modules.pop(modname, None) + if attempt == retries - 1: + break + raise KeyError(f"Failed to import module '{modname}' after {retries} attempts") + + +def __getattr__(attr_name: str) -> object: + module_name = _dynamic_imports.get(attr_name) + if module_name is None: + raise AttributeError( + f"No {attr_name} found in _dynamic_imports for module name -> {__name__} " + ) + + try: + module = dynamic_import(module_name) + result = getattr(module, attr_name) + return result + except ImportError as e: + raise ImportError( + f"Failed to import {attr_name} from {module_name}: {e}" + ) from e + except AttributeError as e: + raise AttributeError( + f"Failed to get {attr_name} from {module_name}: {e}" + ) from e + + +def __dir__(): + lazy_attrs = builtins.list(_dynamic_imports.keys()) + return builtins.sorted(lazy_attrs) diff --git a/src/leonardo_ai_sdk/models/operations/createdataset.py b/src/leonardo_ai_sdk/models/operations/createdataset.py index 120eeffc..324fe245 100644 --- a/src/leonardo_ai_sdk/models/operations/createdataset.py +++ b/src/leonardo_ai_sdk/models/operations/createdataset.py @@ -34,31 +34,26 @@ class CreateDatasetRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["description"] - nullable_fields = ["description"] - null_default_fields = [] - + optional_fields = set(["description"]) + nullable_fields = set(["description"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -76,31 +71,26 @@ class Datasets(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -120,31 +110,26 @@ class CreateDatasetResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["insert_datasets_one"] - nullable_fields = ["insert_datasets_one"] - null_default_fields = [] - + optional_fields = set(["insert_datasets_one"]) + nullable_fields = set(["insert_datasets_one"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -172,3 +157,19 @@ class CreateDatasetResponse(BaseModel): object: Optional[CreateDatasetResponseBody] = None r"""Responses for POST /datasets""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/createelement.py b/src/leonardo_ai_sdk/models/operations/createelement.py index 1900ebce..aecf54bf 100644 --- a/src/leonardo_ai_sdk/models/operations/createelement.py +++ b/src/leonardo_ai_sdk/models/operations/createelement.py @@ -17,7 +17,7 @@ class SdVersions(str, Enum): - r"""The base version of stable diffusion to use if not using a custom model.""" + r"""The base version to use if not using a custom model.""" SDXL_0_9 = "SDXL_0_9" SDXL_1_0 = "SDXL_1_0" @@ -26,29 +26,30 @@ class SdVersions(str, Enum): VISION_XL = "VISION_XL" KINO_XL = "KINO_XL" ALBEDO_XL = "ALBEDO_XL" + FLUX_DEV = "FLUX_DEV" class CreateElementRequestBodyTypedDict(TypedDict): r"""Query parameters to be provided in the request body as a JSON object.""" + learning_rate: float + r"""The speed at which the model learns during training.

Model TypeLora FocusMinMaxDefault
DefaultGeneral | Style | Character | Object0.000000010.000010.000001
FLUX_DEVStyle0.0000010.000030.00001
Object0.000010.0010.0004
Character0.000010.0010.0005
GeneralNA
""" + lora_focus: str + r"""The category determines how the element will be trained. Options are 'General' | 'Character' | 'Style' | 'Object'. FLUX_DEV doesn't support General category.""" + num_train_epochs: int + r"""The number of times the entire training dataset is passed through the element.

Model TypeLora FocusMinMaxDefault
DefaultGeneral | Style | Character | Object1250100
FLUX_DEVStyle3012060
Object120220140
Character100200135
GeneralNA
""" dataset_id: NotRequired[str] r"""The ID of the dataset to train the element on.""" description: NotRequired[Nullable[str]] r"""The description of the element.""" - instance_prompt: NotRequired[str] - r"""The instance prompt to use during training.Try “a” by a noun. E.g. a castle""" - learning_rate: NotRequired[float] - r"""The speed of element learns.""" - lora_focus: NotRequired[str] - r"""The category determines how the element will be trained. Options are 'General' | 'Character' | 'Style' | 'Object'.""" + instance_prompt: NotRequired[Nullable[str]] + r"""Use a word that is closely related to what you're training that isn't too common. For example, instead of 'dog,' try something unique like 'jackthedog' or 'magicdonut'. Required for all non-FLUX_DEV models and FLUX_DEV Character model training.""" name: NotRequired[str] r"""The name of the element.""" - num_train_epochs: NotRequired[int] - r"""The number of times the entire training dataset is passed through the element.""" resolution: NotRequired[Nullable[int]] r"""The resolution for training. Must be 1024.""" sd_version: NotRequired[SdVersions] - r"""The base version of stable diffusion to use if not using a custom model.""" + r"""The base version to use if not using a custom model.""" train_text_encoder: NotRequired[bool] r"""Whether or not encode the train text.""" @@ -56,74 +57,68 @@ class CreateElementRequestBodyTypedDict(TypedDict): class CreateElementRequestBody(BaseModel): r"""Query parameters to be provided in the request body as a JSON object.""" + learning_rate: float + r"""The speed at which the model learns during training.

Model TypeLora FocusMinMaxDefault
DefaultGeneral | Style | Character | Object0.000000010.000010.000001
FLUX_DEVStyle0.0000010.000030.00001
Object0.000010.0010.0004
Character0.000010.0010.0005
GeneralNA
""" + + lora_focus: str + r"""The category determines how the element will be trained. Options are 'General' | 'Character' | 'Style' | 'Object'. FLUX_DEV doesn't support General category.""" + + num_train_epochs: int + r"""The number of times the entire training dataset is passed through the element.

Model TypeLora FocusMinMaxDefault
DefaultGeneral | Style | Character | Object1250100
FLUX_DEVStyle3012060
Object120220140
Character100200135
GeneralNA
""" + dataset_id: Annotated[Optional[str], pydantic.Field(alias="datasetId")] = "" r"""The ID of the dataset to train the element on.""" description: OptionalNullable[str] = "" r"""The description of the element.""" - instance_prompt: Optional[str] = "a character" - r"""The instance prompt to use during training.Try “a” by a noun. E.g. a castle""" - - learning_rate: Optional[float] = 0.000001 - r"""The speed of element learns.""" - - lora_focus: Optional[str] = "General" - r"""The category determines how the element will be trained. Options are 'General' | 'Character' | 'Style' | 'Object'.""" + instance_prompt: OptionalNullable[str] = "" + r"""Use a word that is closely related to what you're training that isn't too common. For example, instead of 'dog,' try something unique like 'jackthedog' or 'magicdonut'. Required for all non-FLUX_DEV models and FLUX_DEV Character model training.""" name: Optional[str] = "placeholder" r"""The name of the element.""" - num_train_epochs: Optional[int] = 100 - r"""The number of times the entire training dataset is passed through the element.""" - resolution: OptionalNullable[int] = 1024 r"""The resolution for training. Must be 1024.""" - sd_version: Optional[SdVersions] = SdVersions.SDXL_0_9 - r"""The base version of stable diffusion to use if not using a custom model.""" + sd_version: Optional[SdVersions] = SdVersions.FLUX_DEV + r"""The base version to use if not using a custom model.""" train_text_encoder: Optional[bool] = True r"""Whether or not encode the train text.""" @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "datasetId", - "description", - "instance_prompt", - "learning_rate", - "lora_focus", - "name", - "num_train_epochs", - "resolution", - "sd_version", - "train_text_encoder", - ] - nullable_fields = ["description", "resolution"] - null_default_fields = [] - + optional_fields = set( + [ + "datasetId", + "description", + "instance_prompt", + "name", + "resolution", + "sd_version", + "train_text_encoder", + ] + ) + nullable_fields = set(["description", "instance_prompt", "resolution"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -144,31 +139,26 @@ class SDTrainingOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["apiCreditCost", "userLoraId"] - nullable_fields = ["apiCreditCost"] - null_default_fields = [] - + optional_fields = set(["apiCreditCost", "userLoraId"]) + nullable_fields = set(["apiCreditCost"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -188,31 +178,26 @@ class CreateElementResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["sdTrainingJob"] - nullable_fields = ["sdTrainingJob"] - null_default_fields = [] - + optional_fields = set(["sdTrainingJob"]) + nullable_fields = set(["sdTrainingJob"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -240,3 +225,19 @@ class CreateElementResponse(BaseModel): object: Optional[CreateElementResponseBody] = None r"""Responses for POST /elements.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/creategeneration.py b/src/leonardo_ai_sdk/models/operations/creategeneration.py index 0660dc06..b7469f7f 100644 --- a/src/leonardo_ai_sdk/models/operations/creategeneration.py +++ b/src/leonardo_ai_sdk/models/operations/creategeneration.py @@ -48,6 +48,8 @@ class CreateGenerationRequestBodyTypedDict(TypedDict): Nullable[shared_canvasrequesttype.CanvasRequestType] ] r"""The type of request for the Canvas Editor.""" + contrast: NotRequired[Nullable[float]] + r"""Adjusts the contrast level of the generated image. Used in Phoenix and Flux models. Accepts values [1.0, 1.3, 1.8, 2.5, 3, 3.5, 4, 4.5]. For Phoenix, if alchemy is true, contrast needs to be 2.5 or higher.""" contrast_ratio: NotRequired[Nullable[float]] r"""Contrast Ratio to use with Alchemy. Must be a float between 0 and 1 inclusive.""" control_net: NotRequired[Nullable[bool]] @@ -75,7 +77,7 @@ class CreateGenerationRequestBodyTypedDict(TypedDict): high_resolution: NotRequired[Nullable[bool]] r"""Enable to use the High Resolution feature of Prompt Magic.""" image_prompt_weight: NotRequired[Nullable[float]] - image_prompts: NotRequired[Nullable[List[str]]] + image_prompts: NotRequired[Nullable[List[Nullable[str]]]] init_generation_image_id: NotRequired[Nullable[str]] r"""The ID of an existing image to use in image2image.""" init_image_id: NotRequired[Nullable[str]] @@ -162,6 +164,9 @@ class CreateGenerationRequestBody(BaseModel): ] = UNSET r"""The type of request for the Canvas Editor.""" + contrast: OptionalNullable[float] = UNSET + r"""Adjusts the contrast level of the generated image. Used in Phoenix and Flux models. Accepts values [1.0, 1.3, 1.8, 2.5, 3, 3.5, 4, 4.5]. For Phoenix, if alchemy is true, contrast needs to be 2.5 or higher.""" + contrast_ratio: Annotated[ OptionalNullable[float], pydantic.Field(alias="contrastRatio") ] = UNSET @@ -230,7 +235,7 @@ class CreateGenerationRequestBody(BaseModel): ] = UNSET image_prompts: Annotated[ - OptionalNullable[List[str]], pydantic.Field(alias="imagePrompts") + OptionalNullable[List[Nullable[str]]], pydantic.Field(alias="imagePrompts") ] = UNSET init_generation_image_id: OptionalNullable[str] = UNSET @@ -347,125 +352,126 @@ class CreateGenerationRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "alchemy", - "canvasInitId", - "canvasMaskId", - "canvasRequest", - "canvasRequestType", - "contrastRatio", - "controlNet", - "controlNetType", - "controlnets", - "elements", - "enhancePrompt", - "enhancePromptInstruction", - "expandedDomain", - "fantasyAvatar", - "guidance_scale", - "height", - "highContrast", - "highResolution", - "imagePromptWeight", - "imagePrompts", - "init_generation_image_id", - "init_image_id", - "init_strength", - "modelId", - "negative_prompt", - "num_images", - "num_inference_steps", - "photoReal", - "photoRealStrength", - "photoRealVersion", - "presetStyle", - "prompt", - "promptMagic", - "promptMagicStrength", - "promptMagicVersion", - "public", - "scheduler", - "sd_version", - "seed", - "tiling", - "transparency", - "ultra", - "unzoom", - "unzoomAmount", - "upscaleRatio", - "userElements", - "weighting", - "width", - ] - nullable_fields = [ - "alchemy", - "canvasInitId", - "canvasMaskId", - "canvasRequest", - "canvasRequestType", - "contrastRatio", - "controlNet", - "controlnets", - "elements", - "enhancePrompt", - "enhancePromptInstruction", - "expandedDomain", - "fantasyAvatar", - "guidance_scale", - "height", - "highContrast", - "highResolution", - "imagePromptWeight", - "imagePrompts", - "init_generation_image_id", - "init_image_id", - "init_strength", - "modelId", - "negative_prompt", - "num_images", - "num_inference_steps", - "photoReal", - "photoRealStrength", - "photoRealVersion", - "presetStyle", - "promptMagic", - "promptMagicStrength", - "promptMagicVersion", - "public", - "seed", - "tiling", - "transparency", - "ultra", - "unzoom", - "unzoomAmount", - "upscaleRatio", - "userElements", - "weighting", - "width", - ] - null_default_fields = [] - + optional_fields = set( + [ + "alchemy", + "canvasInitId", + "canvasMaskId", + "canvasRequest", + "canvasRequestType", + "contrast", + "contrastRatio", + "controlNet", + "controlNetType", + "controlnets", + "elements", + "enhancePrompt", + "enhancePromptInstruction", + "expandedDomain", + "fantasyAvatar", + "guidance_scale", + "height", + "highContrast", + "highResolution", + "imagePromptWeight", + "imagePrompts", + "init_generation_image_id", + "init_image_id", + "init_strength", + "modelId", + "negative_prompt", + "num_images", + "num_inference_steps", + "photoReal", + "photoRealStrength", + "photoRealVersion", + "presetStyle", + "prompt", + "promptMagic", + "promptMagicStrength", + "promptMagicVersion", + "public", + "scheduler", + "sd_version", + "seed", + "tiling", + "transparency", + "ultra", + "unzoom", + "unzoomAmount", + "upscaleRatio", + "userElements", + "weighting", + "width", + ] + ) + nullable_fields = set( + [ + "alchemy", + "canvasInitId", + "canvasMaskId", + "canvasRequest", + "canvasRequestType", + "contrast", + "contrastRatio", + "controlNet", + "controlnets", + "elements", + "enhancePrompt", + "enhancePromptInstruction", + "expandedDomain", + "fantasyAvatar", + "guidance_scale", + "height", + "highContrast", + "highResolution", + "imagePromptWeight", + "imagePrompts", + "init_generation_image_id", + "init_image_id", + "init_strength", + "modelId", + "negative_prompt", + "num_images", + "num_inference_steps", + "photoReal", + "photoRealStrength", + "photoRealVersion", + "presetStyle", + "promptMagic", + "promptMagicStrength", + "promptMagicVersion", + "public", + "seed", + "tiling", + "transparency", + "ultra", + "unzoom", + "unzoomAmount", + "upscaleRatio", + "userElements", + "weighting", + "width", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -486,31 +492,26 @@ class SDGenerationOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["apiCreditCost", "generationId"] - nullable_fields = ["apiCreditCost"] - null_default_fields = [] - + optional_fields = set(["apiCreditCost", "generationId"]) + nullable_fields = set(["apiCreditCost"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -530,31 +531,26 @@ class CreateGenerationResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["sdGenerationJob"] - nullable_fields = ["sdGenerationJob"] - null_default_fields = [] - + optional_fields = set(["sdGenerationJob"]) + nullable_fields = set(["sdGenerationJob"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -582,3 +578,19 @@ class CreateGenerationResponse(BaseModel): object: Optional[CreateGenerationResponseBody] = None r"""Responses for POST /generations""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/createimagetovideogeneration.py b/src/leonardo_ai_sdk/models/operations/createimagetovideogeneration.py new file mode 100644 index 00000000..0ac5e21f --- /dev/null +++ b/src/leonardo_ai_sdk/models/operations/createimagetovideogeneration.py @@ -0,0 +1,361 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum +import httpx +from leonardo_ai_sdk.models.shared import element_input as shared_element_input +from leonardo_ai_sdk.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +import pydantic +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class String(str, Enum): + r"""Type indicating whether the end frame image is uploaded or generated.""" + + GENERATED = "GENERATED" + UPLOADED = "UPLOADED" + + +class ObjectTypedDict(TypedDict): + r"""The end frame image. Supported only on kling2_1 model when used in conjunction with an init image.""" + + id: str + r"""The ID of the end frame image.""" + type: String + r"""Type indicating whether the end frame image is uploaded or generated.""" + + +class Object(BaseModel): + r"""The end frame image. Supported only on kling2_1 model when used in conjunction with an init image.""" + + id: str + r"""The ID of the end frame image.""" + + type: String + r"""Type indicating whether the end frame image is uploaded or generated.""" + + +class ImageType(str, Enum): + r"""Type indicating whether the init image is uploaded or generated. Use only image or imageId with imageType.""" + + GENERATED = "GENERATED" + UPLOADED = "UPLOADED" + + +class CreateImageToVideoGenerationString(str, Enum): + r"""The model to use for the video generation. Defaults to MOTION2 if not specified.""" + + MOTION2 = "MOTION2" + VEO3 = "VEO3" + MOTION2_FAST = "MOTION2FAST" + VEO3_FAST = "VEO3FAST" + KLING2_1 = "KLING2_1" + KLING2_5 = "KLING2_5" + + +class CreateImageToVideoGenerationMotionString(str, Enum): + r"""The resolution of the output video. Acceptable values vary based on model""" + + RESOLUTION_480 = "RESOLUTION_480" + RESOLUTION_720 = "RESOLUTION_720" + RESOLUTION_1080 = "RESOLUTION_1080" + + +class CreateImageToVideoGenerationRequestBodyTypedDict(TypedDict): + r"""Query parameters can also be provided in the request body as a JSON object""" + + image_id: str + r"""The ID of the image, supports generated images and init images. Use only image or imageId with imageType.""" + image_type: ImageType + r"""Type indicating whether the init image is uploaded or generated. Use only image or imageId with imageType.""" + prompt: str + r"""The prompt used to generate video""" + duration: NotRequired[Nullable[int]] + r"""Duration of the output video in seconds. Allowed values: 4, 6, or 8 on models VEO3 and VEO3FAST (default: 8) and 5 or 10 on model KLING2_5 (default: 5).""" + elements: NotRequired[Nullable[List[shared_element_input.ElementInputTypedDict]]] + r"""An array of elements/loras objects that will be applied sequentially to the output. Elements are only supported for Motion2.0 generations.""" + end_frame_image: NotRequired[Nullable[ObjectTypedDict]] + r"""The end frame image. Supported only on kling2_1 model when used in conjunction with an init image.""" + frame_interpolation: NotRequired[Nullable[bool]] + r"""Smoothly blend frames for fluid video transitions using Interpolation.""" + height: NotRequired[Nullable[int]] + r"""Height of the output video. Acceptable values vary based on model""" + is_public: NotRequired[Nullable[bool]] + r"""Whether the generation is public or not""" + model: NotRequired[Nullable[CreateImageToVideoGenerationString]] + r"""The model to use for the video generation. Defaults to MOTION2 if not specified.""" + negative_prompt: NotRequired[Nullable[str]] + r"""The negative prompt used for the video generation.""" + prompt_enhance: NotRequired[Nullable[bool]] + r"""Whether to enhance the prompt.""" + prompt_enhance_instruction: NotRequired[Nullable[str]] + r"""A natural language instruction used to modify the main prompt. For example, 'make it cinematic', 'add a rainbow', or 'change the subject to a cat'.""" + resolution: NotRequired[Nullable[CreateImageToVideoGenerationMotionString]] + r"""The resolution of the output video. Acceptable values vary based on model""" + seed: NotRequired[Nullable[int]] + r"""Apply a fixed seed to maintain consistency across generation sets. The maximum seed value is 2147483637 for Motion 2.0.""" + style_ids: NotRequired[Nullable[List[str]]] + r"""Predefined styles to enhance the prompt. This accepts a list of style uuids.""" + width: NotRequired[Nullable[int]] + r"""Width of the output video. Acceptable values vary based on model""" + + +class CreateImageToVideoGenerationRequestBody(BaseModel): + r"""Query parameters can also be provided in the request body as a JSON object""" + + image_id: Annotated[str, pydantic.Field(alias="imageId")] + r"""The ID of the image, supports generated images and init images. Use only image or imageId with imageType.""" + + image_type: Annotated[ImageType, pydantic.Field(alias="imageType")] + r"""Type indicating whether the init image is uploaded or generated. Use only image or imageId with imageType.""" + + prompt: str + r"""The prompt used to generate video""" + + duration: OptionalNullable[int] = UNSET + r"""Duration of the output video in seconds. Allowed values: 4, 6, or 8 on models VEO3 and VEO3FAST (default: 8) and 5 or 10 on model KLING2_5 (default: 5).""" + + elements: OptionalNullable[List[shared_element_input.ElementInput]] = UNSET + r"""An array of elements/loras objects that will be applied sequentially to the output. Elements are only supported for Motion2.0 generations.""" + + end_frame_image: Annotated[ + OptionalNullable[Object], pydantic.Field(alias="endFrameImage") + ] = UNSET + r"""The end frame image. Supported only on kling2_1 model when used in conjunction with an init image.""" + + frame_interpolation: Annotated[ + OptionalNullable[bool], pydantic.Field(alias="frameInterpolation") + ] = UNSET + r"""Smoothly blend frames for fluid video transitions using Interpolation.""" + + height: OptionalNullable[int] = UNSET + r"""Height of the output video. Acceptable values vary based on model""" + + is_public: Annotated[OptionalNullable[bool], pydantic.Field(alias="isPublic")] = ( + UNSET + ) + r"""Whether the generation is public or not""" + + model: OptionalNullable[CreateImageToVideoGenerationString] = ( + CreateImageToVideoGenerationString.MOTION2 + ) + r"""The model to use for the video generation. Defaults to MOTION2 if not specified.""" + + negative_prompt: Annotated[ + OptionalNullable[str], pydantic.Field(alias="negativePrompt") + ] = UNSET + r"""The negative prompt used for the video generation.""" + + prompt_enhance: Annotated[ + OptionalNullable[bool], pydantic.Field(alias="promptEnhance") + ] = UNSET + r"""Whether to enhance the prompt.""" + + prompt_enhance_instruction: Annotated[ + OptionalNullable[str], pydantic.Field(alias="promptEnhanceInstruction") + ] = UNSET + r"""A natural language instruction used to modify the main prompt. For example, 'make it cinematic', 'add a rainbow', or 'change the subject to a cat'.""" + + resolution: OptionalNullable[CreateImageToVideoGenerationMotionString] = UNSET + r"""The resolution of the output video. Acceptable values vary based on model""" + + seed: OptionalNullable[int] = UNSET + r"""Apply a fixed seed to maintain consistency across generation sets. The maximum seed value is 2147483637 for Motion 2.0.""" + + style_ids: Annotated[ + OptionalNullable[List[str]], pydantic.Field(alias="styleIds") + ] = UNSET + r"""Predefined styles to enhance the prompt. This accepts a list of style uuids.""" + + width: OptionalNullable[int] = UNSET + r"""Width of the output video. Acceptable values vary based on model""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + [ + "duration", + "elements", + "endFrameImage", + "frameInterpolation", + "height", + "isPublic", + "model", + "negativePrompt", + "promptEnhance", + "promptEnhanceInstruction", + "resolution", + "seed", + "styleIds", + "width", + ] + ) + nullable_fields = set( + [ + "duration", + "elements", + "endFrameImage", + "frameInterpolation", + "height", + "isPublic", + "model", + "negativePrompt", + "promptEnhance", + "promptEnhanceInstruction", + "resolution", + "seed", + "styleIds", + "width", + ] + ) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + 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 + + +class MotionVideoGenerationOutputTypedDict(TypedDict): + api_credit_cost: NotRequired[Nullable[int]] + r"""API credits cost, available for Production API users.""" + generation_id: NotRequired[str] + + +class MotionVideoGenerationOutput(BaseModel): + api_credit_cost: Annotated[ + OptionalNullable[int], pydantic.Field(alias="apiCreditCost") + ] = UNSET + r"""API credits cost, available for Production API users.""" + + generation_id: Annotated[Optional[str], pydantic.Field(alias="generationId")] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["apiCreditCost", "generationId"]) + nullable_fields = set(["apiCreditCost"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + 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 + + +class CreateImageToVideoGenerationResponseBodyTypedDict(TypedDict): + r"""Responses for POST /generations-image-to-video""" + + motion_video_generation_job: NotRequired[ + Nullable[MotionVideoGenerationOutputTypedDict] + ] + + +class CreateImageToVideoGenerationResponseBody(BaseModel): + r"""Responses for POST /generations-image-to-video""" + + motion_video_generation_job: Annotated[ + OptionalNullable[MotionVideoGenerationOutput], + pydantic.Field(alias="motionVideoGenerationJob"), + ] = UNSET + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["motionVideoGenerationJob"]) + nullable_fields = set(["motionVideoGenerationJob"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + 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 + + +class CreateImageToVideoGenerationResponseTypedDict(TypedDict): + content_type: str + r"""HTTP response content type for this operation""" + status_code: int + r"""HTTP response status code for this operation""" + raw_response: httpx.Response + r"""Raw HTTP response; suitable for custom response parsing""" + object: NotRequired[CreateImageToVideoGenerationResponseBodyTypedDict] + r"""Responses for POST /generations-image-to-video""" + + +class CreateImageToVideoGenerationResponse(BaseModel): + content_type: str + r"""HTTP response content type for this operation""" + + status_code: int + r"""HTTP response status code for this operation""" + + raw_response: httpx.Response + r"""Raw HTTP response; suitable for custom response parsing""" + + object: Optional[CreateImageToVideoGenerationResponseBody] = None + r"""Responses for POST /generations-image-to-video""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/createlcmgeneration.py b/src/leonardo_ai_sdk/models/operations/createlcmgeneration.py index d2b16a4e..63bf0a64 100644 --- a/src/leonardo_ai_sdk/models/operations/createlcmgeneration.py +++ b/src/leonardo_ai_sdk/models/operations/createlcmgeneration.py @@ -78,48 +78,39 @@ class CreateLCMGenerationRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "guidance", - "height", - "requestTimestamp", - "seed", - "steps", - "strength", - "style", - "width", - ] - nullable_fields = [ - "guidance", - "height", - "seed", - "steps", - "strength", - "style", - "width", - ] - null_default_fields = [] - + optional_fields = set( + [ + "guidance", + "height", + "requestTimestamp", + "seed", + "steps", + "strength", + "style", + "width", + ] + ) + nullable_fields = set( + ["guidance", "height", "seed", "steps", "strength", "style", "width"] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -147,31 +138,26 @@ class LcmGenerationOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["apiCreditCost", "imageDataUrl", "requestTimestamp"] - nullable_fields = ["apiCreditCost"] - null_default_fields = [] - + optional_fields = set(["apiCreditCost", "imageDataUrl", "requestTimestamp"]) + nullable_fields = set(["apiCreditCost"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -191,31 +177,26 @@ class CreateLCMGenerationResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["lcmGenerationJob"] - nullable_fields = ["lcmGenerationJob"] - null_default_fields = [] - + optional_fields = set(["lcmGenerationJob"]) + nullable_fields = set(["lcmGenerationJob"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -243,3 +224,19 @@ class CreateLCMGenerationResponse(BaseModel): object: Optional[CreateLCMGenerationResponseBody] = None r"""Responses for POST /generations-lcm""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/createmodel.py b/src/leonardo_ai_sdk/models/operations/createmodel.py index 05a2a823..67b39347 100644 --- a/src/leonardo_ai_sdk/models/operations/createmodel.py +++ b/src/leonardo_ai_sdk/models/operations/createmodel.py @@ -85,38 +85,28 @@ class CreateModelRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "description", - "modelType", - "nsfw", - "resolution", - "sd_version", - "strength", - ] - nullable_fields = ["description", "nsfw", "resolution", "sd_version"] - null_default_fields = [] - + optional_fields = set( + ["description", "modelType", "nsfw", "resolution", "sd_version", "strength"] + ) + nullable_fields = set(["description", "nsfw", "resolution", "sd_version"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -139,31 +129,26 @@ class CreateModelSDTrainingOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["apiCreditCost", "customModelId"] - nullable_fields = ["apiCreditCost"] - null_default_fields = [] - + optional_fields = set(["apiCreditCost", "customModelId"]) + nullable_fields = set(["apiCreditCost"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -184,31 +169,26 @@ class CreateModelResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["sdTrainingJob"] - nullable_fields = ["sdTrainingJob"] - null_default_fields = [] - + optional_fields = set(["sdTrainingJob"]) + nullable_fields = set(["sdTrainingJob"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -236,3 +216,19 @@ class CreateModelResponse(BaseModel): object: Optional[CreateModelResponseBody] = None r"""Responses for POST /models""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/createsvdmotiongeneration.py b/src/leonardo_ai_sdk/models/operations/createsvdmotiongeneration.py index 88c77349..78991f29 100644 --- a/src/leonardo_ai_sdk/models/operations/createsvdmotiongeneration.py +++ b/src/leonardo_ai_sdk/models/operations/createsvdmotiongeneration.py @@ -58,31 +58,30 @@ class CreateSVDMotionGenerationRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["isInitImage", "isPublic", "isVariation", "motionStrength"] - nullable_fields = ["isInitImage", "isPublic", "isVariation", "motionStrength"] - null_default_fields = [] - + optional_fields = set( + ["isInitImage", "isPublic", "isVariation", "motionStrength"] + ) + nullable_fields = set( + ["isInitImage", "isPublic", "isVariation", "motionStrength"] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -103,31 +102,26 @@ class MotionSvdGenerationOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["apiCreditCost", "generationId"] - nullable_fields = ["apiCreditCost"] - null_default_fields = [] - + optional_fields = set(["apiCreditCost", "generationId"]) + nullable_fields = set(["apiCreditCost"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -148,31 +142,26 @@ class CreateSVDMotionGenerationResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["motionSvdGenerationJob"] - nullable_fields = ["motionSvdGenerationJob"] - null_default_fields = [] - + optional_fields = set(["motionSvdGenerationJob"]) + nullable_fields = set(["motionSvdGenerationJob"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -200,3 +189,19 @@ class CreateSVDMotionGenerationResponse(BaseModel): object: Optional[CreateSVDMotionGenerationResponseBody] = None r"""Responses for POST /generations-motion-svd""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/createtexttovideogeneration.py b/src/leonardo_ai_sdk/models/operations/createtexttovideogeneration.py new file mode 100644 index 00000000..b41d4394 --- /dev/null +++ b/src/leonardo_ai_sdk/models/operations/createtexttovideogeneration.py @@ -0,0 +1,309 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum +import httpx +from leonardo_ai_sdk.models.shared import element_input as shared_element_input +from leonardo_ai_sdk.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +import pydantic +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class CreateTextToVideoGenerationString(str, Enum): + r"""The model to use for the video generation. Defaults to MOTION2 if not specified.""" + + MOTION2 = "MOTION2" + VEO3 = "VEO3" + MOTION2_FAST = "MOTION2FAST" + VEO3_FAST = "VEO3FAST" + KLING2_1 = "KLING2_1" + KLING2_5 = "KLING2_5" + + +class CreateTextToVideoGenerationMotionString(str, Enum): + r"""The resolution of the output video. Acceptable values vary based on model""" + + RESOLUTION_480 = "RESOLUTION_480" + RESOLUTION_720 = "RESOLUTION_720" + RESOLUTION_1080 = "RESOLUTION_1080" + + +class CreateTextToVideoGenerationRequestBodyTypedDict(TypedDict): + r"""Query parameters can also be provided in the request body as a JSON object""" + + prompt: str + r"""The prompt used to generate video""" + duration: NotRequired[Nullable[int]] + r"""Duration of the output video in seconds. Defaults to 8 seconds if not specified. Allowed values: 4, 6, or 8. Supported on models VEO3 and VEO3FAST.""" + elements: NotRequired[Nullable[List[shared_element_input.ElementInputTypedDict]]] + r"""An array of elements/loras objects that will be applied sequentially to the output. Elements are only supported for Motion2.0 generations.""" + frame_interpolation: NotRequired[Nullable[bool]] + r"""Smoothly blend frames for fluid video transitions using Interpolation.""" + height: NotRequired[Nullable[int]] + r"""Height of the output video. Acceptable values vary based on model""" + is_public: NotRequired[Nullable[bool]] + r"""Whether the generation is public or not""" + model: NotRequired[Nullable[CreateTextToVideoGenerationString]] + r"""The model to use for the video generation. Defaults to MOTION2 if not specified.""" + negative_prompt: NotRequired[Nullable[str]] + r"""The negative prompt used for the video generation.""" + prompt_enhance: NotRequired[Nullable[bool]] + r"""Whether to enhance the prompt.""" + prompt_enhance_instruction: NotRequired[Nullable[str]] + r"""A natural language instruction used to modify the main prompt. For example, 'make it cinematic', 'add a rainbow', or 'change the subject to a cat'.""" + resolution: NotRequired[Nullable[CreateTextToVideoGenerationMotionString]] + r"""The resolution of the output video. Acceptable values vary based on model""" + seed: NotRequired[Nullable[int]] + r"""Apply a fixed seed to maintain consistency across generation sets. The maximum seed value is 2147483637 for Motion 2.0 and 4294967293 for Veo3.""" + style_ids: NotRequired[Nullable[List[str]]] + r"""Predefined styles to enhance the prompt. This accepts a list of style uuids.""" + width: NotRequired[Nullable[int]] + r"""Width of the output video. Acceptable values vary based on model""" + + +class CreateTextToVideoGenerationRequestBody(BaseModel): + r"""Query parameters can also be provided in the request body as a JSON object""" + + prompt: str + r"""The prompt used to generate video""" + + duration: OptionalNullable[int] = 8 + r"""Duration of the output video in seconds. Defaults to 8 seconds if not specified. Allowed values: 4, 6, or 8. Supported on models VEO3 and VEO3FAST.""" + + elements: OptionalNullable[List[shared_element_input.ElementInput]] = UNSET + r"""An array of elements/loras objects that will be applied sequentially to the output. Elements are only supported for Motion2.0 generations.""" + + frame_interpolation: Annotated[ + OptionalNullable[bool], pydantic.Field(alias="frameInterpolation") + ] = UNSET + r"""Smoothly blend frames for fluid video transitions using Interpolation.""" + + height: OptionalNullable[int] = UNSET + r"""Height of the output video. Acceptable values vary based on model""" + + is_public: Annotated[OptionalNullable[bool], pydantic.Field(alias="isPublic")] = ( + UNSET + ) + r"""Whether the generation is public or not""" + + model: OptionalNullable[CreateTextToVideoGenerationString] = ( + CreateTextToVideoGenerationString.MOTION2 + ) + r"""The model to use for the video generation. Defaults to MOTION2 if not specified.""" + + negative_prompt: Annotated[ + OptionalNullable[str], pydantic.Field(alias="negativePrompt") + ] = UNSET + r"""The negative prompt used for the video generation.""" + + prompt_enhance: Annotated[ + OptionalNullable[bool], pydantic.Field(alias="promptEnhance") + ] = UNSET + r"""Whether to enhance the prompt.""" + + prompt_enhance_instruction: Annotated[ + OptionalNullable[str], pydantic.Field(alias="promptEnhanceInstruction") + ] = UNSET + r"""A natural language instruction used to modify the main prompt. For example, 'make it cinematic', 'add a rainbow', or 'change the subject to a cat'.""" + + resolution: OptionalNullable[CreateTextToVideoGenerationMotionString] = UNSET + r"""The resolution of the output video. Acceptable values vary based on model""" + + seed: OptionalNullable[int] = UNSET + r"""Apply a fixed seed to maintain consistency across generation sets. The maximum seed value is 2147483637 for Motion 2.0 and 4294967293 for Veo3.""" + + style_ids: Annotated[ + OptionalNullable[List[str]], pydantic.Field(alias="styleIds") + ] = UNSET + r"""Predefined styles to enhance the prompt. This accepts a list of style uuids.""" + + width: OptionalNullable[int] = UNSET + r"""Width of the output video. Acceptable values vary based on model""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + [ + "duration", + "elements", + "frameInterpolation", + "height", + "isPublic", + "model", + "negativePrompt", + "promptEnhance", + "promptEnhanceInstruction", + "resolution", + "seed", + "styleIds", + "width", + ] + ) + nullable_fields = set( + [ + "duration", + "elements", + "frameInterpolation", + "height", + "isPublic", + "model", + "negativePrompt", + "promptEnhance", + "promptEnhanceInstruction", + "resolution", + "seed", + "styleIds", + "width", + ] + ) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + 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 + + +class CreateTextToVideoGenerationMotionVideoGenerationOutputTypedDict(TypedDict): + api_credit_cost: NotRequired[Nullable[int]] + r"""API credits cost, available for Production API users.""" + generation_id: NotRequired[str] + + +class CreateTextToVideoGenerationMotionVideoGenerationOutput(BaseModel): + api_credit_cost: Annotated[ + OptionalNullable[int], pydantic.Field(alias="apiCreditCost") + ] = UNSET + r"""API credits cost, available for Production API users.""" + + generation_id: Annotated[Optional[str], pydantic.Field(alias="generationId")] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["apiCreditCost", "generationId"]) + nullable_fields = set(["apiCreditCost"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + 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 + + +class CreateTextToVideoGenerationResponseBodyTypedDict(TypedDict): + r"""Responses for POST /generations-text-to-video""" + + motion_video_generation_job: NotRequired[ + Nullable[CreateTextToVideoGenerationMotionVideoGenerationOutputTypedDict] + ] + + +class CreateTextToVideoGenerationResponseBody(BaseModel): + r"""Responses for POST /generations-text-to-video""" + + motion_video_generation_job: Annotated[ + OptionalNullable[CreateTextToVideoGenerationMotionVideoGenerationOutput], + pydantic.Field(alias="motionVideoGenerationJob"), + ] = UNSET + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["motionVideoGenerationJob"]) + nullable_fields = set(["motionVideoGenerationJob"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + 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 + + +class CreateTextToVideoGenerationResponseTypedDict(TypedDict): + content_type: str + r"""HTTP response content type for this operation""" + status_code: int + r"""HTTP response status code for this operation""" + raw_response: httpx.Response + r"""Raw HTTP response; suitable for custom response parsing""" + object: NotRequired[CreateTextToVideoGenerationResponseBodyTypedDict] + r"""Responses for POST /generations-text-to-video""" + + +class CreateTextToVideoGenerationResponse(BaseModel): + content_type: str + r"""HTTP response content type for this operation""" + + status_code: int + r"""HTTP response status code for this operation""" + + raw_response: httpx.Response + r"""Raw HTTP response; suitable for custom response parsing""" + + object: Optional[CreateTextToVideoGenerationResponseBody] = None + r"""Responses for POST /generations-text-to-video""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/createtexturegeneration.py b/src/leonardo_ai_sdk/models/operations/createtexturegeneration.py index b6ae8164..399a58f9 100644 --- a/src/leonardo_ai_sdk/models/operations/createtexturegeneration.py +++ b/src/leonardo_ai_sdk/models/operations/createtexturegeneration.py @@ -53,47 +53,46 @@ class CreateTextureGenerationRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "front_rotation_offset", - "modelAssetId", - "negative_prompt", - "preview", - "preview_direction", - "prompt", - "sd_version", - "seed", - ] - nullable_fields = [ - "front_rotation_offset", - "negative_prompt", - "preview", - "preview_direction", - "sd_version", - "seed", - ] - null_default_fields = [] - + optional_fields = set( + [ + "front_rotation_offset", + "modelAssetId", + "negative_prompt", + "preview", + "preview_direction", + "prompt", + "sd_version", + "seed", + ] + ) + nullable_fields = set( + [ + "front_rotation_offset", + "negative_prompt", + "preview", + "preview_direction", + "sd_version", + "seed", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -114,31 +113,26 @@ class TextureGenerationJobOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["apiCreditCost", "id"] - nullable_fields = ["apiCreditCost"] - null_default_fields = [] - + optional_fields = set(["apiCreditCost", "id"]) + nullable_fields = set(["apiCreditCost"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -159,31 +153,26 @@ class CreateTextureGenerationResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["textureGenerationJob"] - nullable_fields = ["textureGenerationJob"] - null_default_fields = [] - + optional_fields = set(["textureGenerationJob"]) + nullable_fields = set(["textureGenerationJob"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -211,3 +200,19 @@ class CreateTextureGenerationResponse(BaseModel): object: Optional[CreateTextureGenerationResponseBody] = None r"""Responses for POST /api/rest/v1/generations-texture""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/createuniversalupscalerjob.py b/src/leonardo_ai_sdk/models/operations/createuniversalupscalerjob.py index 9c5de669..690195fb 100644 --- a/src/leonardo_ai_sdk/models/operations/createuniversalupscalerjob.py +++ b/src/leonardo_ai_sdk/models/operations/createuniversalupscalerjob.py @@ -103,53 +103,52 @@ class CreateUniversalUpscalerJobRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "creativityStrength", - "detailContrast", - "generatedImageId", - "initImageId", - "prompt", - "similarity", - "ultraUpscaleStyle", - "upscaleMultiplier", - "upscalerStyle", - "variationId", - ] - nullable_fields = [ - "creativityStrength", - "detailContrast", - "generatedImageId", - "initImageId", - "prompt", - "similarity", - "ultraUpscaleStyle", - "upscaleMultiplier", - "upscalerStyle", - "variationId", - ] - null_default_fields = [] - + optional_fields = set( + [ + "creativityStrength", + "detailContrast", + "generatedImageId", + "initImageId", + "prompt", + "similarity", + "ultraUpscaleStyle", + "upscaleMultiplier", + "upscalerStyle", + "variationId", + ] + ) + nullable_fields = set( + [ + "creativityStrength", + "detailContrast", + "generatedImageId", + "initImageId", + "prompt", + "similarity", + "ultraUpscaleStyle", + "upscaleMultiplier", + "upscalerStyle", + "variationId", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -170,31 +169,26 @@ class UniversalUpscalerOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["apiCreditCost", "id"] - nullable_fields = ["apiCreditCost", "id"] - null_default_fields = [] - + optional_fields = set(["apiCreditCost", "id"]) + nullable_fields = set(["apiCreditCost", "id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -212,6 +206,22 @@ class CreateUniversalUpscalerJobResponseBody(BaseModel): Optional[UniversalUpscalerOutput], pydantic.Field(alias="universalUpscaler") ] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["universalUpscaler"]) + 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 CreateUniversalUpscalerJobResponseTypedDict(TypedDict): content_type: str @@ -236,3 +246,19 @@ class CreateUniversalUpscalerJobResponse(BaseModel): object: Optional[CreateUniversalUpscalerJobResponseBody] = None r"""Responses for POST /variations/universal-upscaler""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/createvariationnobg.py b/src/leonardo_ai_sdk/models/operations/createvariationnobg.py index b91e3437..1145f2cb 100644 --- a/src/leonardo_ai_sdk/models/operations/createvariationnobg.py +++ b/src/leonardo_ai_sdk/models/operations/createvariationnobg.py @@ -29,6 +29,22 @@ class CreateVariationNoBGRequestBody(BaseModel): is_variation: Annotated[Optional[bool], pydantic.Field(alias="isVariation")] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["isVariation"]) + 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 SDUpscaleJobOutputTypedDict(TypedDict): api_credit_cost: NotRequired[Nullable[int]] @@ -46,31 +62,26 @@ class SDUpscaleJobOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["apiCreditCost", "id"] - nullable_fields = ["apiCreditCost", "id"] - null_default_fields = [] - + optional_fields = set(["apiCreditCost", "id"]) + nullable_fields = set(["apiCreditCost", "id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -88,6 +99,22 @@ class CreateVariationNoBGResponseBody(BaseModel): Optional[SDUpscaleJobOutput], pydantic.Field(alias="sdNobgJob") ] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["sdNobgJob"]) + 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 CreateVariationNoBGResponseTypedDict(TypedDict): content_type: str @@ -112,3 +139,19 @@ class CreateVariationNoBGResponse(BaseModel): object: Optional[CreateVariationNoBGResponseBody] = None r"""Responses for POST /variations/nobg""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/createvariationunzoom.py b/src/leonardo_ai_sdk/models/operations/createvariationunzoom.py index 25ffadee..a2bd69ac 100644 --- a/src/leonardo_ai_sdk/models/operations/createvariationunzoom.py +++ b/src/leonardo_ai_sdk/models/operations/createvariationunzoom.py @@ -33,31 +33,26 @@ class CreateVariationUnzoomRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id", "isVariation"] - nullable_fields = ["isVariation"] - null_default_fields = [] - + optional_fields = set(["id", "isVariation"]) + nullable_fields = set(["isVariation"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -78,31 +73,26 @@ class SDUnzoomOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["apiCreditCost", "id"] - nullable_fields = ["apiCreditCost"] - null_default_fields = [] - + optional_fields = set(["apiCreditCost", "id"]) + nullable_fields = set(["apiCreditCost"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -122,31 +112,26 @@ class CreateVariationUnzoomResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["sdUnzoomJob"] - nullable_fields = ["sdUnzoomJob"] - null_default_fields = [] - + optional_fields = set(["sdUnzoomJob"]) + nullable_fields = set(["sdUnzoomJob"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -174,3 +159,19 @@ class CreateVariationUnzoomResponse(BaseModel): object: Optional[CreateVariationUnzoomResponseBody] = None r"""Responses for POST /api/rest/v1/variations/unzoom""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/createvariationupscale.py b/src/leonardo_ai_sdk/models/operations/createvariationupscale.py index ff32bf30..005ada8f 100644 --- a/src/leonardo_ai_sdk/models/operations/createvariationupscale.py +++ b/src/leonardo_ai_sdk/models/operations/createvariationupscale.py @@ -43,31 +43,26 @@ class CreateVariationUpscaleSDUpscaleJobOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["apiCreditCost", "id"] - nullable_fields = ["apiCreditCost"] - null_default_fields = [] - + optional_fields = set(["apiCreditCost", "id"]) + nullable_fields = set(["apiCreditCost"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -90,31 +85,26 @@ class CreateVariationUpscaleResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["sdUpscaleJob"] - nullable_fields = ["sdUpscaleJob"] - null_default_fields = [] - + optional_fields = set(["sdUpscaleJob"]) + nullable_fields = set(["sdUpscaleJob"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -142,3 +132,19 @@ class CreateVariationUpscaleResponse(BaseModel): object: Optional[CreateVariationUpscaleResponseBody] = None r"""Responses for POST /variations/upscale""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/createvideoupscale.py b/src/leonardo_ai_sdk/models/operations/createvideoupscale.py new file mode 100644 index 00000000..047443d9 --- /dev/null +++ b/src/leonardo_ai_sdk/models/operations/createvideoupscale.py @@ -0,0 +1,169 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum +import httpx +from leonardo_ai_sdk.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +import pydantic +from pydantic import model_serializer +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class CreateVideoUpscaleString(str, Enum): + r"""The resolution of the upscaled video. RESOLUTION_720 is the only option for now.""" + + RESOLUTION_720 = "RESOLUTION_720" + + +class CreateVideoUpscaleRequestBodyTypedDict(TypedDict): + r"""Query parameters can also be provided in the request body as a JSON object""" + + resolution: CreateVideoUpscaleString + r"""The resolution of the upscaled video. RESOLUTION_720 is the only option for now.""" + source_generation_id: str + r"""The ID of the source video generation to upscale.""" + + +class CreateVideoUpscaleRequestBody(BaseModel): + r"""Query parameters can also be provided in the request body as a JSON object""" + + resolution: CreateVideoUpscaleString + r"""The resolution of the upscaled video. RESOLUTION_720 is the only option for now.""" + + source_generation_id: Annotated[str, pydantic.Field(alias="sourceGenerationId")] + r"""The ID of the source video generation to upscale.""" + + +class CreateVideoUpscaleMotionVideoGenerationOutputTypedDict(TypedDict): + api_credit_cost: NotRequired[Nullable[int]] + r"""API credits cost, available for Production API users.""" + generation_id: NotRequired[str] + variation_id: NotRequired[str] + r"""The ID of the upscale variation.""" + + +class CreateVideoUpscaleMotionVideoGenerationOutput(BaseModel): + api_credit_cost: Annotated[ + OptionalNullable[int], pydantic.Field(alias="apiCreditCost") + ] = UNSET + r"""API credits cost, available for Production API users.""" + + generation_id: Annotated[Optional[str], pydantic.Field(alias="generationId")] = None + + variation_id: Annotated[Optional[str], pydantic.Field(alias="variationId")] = None + r"""The ID of the upscale variation.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["apiCreditCost", "generationId", "variationId"]) + nullable_fields = set(["apiCreditCost"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + 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 + + +class CreateVideoUpscaleResponseBodyTypedDict(TypedDict): + r"""Responses for POST /generations-text-to-video""" + + motion_video_generation_job: NotRequired[ + Nullable[CreateVideoUpscaleMotionVideoGenerationOutputTypedDict] + ] + + +class CreateVideoUpscaleResponseBody(BaseModel): + r"""Responses for POST /generations-text-to-video""" + + motion_video_generation_job: Annotated[ + OptionalNullable[CreateVideoUpscaleMotionVideoGenerationOutput], + pydantic.Field(alias="motionVideoGenerationJob"), + ] = UNSET + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["motionVideoGenerationJob"]) + nullable_fields = set(["motionVideoGenerationJob"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + 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 + + +class CreateVideoUpscaleResponseTypedDict(TypedDict): + content_type: str + r"""HTTP response content type for this operation""" + status_code: int + r"""HTTP response status code for this operation""" + raw_response: httpx.Response + r"""Raw HTTP response; suitable for custom response parsing""" + object: NotRequired[CreateVideoUpscaleResponseBodyTypedDict] + r"""Responses for POST /generations-text-to-video""" + + +class CreateVideoUpscaleResponse(BaseModel): + content_type: str + r"""HTTP response content type for this operation""" + + status_code: int + r"""HTTP response status code for this operation""" + + raw_response: httpx.Response + r"""Raw HTTP response; suitable for custom response parsing""" + + object: Optional[CreateVideoUpscaleResponseBody] = None + r"""Responses for POST /generations-text-to-video""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/delete3dmodelbyid.py b/src/leonardo_ai_sdk/models/operations/delete3dmodelbyid.py index 26f50700..98ea6fda 100644 --- a/src/leonardo_ai_sdk/models/operations/delete3dmodelbyid.py +++ b/src/leonardo_ai_sdk/models/operations/delete3dmodelbyid.py @@ -28,31 +28,26 @@ class Delete3DModelByIDRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -76,6 +71,22 @@ class Delete3DModelByIDRequest(BaseModel): ] = None r"""Query parameters can also be provided in the request body as a JSON object""" + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["RequestBody"]) + 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 ModelAssetsTypedDict(TypedDict): r"""columns and relationships of \"model_assets\" """ @@ -90,31 +101,26 @@ class ModelAssets(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -134,31 +140,26 @@ class Delete3DModelByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["delete_model_assets_by_pk"] - nullable_fields = ["delete_model_assets_by_pk"] - null_default_fields = [] - + optional_fields = set(["delete_model_assets_by_pk"]) + nullable_fields = set(["delete_model_assets_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -186,3 +187,19 @@ class Delete3DModelByIDResponse(BaseModel): object: Optional[Delete3DModelByIDResponseBody] = None r"""Responses for DELETE /api/rest/v1/models-3d/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/deletedatasetbyid.py b/src/leonardo_ai_sdk/models/operations/deletedatasetbyid.py index 4350ad30..f1858c38 100644 --- a/src/leonardo_ai_sdk/models/operations/deletedatasetbyid.py +++ b/src/leonardo_ai_sdk/models/operations/deletedatasetbyid.py @@ -40,31 +40,26 @@ class DeleteDatasetByIDDatasets(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -84,31 +79,26 @@ class DeleteDatasetByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["delete_datasets_by_pk"] - nullable_fields = ["delete_datasets_by_pk"] - null_default_fields = [] - + optional_fields = set(["delete_datasets_by_pk"]) + nullable_fields = set(["delete_datasets_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -136,3 +126,19 @@ class DeleteDatasetByIDResponse(BaseModel): object: Optional[DeleteDatasetByIDResponseBody] = None r"""Responses for DELETE /datasets/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/deleteelementbyid.py b/src/leonardo_ai_sdk/models/operations/deleteelementbyid.py index 413960fc..f6a2580f 100644 --- a/src/leonardo_ai_sdk/models/operations/deleteelementbyid.py +++ b/src/leonardo_ai_sdk/models/operations/deleteelementbyid.py @@ -38,6 +38,22 @@ class UserLoras(BaseModel): id: Optional[int] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["id"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + class DeleteElementByIDResponseBodyTypedDict(TypedDict): r"""Responses for DELETE /models/{id}""" @@ -54,31 +70,26 @@ class DeleteElementByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["delete_user_loras_by_pk"] - nullable_fields = ["delete_user_loras_by_pk"] - null_default_fields = [] - + optional_fields = set(["delete_user_loras_by_pk"]) + nullable_fields = set(["delete_user_loras_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -106,3 +117,19 @@ class DeleteElementByIDResponse(BaseModel): object: Optional[DeleteElementByIDResponseBody] = None r"""Responses for DELETE /models/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/deletegenerationbyid.py b/src/leonardo_ai_sdk/models/operations/deletegenerationbyid.py index d0ff4f89..003c790a 100644 --- a/src/leonardo_ai_sdk/models/operations/deletegenerationbyid.py +++ b/src/leonardo_ai_sdk/models/operations/deletegenerationbyid.py @@ -40,31 +40,26 @@ class Generations(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -84,31 +79,26 @@ class DeleteGenerationByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["delete_generations_by_pk"] - nullable_fields = ["delete_generations_by_pk"] - null_default_fields = [] - + optional_fields = set(["delete_generations_by_pk"]) + nullable_fields = set(["delete_generations_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -136,3 +126,19 @@ class DeleteGenerationByIDResponse(BaseModel): object: Optional[DeleteGenerationByIDResponseBody] = None r"""Responses for DELETE /generations/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/deleteinitimagebyid.py b/src/leonardo_ai_sdk/models/operations/deleteinitimagebyid.py index 48e3f885..a6d7e04d 100644 --- a/src/leonardo_ai_sdk/models/operations/deleteinitimagebyid.py +++ b/src/leonardo_ai_sdk/models/operations/deleteinitimagebyid.py @@ -40,31 +40,26 @@ class InitImages(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -84,31 +79,26 @@ class DeleteInitImageByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["delete_init_images_by_pk"] - nullable_fields = ["delete_init_images_by_pk"] - null_default_fields = [] - + optional_fields = set(["delete_init_images_by_pk"]) + nullable_fields = set(["delete_init_images_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -136,3 +126,19 @@ class DeleteInitImageByIDResponse(BaseModel): object: Optional[DeleteInitImageByIDResponseBody] = None r"""Responses for DELETE /init-image/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/deletemodelbyid.py b/src/leonardo_ai_sdk/models/operations/deletemodelbyid.py index db31fbe9..903f01b8 100644 --- a/src/leonardo_ai_sdk/models/operations/deletemodelbyid.py +++ b/src/leonardo_ai_sdk/models/operations/deletemodelbyid.py @@ -40,31 +40,26 @@ class CustomModels(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -84,31 +79,26 @@ class DeleteModelByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["delete_custom_models_by_pk"] - nullable_fields = ["delete_custom_models_by_pk"] - null_default_fields = [] - + optional_fields = set(["delete_custom_models_by_pk"]) + nullable_fields = set(["delete_custom_models_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -136,3 +126,19 @@ class DeleteModelByIDResponse(BaseModel): object: Optional[DeleteModelByIDResponseBody] = None r"""Responses for DELETE /models/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/deletetexturegenerationbyid.py b/src/leonardo_ai_sdk/models/operations/deletetexturegenerationbyid.py index 676a67a2..04b8e14f 100644 --- a/src/leonardo_ai_sdk/models/operations/deletetexturegenerationbyid.py +++ b/src/leonardo_ai_sdk/models/operations/deletetexturegenerationbyid.py @@ -28,31 +28,26 @@ class DeleteTextureGenerationByIDRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -76,6 +71,22 @@ class DeleteTextureGenerationByIDRequest(BaseModel): ] = None r"""Query parameters can also be provided in the request body as a JSON object""" + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["RequestBody"]) + 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 ModelAssetTextureGenerationsTypedDict(TypedDict): r"""columns and relationships of \"model_asset_texture_generations\" """ @@ -90,31 +101,26 @@ class ModelAssetTextureGenerations(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -138,31 +144,26 @@ class DeleteTextureGenerationByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["delete_model_asset_texture_generations_by_pk"] - nullable_fields = ["delete_model_asset_texture_generations_by_pk"] - null_default_fields = [] - + optional_fields = set(["delete_model_asset_texture_generations_by_pk"]) + nullable_fields = set(["delete_model_asset_texture_generations_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -190,3 +191,19 @@ class DeleteTextureGenerationByIDResponse(BaseModel): object: Optional[DeleteTextureGenerationByIDResponseBody] = None r"""Responses for DELETE /api/rest/v1/generations-texture/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/get3dmodelbyid.py b/src/leonardo_ai_sdk/models/operations/get3dmodelbyid.py index e9991c80..d515b389 100644 --- a/src/leonardo_ai_sdk/models/operations/get3dmodelbyid.py +++ b/src/leonardo_ai_sdk/models/operations/get3dmodelbyid.py @@ -34,31 +34,26 @@ class Get3DModelByIDRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -94,6 +89,22 @@ class Get3DModelByIDRequest(BaseModel): FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), ] = 0 + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["RequestBody", "limit", "offset"]) + 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 Get3DModelByIDModelAssetsTypedDict(TypedDict): r"""columns and relationships of \"model_assets\" """ @@ -123,31 +134,28 @@ class Get3DModelByIDModelAssets(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["createdAt", "id", "meshUrl", "name", "updatedAt", "userId"] - nullable_fields = ["id", "name", "userId"] - null_default_fields = [] - + optional_fields = set( + ["createdAt", "id", "meshUrl", "name", "updatedAt", "userId"] + ) + nullable_fields = set(["id", "name", "userId"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -167,31 +175,26 @@ class Get3DModelByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["model_assets_by_pk"] - nullable_fields = ["model_assets_by_pk"] - null_default_fields = [] - + optional_fields = set(["model_assets_by_pk"]) + nullable_fields = set(["model_assets_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -219,3 +222,19 @@ class Get3DModelByIDResponse(BaseModel): object: Optional[Get3DModelByIDResponseBody] = None r"""Responses for GET /api/rest/v1/models-3d/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/get3dmodelsbyuserid.py b/src/leonardo_ai_sdk/models/operations/get3dmodelsbyuserid.py index 35cd1852..e75418e9 100644 --- a/src/leonardo_ai_sdk/models/operations/get3dmodelsbyuserid.py +++ b/src/leonardo_ai_sdk/models/operations/get3dmodelsbyuserid.py @@ -34,31 +34,26 @@ class Get3DModelsByUserIDRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["userId"] - nullable_fields = ["userId"] - null_default_fields = [] - + optional_fields = set(["userId"]) + nullable_fields = set(["userId"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -94,6 +89,22 @@ class Get3DModelsByUserIDRequest(BaseModel): FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), ] = 0 + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["RequestBody", "limit", "offset"]) + 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 Get3DModelsByUserIDModelAssetsTypedDict(TypedDict): r"""columns and relationships of \"model_assets\" """ @@ -123,31 +134,28 @@ class Get3DModelsByUserIDModelAssets(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["createdAt", "id", "meshUrl", "name", "updatedAt", "userId"] - nullable_fields = ["id", "name", "userId"] - null_default_fields = [] - + optional_fields = set( + ["createdAt", "id", "meshUrl", "name", "updatedAt", "userId"] + ) + nullable_fields = set(["id", "name", "userId"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -163,6 +171,22 @@ class Get3DModelsByUserIDResponseBody(BaseModel): model_assets: Optional[List[Get3DModelsByUserIDModelAssets]] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["model_assets"]) + 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 Get3DModelsByUserIDResponseTypedDict(TypedDict): content_type: str @@ -187,3 +211,19 @@ class Get3DModelsByUserIDResponse(BaseModel): object: Optional[Get3DModelsByUserIDResponseBody] = None r"""Responses for GET /api/rest/v1/models-3d/user/{userId}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/getcustomelementsbyuserid.py b/src/leonardo_ai_sdk/models/operations/getcustomelementsbyuserid.py index d2216ce6..d68baf77 100644 --- a/src/leonardo_ai_sdk/models/operations/getcustomelementsbyuserid.py +++ b/src/leonardo_ai_sdk/models/operations/getcustomelementsbyuserid.py @@ -90,45 +90,42 @@ class GetCustomElementsByUserIDUserLoras(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "baseModel", - "createdAt", - "description", - "focus", - "id", - "instancePrompt", - "learningRate", - "name", - "resolution", - "status", - "trainTextEncoder", - "trainingEpoch", - "updatedAt", - ] - nullable_fields = ["instancePrompt"] - null_default_fields = [] - + optional_fields = set( + [ + "baseModel", + "createdAt", + "description", + "focus", + "id", + "instancePrompt", + "learningRate", + "name", + "resolution", + "status", + "trainTextEncoder", + "trainingEpoch", + "updatedAt", + ] + ) + nullable_fields = set(["instancePrompt"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -136,41 +133,40 @@ def serialize_model(self, handler): class GetCustomElementsByUserIDResponseBodyTypedDict(TypedDict): r"""Responses for GET /elements/user/{userId}.""" - user_loras: NotRequired[Nullable[List[GetCustomElementsByUserIDUserLorasTypedDict]]] + user_loras: NotRequired[ + Nullable[List[Nullable[GetCustomElementsByUserIDUserLorasTypedDict]]] + ] class GetCustomElementsByUserIDResponseBody(BaseModel): r"""Responses for GET /elements/user/{userId}.""" - user_loras: OptionalNullable[List[GetCustomElementsByUserIDUserLoras]] = UNSET + user_loras: OptionalNullable[List[Nullable[GetCustomElementsByUserIDUserLoras]]] = ( + UNSET + ) @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["user_loras"] - nullable_fields = ["user_loras"] - null_default_fields = [] - + optional_fields = set(["user_loras"]) + nullable_fields = set(["user_loras"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -198,3 +194,19 @@ class GetCustomElementsByUserIDResponse(BaseModel): object: Optional[GetCustomElementsByUserIDResponseBody] = None r"""Responses for GET /elements/user/{userId}.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/getcustommodelsbyuserid.py b/src/leonardo_ai_sdk/models/operations/getcustommodelsbyuserid.py index 3ac7e717..00060295 100644 --- a/src/leonardo_ai_sdk/models/operations/getcustommodelsbyuserid.py +++ b/src/leonardo_ai_sdk/models/operations/getcustommodelsbyuserid.py @@ -93,44 +93,41 @@ class GetCustomModelsByUserIDCustomModels(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "createdAt", - "description", - "id", - "instancePrompt", - "modelHeight", - "modelWidth", - "name", - "public", - "sdVersion", - "status", - "type", - "updatedAt", - ] - nullable_fields = ["id", "instancePrompt"] - null_default_fields = [] - + optional_fields = set( + [ + "createdAt", + "description", + "id", + "instancePrompt", + "modelHeight", + "modelWidth", + "name", + "public", + "sdVersion", + "status", + "type", + "updatedAt", + ] + ) + nullable_fields = set(["id", "instancePrompt"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -139,42 +136,39 @@ class GetCustomModelsByUserIDResponseBodyTypedDict(TypedDict): r"""Responses for GET /models/user/{userId}""" custom_models: NotRequired[ - Nullable[List[GetCustomModelsByUserIDCustomModelsTypedDict]] + Nullable[List[Nullable[GetCustomModelsByUserIDCustomModelsTypedDict]]] ] class GetCustomModelsByUserIDResponseBody(BaseModel): r"""Responses for GET /models/user/{userId}""" - custom_models: OptionalNullable[List[GetCustomModelsByUserIDCustomModels]] = UNSET + custom_models: OptionalNullable[ + List[Nullable[GetCustomModelsByUserIDCustomModels]] + ] = UNSET @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["custom_models"] - nullable_fields = ["custom_models"] - null_default_fields = [] - + optional_fields = set(["custom_models"]) + nullable_fields = set(["custom_models"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -202,3 +196,19 @@ class GetCustomModelsByUserIDResponse(BaseModel): object: Optional[GetCustomModelsByUserIDResponseBody] = None r"""Responses for GET /models/user/{userId}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/getdatasetbyid.py b/src/leonardo_ai_sdk/models/operations/getdatasetbyid.py index 9db40316..58eea998 100644 --- a/src/leonardo_ai_sdk/models/operations/getdatasetbyid.py +++ b/src/leonardo_ai_sdk/models/operations/getdatasetbyid.py @@ -47,31 +47,26 @@ class DatasetImages(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["createdAt", "id", "url"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["createdAt", "id", "url"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -104,38 +99,28 @@ class GetDatasetByIDDatasets(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "createdAt", - "dataset_images", - "description", - "id", - "name", - "updatedAt", - ] - nullable_fields = ["description", "id"] - null_default_fields = [] - + optional_fields = set( + ["createdAt", "dataset_images", "description", "id", "name", "updatedAt"] + ) + nullable_fields = set(["description", "id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -155,31 +140,26 @@ class GetDatasetByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["datasets_by_pk"] - nullable_fields = ["datasets_by_pk"] - null_default_fields = [] - + optional_fields = set(["datasets_by_pk"]) + nullable_fields = set(["datasets_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -207,3 +187,19 @@ class GetDatasetByIDResponse(BaseModel): object: Optional[GetDatasetByIDResponseBody] = None r"""Responses for GET /datasets/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/getelementbyid.py b/src/leonardo_ai_sdk/models/operations/getelementbyid.py index 5d4aad9c..bd64e86a 100644 --- a/src/leonardo_ai_sdk/models/operations/getelementbyid.py +++ b/src/leonardo_ai_sdk/models/operations/getelementbyid.py @@ -88,45 +88,42 @@ class GetElementByIDUserLoras(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "baseModel", - "createdAt", - "description", - "focus", - "id", - "instancePrompt", - "learningRate", - "name", - "resolution", - "status", - "trainTextEncoder", - "trainingEpoch", - "updatedAt", - ] - nullable_fields = ["instancePrompt"] - null_default_fields = [] - + optional_fields = set( + [ + "baseModel", + "createdAt", + "description", + "focus", + "id", + "instancePrompt", + "learningRate", + "name", + "resolution", + "status", + "trainTextEncoder", + "trainingEpoch", + "updatedAt", + ] + ) + nullable_fields = set(["instancePrompt"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -146,31 +143,26 @@ class GetElementByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["user_loras_by_pk"] - nullable_fields = ["user_loras_by_pk"] - null_default_fields = [] - + optional_fields = set(["user_loras_by_pk"]) + nullable_fields = set(["user_loras_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -198,3 +190,19 @@ class GetElementByIDResponse(BaseModel): object: Optional[GetElementByIDResponseBody] = None r"""Responses for GET /elements/{id}.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/getgenerationbyid.py b/src/leonardo_ai_sdk/models/operations/getgenerationbyid.py index 9f768e3c..54c09c14 100644 --- a/src/leonardo_ai_sdk/models/operations/getgenerationbyid.py +++ b/src/leonardo_ai_sdk/models/operations/getgenerationbyid.py @@ -64,31 +64,26 @@ class GetGenerationByIDGeneratedImageVariationGeneric(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id", "status", "transformType", "url"] - nullable_fields = ["id", "url"] - null_default_fields = [] - + optional_fields = set(["id", "status", "transformType", "url"]) + nullable_fields = set(["id", "url"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -162,51 +157,50 @@ class GeneratedImages(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "fantasyAvatar", - "generated_image_variation_generics", - "id", - "imageToVideo", - "likeCount", - "motion", - "motionMP4URL", - "motionModel", - "motionStrength", - "nsfw", - "url", - ] - nullable_fields = [ - "fantasyAvatar", - "id", - "imageToVideo", - "motion", - "motionMP4URL", - "motionModel", - "motionStrength", - ] - null_default_fields = [] - + optional_fields = set( + [ + "fantasyAvatar", + "generated_image_variation_generics", + "id", + "imageToVideo", + "likeCount", + "motion", + "motionMP4URL", + "motionModel", + "motionStrength", + "nsfw", + "url", + ] + ) + nullable_fields = set( + [ + "fantasyAvatar", + "id", + "imageToVideo", + "motion", + "motionMP4URL", + "motionModel", + "motionStrength", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -271,48 +265,47 @@ class GetGenerationByIDLoras(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "akUUID", - "baseModel", - "description", - "name", - "urlImage", - "weightDefault", - "weightMax", - "weightMin", - ] - nullable_fields = [ - "akUUID", - "description", - "name", - "urlImage", - "weightDefault", - "weightMax", - "weightMin", - ] - null_default_fields = [] - + optional_fields = set( + [ + "akUUID", + "baseModel", + "description", + "name", + "urlImage", + "weightDefault", + "weightMax", + "weightMin", + ] + ) + nullable_fields = set( + [ + "akUUID", + "description", + "name", + "urlImage", + "weightDefault", + "weightMax", + "weightMin", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -340,31 +333,26 @@ class GenerationElements(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id", "lora", "weightApplied"] - nullable_fields = ["id", "lora", "weightApplied"] - null_default_fields = [] - + optional_fields = set(["id", "lora", "weightApplied"]) + nullable_fields = set(["id", "lora", "weightApplied"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -496,71 +484,70 @@ class GetGenerationByIDGenerations(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "createdAt", - "generated_images", - "generation_elements", - "guidanceScale", - "id", - "imageHeight", - "imageWidth", - "inferenceSteps", - "initStrength", - "modelId", - "negativePrompt", - "photoReal", - "photoRealStrength", - "presetStyle", - "prompt", - "promptMagic", - "promptMagicStrength", - "promptMagicVersion", - "public", - "scheduler", - "sdVersion", - "seed", - "status", - "ultra", - ] - nullable_fields = [ - "guidanceScale", - "id", - "inferenceSteps", - "initStrength", - "modelId", - "negativePrompt", - "photoReal", - "photoRealStrength", - "presetStyle", - "promptMagic", - "promptMagicStrength", - "promptMagicVersion", - "seed", - "ultra", - ] - null_default_fields = [] - + optional_fields = set( + [ + "createdAt", + "generated_images", + "generation_elements", + "guidanceScale", + "id", + "imageHeight", + "imageWidth", + "inferenceSteps", + "initStrength", + "modelId", + "negativePrompt", + "photoReal", + "photoRealStrength", + "presetStyle", + "prompt", + "promptMagic", + "promptMagicStrength", + "promptMagicVersion", + "public", + "scheduler", + "sdVersion", + "seed", + "status", + "ultra", + ] + ) + nullable_fields = set( + [ + "guidanceScale", + "id", + "inferenceSteps", + "initStrength", + "modelId", + "negativePrompt", + "photoReal", + "photoRealStrength", + "presetStyle", + "promptMagic", + "promptMagicStrength", + "promptMagicVersion", + "seed", + "ultra", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -580,31 +567,26 @@ class GetGenerationByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["generations_by_pk"] - nullable_fields = ["generations_by_pk"] - null_default_fields = [] - + optional_fields = set(["generations_by_pk"]) + nullable_fields = set(["generations_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -632,3 +614,19 @@ class GetGenerationByIDResponse(BaseModel): object: Optional[GetGenerationByIDResponseBody] = None r"""Responses for GET /generations/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/getgenerationsbyuserid.py b/src/leonardo_ai_sdk/models/operations/getgenerationsbyuserid.py index a713bd1b..e80eb87d 100644 --- a/src/leonardo_ai_sdk/models/operations/getgenerationsbyuserid.py +++ b/src/leonardo_ai_sdk/models/operations/getgenerationsbyuserid.py @@ -46,6 +46,22 @@ class GetGenerationsByUserIDRequest(BaseModel): FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), ] = 0 + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["limit", "offset"]) + 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 GetGenerationsByUserIDGeneratedImageVariationGenericTypedDict(TypedDict): r"""columns and relationships of \"generated_image_variation_generic\" """ @@ -76,31 +92,26 @@ class GetGenerationsByUserIDGeneratedImageVariationGeneric(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id", "status", "transformType", "url"] - nullable_fields = ["id", "url"] - null_default_fields = [] - + optional_fields = set(["id", "status", "transformType", "url"]) + nullable_fields = set(["id", "url"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -167,49 +178,48 @@ class GetGenerationsByUserIDGeneratedImages(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "generated_image_variation_generics", - "id", - "imageToVideo", - "likeCount", - "motion", - "motionMP4URL", - "motionModel", - "motionStrength", - "nsfw", - "url", - ] - nullable_fields = [ - "id", - "imageToVideo", - "motion", - "motionMP4URL", - "motionModel", - "motionStrength", - ] - null_default_fields = [] - + optional_fields = set( + [ + "generated_image_variation_generics", + "id", + "imageToVideo", + "likeCount", + "motion", + "motionMP4URL", + "motionModel", + "motionStrength", + "nsfw", + "url", + ] + ) + nullable_fields = set( + [ + "id", + "imageToVideo", + "motion", + "motionMP4URL", + "motionModel", + "motionStrength", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -274,48 +284,47 @@ class Elements(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "akUUID", - "baseModel", - "description", - "name", - "urlImage", - "weightDefault", - "weightMax", - "weightMin", - ] - nullable_fields = [ - "akUUID", - "description", - "name", - "urlImage", - "weightDefault", - "weightMax", - "weightMin", - ] - null_default_fields = [] - + optional_fields = set( + [ + "akUUID", + "baseModel", + "description", + "name", + "urlImage", + "weightDefault", + "weightMax", + "weightMin", + ] + ) + nullable_fields = set( + [ + "akUUID", + "description", + "name", + "urlImage", + "weightDefault", + "weightMax", + "weightMin", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -343,31 +352,26 @@ class GetGenerationsByUserIDGenerationElements(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id", "lora", "weightApplied"] - nullable_fields = ["id", "lora", "weightApplied"] - null_default_fields = [] - + optional_fields = set(["id", "lora", "weightApplied"]) + nullable_fields = set(["id", "lora", "weightApplied"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -501,71 +505,70 @@ class GetGenerationsByUserIDGenerations(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "createdAt", - "generated_images", - "generation_elements", - "guidanceScale", - "id", - "imageHeight", - "imageWidth", - "inferenceSteps", - "initStrength", - "modelId", - "negativePrompt", - "photoReal", - "photoRealStrength", - "presetStyle", - "prompt", - "promptMagic", - "promptMagicStrength", - "promptMagicVersion", - "public", - "scheduler", - "sdVersion", - "seed", - "status", - "ultra", - ] - nullable_fields = [ - "guidanceScale", - "id", - "inferenceSteps", - "initStrength", - "modelId", - "negativePrompt", - "photoReal", - "photoRealStrength", - "presetStyle", - "promptMagic", - "promptMagicStrength", - "promptMagicVersion", - "seed", - "ultra", - ] - null_default_fields = [] - + optional_fields = set( + [ + "createdAt", + "generated_images", + "generation_elements", + "guidanceScale", + "id", + "imageHeight", + "imageWidth", + "inferenceSteps", + "initStrength", + "modelId", + "negativePrompt", + "photoReal", + "photoRealStrength", + "presetStyle", + "prompt", + "promptMagic", + "promptMagicStrength", + "promptMagicVersion", + "public", + "scheduler", + "sdVersion", + "seed", + "status", + "ultra", + ] + ) + nullable_fields = set( + [ + "guidanceScale", + "id", + "inferenceSteps", + "initStrength", + "modelId", + "negativePrompt", + "photoReal", + "photoRealStrength", + "presetStyle", + "promptMagic", + "promptMagicStrength", + "promptMagicVersion", + "seed", + "ultra", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -581,6 +584,22 @@ class GetGenerationsByUserIDResponseBody(BaseModel): generations: Optional[List[GetGenerationsByUserIDGenerations]] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["generations"]) + 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 GetGenerationsByUserIDResponseTypedDict(TypedDict): content_type: str @@ -605,3 +624,19 @@ class GetGenerationsByUserIDResponse(BaseModel): object: Optional[GetGenerationsByUserIDResponseBody] = None r"""Responses for GET /generations/user/{userId}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/getinitimagebyid.py b/src/leonardo_ai_sdk/models/operations/getinitimagebyid.py index e3aeeb89..4ee4b302 100644 --- a/src/leonardo_ai_sdk/models/operations/getinitimagebyid.py +++ b/src/leonardo_ai_sdk/models/operations/getinitimagebyid.py @@ -47,31 +47,26 @@ class GetInitImageByIDInitImages(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["createdAt", "id", "url"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["createdAt", "id", "url"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -91,31 +86,26 @@ class GetInitImageByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["init_images_by_pk"] - nullable_fields = ["init_images_by_pk"] - null_default_fields = [] - + optional_fields = set(["init_images_by_pk"]) + nullable_fields = set(["init_images_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -143,3 +133,19 @@ class GetInitImageByIDResponse(BaseModel): object: Optional[GetInitImageByIDResponseBody] = None r"""Responses for GET /init-image/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/getmodelbyid.py b/src/leonardo_ai_sdk/models/operations/getmodelbyid.py index 098a31ce..b5fef15f 100644 --- a/src/leonardo_ai_sdk/models/operations/getmodelbyid.py +++ b/src/leonardo_ai_sdk/models/operations/getmodelbyid.py @@ -91,44 +91,41 @@ class GetModelByIDCustomModels(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "createdAt", - "description", - "id", - "instancePrompt", - "modelHeight", - "modelWidth", - "name", - "public", - "sdVersion", - "status", - "type", - "updatedAt", - ] - nullable_fields = ["id", "instancePrompt"] - null_default_fields = [] - + optional_fields = set( + [ + "createdAt", + "description", + "id", + "instancePrompt", + "modelHeight", + "modelWidth", + "name", + "public", + "sdVersion", + "status", + "type", + "updatedAt", + ] + ) + nullable_fields = set(["id", "instancePrompt"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -148,31 +145,26 @@ class GetModelByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["custom_models_by_pk"] - nullable_fields = ["custom_models_by_pk"] - null_default_fields = [] - + optional_fields = set(["custom_models_by_pk"]) + nullable_fields = set(["custom_models_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -200,3 +192,19 @@ class GetModelByIDResponse(BaseModel): object: Optional[GetModelByIDResponseBody] = None r"""Responses for GET /models/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/getmotionvariationbyid.py b/src/leonardo_ai_sdk/models/operations/getmotionvariationbyid.py new file mode 100644 index 00000000..e50d0e07 --- /dev/null +++ b/src/leonardo_ai_sdk/models/operations/getmotionvariationbyid.py @@ -0,0 +1,169 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +import httpx +from leonardo_ai_sdk.models.shared import ( + job_status as shared_job_status, + motion_resolution as shared_motion_resolution, + motion_variation_type as shared_motion_variation_type, +) +from leonardo_ai_sdk.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from leonardo_ai_sdk.utils import FieldMetadata, PathParamMetadata +import pydantic +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class GetMotionVariationByIDRequestTypedDict(TypedDict): + id: str + r"""\"id\" is required""" + + +class GetMotionVariationByIDRequest(BaseModel): + id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""\"id\" is required""" + + +class GeneratedImageVariationMotionTypedDict(TypedDict): + r"""columns and relationships of \"generated_image_variation_motion\" """ + + created_at: NotRequired[str] + id: NotRequired[Nullable[str]] + motion_transform_type: NotRequired[shared_motion_variation_type.MotionVariationType] + r"""The type of motion variation.""" + resolution: NotRequired[shared_motion_resolution.MotionResolution] + r"""The resolution of the upscaled video. RESOLUTION_720 is the only option for now.""" + status: NotRequired[shared_job_status.JobStatus] + r"""The status of the current task.""" + url: NotRequired[Nullable[str]] + + +class GeneratedImageVariationMotion(BaseModel): + r"""columns and relationships of \"generated_image_variation_motion\" """ + + created_at: Annotated[Optional[str], pydantic.Field(alias="createdAt")] = None + + id: OptionalNullable[str] = UNSET + + motion_transform_type: Annotated[ + Optional[shared_motion_variation_type.MotionVariationType], + pydantic.Field(alias="motionTransformType"), + ] = None + r"""The type of motion variation.""" + + resolution: Optional[shared_motion_resolution.MotionResolution] = None + r"""The resolution of the upscaled video. RESOLUTION_720 is the only option for now.""" + + status: Optional[shared_job_status.JobStatus] = None + r"""The status of the current task.""" + + url: OptionalNullable[str] = UNSET + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + ["createdAt", "id", "motionTransformType", "resolution", "status", "url"] + ) + nullable_fields = set(["id", "url"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + 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 + + +class GetMotionVariationByIDResponseBodyTypedDict(TypedDict): + r"""Responses for GET /motion-variations/{id}""" + + generated_image_variation_motion: NotRequired[ + List[GeneratedImageVariationMotionTypedDict] + ] + + +class GetMotionVariationByIDResponseBody(BaseModel): + r"""Responses for GET /motion-variations/{id}""" + + generated_image_variation_motion: Optional[List[GeneratedImageVariationMotion]] = ( + None + ) + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["generated_image_variation_motion"]) + 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 GetMotionVariationByIDResponseTypedDict(TypedDict): + content_type: str + r"""HTTP response content type for this operation""" + status_code: int + r"""HTTP response status code for this operation""" + raw_response: httpx.Response + r"""Raw HTTP response; suitable for custom response parsing""" + object: NotRequired[GetMotionVariationByIDResponseBodyTypedDict] + r"""Responses for GET /motion-variations/{id}""" + + +class GetMotionVariationByIDResponse(BaseModel): + content_type: str + r"""HTTP response content type for this operation""" + + status_code: int + r"""HTTP response status code for this operation""" + + raw_response: httpx.Response + r"""Raw HTTP response; suitable for custom response parsing""" + + object: Optional[GetMotionVariationByIDResponseBody] = None + r"""Responses for GET /motion-variations/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/gettexturegenerationbyid.py b/src/leonardo_ai_sdk/models/operations/gettexturegenerationbyid.py index 3fa1177c..c9e336ab 100644 --- a/src/leonardo_ai_sdk/models/operations/gettexturegenerationbyid.py +++ b/src/leonardo_ai_sdk/models/operations/gettexturegenerationbyid.py @@ -38,31 +38,26 @@ class GetTextureGenerationByIDRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -98,6 +93,22 @@ class GetTextureGenerationByIDRequest(BaseModel): FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), ] = 0 + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["RequestBody", "limit", "offset"]) + 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 ModelAssetTextureImagesTypedDict(TypedDict): r"""columns and relationships of \"model_asset_texture_images\" """ @@ -122,31 +133,26 @@ class ModelAssetTextureImages(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id", "type", "url"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id", "type", "url"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -188,39 +194,36 @@ class GetTextureGenerationByIDModelAssetTextureGenerations(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "createdAt", - "id", - "model_asset_texture_images", - "negativePrompt", - "prompt", - "seed", - "status", - ] - nullable_fields = ["id", "negativePrompt", "seed"] - null_default_fields = [] - + optional_fields = set( + [ + "createdAt", + "id", + "model_asset_texture_images", + "negativePrompt", + "prompt", + "seed", + "status", + ] + ) + nullable_fields = set(["id", "negativePrompt", "seed"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -244,31 +247,26 @@ class GetTextureGenerationByIDResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["model_asset_texture_generations_by_pk"] - nullable_fields = ["model_asset_texture_generations_by_pk"] - null_default_fields = [] - + optional_fields = set(["model_asset_texture_generations_by_pk"]) + nullable_fields = set(["model_asset_texture_generations_by_pk"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -296,3 +294,19 @@ class GetTextureGenerationByIDResponse(BaseModel): object: Optional[GetTextureGenerationByIDResponseBody] = None r"""Responses for GET /api/rest/v1/generations-texture/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/gettexturegenerationsbymodelid.py b/src/leonardo_ai_sdk/models/operations/gettexturegenerationsbymodelid.py index 86d5da34..ef05a863 100644 --- a/src/leonardo_ai_sdk/models/operations/gettexturegenerationsbymodelid.py +++ b/src/leonardo_ai_sdk/models/operations/gettexturegenerationsbymodelid.py @@ -44,31 +44,26 @@ class GetTextureGenerationsByModelIDRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["limit", "modelId", "offset"] - nullable_fields = ["limit", "modelId", "offset"] - null_default_fields = [] - + optional_fields = set(["limit", "modelId", "offset"]) + nullable_fields = set(["limit", "modelId", "offset"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -106,6 +101,22 @@ class GetTextureGenerationsByModelIDRequest(BaseModel): FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), ] = 0 + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["RequestBody", "limit", "offset"]) + 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 GetTextureGenerationsByModelIDModelAssetTextureImagesTypedDict(TypedDict): r"""columns and relationships of \"model_asset_texture_images\" """ @@ -130,31 +141,26 @@ class GetTextureGenerationsByModelIDModelAssetTextureImages(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id", "type", "url"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id", "type", "url"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -200,39 +206,36 @@ class GetTextureGenerationsByModelIDModelAssetTextureGenerations(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "createdAt", - "id", - "model_asset_texture_images", - "negativePrompt", - "prompt", - "seed", - "status", - ] - nullable_fields = ["id", "negativePrompt", "seed"] - null_default_fields = [] - + optional_fields = set( + [ + "createdAt", + "id", + "model_asset_texture_images", + "negativePrompt", + "prompt", + "seed", + "status", + ] + ) + nullable_fields = set(["id", "negativePrompt", "seed"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -252,6 +255,22 @@ class GetTextureGenerationsByModelIDResponseBody(BaseModel): List[GetTextureGenerationsByModelIDModelAssetTextureGenerations] ] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["model_asset_texture_generations"]) + 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 GetTextureGenerationsByModelIDResponseTypedDict(TypedDict): content_type: str @@ -276,3 +295,19 @@ class GetTextureGenerationsByModelIDResponse(BaseModel): object: Optional[GetTextureGenerationsByModelIDResponseBody] = None r"""Responses for GET /api/rest/v1/generations-texture/model/{modelId}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/getuserself.py b/src/leonardo_ai_sdk/models/operations/getuserself.py index f0818524..22ca8728 100644 --- a/src/leonardo_ai_sdk/models/operations/getuserself.py +++ b/src/leonardo_ai_sdk/models/operations/getuserself.py @@ -33,31 +33,26 @@ class Users(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id", "username"] - nullable_fields = ["id", "username"] - null_default_fields = [] - + optional_fields = set(["id", "username"]) + nullable_fields = set(["id", "username"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -140,48 +135,47 @@ class UserDetails(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "apiConcurrencySlots", - "apiPaidTokens", - "apiPlanTokenRenewalDate", - "apiSubscriptionTokens", - "paidTokens", - "subscriptionGptTokens", - "subscriptionModelTokens", - "subscriptionTokens", - "tokenRenewalDate", - "user", - ] - nullable_fields = [ - "apiPaidTokens", - "apiPlanTokenRenewalDate", - "paidTokens", - "tokenRenewalDate", - "user", - ] - null_default_fields = [] - + optional_fields = set( + [ + "apiConcurrencySlots", + "apiPaidTokens", + "apiPlanTokenRenewalDate", + "apiSubscriptionTokens", + "paidTokens", + "subscriptionGptTokens", + "subscriptionModelTokens", + "subscriptionTokens", + "tokenRenewalDate", + "user", + ] + ) + nullable_fields = set( + [ + "apiPaidTokens", + "apiPlanTokenRenewalDate", + "paidTokens", + "tokenRenewalDate", + "user", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -197,6 +191,22 @@ class GetUserSelfResponseBody(BaseModel): user_details: Optional[List[UserDetails]] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["user_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 + class GetUserSelfResponseTypedDict(TypedDict): content_type: str @@ -221,3 +231,19 @@ class GetUserSelfResponse(BaseModel): object: Optional[GetUserSelfResponseBody] = None r"""Responses for GET /me""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/getvariationbyid.py b/src/leonardo_ai_sdk/models/operations/getvariationbyid.py index e648b78b..a9880c88 100644 --- a/src/leonardo_ai_sdk/models/operations/getvariationbyid.py +++ b/src/leonardo_ai_sdk/models/operations/getvariationbyid.py @@ -64,31 +64,26 @@ class GeneratedImageVariationGeneric(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["createdAt", "id", "status", "transformType", "url"] - nullable_fields = ["id", "url"] - null_default_fields = [] - + optional_fields = set(["createdAt", "id", "status", "transformType", "url"]) + nullable_fields = set(["id", "url"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -108,6 +103,22 @@ class GetVariationByIDResponseBody(BaseModel): List[GeneratedImageVariationGeneric] ] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["generated_image_variation_generic"]) + 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 GetVariationByIDResponseTypedDict(TypedDict): content_type: str @@ -132,3 +143,19 @@ class GetVariationByIDResponse(BaseModel): object: Optional[GetVariationByIDResponseBody] = None r"""Responses for GET /variations/{id}""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/listelements.py b/src/leonardo_ai_sdk/models/operations/listelements.py index 4b6abd56..75f0b999 100644 --- a/src/leonardo_ai_sdk/models/operations/listelements.py +++ b/src/leonardo_ai_sdk/models/operations/listelements.py @@ -83,50 +83,49 @@ class Loras(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "akUUID", - "baseModel", - "creatorName", - "description", - "name", - "urlImage", - "weightDefault", - "weightMax", - "weightMin", - ] - nullable_fields = [ - "akUUID", - "creatorName", - "description", - "name", - "urlImage", - "weightDefault", - "weightMax", - "weightMin", - ] - null_default_fields = [] - + optional_fields = set( + [ + "akUUID", + "baseModel", + "creatorName", + "description", + "name", + "urlImage", + "weightDefault", + "weightMax", + "weightMin", + ] + ) + nullable_fields = set( + [ + "akUUID", + "creatorName", + "description", + "name", + "urlImage", + "weightDefault", + "weightMax", + "weightMin", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -142,6 +141,22 @@ class ListElementsResponseBody(BaseModel): loras: Optional[List[Loras]] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["loras"]) + 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 ListElementsResponseTypedDict(TypedDict): content_type: str @@ -166,3 +181,19 @@ class ListElementsResponse(BaseModel): object: Optional[ListElementsResponseBody] = None r"""Responses for GET /api/rest/v1/elements.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/listplatformmodels.py b/src/leonardo_ai_sdk/models/operations/listplatformmodels.py index 1c00ae1c..4e5893da 100644 --- a/src/leonardo_ai_sdk/models/operations/listplatformmodels.py +++ b/src/leonardo_ai_sdk/models/operations/listplatformmodels.py @@ -30,31 +30,26 @@ class ListPlatformModelsGeneratedImages(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id", "url"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id", "url"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -89,38 +84,28 @@ class ListPlatformModelsCustomModels(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "description", - "featured", - "generated_image", - "id", - "name", - "nsfw", - ] - nullable_fields = ["generated_image", "id"] - null_default_fields = [] - + optional_fields = set( + ["description", "featured", "generated_image", "id", "name", "nsfw"] + ) + nullable_fields = set(["generated_image", "id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -136,6 +121,22 @@ class ListPlatformModelsResponseBody(BaseModel): custom_models: Optional[List[ListPlatformModelsCustomModels]] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["custom_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 + class ListPlatformModelsResponseTypedDict(TypedDict): content_type: str @@ -160,3 +161,19 @@ class ListPlatformModelsResponse(BaseModel): object: Optional[ListPlatformModelsResponseBody] = None r"""Responses for GET /api/rest/v1/platformModels""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/performalchemyupscalelcm.py b/src/leonardo_ai_sdk/models/operations/performalchemyupscalelcm.py index cafe907b..b6b34e3e 100644 --- a/src/leonardo_ai_sdk/models/operations/performalchemyupscalelcm.py +++ b/src/leonardo_ai_sdk/models/operations/performalchemyupscalelcm.py @@ -92,52 +92,51 @@ class PerformAlchemyUpscaleLCMRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "guidance", - "height", - "refineCreative", - "refineStrength", - "requestTimestamp", - "seed", - "steps", - "strength", - "style", - "width", - ] - nullable_fields = [ - "guidance", - "height", - "refineCreative", - "refineStrength", - "seed", - "steps", - "strength", - "style", - "width", - ] - null_default_fields = [] - + optional_fields = set( + [ + "guidance", + "height", + "refineCreative", + "refineStrength", + "requestTimestamp", + "seed", + "steps", + "strength", + "style", + "width", + ] + ) + nullable_fields = set( + [ + "guidance", + "height", + "refineCreative", + "refineStrength", + "seed", + "steps", + "strength", + "style", + "width", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -180,38 +179,35 @@ class PerformAlchemyUpscaleLCMLCMGenerationOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "apiCreditCost", - "generatedImageId", - "generationId", - "imageDataUrl", - "requestTimestamp", - "variationId", - ] - nullable_fields = ["apiCreditCost"] - null_default_fields = [] - + optional_fields = set( + [ + "apiCreditCost", + "generatedImageId", + "generationId", + "imageDataUrl", + "requestTimestamp", + "variationId", + ] + ) + nullable_fields = set(["apiCreditCost"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -234,31 +230,26 @@ class PerformAlchemyUpscaleLCMResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["lcmGenerationJob"] - nullable_fields = ["lcmGenerationJob"] - null_default_fields = [] - + optional_fields = set(["lcmGenerationJob"]) + nullable_fields = set(["lcmGenerationJob"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -286,3 +277,19 @@ class PerformAlchemyUpscaleLCMResponse(BaseModel): object: Optional[PerformAlchemyUpscaleLCMResponseBody] = None r"""Responses for POST /lcm-upscale""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/performinpaintinglcm.py b/src/leonardo_ai_sdk/models/operations/performinpaintinglcm.py index 1a074e87..a5578027 100644 --- a/src/leonardo_ai_sdk/models/operations/performinpaintinglcm.py +++ b/src/leonardo_ai_sdk/models/operations/performinpaintinglcm.py @@ -83,48 +83,39 @@ class PerformInpaintingLCMRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "guidance", - "height", - "requestTimestamp", - "seed", - "steps", - "strength", - "style", - "width", - ] - nullable_fields = [ - "guidance", - "height", - "seed", - "steps", - "strength", - "style", - "width", - ] - null_default_fields = [] - + optional_fields = set( + [ + "guidance", + "height", + "requestTimestamp", + "seed", + "steps", + "strength", + "style", + "width", + ] + ) + nullable_fields = set( + ["guidance", "height", "seed", "steps", "strength", "style", "width"] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -152,31 +143,26 @@ class PerformInpaintingLCMLCMGenerationOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["apiCreditCost", "imageDataUrl", "requestTimestamp"] - nullable_fields = ["apiCreditCost"] - null_default_fields = [] - + optional_fields = set(["apiCreditCost", "imageDataUrl", "requestTimestamp"]) + nullable_fields = set(["apiCreditCost"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -199,31 +185,26 @@ class PerformInpaintingLCMResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["lcmGenerationJob"] - nullable_fields = ["lcmGenerationJob"] - null_default_fields = [] - + optional_fields = set(["lcmGenerationJob"]) + nullable_fields = set(["lcmGenerationJob"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -251,3 +232,19 @@ class PerformInpaintingLCMResponse(BaseModel): object: Optional[PerformInpaintingLCMResponseBody] = None r"""Responses for POST /lcm-inpainting""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/performinstantrefine.py b/src/leonardo_ai_sdk/models/operations/performinstantrefine.py index b40e1de8..5418ae86 100644 --- a/src/leonardo_ai_sdk/models/operations/performinstantrefine.py +++ b/src/leonardo_ai_sdk/models/operations/performinstantrefine.py @@ -78,48 +78,39 @@ class PerformInstantRefineRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "guidance", - "height", - "requestTimestamp", - "seed", - "steps", - "strength", - "style", - "width", - ] - nullable_fields = [ - "guidance", - "height", - "seed", - "steps", - "strength", - "style", - "width", - ] - null_default_fields = [] - + optional_fields = set( + [ + "guidance", + "height", + "requestTimestamp", + "seed", + "steps", + "strength", + "style", + "width", + ] + ) + nullable_fields = set( + ["guidance", "height", "seed", "steps", "strength", "style", "width"] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -147,31 +138,26 @@ class PerformInstantRefineLcmGenerationOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["apiCreditCost", "imageDataUrl", "requestTimestamp"] - nullable_fields = ["apiCreditCost"] - null_default_fields = [] - + optional_fields = set(["apiCreditCost", "imageDataUrl", "requestTimestamp"]) + nullable_fields = set(["apiCreditCost"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -194,31 +180,26 @@ class PerformInstantRefineResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["lcmGenerationJob"] - nullable_fields = ["lcmGenerationJob"] - null_default_fields = [] - + optional_fields = set(["lcmGenerationJob"]) + nullable_fields = set(["lcmGenerationJob"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -246,3 +227,19 @@ class PerformInstantRefineResponse(BaseModel): object: Optional[PerformInstantRefineResponseBody] = None r"""Responses for POST /lcm-instant-refine""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/pricingcalculator.py b/src/leonardo_ai_sdk/models/operations/pricingcalculator.py index 1d487502..6c777f26 100644 --- a/src/leonardo_ai_sdk/models/operations/pricingcalculator.py +++ b/src/leonardo_ai_sdk/models/operations/pricingcalculator.py @@ -1,6 +1,7 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from enum import Enum import httpx from leonardo_ai_sdk.models.shared import ( pricingcalculatorservices as shared_pricingcalculatorservices, @@ -18,7 +19,7 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class PricingCalculatorObjectTypedDict(TypedDict): +class PricingCalculatorPricingCalculatorObjectTypedDict(TypedDict): r"""Parameters for FANTASY_AVATAR_GENERATION service""" image_height: NotRequired[int] @@ -29,7 +30,7 @@ class PricingCalculatorObjectTypedDict(TypedDict): r"""The number of images to generate. Must be between 1 and 8. If either width or height is over 768, must be between 1 and 4.""" -class PricingCalculatorObject(BaseModel): +class PricingCalculatorPricingCalculatorObject(BaseModel): r"""Parameters for FANTASY_AVATAR_GENERATION service""" image_height: Annotated[Optional[int], pydantic.Field(alias="imageHeight")] = None @@ -41,8 +42,24 @@ class PricingCalculatorObject(BaseModel): num_images: Annotated[Optional[int], pydantic.Field(alias="numImages")] = None r"""The number of images to generate. Must be between 1 and 8. If either width or height is over 768, must be between 1 and 4.""" + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["imageHeight", "imageWidth", "numImages"]) + serialized = handler(self) + m = {} -class PricingCalculatorPricingCalculatorObjectTypedDict(TypedDict): + 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 PricingCalculatorPricingCalculatorRequestObjectTypedDict(TypedDict): r"""Parameters for IMAGE_GENERATION service""" alchemy_mode: NotRequired[bool] @@ -57,6 +74,12 @@ class PricingCalculatorPricingCalculatorObjectTypedDict(TypedDict): r"""The input height of the images. Must be between 32 and 1024 and be a multiple of 8. Note: Input resolution is not always the same as output resolution due to upscaling from other features""" inference_steps: NotRequired[int] r"""The Step Count to use for the generation. Must be between 10 and 60.""" + is_flux_dev: NotRequired[Nullable[bool]] + r"""Enable to use Flux Dev model.""" + is_flux_kontext: NotRequired[Nullable[bool]] + r"""Enable to use Flux Kontext model.""" + is_flux_schnell: NotRequired[Nullable[bool]] + r"""Enable to use Flux Schnell model.""" is_model_custom: NotRequired[Nullable[bool]] r"""Enable to use custom model.""" is_phoenix: NotRequired[Nullable[bool]] @@ -65,6 +88,8 @@ class PricingCalculatorPricingCalculatorObjectTypedDict(TypedDict): r"""Enable to use SDXL model.""" is_sdxl_lightning: NotRequired[Nullable[bool]] r"""Enable to use SDXL Lightning model.""" + is_ultra: NotRequired[Nullable[bool]] + r"""Enable to use Ultra mode.""" lora_count: NotRequired[Nullable[int]] r"""The number of elements used for the generation.""" num_images: NotRequired[int] @@ -81,11 +106,9 @@ class PricingCalculatorPricingCalculatorObjectTypedDict(TypedDict): r"""Strength of prompt magic. Must be a float between 0.1 and 1.0""" prompt_magic_version: NotRequired[Nullable[str]] r"""Prompt magic version v2 or v3, for use when promptMagic: true""" - ultra: NotRequired[Nullable[bool]] - r"""Enable to use Ultra mode.""" -class PricingCalculatorPricingCalculatorObject(BaseModel): +class PricingCalculatorPricingCalculatorRequestObject(BaseModel): r"""Parameters for IMAGE_GENERATION service""" alchemy_mode: Annotated[Optional[bool], pydantic.Field(alias="alchemyMode")] = None @@ -112,6 +135,21 @@ class PricingCalculatorPricingCalculatorObject(BaseModel): ] = None r"""The Step Count to use for the generation. Must be between 10 and 60.""" + is_flux_dev: Annotated[ + OptionalNullable[bool], pydantic.Field(alias="isFluxDev") + ] = UNSET + r"""Enable to use Flux Dev model.""" + + is_flux_kontext: Annotated[ + OptionalNullable[bool], pydantic.Field(alias="isFluxKontext") + ] = UNSET + r"""Enable to use Flux Kontext model.""" + + is_flux_schnell: Annotated[ + OptionalNullable[bool], pydantic.Field(alias="isFluxSchnell") + ] = UNSET + r"""Enable to use Flux Schnell model.""" + is_model_custom: Annotated[ OptionalNullable[bool], pydantic.Field(alias="isModelCustom") ] = UNSET @@ -130,6 +168,9 @@ class PricingCalculatorPricingCalculatorObject(BaseModel): ] = UNSET r"""Enable to use SDXL Lightning model.""" + is_ultra: Annotated[OptionalNullable[bool], pydantic.Field(alias="isUltra")] = UNSET + r"""Enable to use Ultra mode.""" + lora_count: Annotated[OptionalNullable[int], pydantic.Field(alias="loraCount")] = ( UNSET ) @@ -168,75 +209,77 @@ class PricingCalculatorPricingCalculatorObject(BaseModel): ] = UNSET r"""Prompt magic version v2 or v3, for use when promptMagic: true""" - ultra: OptionalNullable[bool] = UNSET - r"""Enable to use Ultra mode.""" - @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "alchemyMode", - "controlnetsCost", - "highResolution", - "imageHeight", - "imageWidth", - "inferenceSteps", - "isModelCustom", - "isPhoenix", - "isSDXL", - "isSDXLLightning", - "loraCount", - "numImages", - "photoRealMode", - "photoRealStrength", - "photoRealVersion", - "promptMagic", - "promptMagicStrength", - "promptMagicVersion", - "ultra", - ] - nullable_fields = [ - "controlnetsCost", - "isModelCustom", - "isPhoenix", - "isSDXL", - "isSDXLLightning", - "loraCount", - "photoRealMode", - "photoRealStrength", - "photoRealVersion", - "promptMagic", - "promptMagicStrength", - "promptMagicVersion", - "ultra", - ] - null_default_fields = [] - + optional_fields = set( + [ + "alchemyMode", + "controlnetsCost", + "highResolution", + "imageHeight", + "imageWidth", + "inferenceSteps", + "isFluxDev", + "isFluxKontext", + "isFluxSchnell", + "isModelCustom", + "isPhoenix", + "isSDXL", + "isSDXLLightning", + "isUltra", + "loraCount", + "numImages", + "photoRealMode", + "photoRealStrength", + "photoRealVersion", + "promptMagic", + "promptMagicStrength", + "promptMagicVersion", + ] + ) + nullable_fields = set( + [ + "controlnetsCost", + "isFluxDev", + "isFluxKontext", + "isFluxSchnell", + "isModelCustom", + "isPhoenix", + "isSDXL", + "isSDXLLightning", + "isUltra", + "loraCount", + "photoRealMode", + "photoRealStrength", + "photoRealVersion", + "promptMagic", + "promptMagicStrength", + "promptMagicVersion", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 -class PricingCalculatorPricingCalculatorRequestObjectTypedDict(TypedDict): +class PricingCalculatorPricingCalculatorRequestRequestBodyObjectTypedDict(TypedDict): r"""Parameters for LCM_GENERATION service""" height: NotRequired[Nullable[int]] @@ -249,7 +292,7 @@ class PricingCalculatorPricingCalculatorRequestObjectTypedDict(TypedDict): r"""The output width of the image. Must be 512, 640 or 1024.""" -class PricingCalculatorPricingCalculatorRequestObject(BaseModel): +class PricingCalculatorPricingCalculatorRequestRequestBodyObject(BaseModel): r"""Parameters for LCM_GENERATION service""" height: OptionalNullable[int] = UNSET @@ -268,67 +311,135 @@ class PricingCalculatorPricingCalculatorRequestObject(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["height", "instantRefine", "refine", "width"] - nullable_fields = ["height", "instantRefine", "refine", "width"] - null_default_fields = [] - + optional_fields = set(["height", "instantRefine", "refine", "width"]) + nullable_fields = set(["height", "instantRefine", "refine", "width"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + for n, f in type(self).model_fields.items(): k = f.alias or n val = serialized.get(k) - serialized.pop(k, None) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val - optional_nullable = k in optional_fields and k in nullable_fields - is_set = ( - self.__pydantic_fields_set__.intersection({n}) - or k in null_default_fields - ) # pylint: disable=no-member + return m - if val is not 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 - return m +class SdVersion(str, Enum): + r"""The model for the training. Can be set to 'FLUX_DEV' for FLUX_DEV specific pricing or can be omitted.""" + FLUX_DEV = "FLUX_DEV" -class PricingCalculatorPricingCalculatorRequestRequestBodyObjectTypedDict(TypedDict): + +class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObjectTypedDict( + TypedDict +): r"""Parameters for MODEL_TRAINING service""" + dataset_image_count: NotRequired[Nullable[int]] + r"""The number of images in the training dataset when sd_version is set to 'FLUX_DEV'. Must be between 1 and 50.""" resolution: NotRequired[int] - r"""The resolution for training. Must be 512 or 768.""" + r"""The resolution for training. Must be 512, 768, or 1024.""" + sd_version: NotRequired[Nullable[SdVersion]] + r"""The model for the training. Can be set to 'FLUX_DEV' for FLUX_DEV specific pricing or can be omitted.""" -class PricingCalculatorPricingCalculatorRequestRequestBodyObject(BaseModel): +class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObject( + BaseModel +): r"""Parameters for MODEL_TRAINING service""" + dataset_image_count: Annotated[ + OptionalNullable[int], pydantic.Field(alias="datasetImageCount") + ] = UNSET + r"""The number of images in the training dataset when sd_version is set to 'FLUX_DEV'. Must be between 1 and 50.""" + resolution: Optional[int] = None - r"""The resolution for training. Must be 512 or 768.""" + r"""The resolution for training. Must be 512, 768, or 1024.""" + sd_version: OptionalNullable[SdVersion] = UNSET + r"""The model for the training. Can be set to 'FLUX_DEV' for FLUX_DEV specific pricing or can be omitted.""" -class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObjectTypedDict( + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["datasetImageCount", "resolution", "sd_version"]) + nullable_fields = set(["datasetImageCount", "sd_version"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + 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 + + +class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONSVDGENERATIONObjectTypedDict( TypedDict ): - r"""Parameters for MOTION_GENERATION service""" + r"""Parameters for MOTION_SVD_GENERATION service""" - duration_seconds: NotRequired[int] - r"""The total duration of the motion generation in seconds.""" +class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONSVDGENERATIONObject( + BaseModel +): + r"""Parameters for MOTION_SVD_GENERATION service""" -class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObject( + +class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONVIDEOGENERATIONObjectTypedDict( + TypedDict +): + r"""Parameters for MOTION_VIDEO_GENERATION service""" + + resolution: NotRequired[str] + r"""The resolution of the video. Must be RESOLUTION_480 or RESOLUTION_720.""" + + +class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONVIDEOGENERATIONObject( BaseModel ): - r"""Parameters for MOTION_GENERATION service""" + r"""Parameters for MOTION_VIDEO_GENERATION service""" - duration_seconds: Annotated[ - Optional[int], pydantic.Field(alias="durationSeconds") - ] = None - r"""The total duration of the motion generation in seconds.""" + resolution: Optional[str] = None + r"""The resolution of the video. Must be RESOLUTION_480 or RESOLUTION_720.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["resolution"]) + 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 PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsTEXTUREGENERATIONObjectTypedDict( @@ -346,6 +457,22 @@ class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsTEXTUREGE preview: Optional[bool] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["preview"]) + 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 PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERObjectTypedDict( TypedDict @@ -364,6 +491,22 @@ class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSAL megapixel: Optional[int] = None r"""The maximum upscaled image size is 20 megapixels.""" + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["megapixel"]) + 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 PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSALUPSCALERULTRAObjectTypedDict( TypedDict @@ -391,33 +534,99 @@ class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsUNIVERSAL upscale_multiplier: Annotated[ Optional[float], pydantic.Field(alias="upscaleMultiplier") - ] = 1.5 + ] = None r"""The upscale multiplier of the universal upscaler. Must be between 1.00 and 2.00.""" + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["inputHeight", "inputWidth", "upscaleMultiplier"]) + 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 PricingCalculatorString(str, Enum): + r"""The resolution of the video. Supported resolution for VEO3 is RESOLUTION_720.""" + + RESOLUTION_720 = "RESOLUTION_720" + + +class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsVeo3MOTIONVIDEOGENERATIONObjectTypedDict( + TypedDict +): + r"""Parameters for VEO3_MOTION_VIDEO_GENERATION service""" + + resolution: NotRequired[PricingCalculatorString] + r"""The resolution of the video. Supported resolution for VEO3 is RESOLUTION_720.""" + + +class PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsVeo3MOTIONVIDEOGENERATIONObject( + BaseModel +): + r"""Parameters for VEO3_MOTION_VIDEO_GENERATION service""" + + resolution: Optional[PricingCalculatorString] = None + r"""The resolution of the video. Supported resolution for VEO3 is RESOLUTION_720.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["resolution"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) -class ObjectTypedDict(TypedDict): + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class PricingCalculatorObjectTypedDict(TypedDict): r"""Parameters for the service""" - fantasy_avatar_generation: NotRequired[Nullable[PricingCalculatorObjectTypedDict]] + fantasy_avatar_generation: NotRequired[ + Nullable[PricingCalculatorPricingCalculatorObjectTypedDict] + ] r"""Parameters for FANTASY_AVATAR_GENERATION service""" image_generation: NotRequired[ - Nullable[PricingCalculatorPricingCalculatorObjectTypedDict] + Nullable[PricingCalculatorPricingCalculatorRequestObjectTypedDict] ] r"""Parameters for IMAGE_GENERATION service""" lcm_generation: NotRequired[ - Nullable[PricingCalculatorPricingCalculatorRequestObjectTypedDict] + Nullable[PricingCalculatorPricingCalculatorRequestRequestBodyObjectTypedDict] ] r"""Parameters for LCM_GENERATION service""" model_training: NotRequired[ - Nullable[PricingCalculatorPricingCalculatorRequestRequestBodyObjectTypedDict] + Nullable[ + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObjectTypedDict + ] ] r"""Parameters for MODEL_TRAINING service""" - motion_generation: NotRequired[ + motion_svd_generation: NotRequired[ Nullable[ - PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObjectTypedDict + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONSVDGENERATIONObjectTypedDict ] ] - r"""Parameters for MOTION_GENERATION service""" + r"""Parameters for MOTION_SVD_GENERATION service""" + motion_video_generation: NotRequired[ + Nullable[ + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONVIDEOGENERATIONObjectTypedDict + ] + ] + r"""Parameters for MOTION_VIDEO_GENERATION service""" texture_generation: NotRequired[ Nullable[ PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsTEXTUREGENERATIONObjectTypedDict @@ -436,42 +645,58 @@ class ObjectTypedDict(TypedDict): ] ] r"""Parameters for UNIVERSAL_UPSCALER_ULTRA service""" + veo3_motion_video_generation: NotRequired[ + Nullable[ + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsVeo3MOTIONVIDEOGENERATIONObjectTypedDict + ] + ] + r"""Parameters for VEO3_MOTION_VIDEO_GENERATION service""" -class Object(BaseModel): +class PricingCalculatorObject(BaseModel): r"""Parameters for the service""" fantasy_avatar_generation: Annotated[ - OptionalNullable[PricingCalculatorObject], + OptionalNullable[PricingCalculatorPricingCalculatorObject], pydantic.Field(alias="FANTASY_AVATAR_GENERATION"), ] = UNSET r"""Parameters for FANTASY_AVATAR_GENERATION service""" image_generation: Annotated[ - OptionalNullable[PricingCalculatorPricingCalculatorObject], + OptionalNullable[PricingCalculatorPricingCalculatorRequestObject], pydantic.Field(alias="IMAGE_GENERATION"), ] = UNSET r"""Parameters for IMAGE_GENERATION service""" lcm_generation: Annotated[ - OptionalNullable[PricingCalculatorPricingCalculatorRequestObject], + OptionalNullable[PricingCalculatorPricingCalculatorRequestRequestBodyObject], pydantic.Field(alias="LCM_GENERATION"), ] = UNSET r"""Parameters for LCM_GENERATION service""" model_training: Annotated[ - OptionalNullable[PricingCalculatorPricingCalculatorRequestRequestBodyObject], + OptionalNullable[ + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObject + ], pydantic.Field(alias="MODEL_TRAINING"), ] = UNSET r"""Parameters for MODEL_TRAINING service""" - motion_generation: Annotated[ + motion_svd_generation: Annotated[ OptionalNullable[ - PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsObject + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONSVDGENERATIONObject + ], + pydantic.Field(alias="MOTION_SVD_GENERATION"), + ] = UNSET + r"""Parameters for MOTION_SVD_GENERATION service""" + + motion_video_generation: Annotated[ + OptionalNullable[ + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsMOTIONVIDEOGENERATIONObject ], - pydantic.Field(alias="MOTION_GENERATION"), + pydantic.Field(alias="MOTION_VIDEO_GENERATION"), ] = UNSET - r"""Parameters for MOTION_GENERATION service""" + r"""Parameters for MOTION_VIDEO_GENERATION service""" texture_generation: Annotated[ OptionalNullable[ @@ -497,51 +722,62 @@ class Object(BaseModel): ] = UNSET r"""Parameters for UNIVERSAL_UPSCALER_ULTRA service""" + veo3_motion_video_generation: Annotated[ + OptionalNullable[ + PricingCalculatorPricingCalculatorRequestRequestBodyServiceParamsVeo3MOTIONVIDEOGENERATIONObject + ], + pydantic.Field(alias="VEO3_MOTION_VIDEO_GENERATION"), + ] = UNSET + r"""Parameters for VEO3_MOTION_VIDEO_GENERATION service""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "FANTASY_AVATAR_GENERATION", - "IMAGE_GENERATION", - "LCM_GENERATION", - "MODEL_TRAINING", - "MOTION_GENERATION", - "TEXTURE_GENERATION", - "UNIVERSAL_UPSCALER", - "UNIVERSAL_UPSCALER_ULTRA", - ] - nullable_fields = [ - "FANTASY_AVATAR_GENERATION", - "IMAGE_GENERATION", - "LCM_GENERATION", - "MODEL_TRAINING", - "MOTION_GENERATION", - "TEXTURE_GENERATION", - "UNIVERSAL_UPSCALER", - "UNIVERSAL_UPSCALER_ULTRA", - ] - null_default_fields = [] - + optional_fields = set( + [ + "FANTASY_AVATAR_GENERATION", + "IMAGE_GENERATION", + "LCM_GENERATION", + "MODEL_TRAINING", + "MOTION_SVD_GENERATION", + "MOTION_VIDEO_GENERATION", + "TEXTURE_GENERATION", + "UNIVERSAL_UPSCALER", + "UNIVERSAL_UPSCALER_ULTRA", + "VEO3_MOTION_VIDEO_GENERATION", + ] + ) + nullable_fields = set( + [ + "FANTASY_AVATAR_GENERATION", + "IMAGE_GENERATION", + "LCM_GENERATION", + "MODEL_TRAINING", + "MOTION_SVD_GENERATION", + "MOTION_VIDEO_GENERATION", + "TEXTURE_GENERATION", + "UNIVERSAL_UPSCALER", + "UNIVERSAL_UPSCALER_ULTRA", + "VEO3_MOTION_VIDEO_GENERATION", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -549,7 +785,7 @@ def serialize_model(self, handler): class PricingCalculatorRequestBodyTypedDict(TypedDict): service: NotRequired[shared_pricingcalculatorservices.PricingCalculatorServices] r"""The services to be chosen for calculating the API credit cost.""" - service_params: NotRequired[ObjectTypedDict] + service_params: NotRequired[PricingCalculatorObjectTypedDict] r"""Parameters for the service""" @@ -558,10 +794,26 @@ class PricingCalculatorRequestBody(BaseModel): r"""The services to be chosen for calculating the API credit cost.""" service_params: Annotated[ - Optional[Object], pydantic.Field(alias="serviceParams") + Optional[PricingCalculatorObject], pydantic.Field(alias="serviceParams") ] = None r"""Parameters for the service""" + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["service", "serviceParams"]) + 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 CalculateProductionAPIServiceCostTypedDict(TypedDict): cost: NotRequired[int] @@ -572,6 +824,22 @@ class CalculateProductionAPIServiceCost(BaseModel): cost: Optional[int] = None r"""API service cost to generate the image.""" + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["cost"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + class PricingCalculatorResponseBodyTypedDict(TypedDict): r"""Responses for POST /pricing-calculator""" @@ -591,31 +859,26 @@ class PricingCalculatorResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["calculateProductionApiServiceCost"] - nullable_fields = ["calculateProductionApiServiceCost"] - null_default_fields = [] - + optional_fields = set(["calculateProductionApiServiceCost"]) + nullable_fields = set(["calculateProductionApiServiceCost"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -643,3 +906,19 @@ class PricingCalculatorResponse(BaseModel): object: Optional[PricingCalculatorResponseBody] = None r"""Responses for POST /pricing-calculator""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/promptimprove.py b/src/leonardo_ai_sdk/models/operations/promptimprove.py index 382542a1..405c73d8 100644 --- a/src/leonardo_ai_sdk/models/operations/promptimprove.py +++ b/src/leonardo_ai_sdk/models/operations/promptimprove.py @@ -20,6 +20,8 @@ class PromptImproveRequestBodyTypedDict(TypedDict): prompt: str r"""The prompt to improve.""" + is_video: NotRequired[Nullable[bool]] + r"""Specifies whether the prompt is for a video generation. Defaults to false (image prompt).""" prompt_instructions: NotRequired[Nullable[str]] r"""The prompt is improved based on the given instructions.""" @@ -30,6 +32,9 @@ class PromptImproveRequestBody(BaseModel): prompt: str r"""The prompt to improve.""" + is_video: Annotated[OptionalNullable[bool], pydantic.Field(alias="isVideo")] = UNSET + r"""Specifies whether the prompt is for a video generation. Defaults to false (image prompt).""" + prompt_instructions: Annotated[ OptionalNullable[str], pydantic.Field(alias="promptInstructions") ] = UNSET @@ -37,31 +42,26 @@ class PromptImproveRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["promptInstructions"] - nullable_fields = ["promptInstructions"] - null_default_fields = [] - + optional_fields = set(["isVideo", "promptInstructions"]) + nullable_fields = set(["isVideo", "promptInstructions"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -80,6 +80,22 @@ class PromptGenerationOutput(BaseModel): prompt: Optional[str] = "The improved prompt." r"""The improved prompt.""" + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["apiCreditCost", "prompt"]) + 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 PromptImproveResponseBodyTypedDict(TypedDict): r"""Responses for POST /prompt/improve""" @@ -94,6 +110,22 @@ class PromptImproveResponseBody(BaseModel): Optional[PromptGenerationOutput], pydantic.Field(alias="promptGeneration") ] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["promptGeneration"]) + 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 PromptImproveResponseTypedDict(TypedDict): content_type: str @@ -118,3 +150,19 @@ class PromptImproveResponse(BaseModel): object: Optional[PromptImproveResponseBody] = None r"""Responses for POST /prompt/improve""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/promptrandom.py b/src/leonardo_ai_sdk/models/operations/promptrandom.py index 8d9939f3..a45c3c9c 100644 --- a/src/leonardo_ai_sdk/models/operations/promptrandom.py +++ b/src/leonardo_ai_sdk/models/operations/promptrandom.py @@ -2,8 +2,9 @@ from __future__ import annotations import httpx -from leonardo_ai_sdk.types import BaseModel +from leonardo_ai_sdk.types import BaseModel, UNSET_SENTINEL import pydantic +from pydantic import model_serializer from typing import Optional from typing_extensions import Annotated, NotRequired, TypedDict @@ -22,6 +23,22 @@ class PromptRandomPromptGenerationOutput(BaseModel): prompt: Optional[str] = "The random prompt generated." r"""The random prompt generated.""" + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["apiCreditCost", "prompt"]) + 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 PromptRandomResponseBodyTypedDict(TypedDict): r"""Responses for POST /prompt/random""" @@ -37,6 +54,22 @@ class PromptRandomResponseBody(BaseModel): pydantic.Field(alias="promptGeneration"), ] = None + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["promptGeneration"]) + 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 PromptRandomResponseTypedDict(TypedDict): content_type: str @@ -61,3 +94,19 @@ class PromptRandomResponse(BaseModel): object: Optional[PromptRandomResponseBody] = None r"""Responses for POST /prompt/random""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/uploadcanvasinitimage.py b/src/leonardo_ai_sdk/models/operations/uploadcanvasinitimage.py index 80318b14..64d2906f 100644 --- a/src/leonardo_ai_sdk/models/operations/uploadcanvasinitimage.py +++ b/src/leonardo_ai_sdk/models/operations/uploadcanvasinitimage.py @@ -72,49 +72,48 @@ class CanvasInitImageUploadOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "initFields", - "initImageId", - "initKey", - "initUrl", - "maskFields", - "maskImageId", - "maskKey", - "maskUrl", - ] - nullable_fields = [ - "initFields", - "initImageId", - "initKey", - "initUrl", - "maskFields", - "maskImageId", - "maskKey", - "maskUrl", - ] - null_default_fields = [] - + optional_fields = set( + [ + "initFields", + "initImageId", + "initKey", + "initUrl", + "maskFields", + "maskImageId", + "maskKey", + "maskUrl", + ] + ) + nullable_fields = set( + [ + "initFields", + "initImageId", + "initKey", + "initUrl", + "maskFields", + "maskImageId", + "maskKey", + "maskUrl", + ] + ) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -137,31 +136,26 @@ class UploadCanvasInitImageResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["uploadCanvasInitImage"] - nullable_fields = ["uploadCanvasInitImage"] - null_default_fields = [] - + optional_fields = set(["uploadCanvasInitImage"]) + nullable_fields = set(["uploadCanvasInitImage"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -189,3 +183,19 @@ class UploadCanvasInitImageResponse(BaseModel): object: Optional[UploadCanvasInitImageResponseBody] = None r"""Responses for POST /canvas-init-image""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/uploaddatasetimage.py b/src/leonardo_ai_sdk/models/operations/uploaddatasetimage.py index 1ec519ee..8bb4f3de 100644 --- a/src/leonardo_ai_sdk/models/operations/uploaddatasetimage.py +++ b/src/leonardo_ai_sdk/models/operations/uploaddatasetimage.py @@ -70,31 +70,26 @@ class DatasetUploadOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["fields", "id", "key", "url"] - nullable_fields = ["fields", "id", "key", "url"] - null_default_fields = [] - + optional_fields = set(["fields", "id", "key", "url"]) + nullable_fields = set(["fields", "id", "key", "url"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -115,31 +110,26 @@ class UploadDatasetImageResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["uploadDatasetImage"] - nullable_fields = ["uploadDatasetImage"] - null_default_fields = [] - + optional_fields = set(["uploadDatasetImage"]) + nullable_fields = set(["uploadDatasetImage"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -167,3 +157,19 @@ class UploadDatasetImageResponse(BaseModel): object: Optional[UploadDatasetImageResponseBody] = None r"""Responses for POST /datasets/{datasetId}/upload""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/uploaddatasetimagefromgen.py b/src/leonardo_ai_sdk/models/operations/uploaddatasetimagefromgen.py index 68d2a4fc..1521442c 100644 --- a/src/leonardo_ai_sdk/models/operations/uploaddatasetimagefromgen.py +++ b/src/leonardo_ai_sdk/models/operations/uploaddatasetimagefromgen.py @@ -61,31 +61,26 @@ class DatasetGenUploadOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["id"] - nullable_fields = ["id"] - null_default_fields = [] - + optional_fields = set(["id"]) + nullable_fields = set(["id"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -108,31 +103,26 @@ class UploadDatasetImageFromGenResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["uploadDatasetImageFromGen"] - nullable_fields = ["uploadDatasetImageFromGen"] - null_default_fields = [] - + optional_fields = set(["uploadDatasetImageFromGen"]) + nullable_fields = set(["uploadDatasetImageFromGen"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -160,3 +150,19 @@ class UploadDatasetImageFromGenResponse(BaseModel): object: Optional[UploadDatasetImageFromGenResponseBody] = None r"""Responses for POST /datasets/{datasetId}/upload/gen""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/uploadinitimage.py b/src/leonardo_ai_sdk/models/operations/uploadinitimage.py index 7f3cb740..c2c1fe34 100644 --- a/src/leonardo_ai_sdk/models/operations/uploadinitimage.py +++ b/src/leonardo_ai_sdk/models/operations/uploadinitimage.py @@ -47,31 +47,26 @@ class InitImageUploadOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["fields", "id", "key", "url"] - nullable_fields = ["fields", "id", "key", "url"] - null_default_fields = [] - + optional_fields = set(["fields", "id", "key", "url"]) + nullable_fields = set(["fields", "id", "key", "url"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -91,31 +86,26 @@ class UploadInitImageResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["uploadInitImage"] - nullable_fields = ["uploadInitImage"] - null_default_fields = [] - + optional_fields = set(["uploadInitImage"]) + nullable_fields = set(["uploadInitImage"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -143,3 +133,19 @@ class UploadInitImageResponse(BaseModel): object: Optional[UploadInitImageResponseBody] = None r"""Responses for POST /init-image""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/operations/uploadmodelasset.py b/src/leonardo_ai_sdk/models/operations/uploadmodelasset.py index 82630013..5622258a 100644 --- a/src/leonardo_ai_sdk/models/operations/uploadmodelasset.py +++ b/src/leonardo_ai_sdk/models/operations/uploadmodelasset.py @@ -33,31 +33,26 @@ class UploadModelAssetRequestBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["modelExtension", "name"] - nullable_fields = ["name"] - null_default_fields = [] - + optional_fields = set(["modelExtension", "name"]) + nullable_fields = set(["name"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -86,31 +81,26 @@ class ModelAssetUploadOutput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["modelFields", "modelId", "modelKey", "modelUrl"] - nullable_fields = ["modelFields", "modelId", "modelKey", "modelUrl"] - null_default_fields = [] - + optional_fields = set(["modelFields", "modelId", "modelKey", "modelUrl"]) + nullable_fields = set(["modelFields", "modelId", "modelKey", "modelUrl"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -131,31 +121,26 @@ class UploadModelAssetResponseBody(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["uploadModelAsset"] - nullable_fields = ["uploadModelAsset"] - null_default_fields = [] - + optional_fields = set(["uploadModelAsset"]) + nullable_fields = set(["uploadModelAsset"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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 @@ -183,3 +168,19 @@ class UploadModelAssetResponse(BaseModel): object: Optional[UploadModelAssetResponseBody] = None r"""Responses for POST /api/rest/v1/models-3d/upload""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["object"]) + 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/leonardo_ai_sdk/models/shared/__init__.py b/src/leonardo_ai_sdk/models/shared/__init__.py index e74511a6..8a072c7b 100644 --- a/src/leonardo_ai_sdk/models/shared/__init__.py +++ b/src/leonardo_ai_sdk/models/shared/__init__.py @@ -1,29 +1,36 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" -from .canvasrequesttype import CanvasRequestType -from .controlnet_input import ( - ControlnetInput, - ControlnetInputTypedDict, - InitImageType, - StrengthType, -) -from .controlnet_type import ControlnetType -from .custom_model_type import CustomModelType -from .element_input import ElementInput, ElementInputTypedDict -from .job_status import JobStatus -from .lcm_generation_style import LcmGenerationStyle -from .model_asset_texture_types import ModelAssetTextureTypes -from .pricingcalculatorservices import PricingCalculatorServices -from .sd_generation_schedulers import SdGenerationSchedulers -from .sd_generation_style import SdGenerationStyle -from .sd_versions import SdVersions -from .security import Security, SecurityTypedDict -from .strength import Strength -from .universal_upscaler_style import UniversalUpscalerStyle -from .universal_upscaler_ultra_style import UniversalUpscalerUltraStyle -from .user_elements_input import UserElementsInput, UserElementsInputTypedDict -from .variation_type import VariationType +from typing import TYPE_CHECKING +from importlib import import_module +import builtins +import sys +if TYPE_CHECKING: + from .canvasrequesttype import CanvasRequestType + from .controlnet_input import ( + ControlnetInput, + ControlnetInputTypedDict, + InitImageType, + StrengthType, + ) + from .controlnet_type import ControlnetType + from .custom_model_type import CustomModelType + from .element_input import ElementInput, ElementInputTypedDict + from .job_status import JobStatus + from .lcm_generation_style import LcmGenerationStyle + from .model_asset_texture_types import ModelAssetTextureTypes + from .motion_resolution import MotionResolution + from .motion_variation_type import MotionVariationType + from .pricingcalculatorservices import PricingCalculatorServices + from .sd_generation_schedulers import SdGenerationSchedulers + from .sd_generation_style import SdGenerationStyle + from .sd_versions import SdVersions + from .security import Security, SecurityTypedDict + from .strength import Strength + from .universal_upscaler_style import UniversalUpscalerStyle + from .universal_upscaler_ultra_style import UniversalUpscalerUltraStyle + from .user_elements_input import UserElementsInput, UserElementsInputTypedDict + from .variation_type import VariationType __all__ = [ "CanvasRequestType", @@ -37,6 +44,8 @@ "JobStatus", "LcmGenerationStyle", "ModelAssetTextureTypes", + "MotionResolution", + "MotionVariationType", "PricingCalculatorServices", "SdGenerationSchedulers", "SdGenerationStyle", @@ -51,3 +60,70 @@ "UserElementsInputTypedDict", "VariationType", ] + +_dynamic_imports: dict[str, str] = { + "CanvasRequestType": ".canvasrequesttype", + "ControlnetInput": ".controlnet_input", + "ControlnetInputTypedDict": ".controlnet_input", + "InitImageType": ".controlnet_input", + "StrengthType": ".controlnet_input", + "ControlnetType": ".controlnet_type", + "CustomModelType": ".custom_model_type", + "ElementInput": ".element_input", + "ElementInputTypedDict": ".element_input", + "JobStatus": ".job_status", + "LcmGenerationStyle": ".lcm_generation_style", + "ModelAssetTextureTypes": ".model_asset_texture_types", + "MotionResolution": ".motion_resolution", + "MotionVariationType": ".motion_variation_type", + "PricingCalculatorServices": ".pricingcalculatorservices", + "SdGenerationSchedulers": ".sd_generation_schedulers", + "SdGenerationStyle": ".sd_generation_style", + "SdVersions": ".sd_versions", + "Security": ".security", + "SecurityTypedDict": ".security", + "Strength": ".strength", + "UniversalUpscalerStyle": ".universal_upscaler_style", + "UniversalUpscalerUltraStyle": ".universal_upscaler_ultra_style", + "UserElementsInput": ".user_elements_input", + "UserElementsInputTypedDict": ".user_elements_input", + "VariationType": ".variation_type", +} + + +def dynamic_import(modname, retries=3): + for attempt in range(retries): + try: + return import_module(modname, __package__) + except KeyError: + # Clear any half-initialized module and retry + sys.modules.pop(modname, None) + if attempt == retries - 1: + break + raise KeyError(f"Failed to import module '{modname}' after {retries} attempts") + + +def __getattr__(attr_name: str) -> object: + module_name = _dynamic_imports.get(attr_name) + if module_name is None: + raise AttributeError( + f"No {attr_name} found in _dynamic_imports for module name -> {__name__} " + ) + + try: + module = dynamic_import(module_name) + result = getattr(module, attr_name) + return result + except ImportError as e: + raise ImportError( + f"Failed to import {attr_name} from {module_name}: {e}" + ) from e + except AttributeError as e: + raise AttributeError( + f"Failed to get {attr_name} from {module_name}: {e}" + ) from e + + +def __dir__(): + lazy_attrs = builtins.list(_dynamic_imports.keys()) + return builtins.sorted(lazy_attrs) diff --git a/src/leonardo_ai_sdk/models/shared/controlnet_input.py b/src/leonardo_ai_sdk/models/shared/controlnet_input.py index 9871d1e0..7c40f48d 100644 --- a/src/leonardo_ai_sdk/models/shared/controlnet_input.py +++ b/src/leonardo_ai_sdk/models/shared/controlnet_input.py @@ -69,36 +69,27 @@ class ControlnetInput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = [ - "initImageId", - "initImageType", - "preprocessorId", - "strengthType", - "weight", - ] - nullable_fields = ["strengthType", "weight"] - null_default_fields = [] - + optional_fields = set( + ["initImageId", "initImageType", "preprocessorId", "strengthType", "weight"] + ) + nullable_fields = set(["strengthType", "weight"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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/leonardo_ai_sdk/models/shared/element_input.py b/src/leonardo_ai_sdk/models/shared/element_input.py index 4f0aac9f..5a98da34 100644 --- a/src/leonardo_ai_sdk/models/shared/element_input.py +++ b/src/leonardo_ai_sdk/models/shared/element_input.py @@ -1,58 +1,47 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from leonardo_ai_sdk.types import ( - BaseModel, - Nullable, - OptionalNullable, - UNSET, - UNSET_SENTINEL, -) +from leonardo_ai_sdk.types import BaseModel, Nullable, OptionalNullable, UNSET_SENTINEL import pydantic from pydantic import model_serializer from typing_extensions import Annotated, NotRequired, TypedDict class ElementInputTypedDict(TypedDict): - ak_uuid: NotRequired[Nullable[str]] + ak_uuid: str r"""Unique identifier for element. Elements can be found from the List Elements endpoint.""" weight: NotRequired[Nullable[float]] r"""Weight for the element""" class ElementInput(BaseModel): - ak_uuid: Annotated[OptionalNullable[str], pydantic.Field(alias="akUUID")] = UNSET + ak_uuid: Annotated[str, pydantic.Field(alias="akUUID")] r"""Unique identifier for element. Elements can be found from the List Elements endpoint.""" - weight: OptionalNullable[float] = UNSET + weight: OptionalNullable[float] = 1 r"""Weight for the element""" @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["akUUID", "weight"] - nullable_fields = ["akUUID", "weight"] - null_default_fields = [] - + optional_fields = set(["weight"]) + nullable_fields = set(["weight"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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/leonardo_ai_sdk/models/shared/motion_resolution.py b/src/leonardo_ai_sdk/models/shared/motion_resolution.py new file mode 100644 index 00000000..c9388ce7 --- /dev/null +++ b/src/leonardo_ai_sdk/models/shared/motion_resolution.py @@ -0,0 +1,10 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + + +class MotionResolution(str, Enum): + r"""The resolution of the upscaled video. RESOLUTION_720 is the only option for now.""" + + RESOLUTION_720 = "RESOLUTION_720" diff --git a/src/leonardo_ai_sdk/models/shared/motion_variation_type.py b/src/leonardo_ai_sdk/models/shared/motion_variation_type.py new file mode 100644 index 00000000..20fe8543 --- /dev/null +++ b/src/leonardo_ai_sdk/models/shared/motion_variation_type.py @@ -0,0 +1,10 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + + +class MotionVariationType(str, Enum): + r"""The type of motion variation.""" + + UPSCALE = "UPSCALE" diff --git a/src/leonardo_ai_sdk/models/shared/pricingcalculatorservices.py b/src/leonardo_ai_sdk/models/shared/pricingcalculatorservices.py index 9ee73951..5369d926 100644 --- a/src/leonardo_ai_sdk/models/shared/pricingcalculatorservices.py +++ b/src/leonardo_ai_sdk/models/shared/pricingcalculatorservices.py @@ -9,7 +9,9 @@ class PricingCalculatorServices(str, Enum): IMAGE_GENERATION = "IMAGE_GENERATION" FANTASY_AVATAR_GENERATION = "FANTASY_AVATAR_GENERATION" - MOTION_GENERATION = "MOTION_GENERATION" + MOTION_SVD_GENERATION = "MOTION_SVD_GENERATION" + MOTION_VIDEO_GENERATION = "MOTION_VIDEO_GENERATION" + VEO3_MOTION_VIDEO_GENERATION = "VEO3_MOTION_VIDEO_GENERATION" LCM_GENERATION = "LCM_GENERATION" MODEL_TRAINING = "MODEL_TRAINING" TEXTURE_GENERATION = "TEXTURE_GENERATION" diff --git a/src/leonardo_ai_sdk/models/shared/sd_versions.py b/src/leonardo_ai_sdk/models/shared/sd_versions.py index 27164fac..a6634be4 100644 --- a/src/leonardo_ai_sdk/models/shared/sd_versions.py +++ b/src/leonardo_ai_sdk/models/shared/sd_versions.py @@ -17,3 +17,4 @@ class SdVersions(str, Enum): PHOENIX = "PHOENIX" FLUX = "FLUX" FLUX_DEV = "FLUX_DEV" + KINO_2_0 = "KINO_2_0" diff --git a/src/leonardo_ai_sdk/models/shared/user_elements_input.py b/src/leonardo_ai_sdk/models/shared/user_elements_input.py index e80d0899..5175f571 100644 --- a/src/leonardo_ai_sdk/models/shared/user_elements_input.py +++ b/src/leonardo_ai_sdk/models/shared/user_elements_input.py @@ -31,30 +31,25 @@ class UserElementsInput(BaseModel): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = ["userLoraId", "weight"] - nullable_fields = ["userLoraId", "weight"] - null_default_fields = [] - + optional_fields = set(["userLoraId", "weight"]) + nullable_fields = set(["userLoraId", "weight"]) serialized = handler(self) - m = {} - for n, f in self.model_fields.items(): + 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/leonardo_ai_sdk/models_.py b/src/leonardo_ai_sdk/models_.py index 7167ac9a..ee9fd2d6 100644 --- a/src/leonardo_ai_sdk/models_.py +++ b/src/leonardo_ai_sdk/models_.py @@ -5,6 +5,7 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import BaseModel, OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional, Union, cast @@ -38,6 +39,8 @@ def create_model( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal(request, operations.CreateModelRequestBody) @@ -59,6 +62,7 @@ def create_model( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.CreateModelRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -72,8 +76,10 @@ def create_model( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createModel", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -83,8 +89,8 @@ def create_model( if utils.match_response(http_res, "200", "application/json"): return operations.CreateModelResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.CreateModelResponseBody] + object=unmarshal_json_response( + Optional[operations.CreateModelResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -92,23 +98,12 @@ def create_model( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def create_model_async( self, @@ -139,6 +134,8 @@ async def create_model_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal(request, operations.CreateModelRequestBody) @@ -160,6 +157,7 @@ async def create_model_async( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.CreateModelRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -173,8 +171,10 @@ async def create_model_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createModel", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -184,8 +184,8 @@ async def create_model_async( if utils.match_response(http_res, "200", "application/json"): return operations.CreateModelResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.CreateModelResponseBody] + object=unmarshal_json_response( + Optional[operations.CreateModelResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -193,23 +193,12 @@ async def create_model_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def delete_model_by_id( self, @@ -237,6 +226,8 @@ def delete_model_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.DeleteModelByIDRequest( id=id, @@ -255,6 +246,7 @@ def delete_model_by_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -268,8 +260,10 @@ def delete_model_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="deleteModelById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -279,8 +273,8 @@ def delete_model_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.DeleteModelByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.DeleteModelByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.DeleteModelByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -288,23 +282,12 @@ def delete_model_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def delete_model_by_id_async( self, @@ -332,6 +315,8 @@ async def delete_model_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.DeleteModelByIDRequest( id=id, @@ -350,6 +335,7 @@ async def delete_model_by_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -363,8 +349,10 @@ async def delete_model_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="deleteModelById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -374,8 +362,8 @@ async def delete_model_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.DeleteModelByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.DeleteModelByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.DeleteModelByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -383,23 +371,12 @@ async def delete_model_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def get_custom_models_by_user_id( self, @@ -427,6 +404,8 @@ def get_custom_models_by_user_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetCustomModelsByUserIDRequest( user_id=user_id, @@ -445,6 +424,7 @@ def get_custom_models_by_user_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -458,8 +438,10 @@ def get_custom_models_by_user_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getCustomModelsByUserId", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -469,9 +451,8 @@ def get_custom_models_by_user_id( if utils.match_response(http_res, "200", "application/json"): return operations.GetCustomModelsByUserIDResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.GetCustomModelsByUserIDResponseBody], + object=unmarshal_json_response( + Optional[operations.GetCustomModelsByUserIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -479,23 +460,12 @@ def get_custom_models_by_user_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get_custom_models_by_user_id_async( self, @@ -523,6 +493,8 @@ async def get_custom_models_by_user_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetCustomModelsByUserIDRequest( user_id=user_id, @@ -541,6 +513,7 @@ async def get_custom_models_by_user_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -554,8 +527,10 @@ async def get_custom_models_by_user_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getCustomModelsByUserId", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -565,9 +540,8 @@ async def get_custom_models_by_user_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.GetCustomModelsByUserIDResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.GetCustomModelsByUserIDResponseBody], + object=unmarshal_json_response( + Optional[operations.GetCustomModelsByUserIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -575,23 +549,12 @@ async def get_custom_models_by_user_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def get_model_by_id( self, @@ -619,6 +582,8 @@ def get_model_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetModelByIDRequest( id=id, @@ -637,6 +602,7 @@ def get_model_by_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -650,8 +616,10 @@ def get_model_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getModelById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -661,8 +629,8 @@ def get_model_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.GetModelByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetModelByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.GetModelByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -670,23 +638,12 @@ def get_model_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get_model_by_id_async( self, @@ -714,6 +671,8 @@ async def get_model_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetModelByIDRequest( id=id, @@ -732,6 +691,7 @@ async def get_model_by_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -745,8 +705,10 @@ async def get_model_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getModelById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -756,8 +718,8 @@ async def get_model_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.GetModelByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetModelByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.GetModelByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -765,23 +727,12 @@ async def get_model_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def list_platform_models( self, @@ -807,6 +758,8 @@ def list_platform_models( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) req = self._build_request( method="GET", path="/platformModels", @@ -820,6 +773,7 @@ def list_platform_models( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -833,8 +787,10 @@ def list_platform_models( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="listPlatformModels", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -844,8 +800,8 @@ def list_platform_models( if utils.match_response(http_res, "200", "application/json"): return operations.ListPlatformModelsResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.ListPlatformModelsResponseBody] + object=unmarshal_json_response( + Optional[operations.ListPlatformModelsResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -853,23 +809,12 @@ def list_platform_models( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def list_platform_models_async( self, @@ -895,6 +840,8 @@ async def list_platform_models_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) req = self._build_request_async( method="GET", path="/platformModels", @@ -908,6 +855,7 @@ async def list_platform_models_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -921,8 +869,10 @@ async def list_platform_models_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="listPlatformModels", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -932,8 +882,8 @@ async def list_platform_models_async( if utils.match_response(http_res, "200", "application/json"): return operations.ListPlatformModelsResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.ListPlatformModelsResponseBody] + object=unmarshal_json_response( + Optional[operations.ListPlatformModelsResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -941,20 +891,9 @@ async def list_platform_models_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) diff --git a/src/leonardo_ai_sdk/motion.py b/src/leonardo_ai_sdk/motion.py index a360b728..4bf04d88 100644 --- a/src/leonardo_ai_sdk/motion.py +++ b/src/leonardo_ai_sdk/motion.py @@ -5,10 +5,223 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import BaseModel, OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional, Union, cast class Motion(BaseSDK): + def create_image_to_video_generation( + self, + *, + request: Optional[ + Union[ + operations.CreateImageToVideoGenerationRequestBody, + operations.CreateImageToVideoGenerationRequestBodyTypedDict, + ] + ] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> operations.CreateImageToVideoGenerationResponse: + r"""Create a video generation from an image + + This endpoint will generate a video using an uploaded or generated image. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal( + request, Optional[operations.CreateImageToVideoGenerationRequestBody] + ) + request = cast( + Optional[operations.CreateImageToVideoGenerationRequestBody], request + ) + + req = self._build_request( + method="POST", + path="/generations-image-to-video", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, + False, + True, + "json", + Optional[operations.CreateImageToVideoGenerationRequestBody], + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="createImageToVideoGeneration", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + error_status_codes=["4XX", "5XX"], + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return operations.CreateImageToVideoGenerationResponse( + object=unmarshal_json_response( + Optional[operations.CreateImageToVideoGenerationResponseBody], + http_res, + ), + status_code=http_res.status_code, + content_type=http_res.headers.get("Content-Type") or "", + raw_response=http_res, + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + + raise errors.SDKError("Unexpected response received", http_res) + + async def create_image_to_video_generation_async( + self, + *, + request: Optional[ + Union[ + operations.CreateImageToVideoGenerationRequestBody, + operations.CreateImageToVideoGenerationRequestBodyTypedDict, + ] + ] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> operations.CreateImageToVideoGenerationResponse: + r"""Create a video generation from an image + + This endpoint will generate a video using an uploaded or generated image. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal( + request, Optional[operations.CreateImageToVideoGenerationRequestBody] + ) + request = cast( + Optional[operations.CreateImageToVideoGenerationRequestBody], request + ) + + req = self._build_request_async( + method="POST", + path="/generations-image-to-video", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, + False, + True, + "json", + Optional[operations.CreateImageToVideoGenerationRequestBody], + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="createImageToVideoGeneration", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + error_status_codes=["4XX", "5XX"], + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return operations.CreateImageToVideoGenerationResponse( + object=unmarshal_json_response( + Optional[operations.CreateImageToVideoGenerationResponseBody], + http_res, + ), + status_code=http_res.status_code, + content_type=http_res.headers.get("Content-Type") or "", + raw_response=http_res, + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + + raise errors.SDKError("Unexpected response received", http_res) + def create_svd_motion_generation( self, *, @@ -40,6 +253,8 @@ def create_svd_motion_generation( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -69,6 +284,7 @@ def create_svd_motion_generation( "json", Optional[operations.CreateSVDMotionGenerationRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -82,8 +298,10 @@ def create_svd_motion_generation( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createSVDMotionGeneration", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -93,9 +311,8 @@ def create_svd_motion_generation( if utils.match_response(http_res, "200", "application/json"): return operations.CreateSVDMotionGenerationResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.CreateSVDMotionGenerationResponseBody], + object=unmarshal_json_response( + Optional[operations.CreateSVDMotionGenerationResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -103,23 +320,12 @@ def create_svd_motion_generation( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def create_svd_motion_generation_async( self, @@ -152,6 +358,8 @@ async def create_svd_motion_generation_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -181,6 +389,7 @@ async def create_svd_motion_generation_async( "json", Optional[operations.CreateSVDMotionGenerationRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -194,8 +403,10 @@ async def create_svd_motion_generation_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createSVDMotionGeneration", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -205,9 +416,8 @@ async def create_svd_motion_generation_async( if utils.match_response(http_res, "200", "application/json"): return operations.CreateSVDMotionGenerationResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.CreateSVDMotionGenerationResponseBody], + object=unmarshal_json_response( + Optional[operations.CreateSVDMotionGenerationResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -215,20 +425,427 @@ async def create_svd_motion_generation_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res + raise errors.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + + raise errors.SDKError("Unexpected response received", http_res) + + def create_text_to_video_generation( + self, + *, + request: Optional[ + Union[ + operations.CreateTextToVideoGenerationRequestBody, + operations.CreateTextToVideoGenerationRequestBodyTypedDict, + ] + ] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> operations.CreateTextToVideoGenerationResponse: + r"""Create a video generation from a text prompt + + This endpoint will generate a video using a text prompt + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal( + request, Optional[operations.CreateTextToVideoGenerationRequestBody] + ) + request = cast( + Optional[operations.CreateTextToVideoGenerationRequestBody], request + ) + + req = self._build_request( + method="POST", + path="/generations-text-to-video", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, + False, + True, + "json", + Optional[operations.CreateTextToVideoGenerationRequestBody], + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="createTextToVideoGeneration", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + error_status_codes=["4XX", "5XX"], + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return operations.CreateTextToVideoGenerationResponse( + object=unmarshal_json_response( + Optional[operations.CreateTextToVideoGenerationResponseBody], + http_res, + ), + status_code=http_res.status_code, + content_type=http_res.headers.get("Content-Type") or "", + raw_response=http_res, + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + + raise errors.SDKError("Unexpected response received", http_res) + + async def create_text_to_video_generation_async( + self, + *, + request: Optional[ + Union[ + operations.CreateTextToVideoGenerationRequestBody, + operations.CreateTextToVideoGenerationRequestBodyTypedDict, + ] + ] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> operations.CreateTextToVideoGenerationResponse: + r"""Create a video generation from a text prompt + + This endpoint will generate a video using a text prompt + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal( + request, Optional[operations.CreateTextToVideoGenerationRequestBody] + ) + request = cast( + Optional[operations.CreateTextToVideoGenerationRequestBody], request + ) + + req = self._build_request_async( + method="POST", + path="/generations-text-to-video", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, + False, + True, + "json", + Optional[operations.CreateTextToVideoGenerationRequestBody], + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="createTextToVideoGeneration", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + error_status_codes=["4XX", "5XX"], + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return operations.CreateTextToVideoGenerationResponse( + object=unmarshal_json_response( + Optional[operations.CreateTextToVideoGenerationResponseBody], + http_res, + ), + status_code=http_res.status_code, + content_type=http_res.headers.get("Content-Type") or "", + raw_response=http_res, ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res + raise errors.SDKError("API error occurred", http_res, http_res_text) + + raise errors.SDKError("Unexpected response received", http_res) + + def create_video_upscale( + self, + *, + request: Optional[ + Union[ + operations.CreateVideoUpscaleRequestBody, + operations.CreateVideoUpscaleRequestBodyTypedDict, + ] + ] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> operations.CreateVideoUpscaleResponse: + r"""Upscale a generated video + + This endpoint will upscale a generated video to a higher resolution. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal( + request, Optional[operations.CreateVideoUpscaleRequestBody] + ) + request = cast(Optional[operations.CreateVideoUpscaleRequestBody], request) + + req = self._build_request( + method="POST", + path="/generations-video-upscale", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, + False, + True, + "json", + Optional[operations.CreateVideoUpscaleRequestBody], + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="createVideoUpscale", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + error_status_codes=["4XX", "5XX"], + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return operations.CreateVideoUpscaleResponse( + object=unmarshal_json_response( + Optional[operations.CreateVideoUpscaleResponseBody], http_res + ), + status_code=http_res.status_code, + content_type=http_res.headers.get("Content-Type") or "", + raw_response=http_res, + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + + raise errors.SDKError("Unexpected response received", http_res) + + async def create_video_upscale_async( + self, + *, + request: Optional[ + Union[ + operations.CreateVideoUpscaleRequestBody, + operations.CreateVideoUpscaleRequestBodyTypedDict, + ] + ] = None, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> operations.CreateVideoUpscaleResponse: + r"""Upscale a generated video + + This endpoint will upscale a generated video to a higher resolution. + + :param request: The request object to send. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + if not isinstance(request, BaseModel): + request = utils.unmarshal( + request, Optional[operations.CreateVideoUpscaleRequestBody] ) + request = cast(Optional[operations.CreateVideoUpscaleRequestBody], request) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, + req = self._build_request_async( + method="POST", + path="/generations-video-upscale", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request, + False, + True, + "json", + Optional[operations.CreateVideoUpscaleRequestBody], + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="createVideoUpscale", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + error_status_codes=["4XX", "5XX"], + retry_config=retry_config, ) + + if utils.match_response(http_res, "200", "application/json"): + return operations.CreateVideoUpscaleResponse( + object=unmarshal_json_response( + Optional[operations.CreateVideoUpscaleResponseBody], http_res + ), + status_code=http_res.status_code, + content_type=http_res.headers.get("Content-Type") or "", + raw_response=http_res, + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + + raise errors.SDKError("Unexpected response received", http_res) diff --git a/src/leonardo_ai_sdk/pricing_calculator.py b/src/leonardo_ai_sdk/pricing_calculator.py index 60fcfa19..64fa6e05 100644 --- a/src/leonardo_ai_sdk/pricing_calculator.py +++ b/src/leonardo_ai_sdk/pricing_calculator.py @@ -5,6 +5,7 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import BaseModel, OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional, Union, cast @@ -40,6 +41,8 @@ def pricing_calculator( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -67,6 +70,7 @@ def pricing_calculator( "json", Optional[operations.PricingCalculatorRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -80,8 +84,10 @@ def pricing_calculator( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="pricingCalculator", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -91,8 +97,8 @@ def pricing_calculator( if utils.match_response(http_res, "200", "application/json"): return operations.PricingCalculatorResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.PricingCalculatorResponseBody] + object=unmarshal_json_response( + Optional[operations.PricingCalculatorResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -100,23 +106,12 @@ def pricing_calculator( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def pricing_calculator_async( self, @@ -149,6 +144,8 @@ async def pricing_calculator_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -176,6 +173,7 @@ async def pricing_calculator_async( "json", Optional[operations.PricingCalculatorRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -189,8 +187,10 @@ async def pricing_calculator_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="pricingCalculator", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -200,8 +200,8 @@ async def pricing_calculator_async( if utils.match_response(http_res, "200", "application/json"): return operations.PricingCalculatorResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.PricingCalculatorResponseBody] + object=unmarshal_json_response( + Optional[operations.PricingCalculatorResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -209,20 +209,9 @@ async def pricing_calculator_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) diff --git a/src/leonardo_ai_sdk/prompt.py b/src/leonardo_ai_sdk/prompt.py index 623ae1e3..de2fabc4 100644 --- a/src/leonardo_ai_sdk/prompt.py +++ b/src/leonardo_ai_sdk/prompt.py @@ -5,6 +5,7 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import BaseModel, OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional, Union, cast @@ -38,6 +39,8 @@ def prompt_improve( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal(request, operations.PromptImproveRequestBody) @@ -59,6 +62,7 @@ def prompt_improve( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.PromptImproveRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -72,8 +76,10 @@ def prompt_improve( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="promptImprove", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -83,8 +89,8 @@ def prompt_improve( if utils.match_response(http_res, "200", "application/json"): return operations.PromptImproveResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.PromptImproveResponseBody] + object=unmarshal_json_response( + Optional[operations.PromptImproveResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -92,23 +98,12 @@ def prompt_improve( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def prompt_improve_async( self, @@ -139,6 +134,8 @@ async def prompt_improve_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal(request, operations.PromptImproveRequestBody) @@ -160,6 +157,7 @@ async def prompt_improve_async( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.PromptImproveRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -173,8 +171,10 @@ async def prompt_improve_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="promptImprove", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -184,8 +184,8 @@ async def prompt_improve_async( if utils.match_response(http_res, "200", "application/json"): return operations.PromptImproveResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.PromptImproveResponseBody] + object=unmarshal_json_response( + Optional[operations.PromptImproveResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -193,23 +193,12 @@ async def prompt_improve_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def prompt_random( self, @@ -235,6 +224,8 @@ def prompt_random( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) req = self._build_request( method="POST", path="/prompt/random", @@ -248,6 +239,7 @@ def prompt_random( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -261,8 +253,10 @@ def prompt_random( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="promptRandom", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -272,8 +266,8 @@ def prompt_random( if utils.match_response(http_res, "200", "application/json"): return operations.PromptRandomResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.PromptRandomResponseBody] + object=unmarshal_json_response( + Optional[operations.PromptRandomResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -281,23 +275,12 @@ def prompt_random( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def prompt_random_async( self, @@ -323,6 +306,8 @@ async def prompt_random_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) req = self._build_request_async( method="POST", path="/prompt/random", @@ -336,6 +321,7 @@ async def prompt_random_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -349,8 +335,10 @@ async def prompt_random_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="promptRandom", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -360,8 +348,8 @@ async def prompt_random_async( if utils.match_response(http_res, "200", "application/json"): return operations.PromptRandomResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.PromptRandomResponseBody] + object=unmarshal_json_response( + Optional[operations.PromptRandomResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -369,20 +357,9 @@ async def prompt_random_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) diff --git a/src/leonardo_ai_sdk/realtime_canvas.py b/src/leonardo_ai_sdk/realtime_canvas.py index 054ebad8..c079049c 100644 --- a/src/leonardo_ai_sdk/realtime_canvas.py +++ b/src/leonardo_ai_sdk/realtime_canvas.py @@ -5,6 +5,7 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import BaseModel, OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional, Union, cast @@ -40,6 +41,8 @@ def create_lcm_generation( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -67,6 +70,7 @@ def create_lcm_generation( "json", Optional[operations.CreateLCMGenerationRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -80,8 +84,10 @@ def create_lcm_generation( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createLCMGeneration", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -91,8 +97,8 @@ def create_lcm_generation( if utils.match_response(http_res, "200", "application/json"): return operations.CreateLCMGenerationResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.CreateLCMGenerationResponseBody] + object=unmarshal_json_response( + Optional[operations.CreateLCMGenerationResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -100,23 +106,12 @@ def create_lcm_generation( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def create_lcm_generation_async( self, @@ -149,6 +144,8 @@ async def create_lcm_generation_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -176,6 +173,7 @@ async def create_lcm_generation_async( "json", Optional[operations.CreateLCMGenerationRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -189,8 +187,10 @@ async def create_lcm_generation_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createLCMGeneration", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -200,8 +200,8 @@ async def create_lcm_generation_async( if utils.match_response(http_res, "200", "application/json"): return operations.CreateLCMGenerationResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.CreateLCMGenerationResponseBody] + object=unmarshal_json_response( + Optional[operations.CreateLCMGenerationResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -209,23 +209,12 @@ async def create_lcm_generation_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def perform_alchemy_upscale_lcm( self, @@ -258,6 +247,8 @@ def perform_alchemy_upscale_lcm( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -287,6 +278,7 @@ def perform_alchemy_upscale_lcm( "json", Optional[operations.PerformAlchemyUpscaleLCMRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -300,8 +292,10 @@ def perform_alchemy_upscale_lcm( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="performAlchemyUpscaleLCM", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -311,9 +305,8 @@ def perform_alchemy_upscale_lcm( if utils.match_response(http_res, "200", "application/json"): return operations.PerformAlchemyUpscaleLCMResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.PerformAlchemyUpscaleLCMResponseBody], + object=unmarshal_json_response( + Optional[operations.PerformAlchemyUpscaleLCMResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -321,23 +314,12 @@ def perform_alchemy_upscale_lcm( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def perform_alchemy_upscale_lcm_async( self, @@ -370,6 +352,8 @@ async def perform_alchemy_upscale_lcm_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -399,6 +383,7 @@ async def perform_alchemy_upscale_lcm_async( "json", Optional[operations.PerformAlchemyUpscaleLCMRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -412,8 +397,10 @@ async def perform_alchemy_upscale_lcm_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="performAlchemyUpscaleLCM", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -423,9 +410,8 @@ async def perform_alchemy_upscale_lcm_async( if utils.match_response(http_res, "200", "application/json"): return operations.PerformAlchemyUpscaleLCMResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.PerformAlchemyUpscaleLCMResponseBody], + object=unmarshal_json_response( + Optional[operations.PerformAlchemyUpscaleLCMResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -433,23 +419,12 @@ async def perform_alchemy_upscale_lcm_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def perform_inpainting_lcm( self, @@ -482,6 +457,8 @@ def perform_inpainting_lcm( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -509,6 +486,7 @@ def perform_inpainting_lcm( "json", Optional[operations.PerformInpaintingLCMRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -522,8 +500,10 @@ def perform_inpainting_lcm( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="performInpaintingLCM", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -533,8 +513,8 @@ def perform_inpainting_lcm( if utils.match_response(http_res, "200", "application/json"): return operations.PerformInpaintingLCMResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.PerformInpaintingLCMResponseBody] + object=unmarshal_json_response( + Optional[operations.PerformInpaintingLCMResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -542,23 +522,12 @@ def perform_inpainting_lcm( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def perform_inpainting_lcm_async( self, @@ -591,6 +560,8 @@ async def perform_inpainting_lcm_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -618,6 +589,7 @@ async def perform_inpainting_lcm_async( "json", Optional[operations.PerformInpaintingLCMRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -631,8 +603,10 @@ async def perform_inpainting_lcm_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="performInpaintingLCM", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -642,8 +616,8 @@ async def perform_inpainting_lcm_async( if utils.match_response(http_res, "200", "application/json"): return operations.PerformInpaintingLCMResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.PerformInpaintingLCMResponseBody] + object=unmarshal_json_response( + Optional[operations.PerformInpaintingLCMResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -651,23 +625,12 @@ async def perform_inpainting_lcm_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def perform_instant_refine( self, @@ -700,6 +663,8 @@ def perform_instant_refine( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -727,6 +692,7 @@ def perform_instant_refine( "json", Optional[operations.PerformInstantRefineRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -740,8 +706,10 @@ def perform_instant_refine( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="performInstantRefine", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -751,8 +719,8 @@ def perform_instant_refine( if utils.match_response(http_res, "200", "application/json"): return operations.PerformInstantRefineResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.PerformInstantRefineResponseBody] + object=unmarshal_json_response( + Optional[operations.PerformInstantRefineResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -760,23 +728,12 @@ def perform_instant_refine( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def perform_instant_refine_async( self, @@ -809,6 +766,8 @@ async def perform_instant_refine_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -836,6 +795,7 @@ async def perform_instant_refine_async( "json", Optional[operations.PerformInstantRefineRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -849,8 +809,10 @@ async def perform_instant_refine_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="performInstantRefine", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -860,8 +822,8 @@ async def perform_instant_refine_async( if utils.match_response(http_res, "200", "application/json"): return operations.PerformInstantRefineResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.PerformInstantRefineResponseBody] + object=unmarshal_json_response( + Optional[operations.PerformInstantRefineResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -869,20 +831,9 @@ async def perform_instant_refine_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) diff --git a/src/leonardo_ai_sdk/sdk.py b/src/leonardo_ai_sdk/sdk.py index 005f8dee..10eec437 100644 --- a/src/leonardo_ai_sdk/sdk.py +++ b/src/leonardo_ai_sdk/sdk.py @@ -6,43 +6,68 @@ from .utils.logger import Logger, get_default_logger from .utils.retries import RetryConfig import httpx +import importlib from leonardo_ai_sdk import utils from leonardo_ai_sdk._hooks import SDKHooks -from leonardo_ai_sdk.dataset import Dataset -from leonardo_ai_sdk.elements import Elements -from leonardo_ai_sdk.image import Image -from leonardo_ai_sdk.init_images import InitImages from leonardo_ai_sdk.models import shared -from leonardo_ai_sdk.models_ import Models -from leonardo_ai_sdk.motion import Motion -from leonardo_ai_sdk.pricing_calculator import PricingCalculator -from leonardo_ai_sdk.prompt import Prompt -from leonardo_ai_sdk.realtime_canvas import RealtimeCanvas -from leonardo_ai_sdk.texture import Texture -from leonardo_ai_sdk.threed_model_assets import ThreeDModelAssets from leonardo_ai_sdk.types import OptionalNullable, UNSET -from leonardo_ai_sdk.user import User -from leonardo_ai_sdk.variation import Variation -from typing import Any, Callable, Dict, Optional, Union, cast +import sys +from typing import Any, Callable, Dict, Optional, TYPE_CHECKING, Union, cast import weakref +if TYPE_CHECKING: + from leonardo_ai_sdk.dataset import Dataset + from leonardo_ai_sdk.elements import Elements + from leonardo_ai_sdk.image import Image + from leonardo_ai_sdk.init_images import InitImages + from leonardo_ai_sdk.models_ import Models + from leonardo_ai_sdk.motion import Motion + from leonardo_ai_sdk.pricing_calculator import PricingCalculator + from leonardo_ai_sdk.prompt import Prompt + from leonardo_ai_sdk.realtime_canvas import RealtimeCanvas + from leonardo_ai_sdk.texture import Texture + from leonardo_ai_sdk.threed_model_assets import ThreeDModelAssets + from leonardo_ai_sdk.user import User + from leonardo_ai_sdk.variation import Variation + class LeonardoAiSDK(BaseSDK): r"""Rest Endpoints: Leonardo.Ai API OpenAPI specification.""" - init_images: InitImages - dataset: Dataset - elements: Elements - image: Image - realtime_canvas: RealtimeCanvas - motion: Motion - texture: Texture - user: User - models: Models - three_d_model_assets: ThreeDModelAssets - pricing_calculator: PricingCalculator - prompt: Prompt - variation: Variation + init_images: "InitImages" + dataset: "Dataset" + elements: "Elements" + image: "Image" + motion: "Motion" + realtime_canvas: "RealtimeCanvas" + texture: "Texture" + user: "User" + models: "Models" + three_d_model_assets: "ThreeDModelAssets" + variation: "Variation" + pricing_calculator: "PricingCalculator" + prompt: "Prompt" + _sub_sdk_map = { + "init_images": ("leonardo_ai_sdk.init_images", "InitImages"), + "dataset": ("leonardo_ai_sdk.dataset", "Dataset"), + "elements": ("leonardo_ai_sdk.elements", "Elements"), + "image": ("leonardo_ai_sdk.image", "Image"), + "motion": ("leonardo_ai_sdk.motion", "Motion"), + "realtime_canvas": ("leonardo_ai_sdk.realtime_canvas", "RealtimeCanvas"), + "texture": ("leonardo_ai_sdk.texture", "Texture"), + "user": ("leonardo_ai_sdk.user", "User"), + "models": ("leonardo_ai_sdk.models_", "Models"), + "three_d_model_assets": ( + "leonardo_ai_sdk.threed_model_assets", + "ThreeDModelAssets", + ), + "variation": ("leonardo_ai_sdk.variation", "Variation"), + "pricing_calculator": ( + "leonardo_ai_sdk.pricing_calculator", + "PricingCalculator", + ), + "prompt": ("leonardo_ai_sdk.prompt", "Prompt"), + } def __init__( self, @@ -67,15 +92,19 @@ def __init__( :param retry_config: The retry configuration to use for all supported methods :param timeout_ms: Optional request timeout applied to each operation in milliseconds """ + client_supplied = True if client is None: - client = httpx.Client() + client = httpx.Client(follow_redirects=True) + client_supplied = False assert issubclass( type(client), HttpClient ), "The provided client must implement the HttpClient protocol." + async_client_supplied = True if async_client is None: - async_client = httpx.AsyncClient() + async_client = httpx.AsyncClient(follow_redirects=True) + async_client_supplied = False if debug_logger is None: debug_logger = get_default_logger() @@ -99,7 +128,9 @@ def __init__( self, SDKConfiguration( client=client, + client_supplied=client_supplied, async_client=async_client, + async_client_supplied=async_client_supplied, security=security, server_url=server_url, server_idx=server_idx, @@ -107,44 +138,68 @@ def __init__( timeout_ms=timeout_ms, debug_logger=debug_logger, ), + parent_ref=self, ) hooks = SDKHooks() + # pylint: disable=protected-access + self.sdk_configuration.__dict__["_hooks"] = hooks + current_server_url, *_ = self.sdk_configuration.get_server_details() server_url, self.sdk_configuration.client = hooks.sdk_init( - current_server_url, self.sdk_configuration.client + current_server_url, client ) if current_server_url != server_url: self.sdk_configuration.server_url = server_url - # pylint: disable=protected-access - self.sdk_configuration.__dict__["_hooks"] = hooks - weakref.finalize( self, close_clients, cast(ClientOwner, self.sdk_configuration), self.sdk_configuration.client, + self.sdk_configuration.client_supplied, self.sdk_configuration.async_client, + self.sdk_configuration.async_client_supplied, + ) + + def dynamic_import(self, modname, retries=3): + for attempt in range(retries): + try: + return importlib.import_module(modname) + except KeyError: + # Clear any half-initialized module and retry + sys.modules.pop(modname, None) + if attempt == retries - 1: + break + raise KeyError(f"Failed to import module '{modname}' after {retries} attempts") + + def __getattr__(self, name: str): + if name in self._sub_sdk_map: + module_path, class_name = self._sub_sdk_map[name] + try: + module = self.dynamic_import(module_path) + klass = getattr(module, class_name) + instance = klass(self.sdk_configuration, parent_ref=self) + setattr(self, name, instance) + return instance + except ImportError as e: + raise AttributeError( + f"Failed to import module {module_path} for attribute {name}: {e}" + ) from e + except AttributeError as e: + raise AttributeError( + f"Failed to find class {class_name} in module {module_path} for attribute {name}: {e}" + ) from e + + raise AttributeError( + f"'{type(self).__name__}' object has no attribute '{name}'" ) - self._init_sdks() - - def _init_sdks(self): - self.init_images = InitImages(self.sdk_configuration) - self.dataset = Dataset(self.sdk_configuration) - self.elements = Elements(self.sdk_configuration) - self.image = Image(self.sdk_configuration) - self.realtime_canvas = RealtimeCanvas(self.sdk_configuration) - self.motion = Motion(self.sdk_configuration) - self.texture = Texture(self.sdk_configuration) - self.user = User(self.sdk_configuration) - self.models = Models(self.sdk_configuration) - self.three_d_model_assets = ThreeDModelAssets(self.sdk_configuration) - self.pricing_calculator = PricingCalculator(self.sdk_configuration) - self.prompt = Prompt(self.sdk_configuration) - self.variation = Variation(self.sdk_configuration) + def __dir__(self): + default_attrs = list(super().__dir__()) + lazy_attrs = list(self._sub_sdk_map.keys()) + return sorted(list(set(default_attrs + lazy_attrs))) def __enter__(self): return self @@ -153,9 +208,17 @@ async def __aenter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): - if self.sdk_configuration.client is not None: + if ( + self.sdk_configuration.client is not None + and not self.sdk_configuration.client_supplied + ): self.sdk_configuration.client.close() + self.sdk_configuration.client = None async def __aexit__(self, exc_type, exc_val, exc_tb): - if self.sdk_configuration.async_client is not None: + if ( + self.sdk_configuration.async_client is not None + and not self.sdk_configuration.async_client_supplied + ): await self.sdk_configuration.async_client.aclose() + self.sdk_configuration.async_client = None diff --git a/src/leonardo_ai_sdk/sdkconfiguration.py b/src/leonardo_ai_sdk/sdkconfiguration.py index 68bf650b..6c5e7971 100644 --- a/src/leonardo_ai_sdk/sdkconfiguration.py +++ b/src/leonardo_ai_sdk/sdkconfiguration.py @@ -1,6 +1,5 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" -from ._hooks import SDKHooks from ._version import ( __gen_version__, __openapi_doc_version__, @@ -25,8 +24,10 @@ @dataclass class SDKConfiguration: - client: HttpClient - async_client: AsyncHttpClient + client: Union[HttpClient, None] + client_supplied: bool + async_client: Union[AsyncHttpClient, None] + async_client_supplied: bool debug_logger: Logger security: Optional[Union[shared.Security, Callable[[], shared.Security]]] = None server_url: Optional[str] = "" @@ -39,9 +40,6 @@ class SDKConfiguration: retry_config: OptionalNullable[RetryConfig] = Field(default_factory=lambda: UNSET) timeout_ms: Optional[int] = None - def __post_init__(self): - self._hooks = SDKHooks() - def get_server_details(self) -> Tuple[str, Dict[str, str]]: if self.server_url is not None and self.server_url: return remove_suffix(self.server_url, "/"), {} @@ -49,6 +47,3 @@ def get_server_details(self) -> Tuple[str, Dict[str, str]]: self.server_idx = 0 return SERVERS[self.server_idx], {} - - def get_hooks(self) -> SDKHooks: - return self._hooks diff --git a/src/leonardo_ai_sdk/texture.py b/src/leonardo_ai_sdk/texture.py index 481d60d8..15071648 100644 --- a/src/leonardo_ai_sdk/texture.py +++ b/src/leonardo_ai_sdk/texture.py @@ -5,6 +5,7 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import BaseModel, OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional, Union, cast @@ -40,6 +41,8 @@ def create_texture_generation( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -67,6 +70,7 @@ def create_texture_generation( "json", Optional[operations.CreateTextureGenerationRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -80,8 +84,10 @@ def create_texture_generation( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createTextureGeneration", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -91,9 +97,8 @@ def create_texture_generation( if utils.match_response(http_res, "200", "application/json"): return operations.CreateTextureGenerationResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.CreateTextureGenerationResponseBody], + object=unmarshal_json_response( + Optional[operations.CreateTextureGenerationResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -101,23 +106,12 @@ def create_texture_generation( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def create_texture_generation_async( self, @@ -150,6 +144,8 @@ async def create_texture_generation_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -177,6 +173,7 @@ async def create_texture_generation_async( "json", Optional[operations.CreateTextureGenerationRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -190,8 +187,10 @@ async def create_texture_generation_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createTextureGeneration", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -201,9 +200,8 @@ async def create_texture_generation_async( if utils.match_response(http_res, "200", "application/json"): return operations.CreateTextureGenerationResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.CreateTextureGenerationResponseBody], + object=unmarshal_json_response( + Optional[operations.CreateTextureGenerationResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -211,23 +209,12 @@ async def create_texture_generation_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def delete_texture_generation_by_id( self, @@ -262,6 +249,8 @@ def delete_texture_generation_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.DeleteTextureGenerationByIDRequest( id=id, @@ -291,6 +280,7 @@ def delete_texture_generation_by_id( "json", Optional[operations.DeleteTextureGenerationByIDRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -304,8 +294,10 @@ def delete_texture_generation_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="deleteTextureGenerationById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -315,9 +307,9 @@ def delete_texture_generation_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.DeleteTextureGenerationByIDResponse( - object=utils.unmarshal_json( - http_res.text, + object=unmarshal_json_response( Optional[operations.DeleteTextureGenerationByIDResponseBody], + http_res, ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -325,23 +317,12 @@ def delete_texture_generation_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def delete_texture_generation_by_id_async( self, @@ -376,6 +357,8 @@ async def delete_texture_generation_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.DeleteTextureGenerationByIDRequest( id=id, @@ -405,6 +388,7 @@ async def delete_texture_generation_by_id_async( "json", Optional[operations.DeleteTextureGenerationByIDRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -418,8 +402,10 @@ async def delete_texture_generation_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="deleteTextureGenerationById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -429,9 +415,9 @@ async def delete_texture_generation_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.DeleteTextureGenerationByIDResponse( - object=utils.unmarshal_json( - http_res.text, + object=unmarshal_json_response( Optional[operations.DeleteTextureGenerationByIDResponseBody], + http_res, ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -439,23 +425,12 @@ async def delete_texture_generation_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def get_texture_generation_by_id( self, @@ -494,6 +469,8 @@ def get_texture_generation_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetTextureGenerationByIDRequest( id=id, @@ -524,6 +501,7 @@ def get_texture_generation_by_id( "json", Optional[operations.GetTextureGenerationByIDRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -537,8 +515,10 @@ def get_texture_generation_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getTextureGenerationById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -548,9 +528,8 @@ def get_texture_generation_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.GetTextureGenerationByIDResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.GetTextureGenerationByIDResponseBody], + object=unmarshal_json_response( + Optional[operations.GetTextureGenerationByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -558,23 +537,12 @@ def get_texture_generation_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get_texture_generation_by_id_async( self, @@ -613,6 +581,8 @@ async def get_texture_generation_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetTextureGenerationByIDRequest( id=id, @@ -643,6 +613,7 @@ async def get_texture_generation_by_id_async( "json", Optional[operations.GetTextureGenerationByIDRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -656,8 +627,10 @@ async def get_texture_generation_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getTextureGenerationById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -667,9 +640,8 @@ async def get_texture_generation_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.GetTextureGenerationByIDResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.GetTextureGenerationByIDResponseBody], + object=unmarshal_json_response( + Optional[operations.GetTextureGenerationByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -677,23 +649,12 @@ async def get_texture_generation_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def get_texture_generations_by_model_id( self, @@ -732,6 +693,8 @@ def get_texture_generations_by_model_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetTextureGenerationsByModelIDRequest( limit=limit, @@ -763,6 +726,7 @@ def get_texture_generations_by_model_id( "json", Optional[operations.GetTextureGenerationsByModelIDRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -776,8 +740,10 @@ def get_texture_generations_by_model_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getTextureGenerationsByModelId", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -787,9 +753,9 @@ def get_texture_generations_by_model_id( if utils.match_response(http_res, "200", "application/json"): return operations.GetTextureGenerationsByModelIDResponse( - object=utils.unmarshal_json( - http_res.text, + object=unmarshal_json_response( Optional[operations.GetTextureGenerationsByModelIDResponseBody], + http_res, ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -797,23 +763,12 @@ def get_texture_generations_by_model_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get_texture_generations_by_model_id_async( self, @@ -852,6 +807,8 @@ async def get_texture_generations_by_model_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetTextureGenerationsByModelIDRequest( limit=limit, @@ -883,6 +840,7 @@ async def get_texture_generations_by_model_id_async( "json", Optional[operations.GetTextureGenerationsByModelIDRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -896,8 +854,10 @@ async def get_texture_generations_by_model_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getTextureGenerationsByModelId", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -907,9 +867,9 @@ async def get_texture_generations_by_model_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.GetTextureGenerationsByModelIDResponse( - object=utils.unmarshal_json( - http_res.text, + object=unmarshal_json_response( Optional[operations.GetTextureGenerationsByModelIDResponseBody], + http_res, ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -917,20 +877,9 @@ async def get_texture_generations_by_model_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) diff --git a/src/leonardo_ai_sdk/threed_model_assets.py b/src/leonardo_ai_sdk/threed_model_assets.py index a3754268..0a6b6160 100644 --- a/src/leonardo_ai_sdk/threed_model_assets.py +++ b/src/leonardo_ai_sdk/threed_model_assets.py @@ -5,6 +5,7 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import BaseModel, OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional, Union, cast @@ -42,6 +43,8 @@ def delete3_d_model_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.Delete3DModelByIDRequest( id=id, @@ -70,6 +73,7 @@ def delete3_d_model_by_id( "json", Optional[operations.Delete3DModelByIDRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -83,8 +87,10 @@ def delete3_d_model_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="delete3DModelById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -94,8 +100,8 @@ def delete3_d_model_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.Delete3DModelByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.Delete3DModelByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.Delete3DModelByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -103,23 +109,12 @@ def delete3_d_model_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def delete3_d_model_by_id_async( self, @@ -154,6 +149,8 @@ async def delete3_d_model_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.Delete3DModelByIDRequest( id=id, @@ -182,6 +179,7 @@ async def delete3_d_model_by_id_async( "json", Optional[operations.Delete3DModelByIDRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -195,8 +193,10 @@ async def delete3_d_model_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="delete3DModelById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -206,8 +206,8 @@ async def delete3_d_model_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.Delete3DModelByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.Delete3DModelByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.Delete3DModelByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -215,23 +215,12 @@ async def delete3_d_model_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def get3_d_model_by_id( self, @@ -270,6 +259,8 @@ def get3_d_model_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.Get3DModelByIDRequest( id=id, @@ -300,6 +291,7 @@ def get3_d_model_by_id( "json", Optional[operations.Get3DModelByIDRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -313,8 +305,10 @@ def get3_d_model_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="get3DModelById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -324,8 +318,8 @@ def get3_d_model_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.Get3DModelByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.Get3DModelByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.Get3DModelByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -333,23 +327,12 @@ def get3_d_model_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get3_d_model_by_id_async( self, @@ -388,6 +371,8 @@ async def get3_d_model_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.Get3DModelByIDRequest( id=id, @@ -418,6 +403,7 @@ async def get3_d_model_by_id_async( "json", Optional[operations.Get3DModelByIDRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -431,8 +417,10 @@ async def get3_d_model_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="get3DModelById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -442,8 +430,8 @@ async def get3_d_model_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.Get3DModelByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.Get3DModelByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.Get3DModelByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -451,23 +439,12 @@ async def get3_d_model_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def get3_d_models_by_user_id( self, @@ -506,6 +483,8 @@ def get3_d_models_by_user_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.Get3DModelsByUserIDRequest( limit=limit, @@ -536,6 +515,7 @@ def get3_d_models_by_user_id( "json", Optional[operations.Get3DModelsByUserIDRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -549,8 +529,10 @@ def get3_d_models_by_user_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="get3DModelsByUserId", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -560,8 +542,8 @@ def get3_d_models_by_user_id( if utils.match_response(http_res, "200", "application/json"): return operations.Get3DModelsByUserIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.Get3DModelsByUserIDResponseBody] + object=unmarshal_json_response( + Optional[operations.Get3DModelsByUserIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -569,23 +551,12 @@ def get3_d_models_by_user_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get3_d_models_by_user_id_async( self, @@ -624,6 +595,8 @@ async def get3_d_models_by_user_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.Get3DModelsByUserIDRequest( limit=limit, @@ -654,6 +627,7 @@ async def get3_d_models_by_user_id_async( "json", Optional[operations.Get3DModelsByUserIDRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -667,8 +641,10 @@ async def get3_d_models_by_user_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="get3DModelsByUserId", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -678,8 +654,8 @@ async def get3_d_models_by_user_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.Get3DModelsByUserIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.Get3DModelsByUserIDResponseBody] + object=unmarshal_json_response( + Optional[operations.Get3DModelsByUserIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -687,23 +663,12 @@ async def get3_d_models_by_user_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def upload_model_asset( self, @@ -736,6 +701,8 @@ def upload_model_asset( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -763,6 +730,7 @@ def upload_model_asset( "json", Optional[operations.UploadModelAssetRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -776,8 +744,10 @@ def upload_model_asset( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="uploadModelAsset", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -787,8 +757,8 @@ def upload_model_asset( if utils.match_response(http_res, "200", "application/json"): return operations.UploadModelAssetResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.UploadModelAssetResponseBody] + object=unmarshal_json_response( + Optional[operations.UploadModelAssetResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -796,23 +766,12 @@ def upload_model_asset( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def upload_model_asset_async( self, @@ -845,6 +804,8 @@ async def upload_model_asset_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -872,6 +833,7 @@ async def upload_model_asset_async( "json", Optional[operations.UploadModelAssetRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -885,8 +847,10 @@ async def upload_model_asset_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="uploadModelAsset", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -896,8 +860,8 @@ async def upload_model_asset_async( if utils.match_response(http_res, "200", "application/json"): return operations.UploadModelAssetResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.UploadModelAssetResponseBody] + object=unmarshal_json_response( + Optional[operations.UploadModelAssetResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -905,20 +869,9 @@ async def upload_model_asset_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) diff --git a/src/leonardo_ai_sdk/types/basemodel.py b/src/leonardo_ai_sdk/types/basemodel.py index a6187efa..a9a640a1 100644 --- a/src/leonardo_ai_sdk/types/basemodel.py +++ b/src/leonardo_ai_sdk/types/basemodel.py @@ -2,7 +2,8 @@ from pydantic import ConfigDict, model_serializer from pydantic import BaseModel as PydanticBaseModel -from typing import TYPE_CHECKING, Literal, Optional, TypeVar, Union, NewType +from pydantic_core import core_schema +from typing import TYPE_CHECKING, Any, Literal, Optional, TypeVar, Union from typing_extensions import TypeAliasType, TypeAlias @@ -35,5 +36,42 @@ def __bool__(self) -> Literal[False]: "OptionalNullable", Union[Optional[Nullable[T]], Unset], type_params=(T,) ) -UnrecognizedInt = NewType("UnrecognizedInt", int) -UnrecognizedStr = NewType("UnrecognizedStr", str) + +class UnrecognizedStr(str): + @classmethod + def __get_pydantic_core_schema__(cls, _source_type: Any, _handler: Any) -> core_schema.CoreSchema: + # Make UnrecognizedStr only work in lax mode, not strict mode + # This makes it a "fallback" option when more specific types (like Literals) don't match + def validate_lax(v: Any) -> 'UnrecognizedStr': + if isinstance(v, cls): + return v + return cls(str(v)) + + # Use lax_or_strict_schema where strict always fails + # This forces Pydantic to prefer other union members in strict mode + # and only fall back to UnrecognizedStr in lax mode + return core_schema.lax_or_strict_schema( + lax_schema=core_schema.chain_schema([ + core_schema.str_schema(), + core_schema.no_info_plain_validator_function(validate_lax) + ]), + strict_schema=core_schema.none_schema(), # Always fails in strict mode + ) + + +class UnrecognizedInt(int): + @classmethod + def __get_pydantic_core_schema__(cls, _source_type: Any, _handler: Any) -> core_schema.CoreSchema: + # Make UnrecognizedInt only work in lax mode, not strict mode + # This makes it a "fallback" option when more specific types (like Literals) don't match + def validate_lax(v: Any) -> 'UnrecognizedInt': + if isinstance(v, cls): + return v + return cls(int(v)) + return core_schema.lax_or_strict_schema( + lax_schema=core_schema.chain_schema([ + core_schema.int_schema(), + core_schema.no_info_plain_validator_function(validate_lax) + ]), + strict_schema=core_schema.none_schema(), # Always fails in strict mode + ) diff --git a/src/leonardo_ai_sdk/user.py b/src/leonardo_ai_sdk/user.py index 7b93e3d1..76d41b38 100644 --- a/src/leonardo_ai_sdk/user.py +++ b/src/leonardo_ai_sdk/user.py @@ -5,6 +5,7 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional @@ -33,6 +34,8 @@ def get_user_self( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) req = self._build_request( method="GET", path="/me", @@ -46,6 +49,7 @@ def get_user_self( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -59,8 +63,10 @@ def get_user_self( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getUserSelf", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -70,8 +76,8 @@ def get_user_self( if utils.match_response(http_res, "200", "application/json"): return operations.GetUserSelfResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetUserSelfResponseBody] + object=unmarshal_json_response( + Optional[operations.GetUserSelfResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -79,23 +85,12 @@ def get_user_self( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get_user_self_async( self, @@ -121,6 +116,8 @@ async def get_user_self_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) req = self._build_request_async( method="GET", path="/me", @@ -134,6 +131,7 @@ async def get_user_self_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -147,8 +145,10 @@ async def get_user_self_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getUserSelf", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -158,8 +158,8 @@ async def get_user_self_async( if utils.match_response(http_res, "200", "application/json"): return operations.GetUserSelfResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetUserSelfResponseBody] + object=unmarshal_json_response( + Optional[operations.GetUserSelfResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -167,20 +167,9 @@ async def get_user_self_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) diff --git a/src/leonardo_ai_sdk/utils/__init__.py b/src/leonardo_ai_sdk/utils/__init__.py index 26d51ae8..c906e1e0 100644 --- a/src/leonardo_ai_sdk/utils/__init__.py +++ b/src/leonardo_ai_sdk/utils/__init__.py @@ -1,49 +1,68 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" -from .annotations import get_discriminator -from .enums import OpenEnumMeta -from .headers import get_headers, get_response_headers -from .metadata import ( - FieldMetadata, - find_metadata, - FormMetadata, - HeaderMetadata, - MultipartFormMetadata, - PathParamMetadata, - QueryParamMetadata, - RequestMetadata, - SecurityMetadata, -) -from .queryparams import get_query_params -from .retries import BackoffStrategy, Retries, retry, retry_async, RetryConfig -from .requestbodies import serialize_request_body, SerializedRequestBody -from .security import get_security -from .serializers import ( - get_pydantic_model, - marshal_json, - unmarshal, - unmarshal_json, - serialize_decimal, - serialize_float, - serialize_int, - stream_to_text, - stream_to_text_async, - stream_to_bytes, - stream_to_bytes_async, - validate_const, - validate_decimal, - validate_float, - validate_int, - validate_open_enum, -) -from .url import generate_url, template_url, remove_suffix -from .values import ( - get_global_from_env, - match_content_type, - match_status_codes, - match_response, -) -from .logger import Logger, get_body_content, get_default_logger +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 + from .enums import OpenEnumMeta + from .headers import get_headers, get_response_headers + from .metadata import ( + FieldMetadata, + find_metadata, + FormMetadata, + HeaderMetadata, + MultipartFormMetadata, + PathParamMetadata, + QueryParamMetadata, + RequestMetadata, + SecurityMetadata, + ) + from .queryparams import get_query_params + from .retries import BackoffStrategy, Retries, retry, retry_async, RetryConfig + from .requestbodies import serialize_request_body, SerializedRequestBody + from .security import get_security + from .serializers import ( + get_pydantic_model, + marshal_json, + unmarshal, + unmarshal_json, + serialize_decimal, + serialize_float, + serialize_int, + stream_to_text, + stream_to_text_async, + stream_to_bytes, + stream_to_bytes_async, + validate_const, + validate_decimal, + validate_float, + validate_int, + ) + from .url import generate_url, template_url, remove_suffix + from .values import ( + get_global_from_env, + match_content_type, + match_status_codes, + match_response, + cast_partial, + ) + from .logger import Logger, get_body_content, get_default_logger __all__ = [ "BackoffStrategy", @@ -54,6 +73,7 @@ "get_body_content", "get_default_logger", "get_discriminator", + "parse_datetime", "get_global_from_env", "get_headers", "get_pydantic_model", @@ -93,5 +113,94 @@ "validate_const", "validate_float", "validate_int", - "validate_open_enum", + "cast_partial", ] + +_dynamic_imports: dict[str, str] = { + "BackoffStrategy": ".retries", + "FieldMetadata": ".metadata", + "find_metadata": ".metadata", + "FormMetadata": ".metadata", + "generate_url": ".url", + "get_body_content": ".logger", + "get_default_logger": ".logger", + "get_discriminator": ".annotations", + "parse_datetime": ".datetimes", + "get_global_from_env": ".values", + "get_headers": ".headers", + "get_pydantic_model": ".serializers", + "get_query_params": ".queryparams", + "get_response_headers": ".headers", + "get_security": ".security", + "HeaderMetadata": ".metadata", + "Logger": ".logger", + "marshal_json": ".serializers", + "match_content_type": ".values", + "match_status_codes": ".values", + "match_response": ".values", + "MultipartFormMetadata": ".metadata", + "OpenEnumMeta": ".enums", + "PathParamMetadata": ".metadata", + "QueryParamMetadata": ".metadata", + "remove_suffix": ".url", + "Retries": ".retries", + "retry": ".retries", + "retry_async": ".retries", + "RetryConfig": ".retries", + "RequestMetadata": ".metadata", + "SecurityMetadata": ".metadata", + "serialize_decimal": ".serializers", + "serialize_float": ".serializers", + "serialize_int": ".serializers", + "serialize_request_body": ".requestbodies", + "SerializedRequestBody": ".requestbodies", + "stream_to_text": ".serializers", + "stream_to_text_async": ".serializers", + "stream_to_bytes": ".serializers", + "stream_to_bytes_async": ".serializers", + "template_url": ".url", + "unmarshal": ".serializers", + "unmarshal_json": ".serializers", + "validate_decimal": ".serializers", + "validate_const": ".serializers", + "validate_float": ".serializers", + "validate_int": ".serializers", + "cast_partial": ".values", +} + + +def dynamic_import(modname, retries=3): + for attempt in range(retries): + try: + return import_module(modname, __package__) + except KeyError: + # Clear any half-initialized module and retry + sys.modules.pop(modname, None) + if attempt == retries - 1: + break + raise KeyError(f"Failed to import module '{modname}' after {retries} attempts") + + +def __getattr__(attr_name: str) -> object: + module_name = _dynamic_imports.get(attr_name) + if module_name is None: + raise AttributeError( + f"no {attr_name} found in _dynamic_imports, module name -> {__name__} " + ) + + try: + module = dynamic_import(module_name) + return getattr(module, attr_name) + except ImportError as e: + raise ImportError( + f"Failed to import {attr_name} from {module_name}: {e}" + ) from e + except AttributeError as e: + raise AttributeError( + f"Failed to get {attr_name} from {module_name}: {e}" + ) from e + + +def __dir__(): + lazy_attrs = builtins.list(_dynamic_imports.keys()) + return builtins.sorted(lazy_attrs) diff --git a/src/leonardo_ai_sdk/utils/annotations.py b/src/leonardo_ai_sdk/utils/annotations.py index 387874ed..12e0aa4f 100644 --- a/src/leonardo_ai_sdk/utils/annotations.py +++ b/src/leonardo_ai_sdk/utils/annotations.py @@ -3,6 +3,7 @@ from enum import Enum from typing import Any, Optional + def get_discriminator(model: Any, fieldname: str, key: str) -> str: """ Recursively search for the discriminator attribute in a model. @@ -25,31 +26,54 @@ def get_field_discriminator(field: Any) -> Optional[str]: if isinstance(field, dict): if key in field: - return f'{field[key]}' + return f"{field[key]}" if hasattr(field, fieldname): attr = getattr(field, fieldname) if isinstance(attr, Enum): - return f'{attr.value}' - return f'{attr}' + return f"{attr.value}" + return f"{attr}" if hasattr(field, upper_fieldname): attr = getattr(field, upper_fieldname) if isinstance(attr, Enum): - return f'{attr.value}' - return f'{attr}' + return f"{attr.value}" + return f"{attr}" return None + def search_nested_discriminator(obj: Any) -> Optional[str]: + """Recursively search for discriminator in nested structures.""" + # First try direct field lookup + discriminator = get_field_discriminator(obj) + if discriminator is not None: + return discriminator + + # If it's a dict, search in nested values + if isinstance(obj, dict): + for value in obj.values(): + if isinstance(value, list): + # Search in list items + for item in value: + nested_discriminator = search_nested_discriminator(item) + if nested_discriminator is not None: + return nested_discriminator + elif isinstance(value, dict): + # Search in nested dict + nested_discriminator = search_nested_discriminator(value) + if nested_discriminator is not None: + return nested_discriminator + + return None if isinstance(model, list): for field in model: - discriminator = get_field_discriminator(field) + discriminator = search_nested_discriminator(field) if discriminator is not None: return discriminator - discriminator = get_field_discriminator(model) + discriminator = search_nested_discriminator(model) if discriminator is not None: return discriminator - raise ValueError(f'Could not find discriminator field {fieldname} in {model}') + raise ValueError(f"Could not find discriminator field {fieldname} in {model}") diff --git a/src/leonardo_ai_sdk/utils/datetimes.py b/src/leonardo_ai_sdk/utils/datetimes.py new file mode 100644 index 00000000..a6c52cd6 --- /dev/null +++ b/src/leonardo_ai_sdk/utils/datetimes.py @@ -0,0 +1,23 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from datetime import datetime +import sys + + +def parse_datetime(datetime_string: str) -> datetime: + """ + Convert a RFC 3339 / ISO 8601 formatted string into a datetime object. + Python versions 3.11 and later support parsing RFC 3339 directly with + datetime.fromisoformat(), but for earlier versions, this function + encapsulates the necessary extra logic. + """ + # Python 3.11 and later can parse RFC 3339 directly + if sys.version_info >= (3, 11): + return datetime.fromisoformat(datetime_string) + + # For Python 3.10 and earlier, a common ValueError is trailing 'Z' suffix, + # so fix that upfront. + if datetime_string.endswith("Z"): + datetime_string = datetime_string[:-1] + "+00:00" + + return datetime.fromisoformat(datetime_string) diff --git a/src/leonardo_ai_sdk/utils/enums.py b/src/leonardo_ai_sdk/utils/enums.py index c650b10c..3324e1bc 100644 --- a/src/leonardo_ai_sdk/utils/enums.py +++ b/src/leonardo_ai_sdk/utils/enums.py @@ -1,34 +1,134 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" import enum +import sys +from typing import Any + +from pydantic_core import core_schema class OpenEnumMeta(enum.EnumMeta): - def __call__( - cls, value, names=None, *, module=None, qualname=None, type=None, start=1 - ): - # The `type` kwarg also happens to be a built-in that pylint flags as - # redeclared. Safe to ignore this lint rule with this scope. - # pylint: disable=redefined-builtin - - if names is not None: - return super().__call__( - value, - names=names, - module=module, - qualname=qualname, - type=type, - start=start, + # The __call__ method `boundary` kwarg was added in 3.11 and must be present + # for pyright. Refer also: https://github.com/pylint-dev/pylint/issues/9622 + # pylint: disable=unexpected-keyword-arg + # The __call__ method `values` varg must be named for pyright. + # pylint: disable=keyword-arg-before-vararg + + if sys.version_info >= (3, 11): + def __call__( + cls, value, names=None, *values, module=None, qualname=None, type=None, start=1, boundary=None + ): + # The `type` kwarg also happens to be a built-in that pylint flags as + # redeclared. Safe to ignore this lint rule with this scope. + # pylint: disable=redefined-builtin + + if names is not None: + return super().__call__( + value, + names=names, + *values, + module=module, + qualname=qualname, + type=type, + start=start, + boundary=boundary, + ) + + try: + return super().__call__( + value, + names=names, # pyright: ignore[reportArgumentType] + *values, + module=module, + qualname=qualname, + type=type, + start=start, + boundary=boundary, + ) + except ValueError: + return value + else: + def __call__( + cls, value, names=None, *, module=None, qualname=None, type=None, start=1 + ): + # The `type` kwarg also happens to be a built-in that pylint flags as + # redeclared. Safe to ignore this lint rule with this scope. + # pylint: disable=redefined-builtin + + if names is not None: + return super().__call__( + value, + names=names, + module=module, + qualname=qualname, + type=type, + start=start, + ) + + try: + return super().__call__( + value, + names=names, # pyright: ignore[reportArgumentType] + module=module, + qualname=qualname, + type=type, + start=start, + ) + 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() ) - try: - return super().__call__( - value, - names=names, # pyright: ignore[reportArgumentType] - module=module, - qualname=qualname, - type=type, - start=start, + # 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)] + ), ) - except ValueError: - return value + + setattr(cls, "__get_pydantic_core_schema__", classmethod(__get_pydantic_core_schema__)) + return cls diff --git a/src/leonardo_ai_sdk/utils/eventstreaming.py b/src/leonardo_ai_sdk/utils/eventstreaming.py index 74a63f75..0969899b 100644 --- a/src/leonardo_ai_sdk/utils/eventstreaming.py +++ b/src/leonardo_ai_sdk/utils/eventstreaming.py @@ -17,6 +17,9 @@ class EventStream(Generic[T]): + # Holds a reference to the SDK client to avoid it being garbage collected + # and cause termination of the underlying httpx client. + client_ref: Optional[object] response: httpx.Response generator: Generator[T, None, None] @@ -25,9 +28,11 @@ def __init__( response: httpx.Response, decoder: Callable[[str], T], sentinel: Optional[str] = None, + client_ref: Optional[object] = None, ): self.response = response self.generator = stream_events(response, decoder, sentinel) + self.client_ref = client_ref def __iter__(self): return self @@ -43,6 +48,9 @@ def __exit__(self, exc_type, exc_val, exc_tb): class EventStreamAsync(Generic[T]): + # Holds a reference to the SDK client to avoid it being garbage collected + # and cause termination of the underlying httpx client. + client_ref: Optional[object] response: httpx.Response generator: AsyncGenerator[T, None] @@ -51,9 +59,11 @@ def __init__( response: httpx.Response, decoder: Callable[[str], T], sentinel: Optional[str] = None, + client_ref: Optional[object] = None, ): self.response = response self.generator = stream_events_async(response, decoder, sentinel) + self.client_ref = client_ref def __aiter__(self): return self diff --git a/src/leonardo_ai_sdk/utils/forms.py b/src/leonardo_ai_sdk/utils/forms.py index 0472aba8..f961e76b 100644 --- a/src/leonardo_ai_sdk/utils/forms.py +++ b/src/leonardo_ai_sdk/utils/forms.py @@ -86,11 +86,39 @@ def _populate_form( return form +def _extract_file_properties(file_obj: Any) -> Tuple[str, Any, Any]: + """Extract file name, content, and content type from a file object.""" + file_fields: Dict[str, FieldInfo] = file_obj.__class__.model_fields + + file_name = "" + content = None + content_type = None + + for file_field_name in file_fields: + file_field = file_fields[file_field_name] + + file_metadata = find_field_metadata(file_field, MultipartFormMetadata) + if file_metadata is None: + continue + + if file_metadata.content: + content = getattr(file_obj, file_field_name, None) + elif file_field_name == "content_type": + content_type = getattr(file_obj, file_field_name, None) + else: + file_name = getattr(file_obj, file_field_name) + + if file_name == "" or content is None: + raise ValueError("invalid multipart/form-data file") + + return file_name, content, content_type + + def serialize_multipart_form( media_type: str, request: Any -) -> Tuple[str, Dict[str, Any], Dict[str, Any]]: +) -> Tuple[str, Dict[str, Any], List[Tuple[str, Any]]]: form: Dict[str, Any] = {} - files: Dict[str, Any] = {} + files: List[Tuple[str, Any]] = [] if not isinstance(request, BaseModel): raise TypeError("invalid request body type") @@ -112,38 +140,41 @@ def serialize_multipart_form( f_name = field.alias if field.alias else name if field_metadata.file: - file_fields: Dict[str, FieldInfo] = val.__class__.model_fields - - file_name = "" - content = None - content_type = None + if isinstance(val, List): + # Handle array of files + array_field_name = f_name + "[]" + for file_obj in val: + if not _is_set(file_obj): + continue - for file_field_name in file_fields: - file_field = file_fields[file_field_name] + file_name, content, content_type = _extract_file_properties( + file_obj + ) - file_metadata = find_field_metadata(file_field, MultipartFormMetadata) - if file_metadata is None: - continue + if content_type is not None: + files.append( + (array_field_name, (file_name, content, content_type)) + ) + else: + files.append((array_field_name, (file_name, content))) + else: + # Handle single file + file_name, content, content_type = _extract_file_properties(val) - if file_metadata.content: - content = getattr(val, file_field_name, None) - elif file_field_name == "content_type": - content_type = getattr(val, file_field_name, None) + if content_type is not None: + files.append((f_name, (file_name, content, content_type))) else: - file_name = getattr(val, file_field_name) - - if file_name == "" or content is None: - raise ValueError("invalid multipart/form-data file") - - if content_type is not None: - files[f_name] = (file_name, content, content_type) - else: - files[f_name] = (file_name, content) + files.append((f_name, (file_name, content))) elif field_metadata.json: - files[f_name] = ( - None, - marshal_json(val, request_field_types[name]), - "application/json", + files.append( + ( + f_name, + ( + None, + marshal_json(val, request_field_types[name]), + "application/json", + ), + ) ) else: if isinstance(val, List): @@ -154,7 +185,8 @@ def serialize_multipart_form( continue values.append(_val_to_string(value)) - form[f_name + "[]"] = values + array_field_name = f_name + "[]" + form[array_field_name] = values else: form[f_name] = _val_to_string(val) return media_type, form, files diff --git a/src/leonardo_ai_sdk/utils/queryparams.py b/src/leonardo_ai_sdk/utils/queryparams.py index 37a6e7f9..c04e0db8 100644 --- a/src/leonardo_ai_sdk/utils/queryparams.py +++ b/src/leonardo_ai_sdk/utils/queryparams.py @@ -27,12 +27,13 @@ def get_query_params( query_params: Any, gbls: Optional[Any] = None, + allow_empty_value: Optional[List[str]] = None, ) -> Dict[str, List[str]]: params: Dict[str, List[str]] = {} - globals_already_populated = _populate_query_params(query_params, gbls, params, []) + globals_already_populated = _populate_query_params(query_params, gbls, params, [], allow_empty_value) if _is_set(gbls): - _populate_query_params(gbls, None, params, globals_already_populated) + _populate_query_params(gbls, None, params, globals_already_populated, allow_empty_value) return params @@ -42,6 +43,7 @@ def _populate_query_params( gbls: Any, query_param_values: Dict[str, List[str]], skip_fields: List[str], + allow_empty_value: Optional[List[str]] = None, ) -> List[str]: globals_already_populated: List[str] = [] @@ -69,6 +71,16 @@ def _populate_query_params( globals_already_populated.append(name) f_name = field.alias if field.alias is not None else name + + allow_empty_set = set(allow_empty_value or []) + should_include_empty = f_name in allow_empty_set and ( + value is None or value == [] or value == "" + ) + + if should_include_empty: + query_param_values[f_name] = [""] + continue + serialization = metadata.serialization if serialization is not None: serialized_parms = _get_serialized_params( diff --git a/src/leonardo_ai_sdk/utils/requestbodies.py b/src/leonardo_ai_sdk/utils/requestbodies.py index d5240dd5..1de32b6d 100644 --- a/src/leonardo_ai_sdk/utils/requestbodies.py +++ b/src/leonardo_ai_sdk/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/leonardo_ai_sdk/utils/retries.py b/src/leonardo_ai_sdk/utils/retries.py index 4d608671..88a91b10 100644 --- a/src/leonardo_ai_sdk/utils/retries.py +++ b/src/leonardo_ai_sdk/utils/retries.py @@ -3,7 +3,9 @@ import asyncio import random import time -from typing import List +from datetime import datetime +from email.utils import parsedate_to_datetime +from typing import List, Optional import httpx @@ -51,9 +53,11 @@ def __init__(self, config: RetryConfig, status_codes: List[str]): class TemporaryError(Exception): response: httpx.Response + retry_after: Optional[int] def __init__(self, response: httpx.Response): self.response = response + self.retry_after = _parse_retry_after_header(response) class PermanentError(Exception): @@ -63,6 +67,62 @@ def __init__(self, inner: Exception): self.inner = inner +def _parse_retry_after_header(response: httpx.Response) -> Optional[int]: + """Parse Retry-After header from response. + + Returns: + Retry interval in milliseconds, or None if header is missing or invalid. + """ + retry_after_header = response.headers.get("retry-after") + if not retry_after_header: + return None + + try: + seconds = float(retry_after_header) + return round(seconds * 1000) + except ValueError: + pass + + try: + retry_date = parsedate_to_datetime(retry_after_header) + delta = (retry_date - datetime.now(retry_date.tzinfo)).total_seconds() + return round(max(0, delta) * 1000) + except (ValueError, TypeError): + pass + + return None + + +def _get_sleep_interval( + exception: Exception, + initial_interval: int, + max_interval: int, + exponent: float, + retries: int, +) -> float: + """Get sleep interval for retry with exponential backoff. + + Args: + exception: The exception that triggered the retry. + initial_interval: Initial retry interval in milliseconds. + max_interval: Maximum retry interval in milliseconds. + exponent: Base for exponential backoff calculation. + retries: Current retry attempt count. + + Returns: + Sleep interval in seconds. + """ + if ( + isinstance(exception, TemporaryError) + and exception.retry_after is not None + and exception.retry_after > 0 + ): + return exception.retry_after / 1000 + + sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1) + return min(sleep, max_interval / 1000) + + def retry(func, retries: Retries): if retries.config.strategy == "backoff": @@ -183,8 +243,10 @@ def retry_with_backoff( return exception.response raise - sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1) - sleep = min(sleep, max_interval / 1000) + + sleep = _get_sleep_interval( + exception, initial_interval, max_interval, exponent, retries + ) time.sleep(sleep) retries += 1 @@ -211,7 +273,9 @@ async def retry_with_backoff_async( return exception.response raise - sleep = (initial_interval / 1000) * exponent**retries + random.uniform(0, 1) - sleep = min(sleep, max_interval / 1000) + + sleep = _get_sleep_interval( + exception, initial_interval, max_interval, exponent, retries + ) await asyncio.sleep(sleep) retries += 1 diff --git a/src/leonardo_ai_sdk/utils/serializers.py b/src/leonardo_ai_sdk/utils/serializers.py index c5eb3659..14321eb4 100644 --- a/src/leonardo_ai_sdk/utils/serializers.py +++ b/src/leonardo_ai_sdk/utils/serializers.py @@ -1,20 +1,24 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from decimal import Decimal +import functools import json -from typing import Any, Dict, List, Union, get_args -import httpx +import typing +from typing import Any, Dict, List, Tuple, Union, get_args +import typing_extensions from typing_extensions import get_origin + +import httpx from pydantic import ConfigDict, create_model from pydantic_core import from_json -from typing_inspect import is_optional_type from ..types.basemodel import BaseModel, Nullable, OptionalNullable, Unset def serialize_decimal(as_str: bool): def serialize(d): - if is_optional_type(type(d)) and d is None: + # Optional[T] is a Union[T, None] + if is_union(type(d)) and type(None) in get_args(type(d)) and d is None: return None if isinstance(d, Unset): return d @@ -42,7 +46,8 @@ def validate_decimal(d): def serialize_float(as_str: bool): def serialize(f): - if is_optional_type(type(f)) and f is None: + # Optional[T] is a Union[T, None] + if is_union(type(f)) and type(None) in get_args(type(f)) and f is None: return None if isinstance(f, Unset): return f @@ -70,7 +75,8 @@ def validate_float(f): def serialize_int(as_str: bool): def serialize(i): - if is_optional_type(type(i)) and i is None: + # Optional[T] is a Union[T, None] + if is_union(type(i)) and type(None) in get_args(type(i)) and i is None: return None if isinstance(i, Unset): return i @@ -96,29 +102,10 @@ 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): - if is_optional_type(type(c)) and c is None: + # Optional[T] is a Union[T, None] + if is_union(type(c)) and type(None) in get_args(type(c)) and c is None: return None if v != c: @@ -163,7 +150,7 @@ def marshal_json(val, typ): if len(d) == 0: return "" - return json.dumps(d[next(iter(d))], separators=(",", ":"), sort_keys=True) + return json.dumps(d[next(iter(d))], separators=(",", ":")) def is_nullable(field): @@ -181,6 +168,15 @@ def is_nullable(field): return False +def is_union(obj: object) -> bool: + """ + Returns True if the given object is a typing.Union or typing_extensions.Union. + """ + return any( + obj is typing_obj for typing_obj in _get_typing_objects_by_name_of("Union") + ) + + def stream_to_text(stream: httpx.Response) -> str: return "".join(stream.iter_text()) @@ -213,3 +209,21 @@ def _contains_pydantic_model(data: Any) -> bool: return any(_contains_pydantic_model(value) for value in data.values()) return False + + +@functools.cache +def _get_typing_objects_by_name_of(name: str) -> Tuple[Any, ...]: + """ + Get typing objects by name from typing and typing_extensions. + Reference: https://typing-extensions.readthedocs.io/en/latest/#runtime-use-of-types + """ + result = tuple( + getattr(module, name) + for module in (typing, typing_extensions) + if hasattr(module, name) + ) + if not result: + raise ValueError( + f"Neither typing nor typing_extensions has an object called {name!r}" + ) + return result diff --git a/src/leonardo_ai_sdk/utils/unmarshal_json_response.py b/src/leonardo_ai_sdk/utils/unmarshal_json_response.py new file mode 100644 index 00000000..0634379f --- /dev/null +++ b/src/leonardo_ai_sdk/utils/unmarshal_json_response.py @@ -0,0 +1,38 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from typing import Any, Optional, Type, TypeVar, overload + +import httpx + +from .serializers import unmarshal_json +from leonardo_ai_sdk.models import errors + +T = TypeVar("T") + + +@overload +def unmarshal_json_response( + typ: Type[T], http_res: httpx.Response, body: Optional[str] = None +) -> T: ... + + +@overload +def unmarshal_json_response( + typ: Any, http_res: httpx.Response, body: Optional[str] = None +) -> Any: ... + + +def unmarshal_json_response( + typ: Any, http_res: httpx.Response, body: Optional[str] = None +) -> Any: + if body is None: + body = http_res.text + try: + return unmarshal_json(body, typ) + except Exception as e: + raise errors.ResponseValidationError( + "Response validation failed", + http_res, + e, + body, + ) from e diff --git a/src/leonardo_ai_sdk/utils/values.py b/src/leonardo_ai_sdk/utils/values.py index 2b4b6832..dae01a44 100644 --- a/src/leonardo_ai_sdk/utils/values.py +++ b/src/leonardo_ai_sdk/utils/values.py @@ -3,8 +3,9 @@ from datetime import datetime from enum import Enum from email.message import Message +from functools import partial import os -from typing import Any, Callable, Dict, List, Optional, Tuple, TypeVar, Union +from typing import Any, Callable, Dict, List, Optional, Tuple, TypeVar, Union, cast from httpx import Response from pydantic import BaseModel @@ -51,6 +52,8 @@ def match_status_codes(status_codes: List[str], status_code: int) -> bool: T = TypeVar("T") +def cast_partial(typ): + return partial(cast, typ) def get_global_from_env( value: Optional[T], env_key: str, type_cast: Callable[[str], T] diff --git a/src/leonardo_ai_sdk/variation.py b/src/leonardo_ai_sdk/variation.py index 7fbaa644..1891ec81 100644 --- a/src/leonardo_ai_sdk/variation.py +++ b/src/leonardo_ai_sdk/variation.py @@ -5,6 +5,7 @@ from leonardo_ai_sdk._hooks import HookContext from leonardo_ai_sdk.models import errors, operations from leonardo_ai_sdk.types import BaseModel, OptionalNullable, UNSET +from leonardo_ai_sdk.utils.unmarshal_json_response import unmarshal_json_response from typing import Mapping, Optional, Union, cast @@ -38,6 +39,8 @@ def create_universal_upscaler_job( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -65,6 +68,7 @@ def create_universal_upscaler_job( "json", operations.CreateUniversalUpscalerJobRequestBody, ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -78,8 +82,10 @@ def create_universal_upscaler_job( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="CreateUniversalUpscalerJob", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -89,9 +95,9 @@ def create_universal_upscaler_job( if utils.match_response(http_res, "200", "application/json"): return operations.CreateUniversalUpscalerJobResponse( - object=utils.unmarshal_json( - http_res.text, + object=unmarshal_json_response( Optional[operations.CreateUniversalUpscalerJobResponseBody], + http_res, ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -99,23 +105,12 @@ def create_universal_upscaler_job( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def create_universal_upscaler_job_async( self, @@ -146,6 +141,8 @@ async def create_universal_upscaler_job_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -173,6 +170,7 @@ async def create_universal_upscaler_job_async( "json", operations.CreateUniversalUpscalerJobRequestBody, ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -186,8 +184,10 @@ async def create_universal_upscaler_job_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="CreateUniversalUpscalerJob", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -197,9 +197,9 @@ async def create_universal_upscaler_job_async( if utils.match_response(http_res, "200", "application/json"): return operations.CreateUniversalUpscalerJobResponse( - object=utils.unmarshal_json( - http_res.text, + object=unmarshal_json_response( Optional[operations.CreateUniversalUpscalerJobResponseBody], + http_res, ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -207,23 +207,12 @@ async def create_universal_upscaler_job_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def create_variation_no_bg( self, @@ -254,6 +243,8 @@ def create_variation_no_bg( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -277,6 +268,7 @@ def create_variation_no_bg( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.CreateVariationNoBGRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -290,8 +282,10 @@ def create_variation_no_bg( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createVariationNoBG", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -301,8 +295,8 @@ def create_variation_no_bg( if utils.match_response(http_res, "200", "application/json"): return operations.CreateVariationNoBGResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.CreateVariationNoBGResponseBody] + object=unmarshal_json_response( + Optional[operations.CreateVariationNoBGResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -310,23 +304,12 @@ def create_variation_no_bg( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def create_variation_no_bg_async( self, @@ -357,6 +340,8 @@ async def create_variation_no_bg_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -380,6 +365,7 @@ async def create_variation_no_bg_async( get_serialized_body=lambda: utils.serialize_request_body( request, False, False, "json", operations.CreateVariationNoBGRequestBody ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -393,8 +379,10 @@ async def create_variation_no_bg_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createVariationNoBG", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -404,8 +392,8 @@ async def create_variation_no_bg_async( if utils.match_response(http_res, "200", "application/json"): return operations.CreateVariationNoBGResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.CreateVariationNoBGResponseBody] + object=unmarshal_json_response( + Optional[operations.CreateVariationNoBGResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -413,23 +401,12 @@ async def create_variation_no_bg_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def create_variation_unzoom( self, @@ -462,6 +439,8 @@ def create_variation_unzoom( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -489,6 +468,7 @@ def create_variation_unzoom( "json", Optional[operations.CreateVariationUnzoomRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -502,8 +482,10 @@ def create_variation_unzoom( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createVariationUnzoom", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -513,9 +495,8 @@ def create_variation_unzoom( if utils.match_response(http_res, "200", "application/json"): return operations.CreateVariationUnzoomResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.CreateVariationUnzoomResponseBody], + object=unmarshal_json_response( + Optional[operations.CreateVariationUnzoomResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -523,23 +504,12 @@ def create_variation_unzoom( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def create_variation_unzoom_async( self, @@ -572,6 +542,8 @@ async def create_variation_unzoom_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -599,6 +571,7 @@ async def create_variation_unzoom_async( "json", Optional[operations.CreateVariationUnzoomRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -612,8 +585,10 @@ async def create_variation_unzoom_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createVariationUnzoom", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -623,9 +598,8 @@ async def create_variation_unzoom_async( if utils.match_response(http_res, "200", "application/json"): return operations.CreateVariationUnzoomResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.CreateVariationUnzoomResponseBody], + object=unmarshal_json_response( + Optional[operations.CreateVariationUnzoomResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -633,23 +607,12 @@ async def create_variation_unzoom_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) def create_variation_upscale( self, @@ -682,6 +645,8 @@ def create_variation_upscale( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -709,6 +674,7 @@ def create_variation_upscale( "json", Optional[operations.CreateVariationUpscaleRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -722,8 +688,10 @@ def create_variation_upscale( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createVariationUpscale", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -733,9 +701,8 @@ def create_variation_upscale( if utils.match_response(http_res, "200", "application/json"): return operations.CreateVariationUpscaleResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.CreateVariationUpscaleResponseBody], + object=unmarshal_json_response( + Optional[operations.CreateVariationUpscaleResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -743,23 +710,12 @@ def create_variation_upscale( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def create_variation_upscale_async( self, @@ -792,6 +748,8 @@ async def create_variation_upscale_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): request = utils.unmarshal( @@ -819,6 +777,7 @@ async def create_variation_upscale_async( "json", Optional[operations.CreateVariationUpscaleRequestBody], ), + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -832,8 +791,10 @@ async def create_variation_upscale_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="createVariationUpscale", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -843,9 +804,8 @@ async def create_variation_upscale_async( if utils.match_response(http_res, "200", "application/json"): return operations.CreateVariationUpscaleResponse( - object=utils.unmarshal_json( - http_res.text, - Optional[operations.CreateVariationUpscaleResponseBody], + object=unmarshal_json_response( + Optional[operations.CreateVariationUpscaleResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -853,24 +813,191 @@ async def create_variation_upscale_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res + raise errors.SDKError("API error occurred", http_res, http_res_text) + + raise errors.SDKError("Unexpected response received", http_res) + + def get_motion_variation_by_id( + self, + *, + id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> operations.GetMotionVariationByIDResponse: + r"""Get motion variation by ID + + This endpoint will get the motion variation by ID + + :param id: \"id\" is required + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = operations.GetMotionVariationByIDRequest( + id=id, + ) + + req = self._build_request( + method="GET", + path="/motion-variations/{id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="getMotionVariationById", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + error_status_codes=["4XX", "5XX"], + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return operations.GetMotionVariationByIDResponse( + object=unmarshal_json_response( + Optional[operations.GetMotionVariationByIDResponseBody], http_res + ), + status_code=http_res.status_code, + content_type=http_res.headers.get("Content-Type") or "", + raw_response=http_res, ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + + raise errors.SDKError("Unexpected response received", http_res) + + async def get_motion_variation_by_id_async( + self, + *, + id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> operations.GetMotionVariationByIDResponse: + r"""Get motion variation by ID + + This endpoint will get the motion variation by ID + + :param id: \"id\" is required + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, + request = operations.GetMotionVariationByIDRequest( + id=id, ) + req = self._build_request_async( + method="GET", + path="/motion-variations/{id}", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="getMotionVariationById", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + error_status_codes=["4XX", "5XX"], + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return operations.GetMotionVariationByIDResponse( + object=unmarshal_json_response( + Optional[operations.GetMotionVariationByIDResponseBody], http_res + ), + status_code=http_res.status_code, + content_type=http_res.headers.get("Content-Type") or "", + raw_response=http_res, + ) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise errors.SDKError("API error occurred", http_res, http_res_text) + + raise errors.SDKError("Unexpected response received", http_res) + def get_variation_by_id( self, *, @@ -897,6 +1024,8 @@ def get_variation_by_id( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetVariationByIDRequest( id=id, @@ -915,6 +1044,7 @@ def get_variation_by_id( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -928,8 +1058,10 @@ def get_variation_by_id( http_res = self.do_request( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getVariationById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -939,8 +1071,8 @@ def get_variation_by_id( if utils.match_response(http_res, "200", "application/json"): return operations.GetVariationByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetVariationByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.GetVariationByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -948,23 +1080,12 @@ def get_variation_by_id( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = utils.stream_to_text(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res) async def get_variation_by_id_async( self, @@ -992,6 +1113,8 @@ async def get_variation_by_id_async( if server_url is not None: base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) request = operations.GetVariationByIDRequest( id=id, @@ -1010,6 +1133,7 @@ async def get_variation_by_id_async( accept_header_value="application/json", http_headers=http_headers, security=self.sdk_configuration.security, + allow_empty_value=None, timeout_ms=timeout_ms, ) @@ -1023,8 +1147,10 @@ async def get_variation_by_id_async( http_res = await self.do_request_async( hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", operation_id="getVariationById", - oauth2_scopes=[], + oauth2_scopes=None, security_source=self.sdk_configuration.security, ), request=req, @@ -1034,8 +1160,8 @@ async def get_variation_by_id_async( if utils.match_response(http_res, "200", "application/json"): return operations.GetVariationByIDResponse( - object=utils.unmarshal_json( - http_res.text, Optional[operations.GetVariationByIDResponseBody] + object=unmarshal_json_response( + Optional[operations.GetVariationByIDResponseBody], http_res ), status_code=http_res.status_code, content_type=http_res.headers.get("Content-Type") or "", @@ -1043,20 +1169,9 @@ async def get_variation_by_id_async( ) if utils.match_response(http_res, "4XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) if utils.match_response(http_res, "5XX", "*"): http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - "API error occurred", http_res.status_code, http_res_text, http_res - ) + raise errors.SDKError("API error occurred", http_res, http_res_text) - content_type = http_res.headers.get("Content-Type") - http_res_text = await utils.stream_to_text_async(http_res) - raise errors.SDKError( - f"Unexpected response received (code: {http_res.status_code}, type: {content_type})", - http_res.status_code, - http_res_text, - http_res, - ) + raise errors.SDKError("Unexpected response received", http_res)