From 6ea0b09d80bf3dcaedce086854b0dc7dfdc3b145 Mon Sep 17 00:00:00 2001 From: bennykok Date: Tue, 16 Jul 2024 14:45:28 -0700 Subject: [PATCH] init --- .devcontainer/README.md | 30 + .devcontainer/devcontainer.json | 38 + .devcontainer/setup.sh | 14 + .gitattributes | 2 + .github/workflows/sdk_generation.yaml | 29 + .gitignore | 6 + .speakeasy/gen.lock | 226 ++++ .speakeasy/gen.yaml | 42 + .speakeasy/workflow.lock | 27 + .speakeasy/workflow.yaml | 11 + README.md | 241 ++++ USAGE.md | 17 + docs/models/components/httpmetadata.md | 9 + docs/models/components/security.md | 8 + .../getauthresponserequestidresponsebody.md | 11 + .../getdeploymentidinputsresponsebody.md | 11 + .../errors/getdeploymentresponsebody.md | 11 + docs/models/errors/getrunresponsebody.md | 12 + docs/models/errors/getrunrunresponsebody.md | 11 + .../models/errors/getuploadurlresponsebody.md | 11 + .../getv1machinesmachineidresponsebody.md | 11 + .../errors/getv1machinesresponsebody.md | 11 + .../errors/getv1workflowsresponsebody.md | 11 + ...1workflowsworkflowidoutputsresponsebody.md | 11 + .../getv1workflowsworkflowidresponsebody.md | 11 + .../getwebsocketdeploymentidresponsebody.md | 11 + .../errors/getworkflowidresponsebody.md | 11 + ...getworkflowversionversionidresponsebody.md | 11 + .../models/errors/postgpueventresponsebody.md | 11 + .../errors/postmachineendpointresponsebody.md | 11 + docs/models/errors/postrunresponsebody.md | 11 + .../errors/postv1machinesresponsebody.md | 11 + .../errors/postv1workflowsresponsebody.md | 11 + .../models/errors/postworkflowresponsebody.md | 11 + docs/models/operations/customnodes.md | 15 + docs/models/operations/dependencies.md | 12 + docs/models/operations/environment.md | 9 + docs/models/operations/eventtype.md | 9 + docs/models/operations/fields.md | 9 + docs/models/operations/files.md | 10 + ...uthresponserequestidcomfyuiresponsebody.md | 10 + .../getauthresponserequestidrequest.md | 8 + .../getauthresponserequestidresponse.md | 10 + .../getauthresponserequestidresponsebody.md | 11 + .../getdeploymentidinputsrequest.md | 8 + .../getdeploymentidinputsresponse.md | 9 + .../models/operations/getdeploymentrequest.md | 8 + .../operations/getdeploymentresponse.md | 9 + .../operations/getdeploymentresponsebody.md | 7 + docs/models/operations/getrungpu.md | 12 + docs/models/operations/getrunrequest.md | 8 + docs/models/operations/getrunresponse.md | 9 + docs/models/operations/getrunresponsebody.md | 33 + docs/models/operations/getrunworkflowapi.md | 7 + docs/models/operations/getuploadurlrequest.md | 9 + .../models/operations/getuploadurlresponse.md | 9 + .../operations/getuploadurlresponsebody.md | 12 + .../getv1machinesmachineidrequest.md | 9 + .../getv1machinesmachineidresponse.md | 9 + .../getv1machinesmachineidresponsebody.md | 16 + .../models/operations/getv1machinesrequest.md | 10 + .../operations/getv1machinesresponse.md | 9 + .../operations/getv1machinesresponsebody.md | 11 + .../operations/getv1workflowsrequest.md | 10 + .../operations/getv1workflowsresponse.md | 9 + .../operations/getv1workflowsresponsebody.md | 16 + .../getv1workflowsworkflowidoutputsrequest.md | 12 + ...getv1workflowsworkflowidoutputsresponse.md | 9 + ...1workflowsworkflowidoutputsresponsebody.md | 11 + .../getv1workflowsworkflowidrequest.md | 8 + .../getv1workflowsworkflowidresponse.md | 9 + .../getv1workflowsworkflowidresponsebody.md | 17 + .../getv1workflowsworkflowidversions.md | 17 + .../getwebsocketdeploymentidrequest.md | 8 + .../getwebsocketdeploymentidresponse.md | 9 + .../getwebsocketdeploymentidresponsebody.md | 10 + .../operations/getworkflowiddependencies.md | 7 + .../models/operations/getworkflowidrequest.md | 8 + .../operations/getworkflowidresponse.md | 9 + .../operations/getworkflowidresponsebody.md | 20 + .../operations/getworkflowidsnapshot.md | 7 + .../operations/getworkflowidworkflow.md | 7 + .../operations/getworkflowidworkflowapi.md | 7 + ...getworkflowversionversioniddependencies.md | 7 + .../getworkflowversionversionidrequest.md | 8 + .../getworkflowversionversionidresponse.md | 9 + ...getworkflowversionversionidresponsebody.md | 20 + .../getworkflowversionversionidsnapshot.md | 7 + .../getworkflowversionversionidworkflowapi.md | 7 + docs/models/operations/gitcustomnodes.md | 9 + docs/models/operations/gpu.md | 12 + docs/models/operations/gpuprovider.md | 9 + docs/models/operations/gputype.md | 12 + docs/models/operations/inputs.md | 17 + docs/models/operations/installtype.md | 17 + docs/models/operations/machines.md | 15 + docs/models/operations/machinetype.md | 13 + docs/models/operations/models.md | 10 + docs/models/operations/node.md | 9 + docs/models/operations/one.md | 10 + docs/models/operations/origin.md | 12 + docs/models/operations/outputs.md | 10 + .../operations/postgpueventrequestbody.md | 16 + .../models/operations/postgpueventresponse.md | 9 + .../operations/postgpueventresponsebody.md | 10 + .../postmachineendpointrequestbody.md | 9 + .../operations/postmachineendpointresponse.md | 9 + .../postmachineendpointresponsebody.md | 11 + docs/models/operations/postrunrequestbody.md | 21 + docs/models/operations/postrunresponse.md | 9 + docs/models/operations/postrunresponsebody.md | 10 + docs/models/operations/postv1machinesgpu.md | 8 + .../operations/postv1machinesrequestbody.md | 8 + .../operations/postv1machinesresponse.md | 9 + .../operations/postv1machinesresponsebody.md | 46 + .../models/operations/postv1machinesstatus.md | 8 + docs/models/operations/postv1machinestype.md | 8 + .../operations/postv1workflowsrequestbody.md | 10 + .../operations/postv1workflowsresponse.md | 9 + .../operations/postv1workflowsresponsebody.md | 12 + .../operations/postworkflowrequestbody.md | 13 + .../models/operations/postworkflowresponse.md | 9 + .../operations/postworkflowresponsebody.md | 11 + docs/models/operations/queryparamrunorigin.md | 12 + docs/models/operations/responsebody.md | 12 + docs/models/operations/runlog.md | 7 + docs/models/operations/runorigin.md | 12 + docs/models/operations/snapshot.md | 10 + docs/models/operations/status.md | 16 + docs/models/operations/type.md | 14 + docs/models/operations/user.md | 8 + docs/models/operations/versions.md | 9 + docs/models/operations/webhookstatus.md | 11 + docs/models/operations/workflow.md | 7 + docs/models/operations/workflowapi.md | 9 + docs/models/operations/workflowinputs.md | 7 + docs/models/operations/workflowjson.md | 7 + docs/models/operations/wsgputype.md | 8 + docs/sdks/comfydeploy/README.md | 9 + docs/sdks/comfyui/README.md | 267 ++++ docs/sdks/files/README.md | 47 + docs/sdks/machines/README.md | 176 +++ docs/sdks/run/README.md | 95 ++ docs/sdks/workflows/README.md | 255 ++++ py.typed | 1 + pylintrc | 646 ++++++++++ scripts/publish.sh | 9 + setup.py | 45 + src/comfydeploy/__init__.py | 4 + src/comfydeploy/_hooks/__init__.py | 4 + src/comfydeploy/_hooks/sdkhooks.py | 55 + src/comfydeploy/_hooks/types.py | 74 ++ src/comfydeploy/comfyui.py | 445 +++++++ src/comfydeploy/files.py | 89 ++ src/comfydeploy/machines.py | 298 +++++ src/comfydeploy/models/__init__.py | 4 + src/comfydeploy/models/components/__init__.py | 6 + .../models/components/httpmetadata.py | 17 + src/comfydeploy/models/components/security.py | 11 + src/comfydeploy/models/errors/__init__.py | 24 + .../errors/get_auth_response_request_id_.py | 20 + .../models/errors/get_deployment.py | 20 + .../models/errors/get_deployment_id_inputs.py | 20 + src/comfydeploy/models/errors/get_run.py | 34 + .../models/errors/get_upload_url.py | 20 + .../models/errors/get_v1_machines.py | 20 + .../errors/get_v1_machines_machine_id_.py | 20 + .../models/errors/get_v1_workflows.py | 20 + .../errors/get_v1_workflows_workflow_id_.py | 20 + .../get_v1_workflows_workflow_id_outputs.py | 20 + .../errors/get_websocket_deployment_id_.py | 20 + .../models/errors/get_workflow_id_.py | 20 + .../get_workflow_version_version_id_.py | 20 + .../models/errors/post_gpu_event.py | 20 + .../models/errors/post_machine_endpoint.py | 20 + src/comfydeploy/models/errors/post_run.py | 20 + .../models/errors/post_v1_machines.py | 20 + .../models/errors/post_v1_workflows.py | 20 + .../models/errors/post_workflow.py | 20 + src/comfydeploy/models/errors/sdkerror.py | 24 + src/comfydeploy/models/operations/__init__.py | 23 + .../get_auth_response_request_id_.py | 46 + .../models/operations/get_deployment.py | 35 + .../operations/get_deployment_id_inputs.py | 37 + src/comfydeploy/models/operations/get_run.py | 117 ++ .../models/operations/get_upload_url.py | 48 + .../models/operations/get_v1_machines.py | 59 + .../operations/get_v1_machines_machine_id_.py | 41 + .../models/operations/get_v1_workflows.py | 60 + .../get_v1_workflows_workflow_id_.py | 59 + .../get_v1_workflows_workflow_id_outputs.py | 58 + .../get_websocket_deployment_id_.py | 34 + .../models/operations/get_workflow_id_.py | 64 + .../get_workflow_version_version_id_.py | 64 + .../models/operations/post_gpu_event.py | 67 + .../operations/post_machine_endpoint.py | 37 + src/comfydeploy/models/operations/post_run.py | 73 ++ .../models/operations/post_v1_machines.py | 85 ++ .../models/operations/post_v1_workflows.py | 44 + .../models/operations/post_workflow.py | 135 ++ src/comfydeploy/run.py | 164 +++ src/comfydeploy/sdk.py | 89 ++ src/comfydeploy/sdkconfiguration.py | 44 + src/comfydeploy/utils/__init__.py | 4 + src/comfydeploy/utils/retries.py | 119 ++ src/comfydeploy/utils/utils.py | 1099 +++++++++++++++++ src/comfydeploy/workflows.py | 431 +++++++ 207 files changed, 8190 insertions(+) create mode 100644 .devcontainer/README.md create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/setup.sh create mode 100644 .gitattributes create mode 100644 .github/workflows/sdk_generation.yaml create mode 100644 .gitignore create mode 100644 .speakeasy/gen.lock create mode 100644 .speakeasy/gen.yaml create mode 100644 .speakeasy/workflow.lock create mode 100644 .speakeasy/workflow.yaml create mode 100644 README.md create mode 100644 USAGE.md create mode 100644 docs/models/components/httpmetadata.md create mode 100644 docs/models/components/security.md create mode 100644 docs/models/errors/getauthresponserequestidresponsebody.md create mode 100644 docs/models/errors/getdeploymentidinputsresponsebody.md create mode 100644 docs/models/errors/getdeploymentresponsebody.md create mode 100644 docs/models/errors/getrunresponsebody.md create mode 100644 docs/models/errors/getrunrunresponsebody.md create mode 100644 docs/models/errors/getuploadurlresponsebody.md create mode 100644 docs/models/errors/getv1machinesmachineidresponsebody.md create mode 100644 docs/models/errors/getv1machinesresponsebody.md create mode 100644 docs/models/errors/getv1workflowsresponsebody.md create mode 100644 docs/models/errors/getv1workflowsworkflowidoutputsresponsebody.md create mode 100644 docs/models/errors/getv1workflowsworkflowidresponsebody.md create mode 100644 docs/models/errors/getwebsocketdeploymentidresponsebody.md create mode 100644 docs/models/errors/getworkflowidresponsebody.md create mode 100644 docs/models/errors/getworkflowversionversionidresponsebody.md create mode 100644 docs/models/errors/postgpueventresponsebody.md create mode 100644 docs/models/errors/postmachineendpointresponsebody.md create mode 100644 docs/models/errors/postrunresponsebody.md create mode 100644 docs/models/errors/postv1machinesresponsebody.md create mode 100644 docs/models/errors/postv1workflowsresponsebody.md create mode 100644 docs/models/errors/postworkflowresponsebody.md create mode 100644 docs/models/operations/customnodes.md create mode 100644 docs/models/operations/dependencies.md create mode 100644 docs/models/operations/environment.md create mode 100644 docs/models/operations/eventtype.md create mode 100644 docs/models/operations/fields.md create mode 100644 docs/models/operations/files.md create mode 100644 docs/models/operations/getauthresponserequestidcomfyuiresponsebody.md create mode 100644 docs/models/operations/getauthresponserequestidrequest.md create mode 100644 docs/models/operations/getauthresponserequestidresponse.md create mode 100644 docs/models/operations/getauthresponserequestidresponsebody.md create mode 100644 docs/models/operations/getdeploymentidinputsrequest.md create mode 100644 docs/models/operations/getdeploymentidinputsresponse.md create mode 100644 docs/models/operations/getdeploymentrequest.md create mode 100644 docs/models/operations/getdeploymentresponse.md create mode 100644 docs/models/operations/getdeploymentresponsebody.md create mode 100644 docs/models/operations/getrungpu.md create mode 100644 docs/models/operations/getrunrequest.md create mode 100644 docs/models/operations/getrunresponse.md create mode 100644 docs/models/operations/getrunresponsebody.md create mode 100644 docs/models/operations/getrunworkflowapi.md create mode 100644 docs/models/operations/getuploadurlrequest.md create mode 100644 docs/models/operations/getuploadurlresponse.md create mode 100644 docs/models/operations/getuploadurlresponsebody.md create mode 100644 docs/models/operations/getv1machinesmachineidrequest.md create mode 100644 docs/models/operations/getv1machinesmachineidresponse.md create mode 100644 docs/models/operations/getv1machinesmachineidresponsebody.md create mode 100644 docs/models/operations/getv1machinesrequest.md create mode 100644 docs/models/operations/getv1machinesresponse.md create mode 100644 docs/models/operations/getv1machinesresponsebody.md create mode 100644 docs/models/operations/getv1workflowsrequest.md create mode 100644 docs/models/operations/getv1workflowsresponse.md create mode 100644 docs/models/operations/getv1workflowsresponsebody.md create mode 100644 docs/models/operations/getv1workflowsworkflowidoutputsrequest.md create mode 100644 docs/models/operations/getv1workflowsworkflowidoutputsresponse.md create mode 100644 docs/models/operations/getv1workflowsworkflowidoutputsresponsebody.md create mode 100644 docs/models/operations/getv1workflowsworkflowidrequest.md create mode 100644 docs/models/operations/getv1workflowsworkflowidresponse.md create mode 100644 docs/models/operations/getv1workflowsworkflowidresponsebody.md create mode 100644 docs/models/operations/getv1workflowsworkflowidversions.md create mode 100644 docs/models/operations/getwebsocketdeploymentidrequest.md create mode 100644 docs/models/operations/getwebsocketdeploymentidresponse.md create mode 100644 docs/models/operations/getwebsocketdeploymentidresponsebody.md create mode 100644 docs/models/operations/getworkflowiddependencies.md create mode 100644 docs/models/operations/getworkflowidrequest.md create mode 100644 docs/models/operations/getworkflowidresponse.md create mode 100644 docs/models/operations/getworkflowidresponsebody.md create mode 100644 docs/models/operations/getworkflowidsnapshot.md create mode 100644 docs/models/operations/getworkflowidworkflow.md create mode 100644 docs/models/operations/getworkflowidworkflowapi.md create mode 100644 docs/models/operations/getworkflowversionversioniddependencies.md create mode 100644 docs/models/operations/getworkflowversionversionidrequest.md create mode 100644 docs/models/operations/getworkflowversionversionidresponse.md create mode 100644 docs/models/operations/getworkflowversionversionidresponsebody.md create mode 100644 docs/models/operations/getworkflowversionversionidsnapshot.md create mode 100644 docs/models/operations/getworkflowversionversionidworkflowapi.md create mode 100644 docs/models/operations/gitcustomnodes.md create mode 100644 docs/models/operations/gpu.md create mode 100644 docs/models/operations/gpuprovider.md create mode 100644 docs/models/operations/gputype.md create mode 100644 docs/models/operations/inputs.md create mode 100644 docs/models/operations/installtype.md create mode 100644 docs/models/operations/machines.md create mode 100644 docs/models/operations/machinetype.md create mode 100644 docs/models/operations/models.md create mode 100644 docs/models/operations/node.md create mode 100644 docs/models/operations/one.md create mode 100644 docs/models/operations/origin.md create mode 100644 docs/models/operations/outputs.md create mode 100644 docs/models/operations/postgpueventrequestbody.md create mode 100644 docs/models/operations/postgpueventresponse.md create mode 100644 docs/models/operations/postgpueventresponsebody.md create mode 100644 docs/models/operations/postmachineendpointrequestbody.md create mode 100644 docs/models/operations/postmachineendpointresponse.md create mode 100644 docs/models/operations/postmachineendpointresponsebody.md create mode 100644 docs/models/operations/postrunrequestbody.md create mode 100644 docs/models/operations/postrunresponse.md create mode 100644 docs/models/operations/postrunresponsebody.md create mode 100644 docs/models/operations/postv1machinesgpu.md create mode 100644 docs/models/operations/postv1machinesrequestbody.md create mode 100644 docs/models/operations/postv1machinesresponse.md create mode 100644 docs/models/operations/postv1machinesresponsebody.md create mode 100644 docs/models/operations/postv1machinesstatus.md create mode 100644 docs/models/operations/postv1machinestype.md create mode 100644 docs/models/operations/postv1workflowsrequestbody.md create mode 100644 docs/models/operations/postv1workflowsresponse.md create mode 100644 docs/models/operations/postv1workflowsresponsebody.md create mode 100644 docs/models/operations/postworkflowrequestbody.md create mode 100644 docs/models/operations/postworkflowresponse.md create mode 100644 docs/models/operations/postworkflowresponsebody.md create mode 100644 docs/models/operations/queryparamrunorigin.md create mode 100644 docs/models/operations/responsebody.md create mode 100644 docs/models/operations/runlog.md create mode 100644 docs/models/operations/runorigin.md create mode 100644 docs/models/operations/snapshot.md create mode 100644 docs/models/operations/status.md create mode 100644 docs/models/operations/type.md create mode 100644 docs/models/operations/user.md create mode 100644 docs/models/operations/versions.md create mode 100644 docs/models/operations/webhookstatus.md create mode 100644 docs/models/operations/workflow.md create mode 100644 docs/models/operations/workflowapi.md create mode 100644 docs/models/operations/workflowinputs.md create mode 100644 docs/models/operations/workflowjson.md create mode 100644 docs/models/operations/wsgputype.md create mode 100644 docs/sdks/comfydeploy/README.md create mode 100644 docs/sdks/comfyui/README.md create mode 100644 docs/sdks/files/README.md create mode 100644 docs/sdks/machines/README.md create mode 100644 docs/sdks/run/README.md create mode 100644 docs/sdks/workflows/README.md create mode 100644 py.typed create mode 100644 pylintrc create mode 100755 scripts/publish.sh create mode 100644 setup.py create mode 100644 src/comfydeploy/__init__.py create mode 100644 src/comfydeploy/_hooks/__init__.py create mode 100644 src/comfydeploy/_hooks/sdkhooks.py create mode 100644 src/comfydeploy/_hooks/types.py create mode 100644 src/comfydeploy/comfyui.py create mode 100644 src/comfydeploy/files.py create mode 100644 src/comfydeploy/machines.py create mode 100644 src/comfydeploy/models/__init__.py create mode 100644 src/comfydeploy/models/components/__init__.py create mode 100644 src/comfydeploy/models/components/httpmetadata.py create mode 100644 src/comfydeploy/models/components/security.py create mode 100644 src/comfydeploy/models/errors/__init__.py create mode 100644 src/comfydeploy/models/errors/get_auth_response_request_id_.py create mode 100644 src/comfydeploy/models/errors/get_deployment.py create mode 100644 src/comfydeploy/models/errors/get_deployment_id_inputs.py create mode 100644 src/comfydeploy/models/errors/get_run.py create mode 100644 src/comfydeploy/models/errors/get_upload_url.py create mode 100644 src/comfydeploy/models/errors/get_v1_machines.py create mode 100644 src/comfydeploy/models/errors/get_v1_machines_machine_id_.py create mode 100644 src/comfydeploy/models/errors/get_v1_workflows.py create mode 100644 src/comfydeploy/models/errors/get_v1_workflows_workflow_id_.py create mode 100644 src/comfydeploy/models/errors/get_v1_workflows_workflow_id_outputs.py create mode 100644 src/comfydeploy/models/errors/get_websocket_deployment_id_.py create mode 100644 src/comfydeploy/models/errors/get_workflow_id_.py create mode 100644 src/comfydeploy/models/errors/get_workflow_version_version_id_.py create mode 100644 src/comfydeploy/models/errors/post_gpu_event.py create mode 100644 src/comfydeploy/models/errors/post_machine_endpoint.py create mode 100644 src/comfydeploy/models/errors/post_run.py create mode 100644 src/comfydeploy/models/errors/post_v1_machines.py create mode 100644 src/comfydeploy/models/errors/post_v1_workflows.py create mode 100644 src/comfydeploy/models/errors/post_workflow.py create mode 100644 src/comfydeploy/models/errors/sdkerror.py create mode 100644 src/comfydeploy/models/operations/__init__.py create mode 100644 src/comfydeploy/models/operations/get_auth_response_request_id_.py create mode 100644 src/comfydeploy/models/operations/get_deployment.py create mode 100644 src/comfydeploy/models/operations/get_deployment_id_inputs.py create mode 100644 src/comfydeploy/models/operations/get_run.py create mode 100644 src/comfydeploy/models/operations/get_upload_url.py create mode 100644 src/comfydeploy/models/operations/get_v1_machines.py create mode 100644 src/comfydeploy/models/operations/get_v1_machines_machine_id_.py create mode 100644 src/comfydeploy/models/operations/get_v1_workflows.py create mode 100644 src/comfydeploy/models/operations/get_v1_workflows_workflow_id_.py create mode 100644 src/comfydeploy/models/operations/get_v1_workflows_workflow_id_outputs.py create mode 100644 src/comfydeploy/models/operations/get_websocket_deployment_id_.py create mode 100644 src/comfydeploy/models/operations/get_workflow_id_.py create mode 100644 src/comfydeploy/models/operations/get_workflow_version_version_id_.py create mode 100644 src/comfydeploy/models/operations/post_gpu_event.py create mode 100644 src/comfydeploy/models/operations/post_machine_endpoint.py create mode 100644 src/comfydeploy/models/operations/post_run.py create mode 100644 src/comfydeploy/models/operations/post_v1_machines.py create mode 100644 src/comfydeploy/models/operations/post_v1_workflows.py create mode 100644 src/comfydeploy/models/operations/post_workflow.py create mode 100644 src/comfydeploy/run.py create mode 100644 src/comfydeploy/sdk.py create mode 100644 src/comfydeploy/sdkconfiguration.py create mode 100644 src/comfydeploy/utils/__init__.py create mode 100644 src/comfydeploy/utils/retries.py create mode 100644 src/comfydeploy/utils/utils.py create mode 100644 src/comfydeploy/workflows.py diff --git a/.devcontainer/README.md b/.devcontainer/README.md new file mode 100644 index 0000000..97e0506 --- /dev/null +++ b/.devcontainer/README.md @@ -0,0 +1,30 @@ + +> **Remember to shutdown a GitHub Codespace when it is not in use!** + +# Dev Containers Quick Start + +The default location for usage snippets is the `samples` directory. + +## Running a Usage Sample + +A sample usage example has been provided in a `root.py` file. As you work with the SDK, it's expected that you will modify these samples to fit your needs. To execute this particular snippet, use the command below. + +``` +python root.py +``` + +## Generating Additional Usage Samples + +The speakeasy CLI allows you to generate more usage snippets. Here's how: + +- To generate a sample for a specific operation by providing an operation ID, use: + +``` +speakeasy generate usage -s https://www.comfydeploy.com/api/openapi.json -l python -i {INPUT_OPERATION_ID} -o ./samples +``` + +- To generate samples for an entire namespace (like a tag or group name), use: + +``` +speakeasy generate usage -s https://www.comfydeploy.com/api/openapi.json -l python -n {INPUT_TAG_NAME} -o ./samples +``` diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..7e67af9 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,38 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/images/tree/main/src/python +{ + "name": "Python", + "image": "mcr.microsoft.com/devcontainers/python:1-3.11-bullseye", + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + // Use 'postCreateCommand' to run commands after the container is created. + "postCreateCommand": "sudo chmod +x ./.devcontainer/setup.sh && ./.devcontainer/setup.sh", + "customizations": { + "vscode": { + "extensions": [ + "ms-python.python", + "ms-python.vscode-pylance", + "github.vscode-pull-request-github" + ], + "settings": { + "files.eol": "\n", + "editor.formatOnSave": true, + "python.formatting.provider": "black", + "python.linting.enabled": true, + "python.linting.pylintEnabled": true, + "python.linting.flake8Enabled": true, + "python.linting.banditEnabled": true, + "python.testing.pytestEnabled": true + } + }, + "codespaces": { + "openFiles": [ + ".devcontainer/README.md" + ] + } + } + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh new file mode 100644 index 0000000..7f2b277 --- /dev/null +++ b/.devcontainer/setup.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# Install the speakeasy CLI +curl -fsSL https://raw.githubusercontent.com/speakeasy-api/speakeasy/main/install.sh | sh + +# Setup samples directory +rmdir samples || true +mkdir samples + +python -m pip install --upgrade pip +pip install -e . + +# Generate starter usage sample with speakeasy +speakeasy generate usage -s https://www.comfydeploy.com/api/openapi.json -l python -o samples/root.py \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4d75d59 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# This allows generated code to be indexed correctly +*.py linguist-generated=false \ No newline at end of file diff --git a/.github/workflows/sdk_generation.yaml b/.github/workflows/sdk_generation.yaml new file mode 100644 index 0000000..65211f3 --- /dev/null +++ b/.github/workflows/sdk_generation.yaml @@ -0,0 +1,29 @@ +name: Generate +permissions: + checks: write + contents: write + pull-requests: write + statuses: write +"on": + workflow_dispatch: + inputs: + force: + description: Force generation of SDKs + type: boolean + default: false + set_version: + description: optionally set a specific SDK version + type: string + schedule: + - cron: 0 0 * * * +jobs: + generate: + uses: speakeasy-api/sdk-generation-action/.github/workflows/workflow-executor.yaml@v15 + with: + force: ${{ github.event.inputs.force }} + mode: pr + set_version: ${{ github.event.inputs.set_version }} + speakeasy_version: latest + secrets: + github_access_token: ${{ secrets.GITHUB_TOKEN }} + speakeasy_api_key: ${{ secrets.SPEAKEASY_API_KEY }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3cdf338 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +venv/ +src/*.egg-info/ +__pycache__/ +.pytest_cache/ +.python-version +.DS_Store diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock new file mode 100644 index 0000000..7b837f6 --- /dev/null +++ b/.speakeasy/gen.lock @@ -0,0 +1,226 @@ +lockVersion: 2.0.0 +id: 2c1d440e-25e4-46e2-a435-ebd1f72a7373 +management: + docChecksum: 751bbee351db5354325a9ef968014e0d + docVersion: 0.0.1 + speakeasyVersion: 1.335.2 + generationVersion: 2.372.3 + releaseVersion: 0.0.1 + configChecksum: 146d1ec1460e43d80975a87764babb15 +features: + python: + additionalDependencies: 0.1.0 + constsAndDefaults: 0.1.3 + core: 4.8.1 + devContainers: 2.86.0 + flattening: 2.81.1 + globalSecurity: 2.83.5 + globalSecurityCallbacks: 0.1.0 + globalSecurityFlattening: 0.1.0 + globalServerURLs: 2.82.2 + nameOverrides: 2.81.2 + nullables: 0.1.0 + responseFormat: 0.1.0 + sdkHooks: 0.1.0 + unions: 2.82.8 +generatedFiles: + - src/comfydeploy/sdkconfiguration.py + - src/comfydeploy/run.py + - src/comfydeploy/files.py + - src/comfydeploy/workflows.py + - src/comfydeploy/comfyui.py + - src/comfydeploy/machines.py + - src/comfydeploy/sdk.py + - py.typed + - pylintrc + - scripts/publish.sh + - setup.py + - src/comfydeploy/__init__.py + - src/comfydeploy/utils/__init__.py + - src/comfydeploy/utils/retries.py + - src/comfydeploy/utils/utils.py + - src/comfydeploy/models/errors/sdkerror.py + - src/comfydeploy/models/operations/get_run.py + - src/comfydeploy/models/operations/post_run.py + - src/comfydeploy/models/operations/get_upload_url.py + - src/comfydeploy/models/operations/get_websocket_deployment_id_.py + - src/comfydeploy/models/operations/post_machine_endpoint.py + - src/comfydeploy/models/operations/get_v1_workflows.py + - src/comfydeploy/models/operations/post_v1_workflows.py + - src/comfydeploy/models/operations/get_v1_workflows_workflow_id_.py + - src/comfydeploy/models/operations/get_v1_workflows_workflow_id_outputs.py + - src/comfydeploy/models/operations/get_auth_response_request_id_.py + - src/comfydeploy/models/operations/post_workflow.py + - src/comfydeploy/models/operations/get_workflow_version_version_id_.py + - src/comfydeploy/models/operations/get_workflow_id_.py + - src/comfydeploy/models/operations/get_deployment_id_inputs.py + - src/comfydeploy/models/operations/get_deployment.py + - src/comfydeploy/models/operations/post_gpu_event.py + - src/comfydeploy/models/operations/get_v1_machines.py + - src/comfydeploy/models/operations/post_v1_machines.py + - src/comfydeploy/models/operations/get_v1_machines_machine_id_.py + - src/comfydeploy/models/components/httpmetadata.py + - src/comfydeploy/models/components/security.py + - src/comfydeploy/models/errors/get_run.py + - src/comfydeploy/models/errors/post_run.py + - src/comfydeploy/models/errors/get_upload_url.py + - src/comfydeploy/models/errors/get_websocket_deployment_id_.py + - src/comfydeploy/models/errors/post_machine_endpoint.py + - src/comfydeploy/models/errors/get_v1_workflows.py + - src/comfydeploy/models/errors/post_v1_workflows.py + - src/comfydeploy/models/errors/get_v1_workflows_workflow_id_.py + - src/comfydeploy/models/errors/get_v1_workflows_workflow_id_outputs.py + - src/comfydeploy/models/errors/get_auth_response_request_id_.py + - src/comfydeploy/models/errors/post_workflow.py + - src/comfydeploy/models/errors/get_workflow_version_version_id_.py + - src/comfydeploy/models/errors/get_workflow_id_.py + - src/comfydeploy/models/errors/get_deployment_id_inputs.py + - src/comfydeploy/models/errors/get_deployment.py + - src/comfydeploy/models/errors/post_gpu_event.py + - src/comfydeploy/models/errors/get_v1_machines.py + - src/comfydeploy/models/errors/post_v1_machines.py + - src/comfydeploy/models/errors/get_v1_machines_machine_id_.py + - src/comfydeploy/models/__init__.py + - src/comfydeploy/models/errors/__init__.py + - src/comfydeploy/models/operations/__init__.py + - src/comfydeploy/models/components/__init__.py + - docs/models/operations/getrunrequest.md + - docs/models/operations/workflowinputs.md + - docs/models/operations/getrunworkflowapi.md + - docs/models/operations/origin.md + - docs/models/operations/status.md + - docs/models/operations/getrungpu.md + - docs/models/operations/machinetype.md + - docs/models/operations/runlog.md + - docs/models/operations/webhookstatus.md + - docs/models/operations/getrunresponsebody.md + - docs/models/operations/getrunresponse.md + - docs/models/operations/gpu.md + - docs/models/operations/runorigin.md + - docs/models/operations/inputs.md + - docs/models/operations/postrunrequestbody.md + - docs/models/operations/postrunresponsebody.md + - docs/models/operations/postrunresponse.md + - docs/models/operations/type.md + - docs/models/operations/getuploadurlrequest.md + - docs/models/operations/getuploadurlresponsebody.md + - docs/models/operations/getuploadurlresponse.md + - docs/models/operations/getwebsocketdeploymentidrequest.md + - docs/models/operations/getwebsocketdeploymentidresponsebody.md + - docs/models/operations/getwebsocketdeploymentidresponse.md + - docs/models/operations/postmachineendpointrequestbody.md + - docs/models/operations/postmachineendpointresponsebody.md + - docs/models/operations/postmachineendpointresponse.md + - docs/models/operations/getv1workflowsrequest.md + - docs/models/operations/user.md + - docs/models/operations/versions.md + - docs/models/operations/getv1workflowsresponsebody.md + - docs/models/operations/getv1workflowsresponse.md + - docs/models/operations/workflowjson.md + - docs/models/operations/postv1workflowsrequestbody.md + - docs/models/operations/postv1workflowsresponsebody.md + - docs/models/operations/postv1workflowsresponse.md + - docs/models/operations/getv1workflowsworkflowidrequest.md + - docs/models/operations/getv1workflowsworkflowidversions.md + - docs/models/operations/getv1workflowsworkflowidresponsebody.md + - docs/models/operations/getv1workflowsworkflowidresponse.md + - docs/models/operations/queryparamrunorigin.md + - docs/models/operations/getv1workflowsworkflowidoutputsrequest.md + - docs/models/operations/outputs.md + - docs/models/operations/getv1workflowsworkflowidoutputsresponsebody.md + - docs/models/operations/getv1workflowsworkflowidoutputsresponse.md + - docs/models/operations/getauthresponserequestidrequest.md + - docs/models/operations/getauthresponserequestidcomfyuiresponsebody.md + - docs/models/operations/getauthresponserequestidresponsebody.md + - docs/models/operations/getauthresponserequestidresponse.md + - docs/models/operations/workflowapi.md + - docs/models/operations/gitcustomnodes.md + - docs/models/operations/snapshot.md + - docs/models/operations/node.md + - docs/models/operations/one.md + - docs/models/operations/installtype.md + - docs/models/operations/customnodes.md + - docs/models/operations/models.md + - docs/models/operations/files.md + - docs/models/operations/dependencies.md + - docs/models/operations/postworkflowrequestbody.md + - docs/models/operations/postworkflowresponsebody.md + - docs/models/operations/postworkflowresponse.md + - docs/models/operations/getworkflowversionversionidrequest.md + - docs/models/operations/workflow.md + - docs/models/operations/getworkflowversionversionidworkflowapi.md + - docs/models/operations/getworkflowversionversionidsnapshot.md + - docs/models/operations/getworkflowversionversioniddependencies.md + - docs/models/operations/getworkflowversionversionidresponsebody.md + - docs/models/operations/getworkflowversionversionidresponse.md + - docs/models/operations/getworkflowidrequest.md + - docs/models/operations/getworkflowidworkflow.md + - docs/models/operations/getworkflowidworkflowapi.md + - docs/models/operations/getworkflowidsnapshot.md + - docs/models/operations/getworkflowiddependencies.md + - docs/models/operations/getworkflowidresponsebody.md + - docs/models/operations/getworkflowidresponse.md + - docs/models/operations/getdeploymentidinputsrequest.md + - docs/models/operations/responsebody.md + - docs/models/operations/getdeploymentidinputsresponse.md + - docs/models/operations/environment.md + - docs/models/operations/getdeploymentrequest.md + - docs/models/operations/getdeploymentresponsebody.md + - docs/models/operations/getdeploymentresponse.md + - docs/models/operations/gputype.md + - docs/models/operations/wsgputype.md + - docs/models/operations/eventtype.md + - docs/models/operations/gpuprovider.md + - docs/models/operations/postgpueventrequestbody.md + - docs/models/operations/postgpueventresponsebody.md + - docs/models/operations/postgpueventresponse.md + - docs/models/operations/fields.md + - docs/models/operations/getv1machinesrequest.md + - docs/models/operations/machines.md + - docs/models/operations/getv1machinesresponsebody.md + - docs/models/operations/getv1machinesresponse.md + - docs/models/operations/postv1machinesrequestbody.md + - docs/models/operations/postv1machinestype.md + - docs/models/operations/postv1machinesstatus.md + - docs/models/operations/postv1machinesgpu.md + - docs/models/operations/postv1machinesresponsebody.md + - docs/models/operations/postv1machinesresponse.md + - docs/models/operations/getv1machinesmachineidrequest.md + - docs/models/operations/getv1machinesmachineidresponsebody.md + - docs/models/operations/getv1machinesmachineidresponse.md + - docs/models/components/httpmetadata.md + - docs/models/components/security.md + - docs/models/errors/getrunrunresponsebody.md + - docs/models/errors/getrunresponsebody.md + - docs/models/errors/postrunresponsebody.md + - docs/models/errors/getuploadurlresponsebody.md + - docs/models/errors/getwebsocketdeploymentidresponsebody.md + - docs/models/errors/postmachineendpointresponsebody.md + - docs/models/errors/getv1workflowsresponsebody.md + - docs/models/errors/postv1workflowsresponsebody.md + - docs/models/errors/getv1workflowsworkflowidresponsebody.md + - docs/models/errors/getv1workflowsworkflowidoutputsresponsebody.md + - docs/models/errors/getauthresponserequestidresponsebody.md + - docs/models/errors/postworkflowresponsebody.md + - docs/models/errors/getworkflowversionversionidresponsebody.md + - docs/models/errors/getworkflowidresponsebody.md + - docs/models/errors/getdeploymentidinputsresponsebody.md + - docs/models/errors/getdeploymentresponsebody.md + - docs/models/errors/postgpueventresponsebody.md + - docs/models/errors/getv1machinesresponsebody.md + - docs/models/errors/postv1machinesresponsebody.md + - docs/models/errors/getv1machinesmachineidresponsebody.md + - docs/sdks/comfydeploy/README.md + - docs/sdks/run/README.md + - docs/sdks/files/README.md + - docs/sdks/workflows/README.md + - docs/sdks/comfyui/README.md + - docs/sdks/machines/README.md + - USAGE.md + - .gitattributes + - .devcontainer/README.md + - .devcontainer/devcontainer.json + - .devcontainer/setup.sh + - src/comfydeploy/_hooks/sdkhooks.py + - src/comfydeploy/_hooks/types.py + - src/comfydeploy/_hooks/__init__.py diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml new file mode 100644 index 0000000..e173e94 --- /dev/null +++ b/.speakeasy/gen.yaml @@ -0,0 +1,42 @@ +configVersion: 2.0.0 +generation: + devContainers: + enabled: true + schemaPath: https://www.comfydeploy.com/api/openapi.json + sdkClassName: ComfyDeploy + maintainOpenAPIOrder: true + usageSnippets: + optionalPropertyRendering: withExample + useClassNamesForArrayFields: true + fixes: + nameResolutionDec2023: true + parameterOrderingFeb2024: true + requestResponseComponentNamesFeb2024: true + auth: + oAuth2ClientCredentialsEnabled: false +python: + version: 0.0.1 + additionalDependencies: + dependencies: {} + extraDependencies: + dev: {} + author: Speakeasy + clientServerStatusCodesAsErrors: true + description: Python Client SDK Generated by Speakeasy + flattenGlobalSecurity: true + imports: + option: openapi + paths: + callbacks: models/callbacks + errors: models/errors + operations: models/operations + shared: models/components + webhooks: models/webhooks + inputModelSuffix: input + maxMethodParams: 4 + methodArguments: require-security-and-request + outputModelSuffix: output + packageName: comfydeploy + projectUrls: {} + responseFormat: envelope-http + templateVersion: v1 diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock new file mode 100644 index 0000000..54002ae --- /dev/null +++ b/.speakeasy/workflow.lock @@ -0,0 +1,27 @@ +speakeasyVersion: 1.335.2 +sources: + comfydeploy-api: + sourceNamespace: comfydeploy-api + sourceRevisionDigest: sha256:9de04a7a79c20e6734a6f6a554ad832ef07d8d0e10e0b0f4f2bd5d6a3c3a2440 + sourceBlobDigest: sha256:16bb126ace5178a46f34a6530b3983db437d0652b4e44a0077d730f801d83884 + tags: + - latest +targets: + comfy-deploy: + source: comfydeploy-api + sourceNamespace: comfydeploy-api + sourceRevisionDigest: sha256:9de04a7a79c20e6734a6f6a554ad832ef07d8d0e10e0b0f4f2bd5d6a3c3a2440 + sourceBlobDigest: sha256:16bb126ace5178a46f34a6530b3983db437d0652b4e44a0077d730f801d83884 + outLocation: /Users/bennykok/Documents/GitHub/comfy-deploy-python +workflow: + workflowVersion: 1.0.0 + sources: + comfydeploy-api: + inputs: + - location: https://www.comfydeploy.com/api/openapi.json + registry: + location: registry.speakeasyapi.dev/comfydeploy/comfydeploy/comfydeploy-api + targets: + comfy-deploy: + target: python + source: comfydeploy-api diff --git a/.speakeasy/workflow.yaml b/.speakeasy/workflow.yaml new file mode 100644 index 0000000..c6f097c --- /dev/null +++ b/.speakeasy/workflow.yaml @@ -0,0 +1,11 @@ +workflowVersion: 1.0.0 +sources: + comfydeploy-api: + inputs: + - location: https://www.comfydeploy.com/api/openapi.json + registry: + location: registry.speakeasyapi.dev/comfydeploy/comfydeploy/comfydeploy-api +targets: + comfy-deploy: + target: python + source: comfydeploy-api diff --git a/README.md b/README.md new file mode 100644 index 0000000..49c9b6a --- /dev/null +++ b/README.md @@ -0,0 +1,241 @@ +# comfydeploy + +
+ + + + +
+ + +## 🏗 **Welcome to your new SDK!** 🏗 + +It has been generated successfully based on your OpenAPI spec. However, it is not yet ready for production use. Here are some next steps: +- [ ] 🛠 Make your SDK feel handcrafted by [customizing it](https://www.speakeasyapi.dev/docs/customize-sdks) +- [ ] ♻️ Refine your SDK quickly by iterating locally with the [Speakeasy CLI](https://github.com/speakeasy-api/speakeasy) +- [ ] 🎁 Publish your SDK to package managers by [configuring automatic publishing](https://www.speakeasyapi.dev/docs/advanced-setup/publish-sdks) +- [ ] ✨ When ready to productionize, delete this section from the README + + +## SDK Installation + +```bash +pip install git+.git +``` + + + +## SDK Example Usage + +### Example + +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.run.get(run_id='') + +if res.object is not None: + # handle response + pass + +``` + + + +## Available Resources and Operations + +### [run](docs/sdks/run/README.md) + +* [get](docs/sdks/run/README.md#get) - Get workflow run output +* [create](docs/sdks/run/README.md#create) - Run a workflow via deployment_id + +### [files](docs/sdks/files/README.md) + +* [get_upload_url](docs/sdks/files/README.md#get_upload_url) - Upload any files to the storage + +### [workflows](docs/sdks/workflows/README.md) + +* [get_websocket_deployment_id_](docs/sdks/workflows/README.md#get_websocket_deployment_id_) - Get a websocket url for a specific deployment +* [post_machine_endpoint](docs/sdks/workflows/README.md#post_machine_endpoint) - Create an endpoint for a machine +* [get_v1_workflows](docs/sdks/workflows/README.md#get_v1_workflows) - Retrieve workflows +* [post_v1_workflows](docs/sdks/workflows/README.md#post_v1_workflows) - Create a new workflow +* [get_v1_workflows_workflow_id_](docs/sdks/workflows/README.md#get_v1_workflows_workflow_id_) - Retrieve a specific workflow by ID +* [get_v1_workflows_workflow_id_outputs](docs/sdks/workflows/README.md#get_v1_workflows_workflow_id_outputs) - Retrieve the most recent outputs for a workflow + +### [comfyui](docs/sdks/comfyui/README.md) + +* [get_auth_response_request_id_](docs/sdks/comfyui/README.md#get_auth_response_request_id_) - Get an API Key with code +* [post_workflow](docs/sdks/comfyui/README.md#post_workflow) - Upload workflow from ComfyUI +* [get_workflow_version_version_id_](docs/sdks/comfyui/README.md#get_workflow_version_version_id_) - Get comfyui workflow +* [get_workflow_id_](docs/sdks/comfyui/README.md#get_workflow_id_) - Get comfyui workflow +* [get_deployment_id_inputs](docs/sdks/comfyui/README.md#get_deployment_id_inputs) - Get comfyui workflow inputs definition +* [get_deployment](docs/sdks/comfyui/README.md#get_deployment) - Get all deployed workflows + +### [machines](docs/sdks/machines/README.md) + +* [post_gpu_event](docs/sdks/machines/README.md#post_gpu_event) - Register a machine event +* [get_v1_machines](docs/sdks/machines/README.md#get_v1_machines) - Retrieve all machines for a user +* [post_v1_machines](docs/sdks/machines/README.md#post_v1_machines) - Create a new machine +* [get_v1_machines_machine_id_](docs/sdks/machines/README.md#get_v1_machines_machine_id_) - Retrieve a specific machine by ID + + + +## Error Handling + +Handling errors in this SDK should largely match your expectations. All operations return a response object or raise an error. If Error objects are specified in your OpenAPI Spec, the SDK will raise the appropriate Error type. + +| Error Object | Status Code | Content Type | +| ---------------------------- | ---------------------------- | ---------------------------- | +| errors.GetRunResponseBody | 400 | application/json | +| errors.GetRunRunResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +### Example + +```python +import comfydeploy +from comfydeploy.models import errors + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + +res = None +try: + res = s.run.get(run_id='') + +except errors.GetRunResponseBody as e: + # handle exception + raise(e) +except errors.GetRunRunResponseBody as e: + # handle exception + raise(e) +except errors.SDKError as e: + # handle exception + raise(e) + +if res.object is not None: + # handle response + pass + +``` + + + +## Server Selection + +### Select Server by Index + +You can override the default server globally by passing a server index to the `server_idx: int` optional parameter when initializing the SDK client instance. The selected server will then be used as the default on the operations that use it. This table lists the indexes associated with the available servers: + +| # | Server | Variables | +| - | ------ | --------- | +| 0 | `https:///api` | None | + +#### Example + +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + server_idx=0, + bearer_auth="", +) + + +res = s.run.get(run_id='') + +if res.object is not None: + # handle response + pass + +``` + + +### 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: +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + server_url="https:///api", + bearer_auth="", +) + + +res = s.run.get(run_id='') + +if res.object is not None: + # handle response + pass + +``` + + + +## Custom HTTP Client + +The Python SDK makes API calls using the [requests](https://pypi.org/project/requests/) HTTP library. In order to provide a convenient way to configure timeouts, cookies, proxies, custom headers, and other low-level configuration, you can initialize the SDK client with a custom `requests.Session` object. + +For example, you could specify a header for every request that this sdk makes as follows: +```python +import comfydeploy +import requests + +http_client = requests.Session() +http_client.headers.update({'x-custom-header': 'someValue'}) +s = comfydeploy.ComfyDeploy(client=http_client) +``` + + + +## Authentication + +### Per-Client Security Schemes + +This SDK supports the following security scheme globally: + +| Name | Type | Scheme | +| ------------- | ------------- | ------------- | +| `bearer_auth` | http | HTTP Bearer | + +To authenticate with the API the `bearer_auth` parameter must be set when initializing the SDK client instance. For example: +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.run.get(run_id='') + +if res.object is not None: + # handle response + pass + +``` + + + + +# Development + +## Maturity + +This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage +to a specific package version. This way, you can install the same version each time without breaking changes unless you are intentionally +looking for the latest version. + +## Contributions + +While we value open-source contributions to this SDK, this library is generated programmatically. Any manual changes added to internal files will be overwritten on the next generation. +We look forward to hearing your feedback. Feel free to open a PR or an issue with a proof of concept and we'll do our best to include it in a future release. + +### SDK Created by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks) diff --git a/USAGE.md b/USAGE.md new file mode 100644 index 0000000..2fbd002 --- /dev/null +++ b/USAGE.md @@ -0,0 +1,17 @@ + +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.run.get(run_id='') + +if res.object is not None: + # handle response + pass + +``` + \ No newline at end of file diff --git a/docs/models/components/httpmetadata.md b/docs/models/components/httpmetadata.md new file mode 100644 index 0000000..5febcce --- /dev/null +++ b/docs/models/components/httpmetadata.md @@ -0,0 +1,9 @@ +# HTTPMetadata + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `request` | [requests.Request](https://requests.readthedocs.io/en/latest/api/#requests.Request) | :heavy_check_mark: | Raw HTTP request; suitable for debugging | \ No newline at end of file diff --git a/docs/models/components/security.md b/docs/models/components/security.md new file mode 100644 index 0000000..f218fa1 --- /dev/null +++ b/docs/models/components/security.md @@ -0,0 +1,8 @@ +# Security + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `bearer_auth` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getauthresponserequestidresponsebody.md b/docs/models/errors/getauthresponserequestidresponsebody.md new file mode 100644 index 0000000..0d20421 --- /dev/null +++ b/docs/models/errors/getauthresponserequestidresponsebody.md @@ -0,0 +1,11 @@ +# GetAuthResponseRequestIDResponseBody + +Error when fetching the API Key with code + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getdeploymentidinputsresponsebody.md b/docs/models/errors/getdeploymentidinputsresponsebody.md new file mode 100644 index 0000000..df12e12 --- /dev/null +++ b/docs/models/errors/getdeploymentidinputsresponsebody.md @@ -0,0 +1,11 @@ +# GetDeploymentIDInputsResponseBody + +Error when uploading the workflow + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getdeploymentresponsebody.md b/docs/models/errors/getdeploymentresponsebody.md new file mode 100644 index 0000000..87aac9d --- /dev/null +++ b/docs/models/errors/getdeploymentresponsebody.md @@ -0,0 +1,11 @@ +# GetDeploymentResponseBody + +error + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getrunresponsebody.md b/docs/models/errors/getrunresponsebody.md new file mode 100644 index 0000000..9aaa19a --- /dev/null +++ b/docs/models/errors/getrunresponsebody.md @@ -0,0 +1,12 @@ +# GetRunResponseBody + +Workflow not found + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `code` | *str* | :heavy_check_mark: | N/A | 400 | +| `message` | *str* | :heavy_check_mark: | N/A | Workflow not found | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/errors/getrunrunresponsebody.md b/docs/models/errors/getrunrunresponsebody.md new file mode 100644 index 0000000..1acbc87 --- /dev/null +++ b/docs/models/errors/getrunrunresponsebody.md @@ -0,0 +1,11 @@ +# GetRunRunResponseBody + +Error getting output + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getuploadurlresponsebody.md b/docs/models/errors/getuploadurlresponsebody.md new file mode 100644 index 0000000..729ef76 --- /dev/null +++ b/docs/models/errors/getuploadurlresponsebody.md @@ -0,0 +1,11 @@ +# GetUploadURLResponseBody + +Error when generating upload url + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getv1machinesmachineidresponsebody.md b/docs/models/errors/getv1machinesmachineidresponsebody.md new file mode 100644 index 0000000..450b88b --- /dev/null +++ b/docs/models/errors/getv1machinesmachineidresponsebody.md @@ -0,0 +1,11 @@ +# GetV1MachinesMachineIDResponseBody + +Error in retrieving the specific machine + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getv1machinesresponsebody.md b/docs/models/errors/getv1machinesresponsebody.md new file mode 100644 index 0000000..ff54f97 --- /dev/null +++ b/docs/models/errors/getv1machinesresponsebody.md @@ -0,0 +1,11 @@ +# GetV1MachinesResponseBody + +Error in retrieving machines + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getv1workflowsresponsebody.md b/docs/models/errors/getv1workflowsresponsebody.md new file mode 100644 index 0000000..25e1d68 --- /dev/null +++ b/docs/models/errors/getv1workflowsresponsebody.md @@ -0,0 +1,11 @@ +# GetV1WorkflowsResponseBody + +Error in retrieving workflows + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getv1workflowsworkflowidoutputsresponsebody.md b/docs/models/errors/getv1workflowsworkflowidoutputsresponsebody.md new file mode 100644 index 0000000..0d31485 --- /dev/null +++ b/docs/models/errors/getv1workflowsworkflowidoutputsresponsebody.md @@ -0,0 +1,11 @@ +# GetV1WorkflowsWorkflowIDOutputsResponseBody + +Error in retrieving the specific workflow + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getv1workflowsworkflowidresponsebody.md b/docs/models/errors/getv1workflowsworkflowidresponsebody.md new file mode 100644 index 0000000..d7c1257 --- /dev/null +++ b/docs/models/errors/getv1workflowsworkflowidresponsebody.md @@ -0,0 +1,11 @@ +# GetV1WorkflowsWorkflowIDResponseBody + +Error in retrieving the specific workflow + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getwebsocketdeploymentidresponsebody.md b/docs/models/errors/getwebsocketdeploymentidresponsebody.md new file mode 100644 index 0000000..e173131 --- /dev/null +++ b/docs/models/errors/getwebsocketdeploymentidresponsebody.md @@ -0,0 +1,11 @@ +# GetWebsocketDeploymentIDResponseBody + +Error creating run + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getworkflowidresponsebody.md b/docs/models/errors/getworkflowidresponsebody.md new file mode 100644 index 0000000..28cb31b --- /dev/null +++ b/docs/models/errors/getworkflowidresponsebody.md @@ -0,0 +1,11 @@ +# GetWorkflowIDResponseBody + +Error when uploading the workflow + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/getworkflowversionversionidresponsebody.md b/docs/models/errors/getworkflowversionversionidresponsebody.md new file mode 100644 index 0000000..1e8c067 --- /dev/null +++ b/docs/models/errors/getworkflowversionversionidresponsebody.md @@ -0,0 +1,11 @@ +# GetWorkflowVersionVersionIDResponseBody + +Error when uploading the workflow + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/postgpueventresponsebody.md b/docs/models/errors/postgpueventresponsebody.md new file mode 100644 index 0000000..a7978f5 --- /dev/null +++ b/docs/models/errors/postgpueventresponsebody.md @@ -0,0 +1,11 @@ +# PostGpuEventResponseBody + +Error creating run + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/postmachineendpointresponsebody.md b/docs/models/errors/postmachineendpointresponsebody.md new file mode 100644 index 0000000..5318475 --- /dev/null +++ b/docs/models/errors/postmachineendpointresponsebody.md @@ -0,0 +1,11 @@ +# PostMachineEndpointResponseBody + +Error creating run + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/postrunresponsebody.md b/docs/models/errors/postrunresponsebody.md new file mode 100644 index 0000000..5dd4a02 --- /dev/null +++ b/docs/models/errors/postrunresponsebody.md @@ -0,0 +1,11 @@ +# PostRunResponseBody + +Error creating run + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/postv1machinesresponsebody.md b/docs/models/errors/postv1machinesresponsebody.md new file mode 100644 index 0000000..e63f2ea --- /dev/null +++ b/docs/models/errors/postv1machinesresponsebody.md @@ -0,0 +1,11 @@ +# PostV1MachinesResponseBody + +Error in creating machine + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/postv1workflowsresponsebody.md b/docs/models/errors/postv1workflowsresponsebody.md new file mode 100644 index 0000000..544051c --- /dev/null +++ b/docs/models/errors/postv1workflowsresponsebody.md @@ -0,0 +1,11 @@ +# PostV1WorkflowsResponseBody + +Error in creating workflow + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/postworkflowresponsebody.md b/docs/models/errors/postworkflowresponsebody.md new file mode 100644 index 0000000..efd2670 --- /dev/null +++ b/docs/models/errors/postworkflowresponsebody.md @@ -0,0 +1,11 @@ +# PostWorkflowResponseBody + +Error when uploading the workflow + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `error` | *str* | :heavy_check_mark: | N/A | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/customnodes.md b/docs/models/operations/customnodes.md new file mode 100644 index 0000000..fd1a672 --- /dev/null +++ b/docs/models/operations/customnodes.md @@ -0,0 +1,15 @@ +# CustomNodes + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `name` | *str* | :heavy_check_mark: | N/A | +| `url` | *str* | :heavy_check_mark: | N/A | +| `node` | List[[operations.Node](../../models/operations/node.md)] | :heavy_minus_sign: | N/A | +| `hash` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `files` | List[*str*] | :heavy_minus_sign: | N/A | +| `install_type` | [Optional[operations.InstallType]](../../models/operations/installtype.md) | :heavy_minus_sign: | N/A | +| `warning` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `pip` | List[*str*] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/dependencies.md b/docs/models/operations/dependencies.md new file mode 100644 index 0000000..aa7731e --- /dev/null +++ b/docs/models/operations/dependencies.md @@ -0,0 +1,12 @@ +# Dependencies + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------------------------------------- | +| `comfyui` | *str* | :heavy_check_mark: | N/A | +| `missing_nodes` | List[*str*] | :heavy_check_mark: | N/A | +| `custom_nodes` | Dict[str, [operations.CustomNodes](../../models/operations/customnodes.md)] | :heavy_check_mark: | N/A | +| `models` | Dict[str, List[[operations.Models](../../models/operations/models.md)]] | :heavy_check_mark: | N/A | +| `files` | Dict[str, List[[operations.Files](../../models/operations/files.md)]] | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/environment.md b/docs/models/operations/environment.md new file mode 100644 index 0000000..075e5c5 --- /dev/null +++ b/docs/models/operations/environment.md @@ -0,0 +1,9 @@ +# Environment + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `PRODUCTION` | production | +| `STAGING` | staging | \ No newline at end of file diff --git a/docs/models/operations/eventtype.md b/docs/models/operations/eventtype.md new file mode 100644 index 0000000..d9d11ce --- /dev/null +++ b/docs/models/operations/eventtype.md @@ -0,0 +1,9 @@ +# EventType + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `GPU_START` | gpu_start | +| `GPU_END` | gpu_end | \ No newline at end of file diff --git a/docs/models/operations/fields.md b/docs/models/operations/fields.md new file mode 100644 index 0000000..f764265 --- /dev/null +++ b/docs/models/operations/fields.md @@ -0,0 +1,9 @@ +# Fields + + +## Values + +| Name | Value | +| --------- | --------- | +| `FULL` | full | +| `MINIMAL` | minimal | \ No newline at end of file diff --git a/docs/models/operations/files.md b/docs/models/operations/files.md new file mode 100644 index 0000000..d95f69e --- /dev/null +++ b/docs/models/operations/files.md @@ -0,0 +1,10 @@ +# Files + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `name` | *str* | :heavy_check_mark: | N/A | +| `hash` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `url` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getauthresponserequestidcomfyuiresponsebody.md b/docs/models/operations/getauthresponserequestidcomfyuiresponsebody.md new file mode 100644 index 0000000..cd9fc6b --- /dev/null +++ b/docs/models/operations/getauthresponserequestidcomfyuiresponsebody.md @@ -0,0 +1,10 @@ +# GetAuthResponseRequestIDComfyuiResponseBody + +The API key is not yet ready + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `message` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getauthresponserequestidrequest.md b/docs/models/operations/getauthresponserequestidrequest.md new file mode 100644 index 0000000..1549753 --- /dev/null +++ b/docs/models/operations/getauthresponserequestidrequest.md @@ -0,0 +1,8 @@ +# GetAuthResponseRequestIDRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `request_id` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getauthresponserequestidresponse.md b/docs/models/operations/getauthresponserequestidresponse.md new file mode 100644 index 0000000..36f6190 --- /dev/null +++ b/docs/models/operations/getauthresponserequestidresponse.md @@ -0,0 +1,10 @@ +# GetAuthResponseRequestIDResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `two_hundred_application_json_object` | [Optional[operations.GetAuthResponseRequestIDResponseBody]](../../models/operations/getauthresponserequestidresponsebody.md) | :heavy_minus_sign: | The returned API Key | +| `two_hundred_and_one_application_json_object` | [Optional[operations.GetAuthResponseRequestIDComfyuiResponseBody]](../../models/operations/getauthresponserequestidcomfyuiresponsebody.md) | :heavy_minus_sign: | The API key is not yet ready | \ No newline at end of file diff --git a/docs/models/operations/getauthresponserequestidresponsebody.md b/docs/models/operations/getauthresponserequestidresponsebody.md new file mode 100644 index 0000000..39a8141 --- /dev/null +++ b/docs/models/operations/getauthresponserequestidresponsebody.md @@ -0,0 +1,11 @@ +# GetAuthResponseRequestIDResponseBody + +The returned API Key + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `api_key` | *str* | :heavy_check_mark: | N/A | +| `name` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getdeploymentidinputsrequest.md b/docs/models/operations/getdeploymentidinputsrequest.md new file mode 100644 index 0000000..073b74f --- /dev/null +++ b/docs/models/operations/getdeploymentidinputsrequest.md @@ -0,0 +1,8 @@ +# GetDeploymentIDInputsRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getdeploymentidinputsresponse.md b/docs/models/operations/getdeploymentidinputsresponse.md new file mode 100644 index 0000000..08f2d3b --- /dev/null +++ b/docs/models/operations/getdeploymentidinputsresponse.md @@ -0,0 +1,9 @@ +# GetDeploymentIDInputsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `response_bodies` | List[[operations.ResponseBody](../../models/operations/responsebody.md)] | :heavy_minus_sign: | Retrieve the output | \ No newline at end of file diff --git a/docs/models/operations/getdeploymentrequest.md b/docs/models/operations/getdeploymentrequest.md new file mode 100644 index 0000000..4d8b643 --- /dev/null +++ b/docs/models/operations/getdeploymentrequest.md @@ -0,0 +1,8 @@ +# GetDeploymentRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `environment` | [Optional[operations.Environment]](../../models/operations/environment.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getdeploymentresponse.md b/docs/models/operations/getdeploymentresponse.md new file mode 100644 index 0000000..88d7038 --- /dev/null +++ b/docs/models/operations/getdeploymentresponse.md @@ -0,0 +1,9 @@ +# GetDeploymentResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `response_bodies` | List[[operations.GetDeploymentResponseBody](../../models/operations/getdeploymentresponsebody.md)] | :heavy_minus_sign: | Display all production workflows | \ No newline at end of file diff --git a/docs/models/operations/getdeploymentresponsebody.md b/docs/models/operations/getdeploymentresponsebody.md new file mode 100644 index 0000000..23ace15 --- /dev/null +++ b/docs/models/operations/getdeploymentresponsebody.md @@ -0,0 +1,7 @@ +# GetDeploymentResponseBody + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/getrungpu.md b/docs/models/operations/getrungpu.md new file mode 100644 index 0000000..ba53d66 --- /dev/null +++ b/docs/models/operations/getrungpu.md @@ -0,0 +1,12 @@ +# GetRunGpu + + +## Values + +| Name | Value | +| ------- | ------- | +| `T4` | T4 | +| `L4` | L4 | +| `A10_G` | A10G | +| `A100` | A100 | +| `H100` | H100 | \ No newline at end of file diff --git a/docs/models/operations/getrunrequest.md b/docs/models/operations/getrunrequest.md new file mode 100644 index 0000000..c5ad609 --- /dev/null +++ b/docs/models/operations/getrunrequest.md @@ -0,0 +1,8 @@ +# GetRunRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `run_id` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getrunresponse.md b/docs/models/operations/getrunresponse.md new file mode 100644 index 0000000..c501be3 --- /dev/null +++ b/docs/models/operations/getrunresponse.md @@ -0,0 +1,9 @@ +# GetRunResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.GetRunResponseBody]](../../models/operations/getrunresponsebody.md) | :heavy_minus_sign: | Retrieve the output | \ No newline at end of file diff --git a/docs/models/operations/getrunresponsebody.md b/docs/models/operations/getrunresponsebody.md new file mode 100644 index 0000000..eeb8b28 --- /dev/null +++ b/docs/models/operations/getrunresponsebody.md @@ -0,0 +1,33 @@ +# GetRunResponseBody + +Retrieve the output + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `id` | *str* | :heavy_check_mark: | N/A | | +| `workflow_version_id` | *Optional[str]* | :heavy_check_mark: | N/A | | +| `workflow_inputs` | [operations.WorkflowInputs](../../models/operations/workflowinputs.md) | :heavy_check_mark: | N/A | {
"input_text": "some external text input",
"input_image": "https://somestatic.png"
} | +| `workflow_id` | *Optional[str]* | :heavy_check_mark: | N/A | | +| `workflow_api` | [operations.GetRunWorkflowAPI](../../models/operations/getrunworkflowapi.md) | :heavy_check_mark: | N/A | {} | +| `machine_id` | *Optional[str]* | :heavy_check_mark: | N/A | | +| `origin` | [operations.Origin](../../models/operations/origin.md) | :heavy_check_mark: | N/A | | +| `status` | [operations.Status](../../models/operations/status.md) | :heavy_check_mark: | N/A | | +| `ended_at` | *Optional[str]* | :heavy_check_mark: | N/A | | +| `created_at` | *str* | :heavy_check_mark: | N/A | | +| `queued_at` | *Optional[str]* | :heavy_check_mark: | N/A | | +| `started_at` | *Optional[str]* | :heavy_check_mark: | N/A | | +| `gpu` | [Optional[operations.GetRunGpu]](../../models/operations/getrungpu.md) | :heavy_check_mark: | N/A | | +| `machine_version` | *Optional[str]* | :heavy_check_mark: | N/A | | +| `machine_type` | [Optional[operations.MachineType]](../../models/operations/machinetype.md) | :heavy_check_mark: | N/A | | +| `modal_function_call_id` | *Optional[str]* | :heavy_check_mark: | N/A | | +| `user_id` | *Optional[str]* | :heavy_check_mark: | N/A | | +| `org_id` | *Optional[str]* | :heavy_check_mark: | N/A | | +| `run_log` | [operations.RunLog](../../models/operations/runlog.md) | :heavy_check_mark: | N/A | [
{
"logs": "some logs",
"timestamp": 1706631877.3831277
}
] | +| `live_status` | *Optional[str]* | :heavy_check_mark: | N/A | | +| `progress` | *float* | :heavy_check_mark: | N/A | | +| `is_realtime` | *bool* | :heavy_check_mark: | N/A | | +| `webhook` | *Optional[str]* | :heavy_check_mark: | N/A | | +| `webhook_status` | [Optional[operations.WebhookStatus]](../../models/operations/webhookstatus.md) | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getrunworkflowapi.md b/docs/models/operations/getrunworkflowapi.md new file mode 100644 index 0000000..a817841 --- /dev/null +++ b/docs/models/operations/getrunworkflowapi.md @@ -0,0 +1,7 @@ +# GetRunWorkflowAPI + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/getuploadurlrequest.md b/docs/models/operations/getuploadurlrequest.md new file mode 100644 index 0000000..dfff9ca --- /dev/null +++ b/docs/models/operations/getuploadurlrequest.md @@ -0,0 +1,9 @@ +# GetUploadURLRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `type` | [operations.Type](../../models/operations/type.md) | :heavy_check_mark: | N/A | +| `file_size` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getuploadurlresponse.md b/docs/models/operations/getuploadurlresponse.md new file mode 100644 index 0000000..bc5382f --- /dev/null +++ b/docs/models/operations/getuploadurlresponse.md @@ -0,0 +1,9 @@ +# GetUploadURLResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.GetUploadURLResponseBody]](../../models/operations/getuploadurlresponsebody.md) | :heavy_minus_sign: | Retrieve the output | \ No newline at end of file diff --git a/docs/models/operations/getuploadurlresponsebody.md b/docs/models/operations/getuploadurlresponsebody.md new file mode 100644 index 0000000..a881132 --- /dev/null +++ b/docs/models/operations/getuploadurlresponsebody.md @@ -0,0 +1,12 @@ +# GetUploadURLResponseBody + +Retrieve the output + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `upload_url` | *str* | :heavy_check_mark: | N/A | +| `file_id` | *str* | :heavy_check_mark: | N/A | +| `download_url` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getv1machinesmachineidrequest.md b/docs/models/operations/getv1machinesmachineidrequest.md new file mode 100644 index 0000000..3979f63 --- /dev/null +++ b/docs/models/operations/getv1machinesmachineidrequest.md @@ -0,0 +1,9 @@ +# GetV1MachinesMachineIDRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `machine_id` | *str* | :heavy_check_mark: | N/A | +| `ext_urls` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getv1machinesmachineidresponse.md b/docs/models/operations/getv1machinesmachineidresponse.md new file mode 100644 index 0000000..62ab937 --- /dev/null +++ b/docs/models/operations/getv1machinesmachineidresponse.md @@ -0,0 +1,9 @@ +# GetV1MachinesMachineIDResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.GetV1MachinesMachineIDResponseBody]](../../models/operations/getv1machinesmachineidresponsebody.md) | :heavy_minus_sign: | Specific machine retrieved successfully | \ No newline at end of file diff --git a/docs/models/operations/getv1machinesmachineidresponsebody.md b/docs/models/operations/getv1machinesmachineidresponsebody.md new file mode 100644 index 0000000..78ca543 --- /dev/null +++ b/docs/models/operations/getv1machinesmachineidresponsebody.md @@ -0,0 +1,16 @@ +# GetV1MachinesMachineIDResponseBody + +Specific machine retrieved successfully + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `status` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `created_at` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `updated_at` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getv1machinesrequest.md b/docs/models/operations/getv1machinesrequest.md new file mode 100644 index 0000000..38677d8 --- /dev/null +++ b/docs/models/operations/getv1machinesrequest.md @@ -0,0 +1,10 @@ +# GetV1MachinesRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `page` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `page_size` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `fields` | [Optional[operations.Fields]](../../models/operations/fields.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getv1machinesresponse.md b/docs/models/operations/getv1machinesresponse.md new file mode 100644 index 0000000..77e5cf4 --- /dev/null +++ b/docs/models/operations/getv1machinesresponse.md @@ -0,0 +1,9 @@ +# GetV1MachinesResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.GetV1MachinesResponseBody]](../../models/operations/getv1machinesresponsebody.md) | :heavy_minus_sign: | Machines retrieved successfully | \ No newline at end of file diff --git a/docs/models/operations/getv1machinesresponsebody.md b/docs/models/operations/getv1machinesresponsebody.md new file mode 100644 index 0000000..f63ae44 --- /dev/null +++ b/docs/models/operations/getv1machinesresponsebody.md @@ -0,0 +1,11 @@ +# GetV1MachinesResponseBody + +Machines retrieved successfully + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `machines` | List[[operations.Machines](../../models/operations/machines.md)] | :heavy_check_mark: | N/A | +| `total` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getv1workflowsrequest.md b/docs/models/operations/getv1workflowsrequest.md new file mode 100644 index 0000000..acc0f55 --- /dev/null +++ b/docs/models/operations/getv1workflowsrequest.md @@ -0,0 +1,10 @@ +# GetV1WorkflowsRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `page` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `page_size` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `search` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getv1workflowsresponse.md b/docs/models/operations/getv1workflowsresponse.md new file mode 100644 index 0000000..5d2e577 --- /dev/null +++ b/docs/models/operations/getv1workflowsresponse.md @@ -0,0 +1,9 @@ +# GetV1WorkflowsResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `response_bodies` | List[[operations.GetV1WorkflowsResponseBody](../../models/operations/getv1workflowsresponsebody.md)] | :heavy_minus_sign: | Workflows retrieved successfully | \ No newline at end of file diff --git a/docs/models/operations/getv1workflowsresponsebody.md b/docs/models/operations/getv1workflowsresponsebody.md new file mode 100644 index 0000000..1585d58 --- /dev/null +++ b/docs/models/operations/getv1workflowsresponsebody.md @@ -0,0 +1,16 @@ +# GetV1WorkflowsResponseBody + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `id` | *str* | :heavy_check_mark: | N/A | +| `updated_at` | *str* | :heavy_check_mark: | N/A | +| `name` | *str* | :heavy_check_mark: | N/A | +| `selected_machine_id` | *Optional[str]* | :heavy_check_mark: | N/A | +| `count` | *str* | :heavy_check_mark: | N/A | +| `user` | [operations.User](../../models/operations/user.md) | :heavy_check_mark: | N/A | +| `versions` | List[[operations.Versions](../../models/operations/versions.md)] | :heavy_check_mark: | N/A | +| `deployments` | List[*Any*] | :heavy_check_mark: | N/A | +| `runs` | List[*Any*] | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getv1workflowsworkflowidoutputsrequest.md b/docs/models/operations/getv1workflowsworkflowidoutputsrequest.md new file mode 100644 index 0000000..32ee46d --- /dev/null +++ b/docs/models/operations/getv1workflowsworkflowidoutputsrequest.md @@ -0,0 +1,12 @@ +# GetV1WorkflowsWorkflowIDOutputsRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `workflow_id` | *str* | :heavy_check_mark: | N/A | +| `page` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `page_size` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `search` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `run_origin` | [Optional[operations.QueryParamRunOrigin]](../../models/operations/queryparamrunorigin.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getv1workflowsworkflowidoutputsresponse.md b/docs/models/operations/getv1workflowsworkflowidoutputsresponse.md new file mode 100644 index 0000000..cbf4791 --- /dev/null +++ b/docs/models/operations/getv1workflowsworkflowidoutputsresponse.md @@ -0,0 +1,9 @@ +# GetV1WorkflowsWorkflowIDOutputsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.GetV1WorkflowsWorkflowIDOutputsResponseBody]](../../models/operations/getv1workflowsworkflowidoutputsresponsebody.md) | :heavy_minus_sign: | Specific workflow retrieved successfully | \ No newline at end of file diff --git a/docs/models/operations/getv1workflowsworkflowidoutputsresponsebody.md b/docs/models/operations/getv1workflowsworkflowidoutputsresponsebody.md new file mode 100644 index 0000000..e04f947 --- /dev/null +++ b/docs/models/operations/getv1workflowsworkflowidoutputsresponsebody.md @@ -0,0 +1,11 @@ +# GetV1WorkflowsWorkflowIDOutputsResponseBody + +Specific workflow retrieved successfully + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `outputs` | List[[operations.Outputs](../../models/operations/outputs.md)] | :heavy_check_mark: | N/A | +| `total` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getv1workflowsworkflowidrequest.md b/docs/models/operations/getv1workflowsworkflowidrequest.md new file mode 100644 index 0000000..a6f5488 --- /dev/null +++ b/docs/models/operations/getv1workflowsworkflowidrequest.md @@ -0,0 +1,8 @@ +# GetV1WorkflowsWorkflowIDRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `workflow_id` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getv1workflowsworkflowidresponse.md b/docs/models/operations/getv1workflowsworkflowidresponse.md new file mode 100644 index 0000000..6ccf8fe --- /dev/null +++ b/docs/models/operations/getv1workflowsworkflowidresponse.md @@ -0,0 +1,9 @@ +# GetV1WorkflowsWorkflowIDResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.GetV1WorkflowsWorkflowIDResponseBody]](../../models/operations/getv1workflowsworkflowidresponsebody.md) | :heavy_minus_sign: | Specific workflow retrieved successfully | \ No newline at end of file diff --git a/docs/models/operations/getv1workflowsworkflowidresponsebody.md b/docs/models/operations/getv1workflowsworkflowidresponsebody.md new file mode 100644 index 0000000..da8620b --- /dev/null +++ b/docs/models/operations/getv1workflowsworkflowidresponsebody.md @@ -0,0 +1,17 @@ +# GetV1WorkflowsWorkflowIDResponseBody + +Specific workflow retrieved successfully + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `name` | *str* | :heavy_check_mark: | N/A | +| `user_id` | *str* | :heavy_check_mark: | N/A | +| `id` | *str* | :heavy_check_mark: | N/A | +| `selected_machine_id` | *Optional[str]* | :heavy_check_mark: | N/A | +| `created_at` | *str* | :heavy_check_mark: | N/A | +| `updated_at` | *str* | :heavy_check_mark: | N/A | +| `versions` | List[[operations.GetV1WorkflowsWorkflowIDVersions](../../models/operations/getv1workflowsworkflowidversions.md)] | :heavy_check_mark: | N/A | +| `org_id` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getv1workflowsworkflowidversions.md b/docs/models/operations/getv1workflowsworkflowidversions.md new file mode 100644 index 0000000..3ce4c96 --- /dev/null +++ b/docs/models/operations/getv1workflowsworkflowidversions.md @@ -0,0 +1,17 @@ +# GetV1WorkflowsWorkflowIDVersions + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `workflow_id` | *str* | :heavy_check_mark: | N/A | +| `id` | *str* | :heavy_check_mark: | N/A | +| `comment` | *Optional[str]* | :heavy_check_mark: | N/A | +| `version` | *float* | :heavy_check_mark: | N/A | +| `snapshot` | *Optional[str]* | :heavy_check_mark: | N/A | +| `dependencies` | *Optional[str]* | :heavy_check_mark: | N/A | +| `created_at` | *str* | :heavy_check_mark: | N/A | +| `updated_at` | *str* | :heavy_check_mark: | N/A | +| `workflow` | *Optional[Any]* | :heavy_minus_sign: | N/A | +| `workflow_api` | *Optional[Any]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getwebsocketdeploymentidrequest.md b/docs/models/operations/getwebsocketdeploymentidrequest.md new file mode 100644 index 0000000..79dc33d --- /dev/null +++ b/docs/models/operations/getwebsocketdeploymentidrequest.md @@ -0,0 +1,8 @@ +# GetWebsocketDeploymentIDRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `deployment_id` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getwebsocketdeploymentidresponse.md b/docs/models/operations/getwebsocketdeploymentidresponse.md new file mode 100644 index 0000000..50a1702 --- /dev/null +++ b/docs/models/operations/getwebsocketdeploymentidresponse.md @@ -0,0 +1,9 @@ +# GetWebsocketDeploymentIDResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.GetWebsocketDeploymentIDResponseBody]](../../models/operations/getwebsocketdeploymentidresponsebody.md) | :heavy_minus_sign: | Workflow queued | \ No newline at end of file diff --git a/docs/models/operations/getwebsocketdeploymentidresponsebody.md b/docs/models/operations/getwebsocketdeploymentidresponsebody.md new file mode 100644 index 0000000..7f717e3 --- /dev/null +++ b/docs/models/operations/getwebsocketdeploymentidresponsebody.md @@ -0,0 +1,10 @@ +# GetWebsocketDeploymentIDResponseBody + +Workflow queued + + +## Fields + +| Field | Type | Required | Description | +| ------------------- | ------------------- | ------------------- | ------------------- | +| `ws_connection_url` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getworkflowiddependencies.md b/docs/models/operations/getworkflowiddependencies.md new file mode 100644 index 0000000..d7d1014 --- /dev/null +++ b/docs/models/operations/getworkflowiddependencies.md @@ -0,0 +1,7 @@ +# GetWorkflowIDDependencies + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/getworkflowidrequest.md b/docs/models/operations/getworkflowidrequest.md new file mode 100644 index 0000000..f6cf80f --- /dev/null +++ b/docs/models/operations/getworkflowidrequest.md @@ -0,0 +1,8 @@ +# GetWorkflowIDRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getworkflowidresponse.md b/docs/models/operations/getworkflowidresponse.md new file mode 100644 index 0000000..1a9acd1 --- /dev/null +++ b/docs/models/operations/getworkflowidresponse.md @@ -0,0 +1,9 @@ +# GetWorkflowIDResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.GetWorkflowIDResponseBody]](../../models/operations/getworkflowidresponsebody.md) | :heavy_minus_sign: | Retrieve the output | \ No newline at end of file diff --git a/docs/models/operations/getworkflowidresponsebody.md b/docs/models/operations/getworkflowidresponsebody.md new file mode 100644 index 0000000..7446424 --- /dev/null +++ b/docs/models/operations/getworkflowidresponsebody.md @@ -0,0 +1,20 @@ +# GetWorkflowIDResponseBody + +Retrieve the output + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `workflow_id` | *str* | :heavy_check_mark: | N/A | +| `id` | *str* | :heavy_check_mark: | N/A | +| `workflow` | [operations.GetWorkflowIDWorkflow](../../models/operations/getworkflowidworkflow.md) | :heavy_check_mark: | N/A | +| `workflow_api` | [operations.GetWorkflowIDWorkflowAPI](../../models/operations/getworkflowidworkflowapi.md) | :heavy_check_mark: | N/A | +| `user_id` | *Optional[str]* | :heavy_check_mark: | N/A | +| `comment` | *Optional[str]* | :heavy_check_mark: | N/A | +| `version` | *float* | :heavy_check_mark: | N/A | +| `snapshot` | [operations.GetWorkflowIDSnapshot](../../models/operations/getworkflowidsnapshot.md) | :heavy_check_mark: | N/A | +| `dependencies` | [operations.GetWorkflowIDDependencies](../../models/operations/getworkflowiddependencies.md) | :heavy_check_mark: | N/A | +| `created_at` | *str* | :heavy_check_mark: | N/A | +| `updated_at` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getworkflowidsnapshot.md b/docs/models/operations/getworkflowidsnapshot.md new file mode 100644 index 0000000..97271cb --- /dev/null +++ b/docs/models/operations/getworkflowidsnapshot.md @@ -0,0 +1,7 @@ +# GetWorkflowIDSnapshot + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/getworkflowidworkflow.md b/docs/models/operations/getworkflowidworkflow.md new file mode 100644 index 0000000..a53a2a8 --- /dev/null +++ b/docs/models/operations/getworkflowidworkflow.md @@ -0,0 +1,7 @@ +# GetWorkflowIDWorkflow + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/getworkflowidworkflowapi.md b/docs/models/operations/getworkflowidworkflowapi.md new file mode 100644 index 0000000..56115dd --- /dev/null +++ b/docs/models/operations/getworkflowidworkflowapi.md @@ -0,0 +1,7 @@ +# GetWorkflowIDWorkflowAPI + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/getworkflowversionversioniddependencies.md b/docs/models/operations/getworkflowversionversioniddependencies.md new file mode 100644 index 0000000..9eb98da --- /dev/null +++ b/docs/models/operations/getworkflowversionversioniddependencies.md @@ -0,0 +1,7 @@ +# GetWorkflowVersionVersionIDDependencies + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/getworkflowversionversionidrequest.md b/docs/models/operations/getworkflowversionversionidrequest.md new file mode 100644 index 0000000..c7f6c19 --- /dev/null +++ b/docs/models/operations/getworkflowversionversionidrequest.md @@ -0,0 +1,8 @@ +# GetWorkflowVersionVersionIDRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `version_id` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getworkflowversionversionidresponse.md b/docs/models/operations/getworkflowversionversionidresponse.md new file mode 100644 index 0000000..949f91b --- /dev/null +++ b/docs/models/operations/getworkflowversionversionidresponse.md @@ -0,0 +1,9 @@ +# GetWorkflowVersionVersionIDResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.GetWorkflowVersionVersionIDResponseBody]](../../models/operations/getworkflowversionversionidresponsebody.md) | :heavy_minus_sign: | Retrieve the output | \ No newline at end of file diff --git a/docs/models/operations/getworkflowversionversionidresponsebody.md b/docs/models/operations/getworkflowversionversionidresponsebody.md new file mode 100644 index 0000000..91b9607 --- /dev/null +++ b/docs/models/operations/getworkflowversionversionidresponsebody.md @@ -0,0 +1,20 @@ +# GetWorkflowVersionVersionIDResponseBody + +Retrieve the output + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `workflow_id` | *str* | :heavy_check_mark: | N/A | +| `id` | *str* | :heavy_check_mark: | N/A | +| `workflow` | [operations.Workflow](../../models/operations/workflow.md) | :heavy_check_mark: | N/A | +| `workflow_api` | [operations.GetWorkflowVersionVersionIDWorkflowAPI](../../models/operations/getworkflowversionversionidworkflowapi.md) | :heavy_check_mark: | N/A | +| `user_id` | *Optional[str]* | :heavy_check_mark: | N/A | +| `comment` | *Optional[str]* | :heavy_check_mark: | N/A | +| `version` | *float* | :heavy_check_mark: | N/A | +| `snapshot` | [operations.GetWorkflowVersionVersionIDSnapshot](../../models/operations/getworkflowversionversionidsnapshot.md) | :heavy_check_mark: | N/A | +| `dependencies` | [operations.GetWorkflowVersionVersionIDDependencies](../../models/operations/getworkflowversionversioniddependencies.md) | :heavy_check_mark: | N/A | +| `created_at` | *str* | :heavy_check_mark: | N/A | +| `updated_at` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getworkflowversionversionidsnapshot.md b/docs/models/operations/getworkflowversionversionidsnapshot.md new file mode 100644 index 0000000..62a7892 --- /dev/null +++ b/docs/models/operations/getworkflowversionversionidsnapshot.md @@ -0,0 +1,7 @@ +# GetWorkflowVersionVersionIDSnapshot + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/getworkflowversionversionidworkflowapi.md b/docs/models/operations/getworkflowversionversionidworkflowapi.md new file mode 100644 index 0000000..1b0f0c9 --- /dev/null +++ b/docs/models/operations/getworkflowversionversionidworkflowapi.md @@ -0,0 +1,7 @@ +# GetWorkflowVersionVersionIDWorkflowAPI + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/gitcustomnodes.md b/docs/models/operations/gitcustomnodes.md new file mode 100644 index 0000000..25b1b39 --- /dev/null +++ b/docs/models/operations/gitcustomnodes.md @@ -0,0 +1,9 @@ +# GitCustomNodes + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `hash` | *str* | :heavy_check_mark: | N/A | +| `disabled` | *bool* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/gpu.md b/docs/models/operations/gpu.md new file mode 100644 index 0000000..469869d --- /dev/null +++ b/docs/models/operations/gpu.md @@ -0,0 +1,12 @@ +# Gpu + + +## Values + +| Name | Value | +| ------- | ------- | +| `T4` | T4 | +| `L4` | L4 | +| `A10_G` | A10G | +| `A100` | A100 | +| `H100` | H100 | \ No newline at end of file diff --git a/docs/models/operations/gpuprovider.md b/docs/models/operations/gpuprovider.md new file mode 100644 index 0000000..174c520 --- /dev/null +++ b/docs/models/operations/gpuprovider.md @@ -0,0 +1,9 @@ +# GpuProvider + + +## Values + +| Name | Value | +| -------- | -------- | +| `MODAL` | modal | +| `RUNPOD` | runpod | \ No newline at end of file diff --git a/docs/models/operations/gputype.md b/docs/models/operations/gputype.md new file mode 100644 index 0000000..20c8f32 --- /dev/null +++ b/docs/models/operations/gputype.md @@ -0,0 +1,12 @@ +# GpuType + + +## Values + +| Name | Value | +| ------- | ------- | +| `T4` | T4 | +| `L4` | L4 | +| `A10_G` | A10G | +| `A100` | A100 | +| `H100` | H100 | \ No newline at end of file diff --git a/docs/models/operations/inputs.md b/docs/models/operations/inputs.md new file mode 100644 index 0000000..8098f20 --- /dev/null +++ b/docs/models/operations/inputs.md @@ -0,0 +1,17 @@ +# Inputs + + +## Supported Types + +### `str` + +```python +value: str = /* values here */ +``` + +### `float` + +```python +value: float = /* values here */ +``` + diff --git a/docs/models/operations/installtype.md b/docs/models/operations/installtype.md new file mode 100644 index 0000000..ee257fe --- /dev/null +++ b/docs/models/operations/installtype.md @@ -0,0 +1,17 @@ +# InstallType + + +## Supported Types + +### `operations.One` + +```python +value: operations.One = /* values here */ +``` + +### `str` + +```python +value: str = /* values here */ +``` + diff --git a/docs/models/operations/machines.md b/docs/models/operations/machines.md new file mode 100644 index 0000000..d7cab35 --- /dev/null +++ b/docs/models/operations/machines.md @@ -0,0 +1,15 @@ +# Machines + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | N/A | +| `endpoints` | List[*str*] | :heavy_check_mark: | N/A | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `status` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `created_at` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `updated_at` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `object_info` | *Optional[Any]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/machinetype.md b/docs/models/operations/machinetype.md new file mode 100644 index 0000000..4df158e --- /dev/null +++ b/docs/models/operations/machinetype.md @@ -0,0 +1,13 @@ +# MachineType + + +## Values + +| Name | Value | +| ------------------------- | ------------------------- | +| `CLASSIC` | classic | +| `RUNPOD_SERVERLESS` | runpod-serverless | +| `MODAL_SERVERLESS` | modal-serverless | +| `COMFY_DEPLOY_SERVERLESS` | comfy-deploy-serverless | +| `WORKSPACE` | workspace | +| `WORKSPACE_V2` | workspace-v2 | \ No newline at end of file diff --git a/docs/models/operations/models.md b/docs/models/operations/models.md new file mode 100644 index 0000000..1b2e944 --- /dev/null +++ b/docs/models/operations/models.md @@ -0,0 +1,10 @@ +# Models + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `name` | *str* | :heavy_check_mark: | N/A | +| `hash` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `url` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/node.md b/docs/models/operations/node.md new file mode 100644 index 0000000..5ab89dd --- /dev/null +++ b/docs/models/operations/node.md @@ -0,0 +1,9 @@ +# Node + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `inputs` | Dict[str, *Any*] | :heavy_check_mark: | N/A | +| `class_type` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/one.md b/docs/models/operations/one.md new file mode 100644 index 0000000..087a1ba --- /dev/null +++ b/docs/models/operations/one.md @@ -0,0 +1,10 @@ +# One + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `COPY` | copy | +| `UNZIP` | unzip | +| `GIT_CLONE` | git-clone | \ No newline at end of file diff --git a/docs/models/operations/origin.md b/docs/models/operations/origin.md new file mode 100644 index 0000000..7dd2859 --- /dev/null +++ b/docs/models/operations/origin.md @@ -0,0 +1,12 @@ +# Origin + + +## Values + +| Name | Value | +| ----------------- | ----------------- | +| `MANUAL` | manual | +| `API` | api | +| `PUBLIC_SHARE` | public-share | +| `PUBLIC_TEMPLATE` | public-template | +| `WORKSPACE` | workspace | \ No newline at end of file diff --git a/docs/models/operations/outputs.md b/docs/models/operations/outputs.md new file mode 100644 index 0000000..65d6d0f --- /dev/null +++ b/docs/models/operations/outputs.md @@ -0,0 +1,10 @@ +# Outputs + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `file_ur_ls` | List[*str*] | :heavy_check_mark: | N/A | +| `run_id` | *str* | :heavy_check_mark: | N/A | +| `duration` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/postgpueventrequestbody.md b/docs/models/operations/postgpueventrequestbody.md new file mode 100644 index 0000000..32a1724 --- /dev/null +++ b/docs/models/operations/postgpueventrequestbody.md @@ -0,0 +1,16 @@ +# PostGpuEventRequestBody + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `machine_id` | *str* | :heavy_check_mark: | N/A | +| `timestamp` | *str* | :heavy_check_mark: | N/A | +| `event_type` | [operations.EventType](../../models/operations/eventtype.md) | :heavy_check_mark: | N/A | +| `gpu_provider` | [operations.GpuProvider](../../models/operations/gpuprovider.md) | :heavy_check_mark: | N/A | +| `gpu_type` | [Optional[operations.GpuType]](../../models/operations/gputype.md) | :heavy_minus_sign: | N/A | +| `ws_gpu_type` | [Optional[operations.WsGpuType]](../../models/operations/wsgputype.md) | :heavy_minus_sign: | N/A | +| `event_id` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `is_workspace` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `user_or_org_id` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/postgpueventresponse.md b/docs/models/operations/postgpueventresponse.md new file mode 100644 index 0000000..6058c96 --- /dev/null +++ b/docs/models/operations/postgpueventresponse.md @@ -0,0 +1,9 @@ +# PostGpuEventResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.PostGpuEventResponseBody]](../../models/operations/postgpueventresponsebody.md) | :heavy_minus_sign: | Machine event registered | \ No newline at end of file diff --git a/docs/models/operations/postgpueventresponsebody.md b/docs/models/operations/postgpueventresponsebody.md new file mode 100644 index 0000000..cb1e2d6 --- /dev/null +++ b/docs/models/operations/postgpueventresponsebody.md @@ -0,0 +1,10 @@ +# PostGpuEventResponseBody + +Machine event registered + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `event_id` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/postmachineendpointrequestbody.md b/docs/models/operations/postmachineendpointrequestbody.md new file mode 100644 index 0000000..436c598 --- /dev/null +++ b/docs/models/operations/postmachineendpointrequestbody.md @@ -0,0 +1,9 @@ +# PostMachineEndpointRequestBody + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `machine_id` | *str* | :heavy_check_mark: | N/A | +| `type` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/postmachineendpointresponse.md b/docs/models/operations/postmachineendpointresponse.md new file mode 100644 index 0000000..695c48e --- /dev/null +++ b/docs/models/operations/postmachineendpointresponse.md @@ -0,0 +1,9 @@ +# PostMachineEndpointResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.PostMachineEndpointResponseBody]](../../models/operations/postmachineendpointresponsebody.md) | :heavy_minus_sign: | Create short lived machine endpoint | \ No newline at end of file diff --git a/docs/models/operations/postmachineendpointresponsebody.md b/docs/models/operations/postmachineendpointresponsebody.md new file mode 100644 index 0000000..e6f006e --- /dev/null +++ b/docs/models/operations/postmachineendpointresponsebody.md @@ -0,0 +1,11 @@ +# PostMachineEndpointResponseBody + +Create short lived machine endpoint + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `url` | *str* | :heavy_check_mark: | N/A | +| `gpu` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/postrunrequestbody.md b/docs/models/operations/postrunrequestbody.md new file mode 100644 index 0000000..03bddd2 --- /dev/null +++ b/docs/models/operations/postrunrequestbody.md @@ -0,0 +1,21 @@ +# PostRunRequestBody + +Run options + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `deployment_id` | *Optional[str]* | :heavy_minus_sign: | Deployment ID to run | d290f1ee-6c54-4b01-90e6-d701748f0851 | +| `workflow_api` | *Optional[Any]* | :heavy_minus_sign: | Workflow API JSON to run | | +| `workflow_id` | *Optional[str]* | :heavy_minus_sign: | Workflow ID to run | f47ac10b-58cc-4372-a567-0e02b2c3d479 | +| `machine_id` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `gpu` | [Optional[operations.Gpu]](../../models/operations/gpu.md) | :heavy_minus_sign: | N/A | | +| `concurrency_limit` | *Optional[float]* | :heavy_minus_sign: | N/A | | +| `private_volume_name` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `timeout` | *Optional[float]* | :heavy_minus_sign: | N/A | | +| `run_origin` | [Optional[operations.RunOrigin]](../../models/operations/runorigin.md) | :heavy_minus_sign: | N/A | | +| `inputs` | Dict[str, [operations.Inputs](../../models/operations/inputs.md)] | :heavy_minus_sign: | External inputs to the workflow | {
"input_text": "value1",
"input_url": "https://example.png"
} | +| `webhook` | *Optional[str]* | :heavy_minus_sign: | Webhook URL to receive workflow updates | https://example.com/webhook | +| `stream` | *Optional[bool]* | :heavy_minus_sign: | Whether to return a streaming url | | \ No newline at end of file diff --git a/docs/models/operations/postrunresponse.md b/docs/models/operations/postrunresponse.md new file mode 100644 index 0000000..c5c5740 --- /dev/null +++ b/docs/models/operations/postrunresponse.md @@ -0,0 +1,9 @@ +# PostRunResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.PostRunResponseBody]](../../models/operations/postrunresponsebody.md) | :heavy_minus_sign: | Workflow queued | \ No newline at end of file diff --git a/docs/models/operations/postrunresponsebody.md b/docs/models/operations/postrunresponsebody.md new file mode 100644 index 0000000..9d6ac68 --- /dev/null +++ b/docs/models/operations/postrunresponsebody.md @@ -0,0 +1,10 @@ +# PostRunResponseBody + +Workflow queued + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `run_id` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/postv1machinesgpu.md b/docs/models/operations/postv1machinesgpu.md new file mode 100644 index 0000000..3cc4cb6 --- /dev/null +++ b/docs/models/operations/postv1machinesgpu.md @@ -0,0 +1,8 @@ +# PostV1MachinesGpu + + +## Values + +| Name | Value | +| ------- | ------- | +| `A10_G` | A10G | \ No newline at end of file diff --git a/docs/models/operations/postv1machinesrequestbody.md b/docs/models/operations/postv1machinesrequestbody.md new file mode 100644 index 0000000..23b7e4d --- /dev/null +++ b/docs/models/operations/postv1machinesrequestbody.md @@ -0,0 +1,8 @@ +# PostV1MachinesRequestBody + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `default_machine` | *Optional[bool]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/postv1machinesresponse.md b/docs/models/operations/postv1machinesresponse.md new file mode 100644 index 0000000..6b1e35a --- /dev/null +++ b/docs/models/operations/postv1machinesresponse.md @@ -0,0 +1,9 @@ +# PostV1MachinesResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.PostV1MachinesResponseBody]](../../models/operations/postv1machinesresponsebody.md) | :heavy_minus_sign: | Machine created successfully | \ No newline at end of file diff --git a/docs/models/operations/postv1machinesresponsebody.md b/docs/models/operations/postv1machinesresponsebody.md new file mode 100644 index 0000000..50ce771 --- /dev/null +++ b/docs/models/operations/postv1machinesresponsebody.md @@ -0,0 +1,46 @@ +# PostV1MachinesResponseBody + +Machine created successfully + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `id` | *str* | :heavy_check_mark: | N/A | +| `user_id` | *str* | :heavy_check_mark: | N/A | +| `name` | *str* | :heavy_check_mark: | N/A | +| `org_id` | *Optional[str]* | :heavy_check_mark: | N/A | +| `endpoint` | *str* | :heavy_check_mark: | N/A | +| `created_at` | *str* | :heavy_check_mark: | N/A | +| `updated_at` | *str* | :heavy_check_mark: | N/A | +| `disabled` | *bool* | :heavy_check_mark: | N/A | +| `type` | [operations.PostV1MachinesType](../../models/operations/postv1machinestype.md) | :heavy_check_mark: | N/A | +| `status` | [operations.PostV1MachinesStatus](../../models/operations/postv1machinesstatus.md) | :heavy_check_mark: | N/A | +| `machine_version` | *Optional[str]* | :heavy_check_mark: | N/A | +| `machine_builder_version` | *str* | :heavy_check_mark: | N/A | +| `models` | List[*Any*] | :heavy_check_mark: | N/A | +| `gpu` | [operations.PostV1MachinesGpu](../../models/operations/postv1machinesgpu.md) | :heavy_check_mark: | N/A | +| `pod_id` | *Optional[str]* | :heavy_check_mark: | N/A | +| `base_docker_image` | *Optional[str]* | :heavy_check_mark: | N/A | +| `allow_concurrent_inputs` | *float* | :heavy_check_mark: | N/A | +| `concurrency_limit` | *float* | :heavy_check_mark: | N/A | +| `legacy_mode` | *bool* | :heavy_check_mark: | N/A | +| `ws_timeout` | *float* | :heavy_check_mark: | N/A | +| `run_timeout` | *float* | :heavy_check_mark: | N/A | +| `idle_timeout` | *float* | :heavy_check_mark: | N/A | +| `build_machine_instance_id` | *Optional[str]* | :heavy_check_mark: | N/A | +| `build_log` | *Optional[str]* | :heavy_check_mark: | N/A | +| `modal_app_id` | *Optional[str]* | :heavy_check_mark: | N/A | +| `target_workflow_id` | *Optional[str]* | :heavy_check_mark: | N/A | +| `install_custom_node_with_gpu` | *bool* | :heavy_check_mark: | N/A | +| `deleted` | *bool* | :heavy_check_mark: | N/A | +| `keep_warm` | *float* | :heavy_check_mark: | N/A | +| `allow_background_volume_commits` | *bool* | :heavy_check_mark: | N/A | +| `gpu_workspace` | *bool* | :heavy_check_mark: | N/A | +| `snapshot` | *Optional[Any]* | :heavy_minus_sign: | N/A | +| `ws_gpu` | *Optional[Any]* | :heavy_minus_sign: | N/A | +| `object_info` | *Optional[Any]* | :heavy_minus_sign: | N/A | +| `dependencies` | *Optional[Any]* | :heavy_minus_sign: | N/A | +| `extra_docker_commands` | *Optional[Any]* | :heavy_minus_sign: | N/A | +| `docker_command_steps` | *Optional[Any]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/postv1machinesstatus.md b/docs/models/operations/postv1machinesstatus.md new file mode 100644 index 0000000..aab3009 --- /dev/null +++ b/docs/models/operations/postv1machinesstatus.md @@ -0,0 +1,8 @@ +# PostV1MachinesStatus + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `BUILDING` | building | \ No newline at end of file diff --git a/docs/models/operations/postv1machinestype.md b/docs/models/operations/postv1machinestype.md new file mode 100644 index 0000000..8ee292c --- /dev/null +++ b/docs/models/operations/postv1machinestype.md @@ -0,0 +1,8 @@ +# PostV1MachinesType + + +## Values + +| Name | Value | +| ------------------------- | ------------------------- | +| `COMFY_DEPLOY_SERVERLESS` | comfy-deploy-serverless | \ No newline at end of file diff --git a/docs/models/operations/postv1workflowsrequestbody.md b/docs/models/operations/postv1workflowsrequestbody.md new file mode 100644 index 0000000..af02fc1 --- /dev/null +++ b/docs/models/operations/postv1workflowsrequestbody.md @@ -0,0 +1,10 @@ +# PostV1WorkflowsRequestBody + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `workflow_name` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `workflow_json` | [Optional[operations.WorkflowJSON]](../../models/operations/workflowjson.md) | :heavy_minus_sign: | N/A | +| `create_machine` | *Optional[bool]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/postv1workflowsresponse.md b/docs/models/operations/postv1workflowsresponse.md new file mode 100644 index 0000000..e983f56 --- /dev/null +++ b/docs/models/operations/postv1workflowsresponse.md @@ -0,0 +1,9 @@ +# PostV1WorkflowsResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.PostV1WorkflowsResponseBody]](../../models/operations/postv1workflowsresponsebody.md) | :heavy_minus_sign: | Workflow created successfully | \ No newline at end of file diff --git a/docs/models/operations/postv1workflowsresponsebody.md b/docs/models/operations/postv1workflowsresponsebody.md new file mode 100644 index 0000000..aeb659d --- /dev/null +++ b/docs/models/operations/postv1workflowsresponsebody.md @@ -0,0 +1,12 @@ +# PostV1WorkflowsResponseBody + +Workflow created successfully + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `workflow_id` | *str* | :heavy_check_mark: | N/A | +| `workflow_version` | *float* | :heavy_check_mark: | N/A | +| `machine_id` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/postworkflowrequestbody.md b/docs/models/operations/postworkflowrequestbody.md new file mode 100644 index 0000000..c5eeecf --- /dev/null +++ b/docs/models/operations/postworkflowrequestbody.md @@ -0,0 +1,13 @@ +# PostWorkflowRequestBody + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `workflow_api` | Dict[str, [operations.WorkflowAPI](../../models/operations/workflowapi.md)] | :heavy_check_mark: | N/A | +| `snapshot` | [operations.Snapshot](../../models/operations/snapshot.md) | :heavy_check_mark: | N/A | +| `workflow_id` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `workflow_name` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `workflow` | *Optional[Any]* | :heavy_minus_sign: | N/A | +| `dependencies` | [Optional[operations.Dependencies]](../../models/operations/dependencies.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/postworkflowresponse.md b/docs/models/operations/postworkflowresponse.md new file mode 100644 index 0000000..c6579bc --- /dev/null +++ b/docs/models/operations/postworkflowresponse.md @@ -0,0 +1,9 @@ +# PostWorkflowResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `http_meta` | [components.HTTPMetadata](../../models/components/httpmetadata.md) | :heavy_check_mark: | N/A | +| `object` | [Optional[operations.PostWorkflowResponseBody]](../../models/operations/postworkflowresponsebody.md) | :heavy_minus_sign: | Retrieve the output | \ No newline at end of file diff --git a/docs/models/operations/postworkflowresponsebody.md b/docs/models/operations/postworkflowresponsebody.md new file mode 100644 index 0000000..706eaf6 --- /dev/null +++ b/docs/models/operations/postworkflowresponsebody.md @@ -0,0 +1,11 @@ +# PostWorkflowResponseBody + +Retrieve the output + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `workflow_id` | *str* | :heavy_check_mark: | N/A | +| `version` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/queryparamrunorigin.md b/docs/models/operations/queryparamrunorigin.md new file mode 100644 index 0000000..c0b080d --- /dev/null +++ b/docs/models/operations/queryparamrunorigin.md @@ -0,0 +1,12 @@ +# QueryParamRunOrigin + + +## Values + +| Name | Value | +| ----------------- | ----------------- | +| `MANUAL` | manual | +| `API` | api | +| `PUBLIC_SHARE` | public-share | +| `PUBLIC_TEMPLATE` | public-template | +| `WORKSPACE` | workspace | \ No newline at end of file diff --git a/docs/models/operations/responsebody.md b/docs/models/operations/responsebody.md new file mode 100644 index 0000000..d5868df --- /dev/null +++ b/docs/models/operations/responsebody.md @@ -0,0 +1,12 @@ +# ResponseBody + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `class_type` | *str* | :heavy_check_mark: | N/A | +| `input_id` | *str* | :heavy_check_mark: | N/A | +| `default_value` | *str* | :heavy_check_mark: | N/A | +| `min_value` | *float* | :heavy_check_mark: | N/A | +| `max_value` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/runlog.md b/docs/models/operations/runlog.md new file mode 100644 index 0000000..5730f25 --- /dev/null +++ b/docs/models/operations/runlog.md @@ -0,0 +1,7 @@ +# RunLog + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/runorigin.md b/docs/models/operations/runorigin.md new file mode 100644 index 0000000..a4029e3 --- /dev/null +++ b/docs/models/operations/runorigin.md @@ -0,0 +1,12 @@ +# RunOrigin + + +## Values + +| Name | Value | +| ----------------- | ----------------- | +| `MANUAL` | manual | +| `API` | api | +| `PUBLIC_SHARE` | public-share | +| `PUBLIC_TEMPLATE` | public-template | +| `WORKSPACE` | workspace | \ No newline at end of file diff --git a/docs/models/operations/snapshot.md b/docs/models/operations/snapshot.md new file mode 100644 index 0000000..d4dca3c --- /dev/null +++ b/docs/models/operations/snapshot.md @@ -0,0 +1,10 @@ +# Snapshot + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `comfyui` | *str* | :heavy_check_mark: | N/A | +| `git_custom_nodes` | Dict[str, [operations.GitCustomNodes](../../models/operations/gitcustomnodes.md)] | :heavy_check_mark: | N/A | +| `file_custom_nodes` | List[*Any*] | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/status.md b/docs/models/operations/status.md new file mode 100644 index 0000000..ec0accc --- /dev/null +++ b/docs/models/operations/status.md @@ -0,0 +1,16 @@ +# Status + + +## Values + +| Name | Value | +| ------------- | ------------- | +| `NOT_STARTED` | not-started | +| `RUNNING` | running | +| `UPLOADING` | uploading | +| `SUCCESS` | success | +| `FAILED` | failed | +| `STARTED` | started | +| `QUEUED` | queued | +| `TIMEOUT` | timeout | +| `CANCELLED` | cancelled | \ No newline at end of file diff --git a/docs/models/operations/type.md b/docs/models/operations/type.md new file mode 100644 index 0000000..b534246 --- /dev/null +++ b/docs/models/operations/type.md @@ -0,0 +1,14 @@ +# Type + + +## Values + +| Name | Value | +| -------------------------- | -------------------------- | +| `IMAGE_PNG` | image/png | +| `IMAGE_JPG` | image/jpg | +| `IMAGE_JPEG` | image/jpeg | +| `IMAGE_WEBP` | image/webp | +| `VIDEO_MP4` | video/mp4 | +| `VIDEO_WEBM` | video/webm | +| `APPLICATION_OCTET_STREAM` | application/octet-stream | \ No newline at end of file diff --git a/docs/models/operations/user.md b/docs/models/operations/user.md new file mode 100644 index 0000000..2d163a6 --- /dev/null +++ b/docs/models/operations/user.md @@ -0,0 +1,8 @@ +# User + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `name` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/versions.md b/docs/models/operations/versions.md new file mode 100644 index 0000000..35ff827 --- /dev/null +++ b/docs/models/operations/versions.md @@ -0,0 +1,9 @@ +# Versions + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | N/A | +| `version` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/webhookstatus.md b/docs/models/operations/webhookstatus.md new file mode 100644 index 0000000..34c7b09 --- /dev/null +++ b/docs/models/operations/webhookstatus.md @@ -0,0 +1,11 @@ +# WebhookStatus + + +## Values + +| Name | Value | +| ------------- | ------------- | +| `SUCCESS` | success | +| `FAILED` | failed | +| `NOT_STARTED` | not-started | +| `RUNNING` | running | \ No newline at end of file diff --git a/docs/models/operations/workflow.md b/docs/models/operations/workflow.md new file mode 100644 index 0000000..64c074c --- /dev/null +++ b/docs/models/operations/workflow.md @@ -0,0 +1,7 @@ +# Workflow + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/workflowapi.md b/docs/models/operations/workflowapi.md new file mode 100644 index 0000000..ea13484 --- /dev/null +++ b/docs/models/operations/workflowapi.md @@ -0,0 +1,9 @@ +# WorkflowAPI + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `inputs` | Dict[str, *Any*] | :heavy_check_mark: | N/A | +| `class_type` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/workflowinputs.md b/docs/models/operations/workflowinputs.md new file mode 100644 index 0000000..ce1b430 --- /dev/null +++ b/docs/models/operations/workflowinputs.md @@ -0,0 +1,7 @@ +# WorkflowInputs + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/workflowjson.md b/docs/models/operations/workflowjson.md new file mode 100644 index 0000000..27a38e9 --- /dev/null +++ b/docs/models/operations/workflowjson.md @@ -0,0 +1,7 @@ +# WorkflowJSON + + +## Fields + +| Field | Type | Required | Description | +| ----------- | ----------- | ----------- | ----------- | \ No newline at end of file diff --git a/docs/models/operations/wsgputype.md b/docs/models/operations/wsgputype.md new file mode 100644 index 0000000..f9afbc0 --- /dev/null +++ b/docs/models/operations/wsgputype.md @@ -0,0 +1,8 @@ +# WsGpuType + + +## Values + +| Name | Value | +| -------------------------- | -------------------------- | +| `FOUR_THOUSAND_AND_NINETY` | 4090 | \ No newline at end of file diff --git a/docs/sdks/comfydeploy/README.md b/docs/sdks/comfydeploy/README.md new file mode 100644 index 0000000..4f21c1a --- /dev/null +++ b/docs/sdks/comfydeploy/README.md @@ -0,0 +1,9 @@ +# ComfyDeploy SDK + + +## Overview + +Comfy Deploy API: Interact with Comfy Deploy programmatically to trigger run and retrieve output + +### Available Operations + diff --git a/docs/sdks/comfyui/README.md b/docs/sdks/comfyui/README.md new file mode 100644 index 0000000..9a21d0c --- /dev/null +++ b/docs/sdks/comfyui/README.md @@ -0,0 +1,267 @@ +# Comfyui +(*comfyui*) + +### Available Operations + +* [get_auth_response_request_id_](#get_auth_response_request_id_) - Get an API Key with code +* [post_workflow](#post_workflow) - Upload workflow from ComfyUI +* [get_workflow_version_version_id_](#get_workflow_version_version_id_) - Get comfyui workflow +* [get_workflow_id_](#get_workflow_id_) - Get comfyui workflow +* [get_deployment_id_inputs](#get_deployment_id_inputs) - Get comfyui workflow inputs definition +* [get_deployment](#get_deployment) - Get all deployed workflows + +## get_auth_response_request_id_ + +This endpoints is specifically built for ComfyUI workflow upload. + +### Example Usage + +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.comfyui.get_auth_response_request_id_(request_id='') + +if res.two_hundred_application_json_object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `request_id` | *str* | :heavy_check_mark: | N/A | + + +### Response + +**[operations.GetAuthResponseRequestIDResponse](../../models/operations/getauthresponserequestidresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| errors.GetAuthResponseRequestIDResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## post_workflow + +This endpoints is specifically built for ComfyUI workflow upload. + +### Example Usage + +```python +import comfydeploy +from comfydeploy.models import operations + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.comfyui.post_workflow(request=operations.PostWorkflowRequestBody( + workflow_api={ + 'key': operations.WorkflowAPI( + inputs={ + 'key': '', + }, + ), + }, + snapshot=operations.Snapshot( + comfyui='', + git_custom_nodes={ + 'key': operations.GitCustomNodes( + hash='', + disabled=False, + ), + }, + file_custom_nodes=[ + '', + ], + ), +)) + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `request` | [operations.PostWorkflowRequestBody](../../models/operations/postworkflowrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.PostWorkflowResponse](../../models/operations/postworkflowresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------- | ------------------------------- | ------------------------------- | +| errors.PostWorkflowResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## get_workflow_version_version_id_ + +Use this to retrieve comfyui workflow by id + +### Example Usage + +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.comfyui.get_workflow_version_version_id_(version_id='') + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `version_id` | *str* | :heavy_check_mark: | N/A | + + +### Response + +**[operations.GetWorkflowVersionVersionIDResponse](../../models/operations/getworkflowversionversionidresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | +| errors.GetWorkflowVersionVersionIDResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## get_workflow_id_ + +Use this to retrieve comfyui workflow by id + +### Example Usage + +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.comfyui.get_workflow_id_(id='') + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | N/A | + + +### Response + +**[operations.GetWorkflowIDResponse](../../models/operations/getworkflowidresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------- | -------------------------------- | -------------------------------- | +| errors.GetWorkflowIDResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## get_deployment_id_inputs + +Use this to retrieve comfyui workflow inputs definition by id + +### Example Usage + +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.comfyui.get_deployment_id_inputs(id='') + +if res.response_bodies is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | N/A | + + +### Response + +**[operations.GetDeploymentIDInputsResponse](../../models/operations/getdeploymentidinputsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| errors.GetDeploymentIDInputsResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## get_deployment + +Get all deployed workflows + +### Example Usage + +```python +import comfydeploy +from comfydeploy.models import operations + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.comfyui.get_deployment(environment=operations.Environment.STAGING) + +if res.response_bodies is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `environment` | [Optional[operations.Environment]](../../models/operations/environment.md) | :heavy_minus_sign: | N/A | + + +### Response + +**[operations.GetDeploymentResponse](../../models/operations/getdeploymentresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------- | -------------------------------- | -------------------------------- | +| errors.GetDeploymentResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | diff --git a/docs/sdks/files/README.md b/docs/sdks/files/README.md new file mode 100644 index 0000000..bed837a --- /dev/null +++ b/docs/sdks/files/README.md @@ -0,0 +1,47 @@ +# Files +(*files*) + +### Available Operations + +* [get_upload_url](#get_upload_url) - Upload any files to the storage + +## get_upload_url + +Usually when you run something, you want to upload a file, image etc. + +### Example Usage + +```python +import comfydeploy +from comfydeploy.models import operations + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.files.get_upload_url(type=operations.Type.APPLICATION_OCTET_STREAM, file_size='') + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `type` | [operations.Type](../../models/operations/type.md) | :heavy_check_mark: | N/A | +| `file_size` | *str* | :heavy_check_mark: | N/A | + + +### Response + +**[operations.GetUploadURLResponse](../../models/operations/getuploadurlresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------- | ------------------------------- | ------------------------------- | +| errors.GetUploadURLResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | diff --git a/docs/sdks/machines/README.md b/docs/sdks/machines/README.md new file mode 100644 index 0000000..d6e942c --- /dev/null +++ b/docs/sdks/machines/README.md @@ -0,0 +1,176 @@ +# Machines +(*machines*) + +### Available Operations + +* [post_gpu_event](#post_gpu_event) - Register a machine event +* [get_v1_machines](#get_v1_machines) - Retrieve all machines for a user +* [post_v1_machines](#post_v1_machines) - Create a new machine +* [get_v1_machines_machine_id_](#get_v1_machines_machine_id_) - Retrieve a specific machine by ID + +## post_gpu_event + +Register a machine event + +### Example Usage + +```python +import comfydeploy +from comfydeploy.models import operations + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.machines.post_gpu_event(request=operations.PostGpuEventRequestBody( + machine_id='', + timestamp='', + event_type=operations.EventType.GPU_END, + gpu_provider=operations.GpuProvider.MODAL, +)) + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `request` | [operations.PostGpuEventRequestBody](../../models/operations/postgpueventrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.PostGpuEventResponse](../../models/operations/postgpueventresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------- | ------------------------------- | ------------------------------- | +| errors.PostGpuEventResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## get_v1_machines + +Retrieve details of all machines for the authenticated user, with pagination and optional field selection + +### Example Usage + +```python +import comfydeploy +from comfydeploy.models import operations + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.machines.get_v1_machines(page='1', page_size='12', fields=operations.Fields.MINIMAL) + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `page` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `page_size` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `fields` | [Optional[operations.Fields]](../../models/operations/fields.md) | :heavy_minus_sign: | N/A | + + +### Response + +**[operations.GetV1MachinesResponse](../../models/operations/getv1machinesresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------- | -------------------------------- | -------------------------------- | +| errors.GetV1MachinesResponseBody | 400 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## post_v1_machines + +Create a new machine with optional default setting + +### Example Usage + +```python +import comfydeploy +from comfydeploy.models import operations + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.machines.post_v1_machines(request=operations.PostV1MachinesRequestBody()) + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `request` | [operations.PostV1MachinesRequestBody](../../models/operations/postv1machinesrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.PostV1MachinesResponse](../../models/operations/postv1machinesresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------------- | --------------------------------- | --------------------------------- | +| errors.PostV1MachinesResponseBody | 400 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## get_v1_machines_machine_id_ + +Retrieve details of a specific machine by its ID, with optional workspace details + +### Example Usage + +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.machines.get_v1_machines_machine_id_(machine_id='', ext_urls='false') + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `machine_id` | *str* | :heavy_check_mark: | N/A | +| `ext_urls` | *Optional[str]* | :heavy_minus_sign: | N/A | + + +### Response + +**[operations.GetV1MachinesMachineIDResponse](../../models/operations/getv1machinesmachineidresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| errors.GetV1MachinesMachineIDResponseBody | 400 | application/json | +| errors.SDKError | 4xx-5xx | */* | diff --git a/docs/sdks/run/README.md b/docs/sdks/run/README.md new file mode 100644 index 0000000..6ddeca4 --- /dev/null +++ b/docs/sdks/run/README.md @@ -0,0 +1,95 @@ +# Run +(*run*) + +### Available Operations + +* [get](#get) - Get workflow run output +* [create](#create) - Run a workflow via deployment_id + +## get + +Call this to get a run's output, usually in conjunction with polling method + +### Example Usage + +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.run.get(run_id='') + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `run_id` | *str* | :heavy_check_mark: | N/A | + + +### Response + +**[operations.GetRunResponse](../../models/operations/getrunresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ---------------------------- | ---------------------------- | ---------------------------- | +| errors.GetRunResponseBody | 400 | application/json | +| errors.GetRunRunResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## create + +Run a workflow via deployment_id + +### Example Usage + +```python +import comfydeploy +from comfydeploy.models import operations + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.run.create(request=operations.PostRunRequestBody( + deployment_id='d290f1ee-6c54-4b01-90e6-d701748f0851', + workflow_id='f47ac10b-58cc-4372-a567-0e02b2c3d479', + inputs={ + 'input_text': 'value1', + 'input_url': 'https://example.png', + }, + webhook='https://example.com/webhook', +)) + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `request` | [operations.PostRunRequestBody](../../models/operations/postrunrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.PostRunResponse](../../models/operations/postrunresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| errors.PostRunResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | diff --git a/docs/sdks/workflows/README.md b/docs/sdks/workflows/README.md new file mode 100644 index 0000000..993f4cc --- /dev/null +++ b/docs/sdks/workflows/README.md @@ -0,0 +1,255 @@ +# Workflows +(*workflows*) + +### Available Operations + +* [get_websocket_deployment_id_](#get_websocket_deployment_id_) - Get a websocket url for a specific deployment +* [post_machine_endpoint](#post_machine_endpoint) - Create an endpoint for a machine +* [get_v1_workflows](#get_v1_workflows) - Retrieve workflows +* [post_v1_workflows](#post_v1_workflows) - Create a new workflow +* [get_v1_workflows_workflow_id_](#get_v1_workflows_workflow_id_) - Retrieve a specific workflow by ID +* [get_v1_workflows_workflow_id_outputs](#get_v1_workflows_workflow_id_outputs) - Retrieve the most recent outputs for a workflow + +## get_websocket_deployment_id_ + +Get a websocket url for a specific deployment + +### Example Usage + +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.workflows.get_websocket_deployment_id_(deployment_id='') + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `deployment_id` | *str* | :heavy_check_mark: | N/A | + + +### Response + +**[operations.GetWebsocketDeploymentIDResponse](../../models/operations/getwebsocketdeploymentidresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| errors.GetWebsocketDeploymentIDResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## post_machine_endpoint + +Create an endpoint for a machine + +### Example Usage + +```python +import comfydeploy +from comfydeploy.models import operations + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.workflows.post_machine_endpoint(request=operations.PostMachineEndpointRequestBody( + machine_id='', + type='', +)) + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `request` | [operations.PostMachineEndpointRequestBody](../../models/operations/postmachineendpointrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.PostMachineEndpointResponse](../../models/operations/postmachineendpointresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| errors.PostMachineEndpointResponseBody | 500 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## get_v1_workflows + +Retrieve workflows based on optional query parameters + +### Example Usage + +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.workflows.get_v1_workflows(page='1', page_size='12', search='') + +if res.response_bodies is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `page` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `page_size` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `search` | *Optional[str]* | :heavy_minus_sign: | N/A | + + +### Response + +**[operations.GetV1WorkflowsResponse](../../models/operations/getv1workflowsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------------- | --------------------------------- | --------------------------------- | +| errors.GetV1WorkflowsResponseBody | 400 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## post_v1_workflows + +Create a new workflow by analyzing the provided workflow JSON + +### Example Usage + +```python +import comfydeploy +from comfydeploy.models import operations + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.workflows.post_v1_workflows(request=operations.PostV1WorkflowsRequestBody()) + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `request` | [operations.PostV1WorkflowsRequestBody](../../models/operations/postv1workflowsrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.PostV1WorkflowsResponse](../../models/operations/postv1workflowsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | +| errors.PostV1WorkflowsResponseBody | 400 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## get_v1_workflows_workflow_id_ + +Retrieve the latest version of a specific workflow by its ID + +### Example Usage + +```python +import comfydeploy + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.workflows.get_v1_workflows_workflow_id_(workflow_id='') + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `workflow_id` | *str* | :heavy_check_mark: | N/A | + + +### Response + +**[operations.GetV1WorkflowsWorkflowIDResponse](../../models/operations/getv1workflowsworkflowidresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| errors.GetV1WorkflowsWorkflowIDResponseBody | 400 | application/json | +| errors.SDKError | 4xx-5xx | */* | + +## get_v1_workflows_workflow_id_outputs + +Retrieve the latest version of a specific workflow by its ID + +### Example Usage + +```python +import comfydeploy +from comfydeploy.models import operations + +s = comfydeploy.ComfyDeploy( + bearer_auth="", +) + + +res = s.workflows.get_v1_workflows_workflow_id_outputs(request=operations.GetV1WorkflowsWorkflowIDOutputsRequest( + workflow_id='', +)) + +if res.object is not None: + # handle response + pass + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `request` | [operations.GetV1WorkflowsWorkflowIDOutputsRequest](../../models/operations/getv1workflowsworkflowidoutputsrequest.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.GetV1WorkflowsWorkflowIDOutputsResponse](../../models/operations/getv1workflowsworkflowidoutputsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| errors.GetV1WorkflowsWorkflowIDOutputsResponseBody | 400 | application/json | +| errors.SDKError | 4xx-5xx | */* | diff --git a/py.typed b/py.typed new file mode 100644 index 0000000..3e38f1a --- /dev/null +++ b/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561. The package enables type hints. diff --git a/pylintrc b/pylintrc new file mode 100644 index 0000000..6a1c3fc --- /dev/null +++ b/pylintrc @@ -0,0 +1,646 @@ +[MAIN] + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Clear in-memory caches upon conclusion of linting. Useful if running pylint +# in a server-like mode. +clear-cache-post-run=no + +# Load and enable all available extensions. Use --list-extensions to see a list +# all available extensions. +#enable-all-extensions= + +# In error mode, messages with a category besides ERROR or FATAL are +# suppressed, and no reports are done by default. Error mode is compatible with +# disabling specific errors. +#errors-only= + +# Always return a 0 (non-error) status code, even if lint errors are found. +# This is primarily useful in continuous integration scripts. +#exit-zero= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-allow-list= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. (This is an alternative name to extension-pkg-allow-list +# for backward compatibility.) +extension-pkg-whitelist= + +# Return non-zero exit code if any of these messages/categories are detected, +# even if score is above --fail-under value. Syntax same as enable. Messages +# specified are enabled, while categories only check already-enabled messages. +fail-on= + +# Specify a score threshold under which the program will exit with error. +fail-under=10 + +# Interpret the stdin as a python script, whose filename needs to be passed as +# the module_or_package argument. +#from-stdin= + +# Files or directories to be skipped. They should be base names, not paths. +ignore=CVS + +# Add files or directories matching the regular expressions patterns to the +# ignore-list. The regex matches against paths and can be in Posix or Windows +# format. Because '\\' represents the directory delimiter on Windows systems, +# it can't be used as an escape character. +ignore-paths= + +# Files or directories matching the regular expression patterns are skipped. +# The regex matches against base names, not paths. The default value ignores +# Emacs file locks +ignore-patterns=^\.# + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis). It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use, and will cap the count on Windows to +# avoid hangs. +jobs=1 + +# Control the amount of potential inferred values when inferring a single +# object. This can help the performance when dealing with large functions or +# complex, nested conditions. +limit-inference-results=100 + +# List of plugins (as comma separated values of python module names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Minimum Python version to use for version dependent checks. Will default to +# the version used to run pylint. +py-version=3.8 + +# Discover python modules and packages in the file system subtree. +recursive=no + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + +# In verbose mode, extra non-checker-related info will be displayed. +#verbose= + + +[BASIC] + +# Naming style matching correct argument names. +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style. If left empty, argument names will be checked with the set +# naming style. +#argument-rgx= + +# Naming style matching correct attribute names. +#attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. If left empty, attribute names will be checked with the set naming +# style. +attr-rgx=[^\W\d][^\W]*|__.*__$ + +# Bad variable names which should always be refused, separated by a comma. +bad-names= + +# Bad variable names regexes, separated by a comma. If names match any regex, +# they will always be refused +bad-names-rgxs= + +# Naming style matching correct class attribute names. +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. If left empty, class attribute names will be checked +# with the set naming style. +#class-attribute-rgx= + +# Naming style matching correct class constant names. +class-const-naming-style=UPPER_CASE + +# Regular expression matching correct class constant names. Overrides class- +# const-naming-style. If left empty, class constant names will be checked with +# the set naming style. +#class-const-rgx= + +# Naming style matching correct class names. +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming- +# style. If left empty, class names will be checked with the set naming style. +#class-rgx= + +# Naming style matching correct constant names. +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style. If left empty, constant names will be checked with the set naming +# style. +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names. +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style. If left empty, function names will be checked with the set +# naming style. +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma. +good-names=i, + j, + k, + ex, + Run, + _, + e, + id + +# Good variable names regexes, separated by a comma. If names match any regex, +# they will always be accepted +good-names-rgxs= + +# Include a hint for the correct naming format with invalid-name. +include-naming-hint=no + +# Naming style matching correct inline iteration names. +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. If left empty, inline iteration names will be checked +# with the set naming style. +#inlinevar-rgx= + +# Naming style matching correct method names. +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style. If left empty, method names will be checked with the set naming style. +#method-rgx= + +# Naming style matching correct module names. +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style. If left empty, module names will be checked with the set naming style. +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +# These decorators are taken in consideration only for invalid-name. +property-classes=abc.abstractproperty + +# Regular expression matching correct type variable names. If left empty, type +# variable names will be checked with the set naming style. +#typevar-rgx= + +# Naming style matching correct variable names. +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style. If left empty, variable names will be checked with the set +# naming style. +#variable-rgx= + + +[CLASSES] + +# Warn about protected attribute access inside special methods +check-protected-access-in-special-methods=no + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp, + __post_init__ + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[DESIGN] + +# List of regular expressions of class ancestor names to ignore when counting +# public methods (see R0903) +exclude-too-few-public-methods= + +# List of qualified class names to ignore when counting class parents (see +# R0901) +ignored-parents= + +# Maximum number of arguments for function / method. +max-args=5 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in an if statement (see R0916). +max-bool-expr=5 + +# Maximum number of branch for function / method body. +max-branches=12 + +# Maximum number of locals for function / method body. +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=25 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when caught. +overgeneral-exceptions=builtins.BaseException,builtins.Exception + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module. +max-module-lines=1000 + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[IMPORTS] + +# List of modules that can be imported at any level, not just the top level +# one. +allow-any-import-level= + +# Allow explicit reexports by alias from a package __init__. +allow-reexport-from-package=no + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules= + +# Output a graph (.gv or any supported image format) of external dependencies +# to the given file (report RP0402 must not be disabled). +ext-import-graph= + +# Output a graph (.gv or any supported image format) of all (i.e. internal and +# external) dependencies to the given file (report RP0402 must not be +# disabled). +import-graph= + +# Output a graph (.gv or any supported image format) of internal dependencies +# to the given file (report RP0402 must not be disabled). +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + +# Couples of modules and preferred modules, separated by a comma. +preferred-modules= + + +[LOGGING] + +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style=old + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, +# UNDEFINED. +confidence=HIGH, + CONTROL_FLOW, + INFERENCE, + INFERENCE_FAILURE, + UNDEFINED + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then re-enable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=raw-checker-failed, + bad-inline-option, + locally-disabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead, + trailing-whitespace, + line-too-long, + missing-class-docstring, + missing-module-docstring, + missing-function-docstring, + too-many-instance-attributes, + wrong-import-order, + too-many-arguments, + broad-exception-raised, + too-few-public-methods, + too-many-branches, + chained-comparison, + duplicate-code, + trailing-newlines, + too-many-public-methods, + too-many-locals, + too-many-lines, + using-constant-test, + too-many-statements, + cyclic-import, + too-many-nested-blocks, + too-many-boolean-expressions, + no-else-raise, + bare-except, + broad-exception-caught + +# 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 +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[METHOD_ARGS] + +# List of qualified names (i.e., library.method) which require a timeout +# parameter e.g. 'requests.api.get,requests.api.post' +timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + +# Regular expression of note tags to take in consideration. +notes-rgx= + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit,argparse.parse_error + + +[REPORTS] + +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each +# category, as well as 'statement' which is the total number of statements +# analyzed. This score is used by the global evaluation report (RP0004). +evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +#output-format= + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[SIMILARITIES] + +# Comments are removed from the similarity computation +ignore-comments=yes + +# Docstrings are removed from the similarity computation +ignore-docstrings=yes + +# Imports are removed from the similarity computation +ignore-imports=yes + +# Signatures are removed from the similarity computation +ignore-signatures=yes + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it work, +# install the 'python-enchant' package. +spelling-dict= + +# List of comma separated words that should be considered directives if they +# appear at the beginning of a comment and should not be checked. +spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains the private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to the private dictionary (see the +# --spelling-private-dict-file option) instead of raising a message. +spelling-store-unknown-words=no + + +[STRING] + +# This flag controls whether inconsistent-quotes generates a warning when the +# character used as a quote delimiter is used inconsistently within a module. +check-quote-consistency=no + +# This flag controls whether the implicit-str-concat should generate a warning +# on implicit string concatenation in sequences defined over several lines. +check-str-concat-over-line-jumps=no + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of symbolic message names to ignore for Mixin members. +ignored-checks-for-mixins=no-member, + not-async-context-manager, + not-context-manager, + attribute-defined-outside-init + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + +# Regex pattern to define which classes are considered mixins. +mixin-class-rgx=.*[Mm]ixin + +# List of decorators that change the signature of a decorated function. +signature-mutators= + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid defining new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of names allowed to shadow builtins +allowed-redefined-builtins=id,object + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +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 diff --git a/scripts/publish.sh b/scripts/publish.sh new file mode 100755 index 0000000..ed45d8a --- /dev/null +++ b/scripts/publish.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +export TWINE_USERNAME=__token__ +export TWINE_PASSWORD=${PYPI_TOKEN} + +python -m pip install --upgrade pip +pip install setuptools wheel twine +python setup.py sdist bdist_wheel +twine upload dist/* diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..743bf3e --- /dev/null +++ b/setup.py @@ -0,0 +1,45 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import setuptools + +try: + with open('README.md', 'r') as fh: + long_description = fh.read() +except FileNotFoundError: + long_description = '' + +setuptools.setup( + name='comfydeploy', + version='0.0.1', + author='Speakeasy', + description='Python Client SDK Generated by Speakeasy', + long_description=long_description, + long_description_content_type='text/markdown', + packages=setuptools.find_packages(where='src'), + install_requires=[ + "certifi>=2023.7.22", + "charset-normalizer>=3.2.0", + "dataclasses-json>=0.6.4", + "idna>=3.4", + "jsonpath-python>=1.0.6", + "marshmallow>=3.19.0", + "mypy-extensions>=1.0.0", + "packaging>=23.1", + "python-dateutil>=2.8.2", + "requests>=2.31.0", + "six>=1.16.0", + "typing-inspect>=0.9.0", + "typing_extensions>=4.7.1", + "urllib3>=1.26.18", + ], + extras_require={ + "dev": [ + "pylint==3.1.0", + ], + }, + package_dir={'': 'src'}, + python_requires='>=3.8', + package_data={ + 'comfydeploy': ['py.typed'] + }, +) diff --git a/src/comfydeploy/__init__.py b/src/comfydeploy/__init__.py new file mode 100644 index 0000000..e6c0dee --- /dev/null +++ b/src/comfydeploy/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdk import * +from .sdkconfiguration import * diff --git a/src/comfydeploy/_hooks/__init__.py b/src/comfydeploy/_hooks/__init__.py new file mode 100644 index 0000000..b2ab14b --- /dev/null +++ b/src/comfydeploy/_hooks/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkhooks import * +from .types import * diff --git a/src/comfydeploy/_hooks/sdkhooks.py b/src/comfydeploy/_hooks/sdkhooks.py new file mode 100644 index 0000000..1bd70b2 --- /dev/null +++ b/src/comfydeploy/_hooks/sdkhooks.py @@ -0,0 +1,55 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests +from .types import SDKInitHook, BeforeRequestContext, BeforeRequestHook, AfterSuccessContext, AfterSuccessHook, AfterErrorContext, AfterErrorHook, Hooks +from typing import List, Optional, Tuple + + +class SDKHooks(Hooks): + def __init__(self): + self.sdk_init_hooks: List[SDKInitHook] = [] + self.before_request_hooks: List[BeforeRequestHook] = [] + self.after_success_hooks: List[AfterSuccessHook] = [] + self.after_error_hooks: List[AfterErrorHook] = [] + + def register_sdk_init_hook(self, hook: SDKInitHook) -> None: + self.sdk_init_hooks.append(hook) + + def register_before_request_hook(self, hook: BeforeRequestHook) -> None: + self.before_request_hooks.append(hook) + + def register_after_success_hook(self, hook: AfterSuccessHook) -> None: + self.after_success_hooks.append(hook) + + def register_after_error_hook(self, hook: AfterErrorHook) -> None: + self.after_error_hooks.append(hook) + + def sdk_init(self, base_url: str, client: requests.Session) -> Tuple[str, requests.Session]: + for hook in self.sdk_init_hooks: + base_url, client = hook.sdk_init(base_url, client) + return base_url, client + + def before_request(self, hook_ctx: BeforeRequestContext, request: requests.PreparedRequest) -> requests.PreparedRequest: + for hook in self.before_request_hooks: + out = hook.before_request(hook_ctx, request) + if isinstance(out, Exception): + raise out + request = out + + return request + + def after_success(self, hook_ctx: AfterSuccessContext, response: requests.Response) -> requests.Response: + for hook in self.after_success_hooks: + out = hook.after_success(hook_ctx, response) + if isinstance(out, Exception): + raise out + response = out + return response + + def after_error(self, hook_ctx: AfterErrorContext, response: Optional[requests.Response], error: Optional[Exception]) -> Tuple[Optional[requests.Response], Optional[Exception]]: + for hook in self.after_error_hooks: + result = hook.after_error(hook_ctx, response, error) + if isinstance(result, Exception): + raise result + response, error = result + return response, error diff --git a/src/comfydeploy/_hooks/types.py b/src/comfydeploy/_hooks/types.py new file mode 100644 index 0000000..b24c141 --- /dev/null +++ b/src/comfydeploy/_hooks/types.py @@ -0,0 +1,74 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http +from abc import ABC, abstractmethod +from typing import Any, Callable, List, Optional, Tuple, Union + + +class HookContext: + operation_id: str + oauth2_scopes: Optional[List[str]] = None + security_source: Optional[Union[Any, Callable[[], Any]]] = None + + def __init__(self, operation_id: str, oauth2_scopes: Optional[List[str]], security_source: Optional[Union[Any, Callable[[], Any]]]): + self.operation_id = operation_id + self.oauth2_scopes = oauth2_scopes + self.security_source = security_source + + +class BeforeRequestContext(HookContext): + def __init__(self, hook_ctx: HookContext): + super().__init__(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) + + + +class AfterErrorContext(HookContext): + def __init__(self, hook_ctx: HookContext): + super().__init__(hook_ctx.operation_id, hook_ctx.oauth2_scopes, hook_ctx.security_source) + + +class SDKInitHook(ABC): + @abstractmethod + def sdk_init(self, base_url: str, client: requests_http.Session) -> Tuple[str, requests_http.Session]: + pass + + +class BeforeRequestHook(ABC): + @abstractmethod + def before_request(self, hook_ctx: BeforeRequestContext, request: requests_http.PreparedRequest) -> Union[requests_http.PreparedRequest, Exception]: + pass + + +class AfterSuccessHook(ABC): + @abstractmethod + def after_success(self, hook_ctx: AfterSuccessContext, response: requests_http.Response) -> Union[requests_http.Response, Exception]: + pass + + +class AfterErrorHook(ABC): + @abstractmethod + def after_error(self, hook_ctx: AfterErrorContext, response: Optional[requests_http.Response], error: Optional[Exception]) -> Union[Tuple[Optional[requests_http.Response], Optional[Exception]], Exception]: + pass + + +class Hooks(ABC): + @abstractmethod + def register_sdk_init_hook(self, hook: SDKInitHook): + pass + + @abstractmethod + def register_before_request_hook(self, hook: BeforeRequestHook): + pass + + @abstractmethod + def register_after_success_hook(self, hook: AfterSuccessHook): + pass + + @abstractmethod + def register_after_error_hook(self, hook: AfterErrorHook): + pass diff --git a/src/comfydeploy/comfyui.py b/src/comfydeploy/comfyui.py new file mode 100644 index 0000000..87f28be --- /dev/null +++ b/src/comfydeploy/comfyui.py @@ -0,0 +1,445 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http +from .sdkconfiguration import SDKConfiguration +from comfydeploy import utils +from comfydeploy._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext +from comfydeploy.models import components, errors, operations +from typing import List, Optional + +class Comfyui: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_auth_response_request_id_(self, request_id: str) -> operations.GetAuthResponseRequestIDResponse: + r"""Get an API Key with code + This endpoints is specifically built for ComfyUI workflow upload. + """ + hook_ctx = HookContext(operation_id='get_/auth-response/{request_id}', oauth2_scopes=[], security_source=self.sdk_configuration.security) + request = operations.GetAuthResponseRequestIDRequest( + request_id=request_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(base_url, '/auth-response/{request_id}', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','4XX','500','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetAuthResponseRequestIDResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetAuthResponseRequestIDResponseBody]) + res.two_hundred_application_json_object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 201: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetAuthResponseRequestIDComfyuiResponseBody]) + res.two_hundred_and_one_application_json_object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 500: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetAuthResponseRequestIDResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def post_workflow(self, request: Optional[operations.PostWorkflowRequestBody] = None) -> operations.PostWorkflowResponse: + r"""Upload workflow from ComfyUI + This endpoints is specifically built for ComfyUI workflow upload. + """ + hook_ctx = HookContext(operation_id='post_/workflow', oauth2_scopes=[], security_source=self.sdk_configuration.security) + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/workflow' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + req_content_type, data, form = utils.serialize_request_body(request, Optional[operations.PostWorkflowRequestBody], "request", False, True, 'json') + if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','4XX','500','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.PostWorkflowResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.PostWorkflowResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 500: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.PostWorkflowResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_workflow_version_version_id_(self, version_id: str) -> operations.GetWorkflowVersionVersionIDResponse: + r"""Get comfyui workflow + Use this to retrieve comfyui workflow by id + """ + hook_ctx = HookContext(operation_id='get_/workflow-version/{version_id}', oauth2_scopes=[], security_source=self.sdk_configuration.security) + request = operations.GetWorkflowVersionVersionIDRequest( + version_id=version_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(base_url, '/workflow-version/{version_id}', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','4XX','500','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetWorkflowVersionVersionIDResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetWorkflowVersionVersionIDResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 500: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetWorkflowVersionVersionIDResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_workflow_id_(self, id: str) -> operations.GetWorkflowIDResponse: + r"""Get comfyui workflow + Use this to retrieve comfyui workflow by id + """ + hook_ctx = HookContext(operation_id='get_/workflow/{id}', oauth2_scopes=[], security_source=self.sdk_configuration.security) + request = operations.GetWorkflowIDRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(base_url, '/workflow/{id}', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','4XX','500','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetWorkflowIDResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetWorkflowIDResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 500: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetWorkflowIDResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_deployment_id_inputs(self, id: str) -> operations.GetDeploymentIDInputsResponse: + r"""Get comfyui workflow inputs definition + Use this to retrieve comfyui workflow inputs definition by id + """ + hook_ctx = HookContext(operation_id='get_/deployment/{id}/inputs', oauth2_scopes=[], security_source=self.sdk_configuration.security) + request = operations.GetDeploymentIDInputsRequest( + id=id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(base_url, '/deployment/{id}/inputs', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','4XX','500','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetDeploymentIDInputsResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[operations.ResponseBody]]) + res.response_bodies = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 500: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetDeploymentIDInputsResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_deployment(self, environment: Optional[operations.Environment] = None) -> operations.GetDeploymentResponse: + r"""Get all deployed workflows + Get all deployed workflows + """ + hook_ctx = HookContext(operation_id='get_/deployment', oauth2_scopes=[], security_source=self.sdk_configuration.security) + request = operations.GetDeploymentRequest( + environment=environment, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/deployment' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['4XX','500','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetDeploymentResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[operations.GetDeploymentResponseBody]]) + res.response_bodies = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 500: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetDeploymentResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + diff --git a/src/comfydeploy/files.py b/src/comfydeploy/files.py new file mode 100644 index 0000000..2e2f124 --- /dev/null +++ b/src/comfydeploy/files.py @@ -0,0 +1,89 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http +from .sdkconfiguration import SDKConfiguration +from comfydeploy import utils +from comfydeploy._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext +from comfydeploy.models import components, errors, operations +from typing import Optional + +class Files: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_upload_url(self, type_: operations.Type, file_size: str) -> operations.GetUploadURLResponse: + r"""Upload any files to the storage + Usually when you run something, you want to upload a file, image etc. + """ + hook_ctx = HookContext(operation_id='get_/upload-url', oauth2_scopes=[], security_source=self.sdk_configuration.security) + request = operations.GetUploadURLRequest( + type=type_, + file_size=file_size, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/upload-url' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','4XX','500','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetUploadURLResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetUploadURLResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 500: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetUploadURLResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + diff --git a/src/comfydeploy/machines.py b/src/comfydeploy/machines.py new file mode 100644 index 0000000..0bd9026 --- /dev/null +++ b/src/comfydeploy/machines.py @@ -0,0 +1,298 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http +from .sdkconfiguration import SDKConfiguration +from comfydeploy import utils +from comfydeploy._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext +from comfydeploy.models import components, errors, operations +from typing import Optional + +class Machines: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def post_gpu_event(self, request: Optional[operations.PostGpuEventRequestBody] = None) -> operations.PostGpuEventResponse: + r"""Register a machine event""" + hook_ctx = HookContext(operation_id='post_/gpu_event', oauth2_scopes=[], security_source=self.sdk_configuration.security) + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/gpu_event' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + req_content_type, data, form = utils.serialize_request_body(request, Optional[operations.PostGpuEventRequestBody], "request", False, True, 'json') + if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','4XX','500','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.PostGpuEventResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.PostGpuEventResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 500: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.PostGpuEventResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_v1_machines(self, page: Optional[str] = None, page_size: Optional[str] = None, fields: Optional[operations.Fields] = None) -> operations.GetV1MachinesResponse: + r"""Retrieve all machines for a user + Retrieve details of all machines for the authenticated user, with pagination and optional field selection + """ + hook_ctx = HookContext(operation_id='get_/v1/machines', oauth2_scopes=[], security_source=self.sdk_configuration.security) + request = operations.GetV1MachinesRequest( + page=page, + page_size=page_size, + fields=fields, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/v1/machines' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['400','401','4XX','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetV1MachinesResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetV1MachinesResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetV1MachinesResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def post_v1_machines(self, request: Optional[operations.PostV1MachinesRequestBody] = None) -> operations.PostV1MachinesResponse: + r"""Create a new machine + Create a new machine with optional default setting + """ + hook_ctx = HookContext(operation_id='post_/v1/machines', oauth2_scopes=[], security_source=self.sdk_configuration.security) + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/v1/machines' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + req_content_type, data, form = utils.serialize_request_body(request, Optional[operations.PostV1MachinesRequestBody], "request", False, True, 'json') + if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['400','401','4XX','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.PostV1MachinesResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.PostV1MachinesResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.PostV1MachinesResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_v1_machines_machine_id_(self, machine_id: str, ext_urls: Optional[str] = None) -> operations.GetV1MachinesMachineIDResponse: + r"""Retrieve a specific machine by ID + Retrieve details of a specific machine by its ID, with optional workspace details + """ + hook_ctx = HookContext(operation_id='get_/v1/machines/{machine_id}', oauth2_scopes=[], security_source=self.sdk_configuration.security) + request = operations.GetV1MachinesMachineIDRequest( + machine_id=machine_id, + ext_urls=ext_urls, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(base_url, '/v1/machines/{machine_id}', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['400','401','4XX','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetV1MachinesMachineIDResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetV1MachinesMachineIDResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetV1MachinesMachineIDResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + diff --git a/src/comfydeploy/models/__init__.py b/src/comfydeploy/models/__init__.py new file mode 100644 index 0000000..722bb99 --- /dev/null +++ b/src/comfydeploy/models/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + + +# package diff --git a/src/comfydeploy/models/components/__init__.py b/src/comfydeploy/models/components/__init__.py new file mode 100644 index 0000000..bbf0257 --- /dev/null +++ b/src/comfydeploy/models/components/__init__.py @@ -0,0 +1,6 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .httpmetadata import * +from .security import * + +__all__ = ["HTTPMetadata","Security"] diff --git a/src/comfydeploy/models/components/httpmetadata.py b/src/comfydeploy/models/components/httpmetadata.py new file mode 100644 index 0000000..5a87cb4 --- /dev/null +++ b/src/comfydeploy/models/components/httpmetadata.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class HTTPMetadata: + response: requests_http.Response = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + request: requests_http.Request = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP request; suitable for debugging""" + + diff --git a/src/comfydeploy/models/components/security.py b/src/comfydeploy/models/components/security.py new file mode 100644 index 0000000..6cd735f --- /dev/null +++ b/src/comfydeploy/models/components/security.py @@ -0,0 +1,11 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses + + +@dataclasses.dataclass +class Security: + bearer_auth: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'http', 'sub_type': 'bearer', 'field_name': 'Authorization' }}) + + diff --git a/src/comfydeploy/models/errors/__init__.py b/src/comfydeploy/models/errors/__init__.py new file mode 100644 index 0000000..bfb4ac6 --- /dev/null +++ b/src/comfydeploy/models/errors/__init__.py @@ -0,0 +1,24 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .get_auth_response_request_id_ import * +from .get_deployment import * +from .get_deployment_id_inputs import * +from .get_run import * +from .get_upload_url import * +from .get_v1_machines import * +from .get_v1_machines_machine_id_ import * +from .get_v1_workflows import * +from .get_v1_workflows_workflow_id_ import * +from .get_v1_workflows_workflow_id_outputs import * +from .get_websocket_deployment_id_ import * +from .get_workflow_id_ import * +from .get_workflow_version_version_id_ import * +from .post_gpu_event import * +from .post_machine_endpoint import * +from .post_run import * +from .post_v1_machines import * +from .post_v1_workflows import * +from .post_workflow import * +from .sdkerror import * + +__all__ = ["GetAuthResponseRequestIDResponseBody","GetDeploymentIDInputsResponseBody","GetDeploymentResponseBody","GetRunResponseBody","GetRunRunResponseBody","GetUploadURLResponseBody","GetV1MachinesMachineIDResponseBody","GetV1MachinesResponseBody","GetV1WorkflowsResponseBody","GetV1WorkflowsWorkflowIDOutputsResponseBody","GetV1WorkflowsWorkflowIDResponseBody","GetWebsocketDeploymentIDResponseBody","GetWorkflowIDResponseBody","GetWorkflowVersionVersionIDResponseBody","PostGpuEventResponseBody","PostMachineEndpointResponseBody","PostRunResponseBody","PostV1MachinesResponseBody","PostV1WorkflowsResponseBody","PostWorkflowResponseBody","SDKError"] diff --git a/src/comfydeploy/models/errors/get_auth_response_request_id_.py b/src/comfydeploy/models/errors/get_auth_response_request_id_.py new file mode 100644 index 0000000..182742a --- /dev/null +++ b/src/comfydeploy/models/errors/get_auth_response_request_id_.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetAuthResponseRequestIDResponseBody(Exception): + r"""Error when fetching the API Key with code""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/get_deployment.py b/src/comfydeploy/models/errors/get_deployment.py new file mode 100644 index 0000000..c42de87 --- /dev/null +++ b/src/comfydeploy/models/errors/get_deployment.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetDeploymentResponseBody(Exception): + r"""error""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/get_deployment_id_inputs.py b/src/comfydeploy/models/errors/get_deployment_id_inputs.py new file mode 100644 index 0000000..1d3c77a --- /dev/null +++ b/src/comfydeploy/models/errors/get_deployment_id_inputs.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetDeploymentIDInputsResponseBody(Exception): + r"""Error when uploading the workflow""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/get_run.py b/src/comfydeploy/models/errors/get_run.py new file mode 100644 index 0000000..b28183d --- /dev/null +++ b/src/comfydeploy/models/errors/get_run.py @@ -0,0 +1,34 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetRunRunResponseBody(Exception): + r"""Error getting output""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetRunResponseBody(Exception): + r"""Workflow not found""" + code: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code') }}) + message: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/get_upload_url.py b/src/comfydeploy/models/errors/get_upload_url.py new file mode 100644 index 0000000..a7a8982 --- /dev/null +++ b/src/comfydeploy/models/errors/get_upload_url.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetUploadURLResponseBody(Exception): + r"""Error when generating upload url""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/get_v1_machines.py b/src/comfydeploy/models/errors/get_v1_machines.py new file mode 100644 index 0000000..2903373 --- /dev/null +++ b/src/comfydeploy/models/errors/get_v1_machines.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetV1MachinesResponseBody(Exception): + r"""Error in retrieving machines""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/get_v1_machines_machine_id_.py b/src/comfydeploy/models/errors/get_v1_machines_machine_id_.py new file mode 100644 index 0000000..2b01d57 --- /dev/null +++ b/src/comfydeploy/models/errors/get_v1_machines_machine_id_.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetV1MachinesMachineIDResponseBody(Exception): + r"""Error in retrieving the specific machine""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/get_v1_workflows.py b/src/comfydeploy/models/errors/get_v1_workflows.py new file mode 100644 index 0000000..80da030 --- /dev/null +++ b/src/comfydeploy/models/errors/get_v1_workflows.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetV1WorkflowsResponseBody(Exception): + r"""Error in retrieving workflows""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/get_v1_workflows_workflow_id_.py b/src/comfydeploy/models/errors/get_v1_workflows_workflow_id_.py new file mode 100644 index 0000000..9659b64 --- /dev/null +++ b/src/comfydeploy/models/errors/get_v1_workflows_workflow_id_.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetV1WorkflowsWorkflowIDResponseBody(Exception): + r"""Error in retrieving the specific workflow""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/get_v1_workflows_workflow_id_outputs.py b/src/comfydeploy/models/errors/get_v1_workflows_workflow_id_outputs.py new file mode 100644 index 0000000..724cdef --- /dev/null +++ b/src/comfydeploy/models/errors/get_v1_workflows_workflow_id_outputs.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetV1WorkflowsWorkflowIDOutputsResponseBody(Exception): + r"""Error in retrieving the specific workflow""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/get_websocket_deployment_id_.py b/src/comfydeploy/models/errors/get_websocket_deployment_id_.py new file mode 100644 index 0000000..3b8eade --- /dev/null +++ b/src/comfydeploy/models/errors/get_websocket_deployment_id_.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetWebsocketDeploymentIDResponseBody(Exception): + r"""Error creating run""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/get_workflow_id_.py b/src/comfydeploy/models/errors/get_workflow_id_.py new file mode 100644 index 0000000..8dd2bd4 --- /dev/null +++ b/src/comfydeploy/models/errors/get_workflow_id_.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetWorkflowIDResponseBody(Exception): + r"""Error when uploading the workflow""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/get_workflow_version_version_id_.py b/src/comfydeploy/models/errors/get_workflow_version_version_id_.py new file mode 100644 index 0000000..92cdbb1 --- /dev/null +++ b/src/comfydeploy/models/errors/get_workflow_version_version_id_.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetWorkflowVersionVersionIDResponseBody(Exception): + r"""Error when uploading the workflow""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/post_gpu_event.py b/src/comfydeploy/models/errors/post_gpu_event.py new file mode 100644 index 0000000..f322d11 --- /dev/null +++ b/src/comfydeploy/models/errors/post_gpu_event.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class PostGpuEventResponseBody(Exception): + r"""Error creating run""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/post_machine_endpoint.py b/src/comfydeploy/models/errors/post_machine_endpoint.py new file mode 100644 index 0000000..690fb6d --- /dev/null +++ b/src/comfydeploy/models/errors/post_machine_endpoint.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class PostMachineEndpointResponseBody(Exception): + r"""Error creating run""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/post_run.py b/src/comfydeploy/models/errors/post_run.py new file mode 100644 index 0000000..a638757 --- /dev/null +++ b/src/comfydeploy/models/errors/post_run.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class PostRunResponseBody(Exception): + r"""Error creating run""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/post_v1_machines.py b/src/comfydeploy/models/errors/post_v1_machines.py new file mode 100644 index 0000000..b1fda59 --- /dev/null +++ b/src/comfydeploy/models/errors/post_v1_machines.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class PostV1MachinesResponseBody(Exception): + r"""Error in creating machine""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/post_v1_workflows.py b/src/comfydeploy/models/errors/post_v1_workflows.py new file mode 100644 index 0000000..5d7d6fc --- /dev/null +++ b/src/comfydeploy/models/errors/post_v1_workflows.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class PostV1WorkflowsResponseBody(Exception): + r"""Error in creating workflow""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/post_workflow.py b/src/comfydeploy/models/errors/post_workflow.py new file mode 100644 index 0000000..f6829db --- /dev/null +++ b/src/comfydeploy/models/errors/post_workflow.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class PostWorkflowResponseBody(Exception): + r"""Error when uploading the workflow""" + error: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error') }}) + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/comfydeploy/models/errors/sdkerror.py b/src/comfydeploy/models/errors/sdkerror.py new file mode 100644 index 0000000..6bb02bb --- /dev/null +++ b/src/comfydeploy/models/errors/sdkerror.py @@ -0,0 +1,24 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http + + +class SDKError(Exception): + """Represents an error returned by the API.""" + message: str + status_code: int + body: str + raw_response: requests_http.Response + + def __init__(self, message: str, status_code: int, body: str, raw_response: requests_http.Response): + self.message = message + self.status_code = status_code + self.body = body + self.raw_response = raw_response + + def __str__(self): + body = '' + if len(self.body) > 0: + body = f'\n{self.body}' + + return f'{self.message}: Status {self.status_code}{body}' diff --git a/src/comfydeploy/models/operations/__init__.py b/src/comfydeploy/models/operations/__init__.py new file mode 100644 index 0000000..03177b0 --- /dev/null +++ b/src/comfydeploy/models/operations/__init__.py @@ -0,0 +1,23 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .get_auth_response_request_id_ import * +from .get_deployment import * +from .get_deployment_id_inputs import * +from .get_run import * +from .get_upload_url import * +from .get_v1_machines import * +from .get_v1_machines_machine_id_ import * +from .get_v1_workflows import * +from .get_v1_workflows_workflow_id_ import * +from .get_v1_workflows_workflow_id_outputs import * +from .get_websocket_deployment_id_ import * +from .get_workflow_id_ import * +from .get_workflow_version_version_id_ import * +from .post_gpu_event import * +from .post_machine_endpoint import * +from .post_run import * +from .post_v1_machines import * +from .post_v1_workflows import * +from .post_workflow import * + +__all__ = ["CustomNodes","Dependencies","Environment","EventType","Fields","Files","GetAuthResponseRequestIDComfyuiResponseBody","GetAuthResponseRequestIDRequest","GetAuthResponseRequestIDResponse","GetAuthResponseRequestIDResponseBody","GetDeploymentIDInputsRequest","GetDeploymentIDInputsResponse","GetDeploymentRequest","GetDeploymentResponse","GetDeploymentResponseBody","GetRunGpu","GetRunRequest","GetRunResponse","GetRunResponseBody","GetRunWorkflowAPI","GetUploadURLRequest","GetUploadURLResponse","GetUploadURLResponseBody","GetV1MachinesMachineIDRequest","GetV1MachinesMachineIDResponse","GetV1MachinesMachineIDResponseBody","GetV1MachinesRequest","GetV1MachinesResponse","GetV1MachinesResponseBody","GetV1WorkflowsRequest","GetV1WorkflowsResponse","GetV1WorkflowsResponseBody","GetV1WorkflowsWorkflowIDOutputsRequest","GetV1WorkflowsWorkflowIDOutputsResponse","GetV1WorkflowsWorkflowIDOutputsResponseBody","GetV1WorkflowsWorkflowIDRequest","GetV1WorkflowsWorkflowIDResponse","GetV1WorkflowsWorkflowIDResponseBody","GetV1WorkflowsWorkflowIDVersions","GetWebsocketDeploymentIDRequest","GetWebsocketDeploymentIDResponse","GetWebsocketDeploymentIDResponseBody","GetWorkflowIDDependencies","GetWorkflowIDRequest","GetWorkflowIDResponse","GetWorkflowIDResponseBody","GetWorkflowIDSnapshot","GetWorkflowIDWorkflow","GetWorkflowIDWorkflowAPI","GetWorkflowVersionVersionIDDependencies","GetWorkflowVersionVersionIDRequest","GetWorkflowVersionVersionIDResponse","GetWorkflowVersionVersionIDResponseBody","GetWorkflowVersionVersionIDSnapshot","GetWorkflowVersionVersionIDWorkflowAPI","GitCustomNodes","Gpu","GpuProvider","GpuType","Inputs","InstallType","MachineType","Machines","Models","Node","One","Origin","Outputs","PostGpuEventRequestBody","PostGpuEventResponse","PostGpuEventResponseBody","PostMachineEndpointRequestBody","PostMachineEndpointResponse","PostMachineEndpointResponseBody","PostRunRequestBody","PostRunResponse","PostRunResponseBody","PostV1MachinesGpu","PostV1MachinesRequestBody","PostV1MachinesResponse","PostV1MachinesResponseBody","PostV1MachinesStatus","PostV1MachinesType","PostV1WorkflowsRequestBody","PostV1WorkflowsResponse","PostV1WorkflowsResponseBody","PostWorkflowRequestBody","PostWorkflowResponse","PostWorkflowResponseBody","QueryParamRunOrigin","ResponseBody","RunLog","RunOrigin","Snapshot","Status","Type","User","Versions","WebhookStatus","Workflow","WorkflowAPI","WorkflowInputs","WorkflowJSON","WsGpuType"] diff --git a/src/comfydeploy/models/operations/get_auth_response_request_id_.py b/src/comfydeploy/models/operations/get_auth_response_request_id_.py new file mode 100644 index 0000000..756b621 --- /dev/null +++ b/src/comfydeploy/models/operations/get_auth_response_request_id_.py @@ -0,0 +1,46 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclasses.dataclass +class GetAuthResponseRequestIDRequest: + request_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'request_id', 'style': 'simple', 'explode': False }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetAuthResponseRequestIDComfyuiResponseBody: + r"""The API key is not yet ready""" + message: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetAuthResponseRequestIDResponseBody: + r"""The returned API Key""" + api_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('api_key') }}) + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetAuthResponseRequestIDResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + two_hundred_application_json_object: Optional[GetAuthResponseRequestIDResponseBody] = dataclasses.field(default=None) + r"""The returned API Key""" + two_hundred_and_one_application_json_object: Optional[GetAuthResponseRequestIDComfyuiResponseBody] = dataclasses.field(default=None) + r"""The API key is not yet ready""" + + diff --git a/src/comfydeploy/models/operations/get_deployment.py b/src/comfydeploy/models/operations/get_deployment.py new file mode 100644 index 0000000..ffc0890 --- /dev/null +++ b/src/comfydeploy/models/operations/get_deployment.py @@ -0,0 +1,35 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import List, Optional + + +class Environment(str, Enum): + PRODUCTION = 'production' + STAGING = 'staging' + + +@dataclasses.dataclass +class GetDeploymentRequest: + environment: Optional[Environment] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'environment', 'style': 'form', 'explode': True }}) + + + + +@dataclasses.dataclass +class GetDeploymentResponseBody: + pass + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetDeploymentResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + response_bodies: Optional[List[GetDeploymentResponseBody]] = dataclasses.field(default=None) + r"""Display all production workflows""" + + diff --git a/src/comfydeploy/models/operations/get_deployment_id_inputs.py b/src/comfydeploy/models/operations/get_deployment_id_inputs.py new file mode 100644 index 0000000..39e65eb --- /dev/null +++ b/src/comfydeploy/models/operations/get_deployment_id_inputs.py @@ -0,0 +1,37 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from typing import List, Optional + + +@dataclasses.dataclass +class GetDeploymentIDInputsRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ResponseBody: + class_type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('class_type') }}) + input_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('input_id') }}) + default_value: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_value') }}) + min_value: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('min_value') }}) + max_value: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('max_value') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetDeploymentIDInputsResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + response_bodies: Optional[List[ResponseBody]] = dataclasses.field(default=None) + r"""Retrieve the output""" + + diff --git a/src/comfydeploy/models/operations/get_run.py b/src/comfydeploy/models/operations/get_run.py new file mode 100644 index 0000000..424b753 --- /dev/null +++ b/src/comfydeploy/models/operations/get_run.py @@ -0,0 +1,117 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import Optional + + +@dataclasses.dataclass +class GetRunRequest: + run_id: str = dataclasses.field(metadata={'query_param': { 'field_name': 'run_id', 'style': 'form', 'explode': True }}) + + + + +@dataclasses.dataclass +class WorkflowInputs: + pass + + +@dataclasses.dataclass +class GetRunWorkflowAPI: + pass + + +class Origin(str, Enum): + MANUAL = 'manual' + API = 'api' + PUBLIC_SHARE = 'public-share' + PUBLIC_TEMPLATE = 'public-template' + WORKSPACE = 'workspace' + + +class Status(str, Enum): + NOT_STARTED = 'not-started' + RUNNING = 'running' + UPLOADING = 'uploading' + SUCCESS = 'success' + FAILED = 'failed' + STARTED = 'started' + QUEUED = 'queued' + TIMEOUT = 'timeout' + CANCELLED = 'cancelled' + + +class GetRunGpu(str, Enum): + T4 = 'T4' + L4 = 'L4' + A10_G = 'A10G' + A100 = 'A100' + H100 = 'H100' + + +class MachineType(str, Enum): + CLASSIC = 'classic' + RUNPOD_SERVERLESS = 'runpod-serverless' + MODAL_SERVERLESS = 'modal-serverless' + COMFY_DEPLOY_SERVERLESS = 'comfy-deploy-serverless' + WORKSPACE = 'workspace' + WORKSPACE_V2 = 'workspace-v2' + + +@dataclasses.dataclass +class RunLog: + pass + + +class WebhookStatus(str, Enum): + SUCCESS = 'success' + FAILED = 'failed' + NOT_STARTED = 'not-started' + RUNNING = 'running' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetRunResponseBody: + r"""Retrieve the output""" + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + workflow_version_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_version_id') }}) + workflow_inputs: WorkflowInputs = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_inputs') }}) + workflow_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_id') }}) + workflow_api: GetRunWorkflowAPI = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_api') }}) + machine_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machine_id') }}) + origin: Origin = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('origin') }}) + status: Status = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status') }}) + ended_at: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ended_at') }}) + created_at: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at') }}) + queued_at: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('queued_at') }}) + started_at: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('started_at') }}) + gpu: Optional[GetRunGpu] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gpu') }}) + machine_version: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machine_version') }}) + machine_type: Optional[MachineType] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machine_type') }}) + modal_function_call_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('modal_function_call_id') }}) + user_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_id') }}) + org_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org_id') }}) + run_log: RunLog = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('run_log') }}) + live_status: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('live_status') }}) + progress: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('progress') }}) + is_realtime: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_realtime') }}) + webhook: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('webhook') }}) + webhook_status: Optional[WebhookStatus] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('webhook_status') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetRunResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[GetRunResponseBody] = dataclasses.field(default=None) + r"""Retrieve the output""" + + diff --git a/src/comfydeploy/models/operations/get_upload_url.py b/src/comfydeploy/models/operations/get_upload_url.py new file mode 100644 index 0000000..9234797 --- /dev/null +++ b/src/comfydeploy/models/operations/get_upload_url.py @@ -0,0 +1,48 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import Optional + + +class Type(str, Enum): + IMAGE_PNG = 'image/png' + IMAGE_JPG = 'image/jpg' + IMAGE_JPEG = 'image/jpeg' + IMAGE_WEBP = 'image/webp' + VIDEO_MP4 = 'video/mp4' + VIDEO_WEBM = 'video/webm' + APPLICATION_OCTET_STREAM = 'application/octet-stream' + + +@dataclasses.dataclass +class GetUploadURLRequest: + type: Type = dataclasses.field(metadata={'query_param': { 'field_name': 'type', 'style': 'form', 'explode': True }}) + file_size: str = dataclasses.field(metadata={'query_param': { 'field_name': 'file_size', 'style': 'form', 'explode': True }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetUploadURLResponseBody: + r"""Retrieve the output""" + upload_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('upload_url') }}) + file_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_id') }}) + download_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('download_url') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetUploadURLResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[GetUploadURLResponseBody] = dataclasses.field(default=None) + r"""Retrieve the output""" + + diff --git a/src/comfydeploy/models/operations/get_v1_machines.py b/src/comfydeploy/models/operations/get_v1_machines.py new file mode 100644 index 0000000..0380096 --- /dev/null +++ b/src/comfydeploy/models/operations/get_v1_machines.py @@ -0,0 +1,59 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import Any, List, Optional + + +class Fields(str, Enum): + FULL = 'full' + MINIMAL = 'minimal' + + +@dataclasses.dataclass +class GetV1MachinesRequest: + page: Optional[str] = dataclasses.field(default='1', metadata={'query_param': { 'field_name': 'page', 'style': 'form', 'explode': True }}) + page_size: Optional[str] = dataclasses.field(default='12', metadata={'query_param': { 'field_name': 'pageSize', 'style': 'form', 'explode': True }}) + fields: Optional[Fields] = dataclasses.field(default=Fields.MINIMAL, metadata={'query_param': { 'field_name': 'fields', 'style': 'form', 'explode': True }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Machines: + UNSET='__SPEAKEASY_UNSET__' + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + endpoints: List[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('endpoints') }}) + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + created_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'exclude': lambda f: f is None }}) + updated_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at'), 'exclude': lambda f: f is None }}) + object_info: Optional[Any] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('object_info'), 'exclude': lambda f: f is Machines.UNSET }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetV1MachinesResponseBody: + r"""Machines retrieved successfully""" + machines: List[Machines] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machines') }}) + total: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('total') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetV1MachinesResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[GetV1MachinesResponseBody] = dataclasses.field(default=None) + r"""Machines retrieved successfully""" + + diff --git a/src/comfydeploy/models/operations/get_v1_machines_machine_id_.py b/src/comfydeploy/models/operations/get_v1_machines_machine_id_.py new file mode 100644 index 0000000..bdeaa6a --- /dev/null +++ b/src/comfydeploy/models/operations/get_v1_machines_machine_id_.py @@ -0,0 +1,41 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclasses.dataclass +class GetV1MachinesMachineIDRequest: + machine_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'machine_id', 'style': 'simple', 'explode': False }}) + ext_urls: Optional[str] = dataclasses.field(default='false', metadata={'query_param': { 'field_name': 'extUrls', 'style': 'form', 'explode': True }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetV1MachinesMachineIDResponseBody: + r"""Specific machine retrieved successfully""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + created_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at'), 'exclude': lambda f: f is None }}) + updated_at: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetV1MachinesMachineIDResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[GetV1MachinesMachineIDResponseBody] = dataclasses.field(default=None) + r"""Specific machine retrieved successfully""" + + diff --git a/src/comfydeploy/models/operations/get_v1_workflows.py b/src/comfydeploy/models/operations/get_v1_workflows.py new file mode 100644 index 0000000..41bfadd --- /dev/null +++ b/src/comfydeploy/models/operations/get_v1_workflows.py @@ -0,0 +1,60 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Any, List, Optional + + +@dataclasses.dataclass +class GetV1WorkflowsRequest: + page: Optional[str] = dataclasses.field(default='1', metadata={'query_param': { 'field_name': 'page', 'style': 'form', 'explode': True }}) + page_size: Optional[str] = dataclasses.field(default='12', metadata={'query_param': { 'field_name': 'pageSize', 'style': 'form', 'explode': True }}) + search: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'search', 'style': 'form', 'explode': True }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class User: + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Versions: + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + version: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetV1WorkflowsResponseBody: + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + updated_at: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at') }}) + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + selected_machine_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('selected_machine_id') }}) + count: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('count') }}) + user: User = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user') }}) + versions: List[Versions] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('versions') }}) + deployments: List[Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deployments') }}) + runs: List[Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('runs') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetV1WorkflowsResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + response_bodies: Optional[List[GetV1WorkflowsResponseBody]] = dataclasses.field(default=None) + r"""Workflows retrieved successfully""" + + diff --git a/src/comfydeploy/models/operations/get_v1_workflows_workflow_id_.py b/src/comfydeploy/models/operations/get_v1_workflows_workflow_id_.py new file mode 100644 index 0000000..4cea023 --- /dev/null +++ b/src/comfydeploy/models/operations/get_v1_workflows_workflow_id_.py @@ -0,0 +1,59 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Any, List, Optional + + +@dataclasses.dataclass +class GetV1WorkflowsWorkflowIDRequest: + workflow_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'workflow_id', 'style': 'simple', 'explode': False }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetV1WorkflowsWorkflowIDVersions: + UNSET='__SPEAKEASY_UNSET__' + workflow_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_id') }}) + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + comment: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('comment') }}) + version: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version') }}) + snapshot: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('snapshot') }}) + dependencies: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dependencies') }}) + created_at: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at') }}) + updated_at: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at') }}) + workflow: Optional[Any] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow'), 'exclude': lambda f: f is GetV1WorkflowsWorkflowIDVersions.UNSET }}) + workflow_api: Optional[Any] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_api'), 'exclude': lambda f: f is GetV1WorkflowsWorkflowIDVersions.UNSET }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetV1WorkflowsWorkflowIDResponseBody: + r"""Specific workflow retrieved successfully""" + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + user_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_id') }}) + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + selected_machine_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('selected_machine_id') }}) + created_at: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at') }}) + updated_at: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at') }}) + versions: List[GetV1WorkflowsWorkflowIDVersions] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('versions') }}) + org_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org_id'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetV1WorkflowsWorkflowIDResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[GetV1WorkflowsWorkflowIDResponseBody] = dataclasses.field(default=None) + r"""Specific workflow retrieved successfully""" + + diff --git a/src/comfydeploy/models/operations/get_v1_workflows_workflow_id_outputs.py b/src/comfydeploy/models/operations/get_v1_workflows_workflow_id_outputs.py new file mode 100644 index 0000000..c0327e8 --- /dev/null +++ b/src/comfydeploy/models/operations/get_v1_workflows_workflow_id_outputs.py @@ -0,0 +1,58 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import List, Optional + + +class QueryParamRunOrigin(str, Enum): + MANUAL = 'manual' + API = 'api' + PUBLIC_SHARE = 'public-share' + PUBLIC_TEMPLATE = 'public-template' + WORKSPACE = 'workspace' + + +@dataclasses.dataclass +class GetV1WorkflowsWorkflowIDOutputsRequest: + workflow_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'workflow_id', 'style': 'simple', 'explode': False }}) + page: Optional[str] = dataclasses.field(default='1', metadata={'query_param': { 'field_name': 'page', 'style': 'form', 'explode': True }}) + page_size: Optional[str] = dataclasses.field(default='12', metadata={'query_param': { 'field_name': 'pageSize', 'style': 'form', 'explode': True }}) + search: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'search', 'style': 'form', 'explode': True }}) + run_origin: Optional[QueryParamRunOrigin] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'runOrigin', 'style': 'form', 'explode': True }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Outputs: + file_ur_ls: List[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('fileURLs') }}) + run_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('runID') }}) + duration: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetV1WorkflowsWorkflowIDOutputsResponseBody: + r"""Specific workflow retrieved successfully""" + outputs: List[Outputs] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('outputs') }}) + total: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('total') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetV1WorkflowsWorkflowIDOutputsResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[GetV1WorkflowsWorkflowIDOutputsResponseBody] = dataclasses.field(default=None) + r"""Specific workflow retrieved successfully""" + + diff --git a/src/comfydeploy/models/operations/get_websocket_deployment_id_.py b/src/comfydeploy/models/operations/get_websocket_deployment_id_.py new file mode 100644 index 0000000..542c149 --- /dev/null +++ b/src/comfydeploy/models/operations/get_websocket_deployment_id_.py @@ -0,0 +1,34 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclasses.dataclass +class GetWebsocketDeploymentIDRequest: + deployment_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'deployment_id', 'style': 'simple', 'explode': False }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetWebsocketDeploymentIDResponseBody: + r"""Workflow queued""" + ws_connection_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ws_connection_url') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetWebsocketDeploymentIDResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[GetWebsocketDeploymentIDResponseBody] = dataclasses.field(default=None) + r"""Workflow queued""" + + diff --git a/src/comfydeploy/models/operations/get_workflow_id_.py b/src/comfydeploy/models/operations/get_workflow_id_.py new file mode 100644 index 0000000..5c8cbcd --- /dev/null +++ b/src/comfydeploy/models/operations/get_workflow_id_.py @@ -0,0 +1,64 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclasses.dataclass +class GetWorkflowIDRequest: + id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'id', 'style': 'simple', 'explode': False }}) + + + + +@dataclasses.dataclass +class GetWorkflowIDWorkflow: + pass + + +@dataclasses.dataclass +class GetWorkflowIDWorkflowAPI: + pass + + +@dataclasses.dataclass +class GetWorkflowIDSnapshot: + pass + + +@dataclasses.dataclass +class GetWorkflowIDDependencies: + pass + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetWorkflowIDResponseBody: + r"""Retrieve the output""" + workflow_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_id') }}) + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + workflow: GetWorkflowIDWorkflow = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow') }}) + workflow_api: GetWorkflowIDWorkflowAPI = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_api') }}) + user_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_id') }}) + comment: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('comment') }}) + version: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version') }}) + snapshot: GetWorkflowIDSnapshot = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('snapshot') }}) + dependencies: GetWorkflowIDDependencies = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dependencies') }}) + created_at: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at') }}) + updated_at: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetWorkflowIDResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[GetWorkflowIDResponseBody] = dataclasses.field(default=None) + r"""Retrieve the output""" + + diff --git a/src/comfydeploy/models/operations/get_workflow_version_version_id_.py b/src/comfydeploy/models/operations/get_workflow_version_version_id_.py new file mode 100644 index 0000000..e3b5f0d --- /dev/null +++ b/src/comfydeploy/models/operations/get_workflow_version_version_id_.py @@ -0,0 +1,64 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclasses.dataclass +class GetWorkflowVersionVersionIDRequest: + version_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'version_id', 'style': 'simple', 'explode': False }}) + + + + +@dataclasses.dataclass +class Workflow: + pass + + +@dataclasses.dataclass +class GetWorkflowVersionVersionIDWorkflowAPI: + pass + + +@dataclasses.dataclass +class GetWorkflowVersionVersionIDSnapshot: + pass + + +@dataclasses.dataclass +class GetWorkflowVersionVersionIDDependencies: + pass + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetWorkflowVersionVersionIDResponseBody: + r"""Retrieve the output""" + workflow_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_id') }}) + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + workflow: Workflow = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow') }}) + workflow_api: GetWorkflowVersionVersionIDWorkflowAPI = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_api') }}) + user_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_id') }}) + comment: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('comment') }}) + version: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version') }}) + snapshot: GetWorkflowVersionVersionIDSnapshot = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('snapshot') }}) + dependencies: GetWorkflowVersionVersionIDDependencies = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dependencies') }}) + created_at: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at') }}) + updated_at: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetWorkflowVersionVersionIDResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[GetWorkflowVersionVersionIDResponseBody] = dataclasses.field(default=None) + r"""Retrieve the output""" + + diff --git a/src/comfydeploy/models/operations/post_gpu_event.py b/src/comfydeploy/models/operations/post_gpu_event.py new file mode 100644 index 0000000..52a36df --- /dev/null +++ b/src/comfydeploy/models/operations/post_gpu_event.py @@ -0,0 +1,67 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import Optional + + +class GpuType(str, Enum): + T4 = 'T4' + L4 = 'L4' + A10_G = 'A10G' + A100 = 'A100' + H100 = 'H100' + + +class WsGpuType(str, Enum): + FOUR_THOUSAND_AND_NINETY = '4090' + + +class EventType(str, Enum): + GPU_START = 'gpu_start' + GPU_END = 'gpu_end' + + +class GpuProvider(str, Enum): + MODAL = 'modal' + RUNPOD = 'runpod' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostGpuEventRequestBody: + UNSET='__SPEAKEASY_UNSET__' + machine_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machine_id') }}) + timestamp: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timestamp') }}) + event_type: EventType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('eventType') }}) + gpu_provider: GpuProvider = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gpu_provider') }}) + gpu_type: Optional[GpuType] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gpuType'), 'exclude': lambda f: f is PostGpuEventRequestBody.UNSET }}) + ws_gpu_type: Optional[WsGpuType] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('wsGpuType'), 'exclude': lambda f: f is PostGpuEventRequestBody.UNSET }}) + event_id: Optional[str] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('event_id'), 'exclude': lambda f: f is PostGpuEventRequestBody.UNSET }}) + is_workspace: Optional[bool] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('is_workspace'), 'exclude': lambda f: f is PostGpuEventRequestBody.UNSET }}) + user_or_org_id: Optional[str] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_or_org_id'), 'exclude': lambda f: f is PostGpuEventRequestBody.UNSET }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostGpuEventResponseBody: + r"""Machine event registered""" + event_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('event_id') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostGpuEventResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[PostGpuEventResponseBody] = dataclasses.field(default=None) + r"""Machine event registered""" + + diff --git a/src/comfydeploy/models/operations/post_machine_endpoint.py b/src/comfydeploy/models/operations/post_machine_endpoint.py new file mode 100644 index 0000000..9e0c0f4 --- /dev/null +++ b/src/comfydeploy/models/operations/post_machine_endpoint.py @@ -0,0 +1,37 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostMachineEndpointRequestBody: + machine_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machine_id') }}) + type: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostMachineEndpointResponseBody: + r"""Create short lived machine endpoint""" + url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }}) + gpu: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gpu') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostMachineEndpointResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[PostMachineEndpointResponseBody] = dataclasses.field(default=None) + r"""Create short lived machine endpoint""" + + diff --git a/src/comfydeploy/models/operations/post_run.py b/src/comfydeploy/models/operations/post_run.py new file mode 100644 index 0000000..b637d6a --- /dev/null +++ b/src/comfydeploy/models/operations/post_run.py @@ -0,0 +1,73 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import Any, Dict, Optional, Union + + +class Gpu(str, Enum): + T4 = 'T4' + L4 = 'L4' + A10_G = 'A10G' + A100 = 'A100' + H100 = 'H100' + + +class RunOrigin(str, Enum): + MANUAL = 'manual' + API = 'api' + PUBLIC_SHARE = 'public-share' + PUBLIC_TEMPLATE = 'public-template' + WORKSPACE = 'workspace' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostRunRequestBody: + r"""Run options""" + UNSET='__SPEAKEASY_UNSET__' + deployment_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deployment_id'), 'exclude': lambda f: f is None }}) + r"""Deployment ID to run""" + workflow_api: Optional[Any] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_api'), 'exclude': lambda f: f is PostRunRequestBody.UNSET }}) + r"""Workflow API JSON to run""" + workflow_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_id'), 'exclude': lambda f: f is None }}) + r"""Workflow ID to run""" + machine_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machine_id'), 'exclude': lambda f: f is None }}) + gpu: Optional[Gpu] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gpu'), 'exclude': lambda f: f is None }}) + concurrency_limit: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('concurrency_limit'), 'exclude': lambda f: f is None }}) + private_volume_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('private_volume_name'), 'exclude': lambda f: f is None }}) + timeout: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeout'), 'exclude': lambda f: f is None }}) + run_origin: Optional[RunOrigin] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('run_origin'), 'exclude': lambda f: f is None }}) + inputs: Optional[Dict[str, Inputs]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('inputs'), 'exclude': lambda f: f is None }}) + r"""External inputs to the workflow""" + webhook: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('webhook'), 'exclude': lambda f: f is None }}) + r"""Webhook URL to receive workflow updates""" + stream: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('stream'), 'exclude': lambda f: f is None }}) + r"""Whether to return a streaming url""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostRunResponseBody: + r"""Workflow queued""" + run_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('run_id') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostRunResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[PostRunResponseBody] = dataclasses.field(default=None) + r"""Workflow queued""" + + + +Inputs = Union[str, float] diff --git a/src/comfydeploy/models/operations/post_v1_machines.py b/src/comfydeploy/models/operations/post_v1_machines.py new file mode 100644 index 0000000..2faf51b --- /dev/null +++ b/src/comfydeploy/models/operations/post_v1_machines.py @@ -0,0 +1,85 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import Any, List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostV1MachinesRequestBody: + default_machine: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default_machine'), 'exclude': lambda f: f is None }}) + + + + +class PostV1MachinesType(str, Enum): + COMFY_DEPLOY_SERVERLESS = 'comfy-deploy-serverless' + + +class PostV1MachinesStatus(str, Enum): + BUILDING = 'building' + + +class PostV1MachinesGpu(str, Enum): + A10_G = 'A10G' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostV1MachinesResponseBody: + r"""Machine created successfully""" + UNSET='__SPEAKEASY_UNSET__' + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + user_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('user_id') }}) + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + org_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('org_id') }}) + endpoint: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('endpoint') }}) + created_at: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created_at') }}) + updated_at: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updated_at') }}) + disabled: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disabled') }}) + type: PostV1MachinesType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + status: PostV1MachinesStatus = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status') }}) + machine_version: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machine_version') }}) + machine_builder_version: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machine_builder_version') }}) + models: List[Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('models') }}) + gpu: PostV1MachinesGpu = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gpu') }}) + pod_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pod_id') }}) + base_docker_image: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('base_docker_image') }}) + allow_concurrent_inputs: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allow_concurrent_inputs') }}) + concurrency_limit: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('concurrency_limit') }}) + legacy_mode: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('legacy_mode') }}) + ws_timeout: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ws_timeout') }}) + run_timeout: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('run_timeout') }}) + idle_timeout: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('idle_timeout') }}) + build_machine_instance_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('build_machine_instance_id') }}) + build_log: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('build_log') }}) + modal_app_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('modal_app_id') }}) + target_workflow_id: Optional[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('target_workflow_id') }}) + install_custom_node_with_gpu: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('install_custom_node_with_gpu') }}) + deleted: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deleted') }}) + keep_warm: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('keep_warm') }}) + allow_background_volume_commits: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allow_background_volume_commits') }}) + gpu_workspace: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gpu_workspace') }}) + snapshot: Optional[Any] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('snapshot'), 'exclude': lambda f: f is PostV1MachinesResponseBody.UNSET }}) + ws_gpu: Optional[Any] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ws_gpu'), 'exclude': lambda f: f is PostV1MachinesResponseBody.UNSET }}) + object_info: Optional[Any] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('object_info'), 'exclude': lambda f: f is PostV1MachinesResponseBody.UNSET }}) + dependencies: Optional[Any] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dependencies'), 'exclude': lambda f: f is PostV1MachinesResponseBody.UNSET }}) + extra_docker_commands: Optional[Any] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('extra_docker_commands'), 'exclude': lambda f: f is PostV1MachinesResponseBody.UNSET }}) + docker_command_steps: Optional[Any] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('docker_command_steps'), 'exclude': lambda f: f is PostV1MachinesResponseBody.UNSET }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostV1MachinesResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[PostV1MachinesResponseBody] = dataclasses.field(default=None) + r"""Machine created successfully""" + + diff --git a/src/comfydeploy/models/operations/post_v1_workflows.py b/src/comfydeploy/models/operations/post_v1_workflows.py new file mode 100644 index 0000000..083a353 --- /dev/null +++ b/src/comfydeploy/models/operations/post_v1_workflows.py @@ -0,0 +1,44 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclasses.dataclass +class WorkflowJSON: + pass + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostV1WorkflowsRequestBody: + workflow_name: Optional[str] = dataclasses.field(default='new workflow', metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_name'), 'exclude': lambda f: f is None }}) + workflow_json: Optional[WorkflowJSON] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_json'), 'exclude': lambda f: f is None }}) + create_machine: Optional[bool] = dataclasses.field(default=True, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('create_machine'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostV1WorkflowsResponseBody: + r"""Workflow created successfully""" + workflow_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_id') }}) + workflow_version: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_version') }}) + machine_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machine_id'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostV1WorkflowsResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[PostV1WorkflowsResponseBody] = dataclasses.field(default=None) + r"""Workflow created successfully""" + + diff --git a/src/comfydeploy/models/operations/post_workflow.py b/src/comfydeploy/models/operations/post_workflow.py new file mode 100644 index 0000000..d45807b --- /dev/null +++ b/src/comfydeploy/models/operations/post_workflow.py @@ -0,0 +1,135 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ...models.components import httpmetadata as components_httpmetadata +from comfydeploy import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import Any, Dict, List, Optional, Union + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class WorkflowAPI: + inputs: Dict[str, Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('inputs') }}) + class_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('class_type'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GitCustomNodes: + hash: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hash') }}) + disabled: bool = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('disabled') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Snapshot: + comfyui: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('comfyui') }}) + git_custom_nodes: Dict[str, GitCustomNodes] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('git_custom_nodes') }}) + file_custom_nodes: List[Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file_custom_nodes') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Node: + inputs: Dict[str, Any] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('inputs') }}) + class_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('class_type'), 'exclude': lambda f: f is None }}) + + + + +class One(str, Enum): + COPY = 'copy' + UNZIP = 'unzip' + GIT_CLONE = 'git-clone' + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class CustomNodes: + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url') }}) + node: Optional[List[Node]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('node'), 'exclude': lambda f: f is None }}) + hash: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hash'), 'exclude': lambda f: f is None }}) + files: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('files'), 'exclude': lambda f: f is None }}) + install_type: Optional[InstallType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('install_type'), 'exclude': lambda f: f is None }}) + warning: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('warning'), 'exclude': lambda f: f is None }}) + pip: Optional[List[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pip'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Models: + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + hash: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hash'), 'exclude': lambda f: f is None }}) + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Files: + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + hash: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hash'), 'exclude': lambda f: f is None }}) + url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('url'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Dependencies: + comfyui: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('comfyui') }}) + missing_nodes: List[str] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('missing_nodes') }}) + custom_nodes: Dict[str, CustomNodes] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('custom_nodes') }}) + models: Dict[str, List[Models]] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('models') }}) + files: Dict[str, List[Files]] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('files') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostWorkflowRequestBody: + UNSET='__SPEAKEASY_UNSET__' + workflow_api: Dict[str, WorkflowAPI] = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_api') }}) + snapshot: Snapshot = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('snapshot') }}) + workflow_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_id'), 'exclude': lambda f: f is None }}) + workflow_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_name'), 'exclude': lambda f: f is None }}) + workflow: Optional[Any] = dataclasses.field(default=UNSET, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow'), 'exclude': lambda f: f is PostWorkflowRequestBody.UNSET }}) + dependencies: Optional[Dependencies] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dependencies'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostWorkflowResponseBody: + r"""Retrieve the output""" + workflow_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('workflow_id') }}) + version: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version') }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PostWorkflowResponse: + http_meta: components_httpmetadata.HTTPMetadata = dataclasses.field(metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + object: Optional[PostWorkflowResponseBody] = dataclasses.field(default=None) + r"""Retrieve the output""" + + + +InstallType = Union[One, str] diff --git a/src/comfydeploy/run.py b/src/comfydeploy/run.py new file mode 100644 index 0000000..6f42bb6 --- /dev/null +++ b/src/comfydeploy/run.py @@ -0,0 +1,164 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http +from .sdkconfiguration import SDKConfiguration +from comfydeploy import utils +from comfydeploy._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext +from comfydeploy.models import components, errors, operations +from typing import Optional + +class Run: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get(self, run_id: str) -> operations.GetRunResponse: + r"""Get workflow run output + Call this to get a run's output, usually in conjunction with polling method + """ + hook_ctx = HookContext(operation_id='get_/run', oauth2_scopes=[], security_source=self.sdk_configuration.security) + request = operations.GetRunRequest( + run_id=run_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/run' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['400','401','4XX','500','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetRunResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetRunResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetRunResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 500: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetRunRunResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def create(self, request: Optional[operations.PostRunRequestBody] = None) -> operations.PostRunResponse: + r"""Run a workflow via deployment_id""" + hook_ctx = HookContext(operation_id='post_/run', oauth2_scopes=[], security_source=self.sdk_configuration.security) + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/run' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + req_content_type, data, form = utils.serialize_request_body(request, Optional[operations.PostRunRequestBody], "request", False, True, 'json') + if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','4XX','500','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.PostRunResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.PostRunResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 500: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.PostRunResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + diff --git a/src/comfydeploy/sdk.py b/src/comfydeploy/sdk.py new file mode 100644 index 0000000..9b50484 --- /dev/null +++ b/src/comfydeploy/sdk.py @@ -0,0 +1,89 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http +from .comfyui import Comfyui +from .files import Files +from .machines import Machines +from .run import Run +from .sdkconfiguration import SDKConfiguration +from .utils.retries import RetryConfig +from .workflows import Workflows +from comfydeploy import utils +from comfydeploy._hooks import SDKHooks +from comfydeploy.models import components +from typing import Callable, Dict, Optional, Union + +class ComfyDeploy: + r"""Comfy Deploy API: Interact with Comfy Deploy programmatically to trigger run and retrieve output""" + run: Run + files: Files + workflows: Workflows + comfyui: Comfyui + machines: Machines + + sdk_configuration: SDKConfiguration + + def __init__(self, + bearer_auth: Union[str, Callable[[], str]], + server_idx: Optional[int] = None, + server_url: Optional[str] = None, + url_params: Optional[Dict[str, str]] = None, + client: Optional[requests_http.Session] = None, + retry_config: Optional[RetryConfig] = None + ) -> None: + """Instantiates the SDK configuring it with the provided parameters. + + :param bearer_auth: The bearer_auth required for authentication + :type bearer_auth: Union[str, Callable[[], str]] + :param server_idx: The index of the server to use for all operations + :type server_idx: int + :param server_url: The server URL to use for all operations + :type server_url: str + :param url_params: Parameters to optionally template the server URL with + :type url_params: Dict[str, str] + :param client: The requests.Session HTTP client to use for all operations + :type client: requests_http.Session + :param retry_config: The utils.RetryConfig to use globally + :type retry_config: RetryConfig + """ + if client is None: + client = requests_http.Session() + + if callable(bearer_auth): + def security(): + return components.Security(bearer_auth = bearer_auth()) + else: + security = components.Security(bearer_auth = bearer_auth) + + if server_url is not None: + if url_params is not None: + server_url = utils.template_url(server_url, url_params) + + + self.sdk_configuration = SDKConfiguration( + client, + security, + server_url, + server_idx, + retry_config=retry_config + ) + + hooks = SDKHooks() + + 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) + if current_server_url != server_url: + self.sdk_configuration.server_url = server_url + + # pylint: disable=protected-access + self.sdk_configuration.__dict__['_hooks'] = hooks + + self._init_sdks() + + + def _init_sdks(self): + self.run = Run(self.sdk_configuration) + self.files = Files(self.sdk_configuration) + self.workflows = Workflows(self.sdk_configuration) + self.comfyui = Comfyui(self.sdk_configuration) + self.machines = Machines(self.sdk_configuration) diff --git a/src/comfydeploy/sdkconfiguration.py b/src/comfydeploy/sdkconfiguration.py new file mode 100644 index 0000000..272dd73 --- /dev/null +++ b/src/comfydeploy/sdkconfiguration.py @@ -0,0 +1,44 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + + +import requests as requests_http +from ._hooks import SDKHooks +from .utils import utils +from .utils.retries import RetryConfig +from comfydeploy.models import components +from dataclasses import dataclass +from typing import Callable, Dict, Optional, Tuple, Union + + +SERVERS = [ + 'https:///api', +] +"""Contains the list of servers available to the SDK""" + +@dataclass +class SDKConfiguration: + client: requests_http.Session + security: Union[components.Security,Callable[[], components.Security]] = None + server_url: Optional[str] = '' + server_idx: Optional[int] = 0 + language: str = 'python' + openapi_doc_version: str = '0.0.1' + sdk_version: str = '0.0.1' + gen_version: str = '2.372.3' + user_agent: str = 'speakeasy-sdk/python 0.0.1 2.372.3 0.0.1 comfydeploy' + retry_config: Optional[RetryConfig] = 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 utils.remove_suffix(self.server_url, '/'), {} + if self.server_idx is None: + self.server_idx = 0 + + return SERVERS[self.server_idx], {} + + + def get_hooks(self) -> SDKHooks: + return self._hooks diff --git a/src/comfydeploy/utils/__init__.py b/src/comfydeploy/utils/__init__.py new file mode 100644 index 0000000..94b7398 --- /dev/null +++ b/src/comfydeploy/utils/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .retries import * +from .utils import * diff --git a/src/comfydeploy/utils/retries.py b/src/comfydeploy/utils/retries.py new file mode 100644 index 0000000..c40fc41 --- /dev/null +++ b/src/comfydeploy/utils/retries.py @@ -0,0 +1,119 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import random +import time +from typing import List + +import requests + + +class BackoffStrategy: + initial_interval: int + max_interval: int + exponent: float + max_elapsed_time: int + + def __init__(self, initial_interval: int, max_interval: int, exponent: float, max_elapsed_time: int): + self.initial_interval = initial_interval + self.max_interval = max_interval + self.exponent = exponent + self.max_elapsed_time = max_elapsed_time + + +class RetryConfig: + strategy: str + backoff: BackoffStrategy + retry_connection_errors: bool + + def __init__(self, strategy: str, backoff: BackoffStrategy, retry_connection_errors: bool): + self.strategy = strategy + self.backoff = backoff + self.retry_connection_errors = retry_connection_errors + + +class Retries: + config: RetryConfig + status_codes: List[str] + + def __init__(self, config: RetryConfig, status_codes: List[str]): + self.config = config + self.status_codes = status_codes + + +class TemporaryError(Exception): + response: requests.Response + + def __init__(self, response: requests.Response): + self.response = response + + +class PermanentError(Exception): + inner: Exception + + def __init__(self, inner: Exception): + self.inner = inner + + +def retry(func, retries: Retries): + if retries.config.strategy == 'backoff': + def do_request(): + res: requests.Response + try: + res = func() + + for code in retries.status_codes: + if "X" in code.upper(): + code_range = int(code[0]) + + status_major = res.status_code / 100 + + if status_major >= code_range and status_major < code_range + 1: + raise TemporaryError(res) + else: + parsed_code = int(code) + + if res.status_code == parsed_code: + raise TemporaryError(res) + except requests.exceptions.ConnectionError as exception: + if retries.config.retry_connection_errors: + raise + + raise PermanentError(exception) from exception + except requests.exceptions.Timeout as exception: + if retries.config.retry_connection_errors: + raise + + raise PermanentError(exception) from exception + except TemporaryError: + raise + except Exception as exception: + raise PermanentError(exception) from exception + + return res + + return retry_with_backoff(do_request, retries.config.backoff.initial_interval, retries.config.backoff.max_interval, retries.config.backoff.exponent, retries.config.backoff.max_elapsed_time) + + return func() + + +def retry_with_backoff(func, initial_interval=500, max_interval=60000, exponent=1.5, max_elapsed_time=3600000): + start = round(time.time()*1000) + retries = 0 + + while True: + try: + return func() + except PermanentError as exception: + raise exception.inner + except Exception as exception: # pylint: disable=broad-exception-caught + now = round(time.time()*1000) + if now - start > max_elapsed_time: + if isinstance(exception, TemporaryError): + return exception.response + + raise + sleep = ((initial_interval/1000) * + exponent**retries + random.uniform(0, 1)) + sleep = min(sleep, max_interval / 1000) + time.sleep(sleep) + retries += 1 diff --git a/src/comfydeploy/utils/utils.py b/src/comfydeploy/utils/utils.py new file mode 100644 index 0000000..1467a90 --- /dev/null +++ b/src/comfydeploy/utils/utils.py @@ -0,0 +1,1099 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import base64 +import json +import re +import sys +from dataclasses import Field, fields, is_dataclass, make_dataclass +from datetime import date, datetime +from decimal import Decimal +from email.message import Message +from enum import Enum +from typing import ( + Any, + Callable, + Dict, + List, + Optional, + Tuple, + Union, + get_args, + get_origin, +) +from xmlrpc.client import boolean +from typing_inspect import is_optional_type +import dateutil.parser +from dataclasses_json import DataClassJsonMixin + + +def get_security(security: Any) -> Tuple[Dict[str, str], Dict[str, str]]: + headers: Dict[str, str] = {} + query_params: Dict[str, str] = {} + + if security is None: + return headers, query_params + + sec_fields: Tuple[Field, ...] = fields(security) + for sec_field in sec_fields: + value = getattr(security, sec_field.name) + if value is None: + continue + + metadata = sec_field.metadata.get("security") + if metadata is None: + continue + if metadata.get("option"): + _parse_security_option(headers, query_params, value) + return headers, query_params + if metadata.get("scheme"): + # Special case for basic auth which could be a flattened struct + if metadata.get("sub_type") == "basic" and not is_dataclass(value): + _parse_security_scheme(headers, query_params, metadata, security) + else: + _parse_security_scheme(headers, query_params, metadata, value) + + return headers, query_params + + +def _parse_security_option( + headers: Dict[str, str], query_params: Dict[str, str], option: Any +): + opt_fields: Tuple[Field, ...] = fields(option) + for opt_field in opt_fields: + metadata = opt_field.metadata.get("security") + if metadata is None or metadata.get("scheme") is None: + continue + _parse_security_scheme( + headers, query_params, metadata, getattr(option, opt_field.name) + ) + + +def _parse_security_scheme( + headers: Dict[str, str], + query_params: Dict[str, str], + scheme_metadata: Dict, + scheme: Any, +): + scheme_type = scheme_metadata.get("type") + sub_type = scheme_metadata.get("sub_type") + + if is_dataclass(scheme): + if scheme_type == "http" and sub_type == "basic": + _parse_basic_auth_scheme(headers, scheme) + return + + scheme_fields: Tuple[Field, ...] = fields(scheme) + for scheme_field in scheme_fields: + metadata = scheme_field.metadata.get("security") + if metadata is None or metadata.get("field_name") is None: + continue + + value = getattr(scheme, scheme_field.name) + + _parse_security_scheme_value( + headers, query_params, scheme_metadata, metadata, value + ) + else: + _parse_security_scheme_value( + headers, query_params, scheme_metadata, scheme_metadata, scheme + ) + + +def _parse_security_scheme_value( + headers: Dict[str, str], + query_params: Dict[str, str], + scheme_metadata: Dict, + security_metadata: Dict, + value: Any, +): + scheme_type = scheme_metadata.get("type") + sub_type = scheme_metadata.get("sub_type") + + header_name = str(security_metadata.get("field_name")) + + if scheme_type == "apiKey": + if sub_type == "header": + headers[header_name] = value + elif sub_type == "query": + query_params[header_name] = value + else: + raise Exception("not supported") + elif scheme_type == "openIdConnect": + headers[header_name] = _apply_bearer(value) + elif scheme_type == "oauth2": + if sub_type != "client_credentials": + headers[header_name] = _apply_bearer(value) + elif scheme_type == "http": + if sub_type == "bearer": + headers[header_name] = _apply_bearer(value) + else: + raise Exception("not supported") + else: + raise Exception("not supported") + + +def _apply_bearer(token: str) -> str: + return token.lower().startswith("bearer ") and token or f"Bearer {token}" + + +def _parse_basic_auth_scheme(headers: Dict[str, str], scheme: Any): + username = "" + password = "" + + scheme_fields: Tuple[Field, ...] = fields(scheme) + for scheme_field in scheme_fields: + metadata = scheme_field.metadata.get("security") + if metadata is None or metadata.get("field_name") is None: + continue + + field_name = metadata.get("field_name") + value = getattr(scheme, scheme_field.name) + + if field_name == "username": + username = value + if field_name == "password": + password = value + + data = f"{username}:{password}".encode() + headers["Authorization"] = f"Basic {base64.b64encode(data).decode()}" + + +def generate_url( + server_url: str, + path: str, + path_params: Any, + gbls: Optional[Any] = None, +) -> str: + path_param_values: Dict[str, str] = {} + + globals_already_populated = _populate_path_params( + path_params, gbls, path_param_values, [] + ) + if gbls is not None: + _populate_path_params(gbls, None, path_param_values, globals_already_populated) + + for key, value in path_param_values.items(): + path = path.replace("{" + key + "}", value, 1) + + return remove_suffix(server_url, "/") + path + + +def _populate_path_params( + path_params: Any, + gbls: Any, + path_param_values: Dict[str, str], + skip_fields: List[str], +) -> List[str]: + globals_already_populated: List[str] = [] + + path_param_fields: Tuple[Field, ...] = fields(path_params) + for field in path_param_fields: + if field.name in skip_fields: + continue + + param_metadata = field.metadata.get("path_param") + if param_metadata is None: + continue + + param = getattr(path_params, field.name) if path_params is not None else None + param, global_found = _populate_from_globals( + field.name, param, "path_param", gbls + ) + if global_found: + globals_already_populated.append(field.name) + + if param is None: + continue + + f_name = param_metadata.get("field_name", field.name) + serialization = param_metadata.get("serialization", "") + if serialization != "": + serialized_params = _get_serialized_params( + param_metadata, field.type, f_name, param + ) + for key, value in serialized_params.items(): + path_param_values[key] = value + else: + if param_metadata.get("style", "simple") == "simple": + if isinstance(param, List): + pp_vals: List[str] = [] + for pp_val in param: + if pp_val is None: + continue + pp_vals.append(_val_to_string(pp_val)) + path_param_values[param_metadata.get("field_name", field.name)] = ( + ",".join(pp_vals) + ) + elif isinstance(param, Dict): + pp_vals: List[str] = [] + for pp_key in param: + if param[pp_key] is None: + continue + if param_metadata.get("explode"): + pp_vals.append(f"{pp_key}={_val_to_string(param[pp_key])}") + else: + pp_vals.append(f"{pp_key},{_val_to_string(param[pp_key])}") + path_param_values[param_metadata.get("field_name", field.name)] = ( + ",".join(pp_vals) + ) + elif not isinstance(param, (str, int, float, complex, bool, Decimal)): + pp_vals: List[str] = [] + param_fields: Tuple[Field, ...] = fields(param) + for param_field in param_fields: + param_value_metadata = param_field.metadata.get("path_param") + if not param_value_metadata: + continue + + param_name = param_value_metadata.get("field_name", field.name) + + param_field_val = getattr(param, param_field.name) + if param_field_val is None: + continue + if param_metadata.get("explode"): + pp_vals.append( + f"{param_name}={_val_to_string(param_field_val)}" + ) + else: + pp_vals.append( + f"{param_name},{_val_to_string(param_field_val)}" + ) + path_param_values[param_metadata.get("field_name", field.name)] = ( + ",".join(pp_vals) + ) + else: + path_param_values[param_metadata.get("field_name", field.name)] = ( + _val_to_string(param) + ) + + return globals_already_populated + + +def is_optional(field): + return get_origin(field) is Union and type(None) in get_args(field) + + +def template_url(url_with_params: str, params: Dict[str, str]) -> str: + for key, value in params.items(): + url_with_params = url_with_params.replace("{" + key + "}", value) + + return url_with_params + + +def get_query_params( + query_params: Any, + gbls: Optional[Any] = None, +) -> Dict[str, List[str]]: + params: Dict[str, List[str]] = {} + + globals_already_populated = _populate_query_params(query_params, gbls, params, []) + if gbls is not None: + _populate_query_params(gbls, None, params, globals_already_populated) + + return params + + +def _populate_query_params( + query_params: Any, + gbls: Any, + query_param_values: Dict[str, List[str]], + skip_fields: List[str], +) -> List[str]: + globals_already_populated: List[str] = [] + + param_fields: Tuple[Field, ...] = fields(query_params) + for field in param_fields: + if field.name in skip_fields: + continue + + metadata = field.metadata.get("query_param") + if not metadata: + continue + + param_name = field.name + value = getattr(query_params, param_name) if query_params is not None else None + + value, global_found = _populate_from_globals( + param_name, value, "query_param", gbls + ) + if global_found: + globals_already_populated.append(param_name) + + f_name = metadata.get("field_name") + serialization = metadata.get("serialization", "") + if serialization != "": + serialized_parms = _get_serialized_params( + metadata, field.type, f_name, value + ) + for key, value in serialized_parms.items(): + if key in query_param_values: + query_param_values[key].extend(value) + else: + query_param_values[key] = [value] + else: + style = metadata.get("style", "form") + if style == "deepObject": + _populate_deep_object_query_params( + metadata, f_name, value, query_param_values + ) + elif style == "form": + _populate_delimited_query_params( + metadata, f_name, value, ",", query_param_values + ) + elif style == "pipeDelimited": + _populate_delimited_query_params( + metadata, f_name, value, "|", query_param_values + ) + else: + raise Exception("not yet implemented") + + return globals_already_populated + + +def get_headers(headers_params: Any, gbls: Optional[Any] = None) -> Dict[str, str]: + headers: Dict[str, str] = {} + + globals_already_populated = [] + if headers_params is not None: + globals_already_populated = _populate_headers(headers_params, gbls, headers, []) + if gbls is not None: + _populate_headers(gbls, None, headers, globals_already_populated) + + return headers + + +def _populate_headers( + headers_params: Any, + gbls: Any, + header_values: Dict[str, str], + skip_fields: List[str], +) -> List[str]: + globals_already_populated: List[str] = [] + + param_fields: Tuple[Field, ...] = fields(headers_params) + for field in param_fields: + if field.name in skip_fields: + continue + + metadata = field.metadata.get("header") + if not metadata: + continue + + value, global_found = _populate_from_globals( + field.name, getattr(headers_params, field.name), "header", gbls + ) + if global_found: + globals_already_populated.append(field.name) + value = _serialize_header(metadata.get("explode", False), value) + + if value != "": + header_values[metadata.get("field_name", field.name)] = value + + return globals_already_populated + + +def _get_serialized_params( + metadata: Dict, field_type: type, field_name: str, obj: Any +) -> Dict[str, str]: + params: Dict[str, str] = {} + + serialization = metadata.get("serialization", "") + if serialization == "json": + params[metadata.get("field_name", field_name)] = marshal_json(obj, field_type) + + return params + + +def _populate_deep_object_query_params( + metadata: Dict, field_name: str, obj: Any, params: Dict[str, List[str]] +): + if obj is None: + return + + if is_dataclass(obj): + obj_fields: Tuple[Field, ...] = fields(obj) + for obj_field in obj_fields: + obj_param_metadata = obj_field.metadata.get("query_param") + if not obj_param_metadata: + continue + + obj_val = getattr(obj, obj_field.name) + if obj_val is None: + continue + + if isinstance(obj_val, List): + for val in obj_val: + if val is None: + continue + + if ( + params.get( + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]' + ) + is None + ): + params[ + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]' + ] = [] + + params[ + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]' + ].append(_val_to_string(val)) + else: + params[ + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]' + ] = [_val_to_string(obj_val)] + elif isinstance(obj, Dict): + for key, value in obj.items(): + if value is None: + continue + + if isinstance(value, List): + for val in value: + if val is None: + continue + + if ( + params.get(f'{metadata.get("field_name", field_name)}[{key}]') + is None + ): + params[f'{metadata.get("field_name", field_name)}[{key}]'] = [] + + params[f'{metadata.get("field_name", field_name)}[{key}]'].append( + _val_to_string(val) + ) + else: + params[f'{metadata.get("field_name", field_name)}[{key}]'] = [ + _val_to_string(value) + ] + + +def _get_query_param_field_name(obj_field: Field) -> str: + obj_param_metadata = obj_field.metadata.get("query_param") + + if not obj_param_metadata: + return "" + + return obj_param_metadata.get("field_name", obj_field.name) + + +def _populate_delimited_query_params( + metadata: Dict, + field_name: str, + obj: Any, + delimiter: str, + query_param_values: Dict[str, List[str]], +): + _populate_form( + field_name, + metadata.get("explode", True), + obj, + _get_query_param_field_name, + delimiter, + query_param_values, + ) + + +SERIALIZATION_METHOD_TO_CONTENT_TYPE = { + "json": "application/json", + "form": "application/x-www-form-urlencoded", + "multipart": "multipart/form-data", + "raw": "application/octet-stream", + "string": "text/plain", +} + + +def serialize_request_body( + request: Any, + request_type: type, + request_field_name: str, + nullable: bool, + optional: bool, + serialization_method: str, + encoder=None, +) -> Tuple[Optional[str], Optional[Any], Optional[Any]]: + if request is None: + if not nullable and optional: + return None, None, None + + if not is_dataclass(request) or not hasattr(request, request_field_name): + return serialize_content_type( + request_field_name, + request_type, + SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], + request, + encoder, + ) + + request_val = getattr(request, request_field_name) + + if request_val is None: + if not nullable and optional: + return None, None, None + + request_fields: Tuple[Field, ...] = fields(request) + request_metadata = None + + for field in request_fields: + if field.name == request_field_name: + request_metadata = field.metadata.get("request") + break + + if request_metadata is None: + raise Exception("invalid request type") + + return serialize_content_type( + request_field_name, + request_type, + request_metadata.get("media_type", "application/octet-stream"), + request_val, + ) + + +def serialize_content_type( + field_name: str, request_type: Any, media_type: str, request: Any, encoder=None +) -> Tuple[Optional[str], Optional[Any], Optional[List[List[Any]]]]: + if re.match(r"(application|text)\/.*?\+*json.*", media_type) is not None: + return media_type, marshal_json(request, request_type, encoder), None + if re.match(r"multipart\/.*", media_type) is not None: + return serialize_multipart_form(media_type, request) + if re.match(r"application\/x-www-form-urlencoded.*", media_type) is not None: + return media_type, serialize_form_data(field_name, request), None + if isinstance(request, (bytes, bytearray)): + return media_type, request, None + if isinstance(request, str): + return media_type, request, None + + raise Exception( + f"invalid request body type {type(request)} for mediaType {media_type}" + ) + + +def serialize_multipart_form( + media_type: str, request: Any +) -> Tuple[str, Any, List[List[Any]]]: + form: List[List[Any]] = [] + request_fields = fields(request) + + for field in request_fields: + val = getattr(request, field.name) + if val is None: + continue + + field_metadata = field.metadata.get("multipart_form") + if not field_metadata: + continue + + if field_metadata.get("file") is True: + file_fields = fields(val) + + file_name = "" + field_name = "" + content = bytes() + + for file_field in file_fields: + file_metadata = file_field.metadata.get("multipart_form") + if file_metadata is None: + continue + + if file_metadata.get("content") is True: + content = getattr(val, file_field.name) + else: + field_name = file_metadata.get("field_name", file_field.name) + file_name = getattr(val, file_field.name) + if field_name == "" or file_name == "" or content == bytes(): + raise Exception("invalid multipart/form-data file") + + form.append([field_name, [file_name, content]]) + elif field_metadata.get("json") is True: + to_append = [ + field_metadata.get("field_name", field.name), + [None, marshal_json(val, field.type), "application/json"], + ] + form.append(to_append) + else: + field_name = field_metadata.get("field_name", field.name) + if isinstance(val, List): + for value in val: + if value is None: + continue + form.append([field_name + "[]", [None, _val_to_string(value)]]) + else: + form.append([field_name, [None, _val_to_string(val)]]) + return media_type, None, form + + +def serialize_dict( + original: Dict, explode: bool, field_name, existing: Optional[Dict[str, List[str]]] +) -> Dict[str, List[str]]: + if existing is None: + existing = {} + + if explode is True: + for key, val in original.items(): + if key not in existing: + existing[key] = [] + existing[key].append(val) + else: + temp = [] + for key, val in original.items(): + temp.append(str(key)) + temp.append(str(val)) + if field_name not in existing: + existing[field_name] = [] + existing[field_name].append(",".join(temp)) + return existing + + +def serialize_form_data(field_name: str, data: Any) -> Dict[str, Any]: + form: Dict[str, List[str]] = {} + + if is_dataclass(data): + for field in fields(data): + val = getattr(data, field.name) + if val is None: + continue + + metadata = field.metadata.get("form") + if metadata is None: + continue + + field_name = metadata.get("field_name", field.name) + + if metadata.get("json"): + form[field_name] = [marshal_json(val, field.type)] + else: + if metadata.get("style", "form") == "form": + _populate_form( + field_name, + metadata.get("explode", True), + val, + _get_form_field_name, + ",", + form, + ) + else: + raise Exception(f"Invalid form style for field {field.name}") + elif isinstance(data, Dict): + for key, value in data.items(): + form[key] = [_val_to_string(value)] + else: + raise Exception(f"Invalid request body type for field {field_name}") + + return form + + +def _get_form_field_name(obj_field: Field) -> str: + obj_param_metadata = obj_field.metadata.get("form") + + if not obj_param_metadata: + return "" + + return obj_param_metadata.get("field_name", obj_field.name) + + +def _populate_form( + field_name: str, + explode: boolean, + obj: Any, + get_field_name_func: Callable, + delimiter: str, + form: Dict[str, List[str]], +): + if obj is None: + return form + + if is_dataclass(obj): + items = [] + + obj_fields: Tuple[Field, ...] = fields(obj) + for obj_field in obj_fields: + obj_field_name = get_field_name_func(obj_field) + if obj_field_name == "": + continue + + val = getattr(obj, obj_field.name) + if val is None: + continue + + if explode: + form[obj_field_name] = [_val_to_string(val)] + else: + items.append(f"{obj_field_name}{delimiter}{_val_to_string(val)}") + + if len(items) > 0: + form[field_name] = [delimiter.join(items)] + elif isinstance(obj, Dict): + items = [] + for key, value in obj.items(): + if value is None: + continue + + if explode: + form[key] = [_val_to_string(value)] + else: + items.append(f"{key}{delimiter}{_val_to_string(value)}") + + if len(items) > 0: + form[field_name] = [delimiter.join(items)] + elif isinstance(obj, List): + items = [] + + for value in obj: + if value is None: + continue + + if explode: + if not field_name in form: + form[field_name] = [] + form[field_name].append(_val_to_string(value)) + else: + items.append(_val_to_string(value)) + + if len(items) > 0: + form[field_name] = [delimiter.join([str(item) for item in items])] + else: + form[field_name] = [_val_to_string(obj)] + + return form + + +def _serialize_header(explode: bool, obj: Any) -> str: + if obj is None: + return "" + + if is_dataclass(obj): + items = [] + obj_fields: Tuple[Field, ...] = fields(obj) + for obj_field in obj_fields: + obj_param_metadata = obj_field.metadata.get("header") + + if not obj_param_metadata: + continue + + obj_field_name = obj_param_metadata.get("field_name", obj_field.name) + if obj_field_name == "": + continue + + val = getattr(obj, obj_field.name) + if val is None: + continue + + if explode: + items.append(f"{obj_field_name}={_val_to_string(val)}") + else: + items.append(obj_field_name) + items.append(_val_to_string(val)) + + if len(items) > 0: + return ",".join(items) + elif isinstance(obj, Dict): + items = [] + + for key, value in obj.items(): + if value is None: + continue + + if explode: + items.append(f"{key}={_val_to_string(value)}") + else: + items.append(key) + items.append(_val_to_string(value)) + + if len(items) > 0: + return ",".join([str(item) for item in items]) + elif isinstance(obj, List): + items = [] + + for value in obj: + if value is None: + continue + + items.append(_val_to_string(value)) + + if len(items) > 0: + return ",".join(items) + else: + return f"{_val_to_string(obj)}" + + return "" + + +def unmarshal_json(data, typ, decoder=None, infer_missing=False): + unmarshal = make_dataclass("Unmarshal", [("res", typ)], bases=(DataClassJsonMixin,)) + json_dict = json.loads(data) + try: + out = unmarshal.from_dict({"res": json_dict}, infer_missing=infer_missing) + except AttributeError as attr_err: + raise AttributeError( + f"unable to unmarshal {data} as {typ} - {attr_err}" + ) from attr_err + + return out.res if decoder is None else decoder(out.res) + + +def marshal_json(val, typ, encoder=None): + if not is_optional_type(typ) and val is None: + raise ValueError(f"Could not marshal None into non-optional type: {typ}") + + marshal = make_dataclass("Marshal", [("res", typ)], bases=(DataClassJsonMixin,)) + marshaller = marshal(res=val) + json_dict = marshaller.to_dict() + val = json_dict["res"] if encoder is None else encoder(json_dict["res"]) + + return json.dumps(val, separators=(",", ":"), sort_keys=True) + + +def match_content_type(content_type: str, pattern: str) -> boolean: + if pattern in (content_type, "*", "*/*"): + return True + + msg = Message() + msg["content-type"] = content_type + media_type = msg.get_content_type() + + if media_type == pattern: + return True + + parts = media_type.split("/") + if len(parts) == 2: + if pattern in (f"{parts[0]}/*", f"*/{parts[1]}"): + return True + + return False + + +def match_status_codes(status_codes: List[str], status_code: int) -> bool: + for code in status_codes: + if code == str(status_code): + return True + + if code.endswith("XX") and code.startswith(str(status_code)[:1]): + return True + return False + + +def datetimeisoformat(optional: bool): + def isoformatoptional(val): + if optional and val is None: + return None + return _val_to_string(val) + + return isoformatoptional + + +def dateisoformat(optional: bool): + def isoformatoptional(val): + if optional and val is None: + return None + return date.isoformat(val) + + return isoformatoptional + + +def datefromisoformat(date_str: str): + return dateutil.parser.parse(date_str).date() + + +def bigintencoder(optional: bool): + def bigintencode(val: int): + if optional and val is None: + return None + return str(val) + + return bigintencode + + +def bigintdecoder(val): + if val is None: + return None + + if isinstance(val, float): + raise ValueError(f"{val} is a float") + return int(val) + +def integerstrencoder(optional: bool): + def integerstrencode(val: int): + if optional and val is None: + return None + return str(val) + + return integerstrencode + + +def integerstrdecoder(val): + if val is None: + return None + + if isinstance(val, float): + raise ValueError(f"{val} is a float") + return int(val) + + +def numberstrencoder(optional: bool): + def numberstrencode(val: float): + if optional and val is None: + return None + return str(val) + + return numberstrencode + + +def numberstrdecoder(val): + if val is None: + return None + + return float(val) + + +def decimalencoder(optional: bool, as_str: bool): + def decimalencode(val: Decimal): + if optional and val is None: + return None + + if as_str: + return str(val) + + return float(val) + + return decimalencode + + +def decimaldecoder(val): + if val is None: + return None + + return Decimal(str(val)) + + +def map_encoder(optional: bool, value_encoder: Callable): + def map_encode(val: Dict): + if optional and val is None: + return None + + encoded = {} + for key, value in val.items(): + encoded[key] = value_encoder(value) + + return encoded + + return map_encode + + +def map_decoder(value_decoder: Callable): + def map_decode(val: Dict): + decoded = {} + for key, value in val.items(): + decoded[key] = value_decoder(value) + + return decoded + + return map_decode + + +def list_encoder(optional: bool, value_encoder: Callable): + def list_encode(val: List): + if optional and val is None: + return None + + encoded = [] + for value in val: + encoded.append(value_encoder(value)) + + return encoded + + return list_encode + + +def list_decoder(value_decoder: Callable): + def list_decode(val: List): + decoded = [] + for value in val: + decoded.append(value_decoder(value)) + + return decoded + + return list_decode + + +def union_encoder(all_encoders: Dict[str, Callable]): + def selective_encoder(val: Any): + if type(val) in all_encoders: + return all_encoders[type(val)](val) + return val + + return selective_encoder + + +def union_decoder(all_decoders: List[Callable]): + def selective_decoder(val: Any): + decoded = val + for decoder in all_decoders: + try: + decoded = decoder(val) + break + except (TypeError, ValueError): + continue + return decoded + + return selective_decoder + + +def get_field_name(name): + def override(_, _field_name=name): + return _field_name + + return override + + +def _val_to_string(val) -> str: + if isinstance(val, bool): + return str(val).lower() + if isinstance(val, datetime): + return str(val.isoformat().replace("+00:00", "Z")) + if isinstance(val, Enum): + return str(val.value) + + return str(val) + + +def _populate_from_globals( + param_name: str, value: Any, param_type: str, gbls: Any +) -> Tuple[Any, bool]: + if gbls is None: + return value, False + + global_fields = fields(gbls) + + found = False + for field in global_fields: + if field.name is not param_name: + continue + + found = True + + if value is not None: + return value, True + + global_value = getattr(gbls, field.name) + + param_metadata = field.metadata.get(param_type) + if param_metadata is None: + return value, True + + return global_value, True + + return value, found + + +def decoder_with_discriminator(field_name): + def decode_fx(obj): + kls = getattr(sys.modules["sdk.models.components"], obj[field_name]) + return unmarshal_json(json.dumps(obj), kls) + + return decode_fx + + +def remove_suffix(input_string, suffix): + if suffix and input_string.endswith(suffix): + return input_string[: -len(suffix)] + return input_string diff --git a/src/comfydeploy/workflows.py b/src/comfydeploy/workflows.py new file mode 100644 index 0000000..8d315f1 --- /dev/null +++ b/src/comfydeploy/workflows.py @@ -0,0 +1,431 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http +from .sdkconfiguration import SDKConfiguration +from comfydeploy import utils +from comfydeploy._hooks import AfterErrorContext, AfterSuccessContext, BeforeRequestContext, HookContext +from comfydeploy.models import components, errors, operations +from typing import List, Optional + +class Workflows: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_websocket_deployment_id_(self, deployment_id: str) -> operations.GetWebsocketDeploymentIDResponse: + r"""Get a websocket url for a specific deployment""" + hook_ctx = HookContext(operation_id='get_/websocket/{deployment_id}', oauth2_scopes=[], security_source=self.sdk_configuration.security) + request = operations.GetWebsocketDeploymentIDRequest( + deployment_id=deployment_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(base_url, '/websocket/{deployment_id}', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','4XX','500','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetWebsocketDeploymentIDResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetWebsocketDeploymentIDResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 500: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetWebsocketDeploymentIDResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def post_machine_endpoint(self, request: Optional[operations.PostMachineEndpointRequestBody] = None) -> operations.PostMachineEndpointResponse: + r"""Create an endpoint for a machine""" + hook_ctx = HookContext(operation_id='post_/machine-endpoint', oauth2_scopes=[], security_source=self.sdk_configuration.security) + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/machine-endpoint' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + req_content_type, data, form = utils.serialize_request_body(request, Optional[operations.PostMachineEndpointRequestBody], "request", False, True, 'json') + if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['401','4XX','500','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.PostMachineEndpointResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.PostMachineEndpointResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 500: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.PostMachineEndpointResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_v1_workflows(self, page: Optional[str] = None, page_size: Optional[str] = None, search: Optional[str] = None) -> operations.GetV1WorkflowsResponse: + r"""Retrieve workflows + Retrieve workflows based on optional query parameters + """ + hook_ctx = HookContext(operation_id='get_/v1/workflows', oauth2_scopes=[], security_source=self.sdk_configuration.security) + request = operations.GetV1WorkflowsRequest( + page=page, + page_size=page_size, + search=search, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/v1/workflows' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['400','401','4XX','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetV1WorkflowsResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[List[operations.GetV1WorkflowsResponseBody]]) + res.response_bodies = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetV1WorkflowsResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def post_v1_workflows(self, request: Optional[operations.PostV1WorkflowsRequestBody] = None) -> operations.PostV1WorkflowsResponse: + r"""Create a new workflow + Create a new workflow by analyzing the provided workflow JSON + """ + hook_ctx = HookContext(operation_id='post_/v1/workflows', oauth2_scopes=[], security_source=self.sdk_configuration.security) + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/v1/workflows' + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + req_content_type, data, form = utils.serialize_request_body(request, Optional[operations.PostV1WorkflowsRequestBody], "request", False, True, 'json') + if req_content_type is not None and req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('POST', url, params=query_params, data=data, files=form, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['400','401','4XX','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.PostV1WorkflowsResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.PostV1WorkflowsResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.PostV1WorkflowsResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_v1_workflows_workflow_id_(self, workflow_id: str) -> operations.GetV1WorkflowsWorkflowIDResponse: + r"""Retrieve a specific workflow by ID + Retrieve the latest version of a specific workflow by its ID + """ + hook_ctx = HookContext(operation_id='get_/v1/workflows/{workflow_id}', oauth2_scopes=[], security_source=self.sdk_configuration.security) + request = operations.GetV1WorkflowsWorkflowIDRequest( + workflow_id=workflow_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(base_url, '/v1/workflows/{workflow_id}', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['400','401','4XX','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetV1WorkflowsWorkflowIDResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetV1WorkflowsWorkflowIDResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetV1WorkflowsWorkflowIDResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_v1_workflows_workflow_id_outputs(self, request: operations.GetV1WorkflowsWorkflowIDOutputsRequest) -> operations.GetV1WorkflowsWorkflowIDOutputsResponse: + r"""Retrieve the most recent outputs for a workflow + Retrieve the latest version of a specific workflow by its ID + """ + hook_ctx = HookContext(operation_id='get_/v1/workflows/{workflow_id}/outputs', oauth2_scopes=[], security_source=self.sdk_configuration.security) + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(base_url, '/v1/workflows/{workflow_id}/outputs', request) + + if callable(self.sdk_configuration.security): + headers, query_params = utils.get_security(self.sdk_configuration.security()) + else: + headers, query_params = utils.get_security(self.sdk_configuration.security) + + query_params = { **utils.get_query_params(request), **query_params } + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + client = self.sdk_configuration.client + + try: + req = client.prepare_request(requests_http.Request('GET', url, params=query_params, headers=headers)) + req = self.sdk_configuration.get_hooks().before_request(BeforeRequestContext(hook_ctx), req) + http_res = client.send(req) + except Exception as e: + _, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), None, e) + if e is not None: + raise e + + if utils.match_status_codes(['400','401','4XX','5XX'], http_res.status_code): + result, e = self.sdk_configuration.get_hooks().after_error(AfterErrorContext(hook_ctx), http_res, None) + if e is not None: + raise e + if result is not None: + http_res = result + else: + http_res = self.sdk_configuration.get_hooks().after_success(AfterSuccessContext(hook_ctx), http_res) + + + + res = operations.GetV1WorkflowsWorkflowIDOutputsResponse(http_meta=components.HTTPMetadata(request=req, response=http_res)) + + if http_res.status_code == 200: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetV1WorkflowsWorkflowIDOutputsResponseBody]) + res.object = out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400: + # pylint: disable=no-else-return + if utils.match_content_type(http_res.headers.get('Content-Type') or '', 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetV1WorkflowsWorkflowIDOutputsResponseBody, infer_missing=True) + out.http_meta = components.HTTPMetadata(request=req, response=http_res) + raise out + else: + content_type = http_res.headers.get('Content-Type') + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + else: + raise errors.SDKError('unknown status code received', http_res.status_code, http_res.text, http_res) + + return res + + +