fal 1.8.1__tar.gz → 1.8.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of fal might be problematic. Click here for more details.
- {fal-1.8.1/fal.egg-info → fal-1.8.3}/PKG-INFO +2 -2
- {fal-1.8.1 → fal-1.8.3/fal.egg-info}/PKG-INFO +2 -2
- {fal-1.8.1 → fal-1.8.3}/fal.egg-info/requires.txt +1 -1
- {fal-1.8.1 → fal-1.8.3}/pyproject.toml +1 -1
- {fal-1.8.1 → fal-1.8.3}/src/fal/_fal_version.py +2 -2
- {fal-1.8.1 → fal-1.8.3}/src/fal/api.py +11 -1
- {fal-1.8.1 → fal-1.8.3}/src/fal/app.py +4 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/apps.py +26 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/deploy.py +12 -6
- {fal-1.8.1 → fal-1.8.3}/src/fal/sdk.py +19 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/file/file.py +5 -2
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/file/providers/fal.py +1 -0
- {fal-1.8.1 → fal-1.8.3}/.gitignore +0 -0
- {fal-1.8.1 → fal-1.8.3}/Makefile +0 -0
- {fal-1.8.1 → fal-1.8.3}/README.md +0 -0
- {fal-1.8.1 → fal-1.8.3}/docs/conf.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/docs/index.rst +0 -0
- {fal-1.8.1 → fal-1.8.3}/fal.egg-info/SOURCES.txt +0 -0
- {fal-1.8.1 → fal-1.8.3}/fal.egg-info/dependency_links.txt +0 -0
- {fal-1.8.1 → fal-1.8.3}/fal.egg-info/entry_points.txt +0 -0
- {fal-1.8.1 → fal-1.8.3}/fal.egg-info/top_level.txt +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/README.md +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/applications/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/applications/app_metadata.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/billing/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/billing/get_user_details.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/comfy/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/comfy/create_workflow.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/comfy/delete_workflow.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/comfy/get_workflow.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/comfy/list_user_workflows.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/comfy/update_workflow.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/files/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/files/check_dir_hash.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/files/upload_local_file.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/users/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/users/get_current_user.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/workflows/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/workflows/create_workflow.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/workflows/delete_workflow.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/workflows/get_workflow.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/workflows/update_workflow.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/client.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/errors.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/app_metadata_response_app_metadata.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/body_upload_local_file.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_detail.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_item.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs_dev_info.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/current_user.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/customer_details.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/hash_check.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/http_validation_error.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/lock_reason.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/page_workflow_item.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/team_role.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/typed_workflow_update.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/user_member.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/validation_error.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_nodes.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_item.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_node.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_node_type.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_input.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_schema_output.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/py.typed +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/types.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/pyproject.toml +0 -0
- {fal-1.8.1 → fal-1.8.3}/openapi_rest.config.yaml +0 -0
- {fal-1.8.1 → fal-1.8.3}/setup.cfg +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/__main__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/_serialization.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/_version.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/apps.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/auth/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/auth/auth0.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/auth/local.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/_utils.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/auth.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/create.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/debug.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/doctor.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/keys.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/main.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/parser.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/run.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/runners.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/cli/secrets.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/config.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/console/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/console/icons.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/console/ux.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/container.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/exceptions/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/exceptions/_base.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/exceptions/_cuda.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/exceptions/auth.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/files.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/flags.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/logging/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/logging/isolate.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/logging/style.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/logging/trace.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/logging/user.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/py.typed +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/rest_client.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/sync.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/exceptions.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/file/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/file/providers/gcp.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/file/providers/r2.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/file/providers/s3.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/file/types.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/image/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/image/image.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/image/nsfw_filter/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/image/nsfw_filter/env.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/image/nsfw_filter/inference.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/image/nsfw_filter/model.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/image/nsfw_filter/requirements.txt +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/image/safety_checker.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/optimize.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/types.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/utils/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/utils/download_utils.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/toolkit/utils/retry.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/utils.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/src/fal/workflows.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/assets/cat.png +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/cli/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/cli/test_apps.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/cli/test_auth.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/cli/test_deploy.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/cli/test_keys.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/cli/test_run.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/cli/test_secrets.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/conftest.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/integration_test.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/mainify_package/__init__.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/mainify_package/impl.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/mainify_package/utils.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/mainify_target.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/test_apps.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/test_stability.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/toolkit/file_test.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/toolkit/image_test.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/toolkit/test_types.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tests/toolkit/utils/retry.py +0 -0
- {fal-1.8.1 → fal-1.8.3}/tools/demo_script.py +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: fal
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.3
|
|
4
4
|
Summary: fal is an easy-to-use Serverless Python Framework
|
|
5
5
|
Author: Features & Labels <support@fal.ai>
|
|
6
6
|
Requires-Python: >=3.8
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Requires-Dist: isolate[build]<0.16.0,>=0.15.0
|
|
9
|
-
Requires-Dist: isolate-proto<0.7.0,>=0.6.
|
|
9
|
+
Requires-Dist: isolate-proto<0.7.0,>=0.6.6
|
|
10
10
|
Requires-Dist: grpcio==1.64.0
|
|
11
11
|
Requires-Dist: dill==0.3.7
|
|
12
12
|
Requires-Dist: cloudpickle==3.0.0
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: fal
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.3
|
|
4
4
|
Summary: fal is an easy-to-use Serverless Python Framework
|
|
5
5
|
Author: Features & Labels <support@fal.ai>
|
|
6
6
|
Requires-Python: >=3.8
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Requires-Dist: isolate[build]<0.16.0,>=0.15.0
|
|
9
|
-
Requires-Dist: isolate-proto<0.7.0,>=0.6.
|
|
9
|
+
Requires-Dist: isolate-proto<0.7.0,>=0.6.6
|
|
10
10
|
Requires-Dist: grpcio==1.64.0
|
|
11
11
|
Requires-Dist: dill==0.3.7
|
|
12
12
|
Requires-Dist: cloudpickle==3.0.0
|
|
@@ -403,6 +403,7 @@ class FalServerlessHost(Host):
|
|
|
403
403
|
"setup_function",
|
|
404
404
|
"metadata",
|
|
405
405
|
"request_timeout",
|
|
406
|
+
"startup_timeout",
|
|
406
407
|
"_base_image",
|
|
407
408
|
"_scheduler",
|
|
408
409
|
"_scheduler_options",
|
|
@@ -452,6 +453,7 @@ class FalServerlessHost(Host):
|
|
|
452
453
|
max_multiplexing = options.host.get("max_multiplexing")
|
|
453
454
|
exposed_port = options.get_exposed_port()
|
|
454
455
|
request_timeout = options.host.get("request_timeout")
|
|
456
|
+
startup_timeout = options.host.get("startup_timeout")
|
|
455
457
|
machine_requirements = MachineRequirements(
|
|
456
458
|
machine_types=machine_type, # type: ignore
|
|
457
459
|
num_gpus=options.host.get("num_gpus"),
|
|
@@ -464,6 +466,7 @@ class FalServerlessHost(Host):
|
|
|
464
466
|
max_concurrency=max_concurrency,
|
|
465
467
|
min_concurrency=min_concurrency,
|
|
466
468
|
request_timeout=request_timeout,
|
|
469
|
+
startup_timeout=startup_timeout,
|
|
467
470
|
)
|
|
468
471
|
|
|
469
472
|
partial_func = _prepare_partial_func(func)
|
|
@@ -526,7 +529,7 @@ class FalServerlessHost(Host):
|
|
|
526
529
|
exposed_port = options.get_exposed_port()
|
|
527
530
|
setup_function = options.host.get("setup_function", None)
|
|
528
531
|
request_timeout = options.host.get("request_timeout")
|
|
529
|
-
|
|
532
|
+
startup_timeout = options.host.get("startup_timeout")
|
|
530
533
|
machine_requirements = MachineRequirements(
|
|
531
534
|
machine_types=machine_type, # type: ignore
|
|
532
535
|
num_gpus=options.host.get("num_gpus"),
|
|
@@ -539,6 +542,7 @@ class FalServerlessHost(Host):
|
|
|
539
542
|
max_concurrency=max_concurrency,
|
|
540
543
|
min_concurrency=min_concurrency,
|
|
541
544
|
request_timeout=request_timeout,
|
|
545
|
+
startup_timeout=startup_timeout,
|
|
542
546
|
)
|
|
543
547
|
|
|
544
548
|
return_value = _UNSET
|
|
@@ -705,6 +709,7 @@ def function(
|
|
|
705
709
|
max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
|
|
706
710
|
min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
|
|
707
711
|
request_timeout: int | None = None,
|
|
712
|
+
startup_timeout: int | None = None,
|
|
708
713
|
setup_function: Callable[..., None] | None = None,
|
|
709
714
|
_base_image: str | None = None,
|
|
710
715
|
_scheduler: str | None = None,
|
|
@@ -732,6 +737,7 @@ def function(
|
|
|
732
737
|
max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
|
|
733
738
|
min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
|
|
734
739
|
request_timeout: int | None = None,
|
|
740
|
+
startup_timeout: int | None = None,
|
|
735
741
|
setup_function: Callable[..., None] | None = None,
|
|
736
742
|
_base_image: str | None = None,
|
|
737
743
|
_scheduler: str | None = None,
|
|
@@ -809,6 +815,7 @@ def function(
|
|
|
809
815
|
max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
|
|
810
816
|
min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
|
|
811
817
|
request_timeout: int | None = None,
|
|
818
|
+
startup_timeout: int | None = None,
|
|
812
819
|
setup_function: Callable[..., None] | None = None,
|
|
813
820
|
_base_image: str | None = None,
|
|
814
821
|
_scheduler: str | None = None,
|
|
@@ -841,6 +848,7 @@ def function(
|
|
|
841
848
|
max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
|
|
842
849
|
min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
|
|
843
850
|
request_timeout: int | None = None,
|
|
851
|
+
startup_timeout: int | None = None,
|
|
844
852
|
setup_function: Callable[..., None] | None = None,
|
|
845
853
|
_base_image: str | None = None,
|
|
846
854
|
_scheduler: str | None = None,
|
|
@@ -867,6 +875,7 @@ def function(
|
|
|
867
875
|
max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
|
|
868
876
|
min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
|
|
869
877
|
request_timeout: int | None = None,
|
|
878
|
+
startup_timeout: int | None = None,
|
|
870
879
|
setup_function: Callable[..., None] | None = None,
|
|
871
880
|
_base_image: str | None = None,
|
|
872
881
|
_scheduler: str | None = None,
|
|
@@ -893,6 +902,7 @@ def function(
|
|
|
893
902
|
max_multiplexing: int = FAL_SERVERLESS_DEFAULT_MAX_MULTIPLEXING,
|
|
894
903
|
min_concurrency: int = FAL_SERVERLESS_DEFAULT_MIN_CONCURRENCY,
|
|
895
904
|
request_timeout: int | None = None,
|
|
905
|
+
startup_timeout: int | None = None,
|
|
896
906
|
setup_function: Callable[..., None] | None = None,
|
|
897
907
|
_base_image: str | None = None,
|
|
898
908
|
_scheduler: str | None = None,
|
|
@@ -271,6 +271,7 @@ class App(fal.api.BaseServable):
|
|
|
271
271
|
app_name: ClassVar[str]
|
|
272
272
|
app_auth: ClassVar[Literal["private", "public", "shared"]] = "private"
|
|
273
273
|
request_timeout: ClassVar[int | None] = None
|
|
274
|
+
startup_timeout: ClassVar[int | None] = None
|
|
274
275
|
|
|
275
276
|
isolate_channel: async_grpc.Channel | None = None
|
|
276
277
|
|
|
@@ -282,6 +283,9 @@ class App(fal.api.BaseServable):
|
|
|
282
283
|
if cls.request_timeout is not None:
|
|
283
284
|
cls.host_kwargs["request_timeout"] = cls.request_timeout
|
|
284
285
|
|
|
286
|
+
if cls.startup_timeout is not None:
|
|
287
|
+
cls.host_kwargs["startup_timeout"] = cls.startup_timeout
|
|
288
|
+
|
|
285
289
|
cls.app_name = getattr(cls, "app_name", app_name)
|
|
286
290
|
|
|
287
291
|
if cls.__init__ is not App.__init__:
|
|
@@ -19,6 +19,9 @@ def _apps_table(apps: list[AliasInfo]):
|
|
|
19
19
|
table.add_column("Max Concurrency")
|
|
20
20
|
table.add_column("Max Multiplexing")
|
|
21
21
|
table.add_column("Keep Alive")
|
|
22
|
+
table.add_column("Request Timeout")
|
|
23
|
+
table.add_column("Startup Timeout")
|
|
24
|
+
table.add_column("Machine Type")
|
|
22
25
|
table.add_column("Active Workers")
|
|
23
26
|
|
|
24
27
|
for app in apps:
|
|
@@ -30,6 +33,9 @@ def _apps_table(apps: list[AliasInfo]):
|
|
|
30
33
|
str(app.max_concurrency),
|
|
31
34
|
str(app.max_multiplexing),
|
|
32
35
|
str(app.keep_alive),
|
|
36
|
+
str(app.request_timeout),
|
|
37
|
+
str(app.startup_timeout),
|
|
38
|
+
" ".join(app.machine_types),
|
|
33
39
|
str(app.active_runners),
|
|
34
40
|
)
|
|
35
41
|
|
|
@@ -67,6 +73,9 @@ def _app_rev_table(revs: list[ApplicationInfo]):
|
|
|
67
73
|
table.add_column("Max Concurrency")
|
|
68
74
|
table.add_column("Max Multiplexing")
|
|
69
75
|
table.add_column("Keep Alive")
|
|
76
|
+
table.add_column("Request Timeout")
|
|
77
|
+
table.add_column("Startup Timeout")
|
|
78
|
+
table.add_column("Machine Type")
|
|
70
79
|
table.add_column("Active Workers")
|
|
71
80
|
|
|
72
81
|
for rev in revs:
|
|
@@ -76,6 +85,9 @@ def _app_rev_table(revs: list[ApplicationInfo]):
|
|
|
76
85
|
str(rev.max_concurrency),
|
|
77
86
|
str(rev.max_multiplexing),
|
|
78
87
|
str(rev.keep_alive),
|
|
88
|
+
str(rev.request_timeout),
|
|
89
|
+
str(rev.startup_timeout),
|
|
90
|
+
" ".join(rev.machine_types),
|
|
79
91
|
str(rev.active_runners),
|
|
80
92
|
)
|
|
81
93
|
|
|
@@ -114,6 +126,8 @@ def _scale(args):
|
|
|
114
126
|
and args.max_multiplexing is None
|
|
115
127
|
and args.max_concurrency is None
|
|
116
128
|
and args.min_concurrency is None
|
|
129
|
+
and args.request_timeout is None
|
|
130
|
+
and args.startup_timeout is None
|
|
117
131
|
):
|
|
118
132
|
args.console.log("No parameters for update were provided, ignoring.")
|
|
119
133
|
return
|
|
@@ -124,6 +138,8 @@ def _scale(args):
|
|
|
124
138
|
max_multiplexing=args.max_multiplexing,
|
|
125
139
|
max_concurrency=args.max_concurrency,
|
|
126
140
|
min_concurrency=args.min_concurrency,
|
|
141
|
+
request_timeout=args.request_timeout,
|
|
142
|
+
startup_timeout=args.startup_timeout,
|
|
127
143
|
)
|
|
128
144
|
table = _apps_table([alias_info])
|
|
129
145
|
|
|
@@ -162,6 +178,16 @@ def _add_scale_parser(subparsers, parents):
|
|
|
162
178
|
type=int,
|
|
163
179
|
help="Minimum concurrency",
|
|
164
180
|
)
|
|
181
|
+
parser.add_argument(
|
|
182
|
+
"--request-timeout",
|
|
183
|
+
type=int,
|
|
184
|
+
help="Request timeout (seconds).",
|
|
185
|
+
)
|
|
186
|
+
parser.add_argument(
|
|
187
|
+
"--startup-timeout",
|
|
188
|
+
type=int,
|
|
189
|
+
help="Startup timeout (seconds).",
|
|
190
|
+
)
|
|
165
191
|
parser.set_defaults(func=_scale)
|
|
166
192
|
|
|
167
193
|
|
|
@@ -111,10 +111,16 @@ def _deploy_from_reference(
|
|
|
111
111
|
)
|
|
112
112
|
|
|
113
113
|
if app_id:
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
)
|
|
114
|
+
env_host = _remove_http_and_port_from_url(host.url)
|
|
115
|
+
env_host = env_host.replace("api.", "").replace("alpha.", "")
|
|
116
|
+
|
|
117
|
+
env_host_parts = env_host.split(".")
|
|
118
|
+
|
|
119
|
+
# keep the last 3 parts
|
|
120
|
+
playground_host = ".".join(env_host_parts[-3:])
|
|
121
|
+
|
|
122
|
+
# just replace .ai for .run
|
|
123
|
+
endpoint_host = env_host.replace(".ai", ".run")
|
|
118
124
|
|
|
119
125
|
args.console.print(
|
|
120
126
|
"Registered a new revision for function "
|
|
@@ -123,12 +129,12 @@ def _deploy_from_reference(
|
|
|
123
129
|
args.console.print("Playground:")
|
|
124
130
|
for endpoint in loaded.endpoints:
|
|
125
131
|
args.console.print(
|
|
126
|
-
f"\thttps://
|
|
132
|
+
f"\thttps://{playground_host}/models/{user.username}/{app_name}{endpoint}"
|
|
127
133
|
)
|
|
128
134
|
args.console.print("Endpoints:")
|
|
129
135
|
for endpoint in loaded.endpoints:
|
|
130
136
|
args.console.print(
|
|
131
|
-
f"\thttps://{
|
|
137
|
+
f"\thttps://{endpoint_host}/{user.username}/{app_name}{endpoint}"
|
|
132
138
|
)
|
|
133
139
|
|
|
134
140
|
|
|
@@ -196,6 +196,9 @@ class ApplicationInfo:
|
|
|
196
196
|
max_multiplexing: int
|
|
197
197
|
active_runners: int
|
|
198
198
|
min_concurrency: int
|
|
199
|
+
machine_types: list[str]
|
|
200
|
+
request_timeout: int
|
|
201
|
+
startup_timeout: int
|
|
199
202
|
|
|
200
203
|
|
|
201
204
|
@dataclass
|
|
@@ -208,6 +211,9 @@ class AliasInfo:
|
|
|
208
211
|
max_multiplexing: int
|
|
209
212
|
active_runners: int
|
|
210
213
|
min_concurrency: int
|
|
214
|
+
machine_types: list[str]
|
|
215
|
+
request_timeout: int
|
|
216
|
+
startup_timeout: int
|
|
211
217
|
|
|
212
218
|
|
|
213
219
|
@dataclass
|
|
@@ -313,6 +319,9 @@ def _from_grpc_application_info(
|
|
|
313
319
|
max_multiplexing=message.max_multiplexing,
|
|
314
320
|
active_runners=message.active_runners,
|
|
315
321
|
min_concurrency=message.min_concurrency,
|
|
322
|
+
machine_types=message.machine_types,
|
|
323
|
+
request_timeout=message.request_timeout,
|
|
324
|
+
startup_timeout=message.startup_timeout,
|
|
316
325
|
)
|
|
317
326
|
|
|
318
327
|
|
|
@@ -336,6 +345,9 @@ def _from_grpc_alias_info(message: isolate_proto.AliasInfo) -> AliasInfo:
|
|
|
336
345
|
max_multiplexing=message.max_multiplexing,
|
|
337
346
|
active_runners=message.active_runners,
|
|
338
347
|
min_concurrency=message.min_concurrency,
|
|
348
|
+
machine_types=message.machine_types,
|
|
349
|
+
request_timeout=message.request_timeout,
|
|
350
|
+
startup_timeout=message.startup_timeout,
|
|
339
351
|
)
|
|
340
352
|
|
|
341
353
|
|
|
@@ -402,6 +414,7 @@ class MachineRequirements:
|
|
|
402
414
|
max_multiplexing: int | None = None
|
|
403
415
|
min_concurrency: int | None = None
|
|
404
416
|
request_timeout: int | None = None
|
|
417
|
+
startup_timeout: int | None = None
|
|
405
418
|
|
|
406
419
|
def __post_init__(self):
|
|
407
420
|
if isinstance(self.machine_types, str):
|
|
@@ -519,6 +532,7 @@ class FalServerlessConnection:
|
|
|
519
532
|
min_concurrency=machine_requirements.min_concurrency,
|
|
520
533
|
max_multiplexing=machine_requirements.max_multiplexing,
|
|
521
534
|
request_timeout=machine_requirements.request_timeout,
|
|
535
|
+
startup_timeout=machine_requirements.startup_timeout,
|
|
522
536
|
)
|
|
523
537
|
else:
|
|
524
538
|
wrapped_requirements = None
|
|
@@ -562,6 +576,8 @@ class FalServerlessConnection:
|
|
|
562
576
|
max_multiplexing: int | None = None,
|
|
563
577
|
max_concurrency: int | None = None,
|
|
564
578
|
min_concurrency: int | None = None,
|
|
579
|
+
request_timeout: int | None = None,
|
|
580
|
+
startup_timeout: int | None = None,
|
|
565
581
|
) -> AliasInfo:
|
|
566
582
|
request = isolate_proto.UpdateApplicationRequest(
|
|
567
583
|
application_name=application_name,
|
|
@@ -569,6 +585,8 @@ class FalServerlessConnection:
|
|
|
569
585
|
max_multiplexing=max_multiplexing,
|
|
570
586
|
max_concurrency=max_concurrency,
|
|
571
587
|
min_concurrency=min_concurrency,
|
|
588
|
+
request_timeout=request_timeout,
|
|
589
|
+
startup_timeout=startup_timeout,
|
|
572
590
|
)
|
|
573
591
|
res: isolate_proto.UpdateApplicationResult = self.stub.UpdateApplication(
|
|
574
592
|
request
|
|
@@ -614,6 +632,7 @@ class FalServerlessConnection:
|
|
|
614
632
|
max_multiplexing=machine_requirements.max_multiplexing,
|
|
615
633
|
min_concurrency=machine_requirements.min_concurrency,
|
|
616
634
|
request_timeout=machine_requirements.request_timeout,
|
|
635
|
+
startup_timeout=machine_requirements.startup_timeout,
|
|
617
636
|
)
|
|
618
637
|
else:
|
|
619
638
|
wrapped_requirements = None
|
|
@@ -59,7 +59,7 @@ def get_builtin_repository(id: RepositoryId | FileRepository) -> FileRepository:
|
|
|
59
59
|
get_builtin_repository.__module__ = "__main__"
|
|
60
60
|
|
|
61
61
|
DEFAULT_REPOSITORY: FileRepository | RepositoryId = "fal_v3"
|
|
62
|
-
FALLBACK_REPOSITORY: FileRepository | RepositoryId = "
|
|
62
|
+
FALLBACK_REPOSITORY: FileRepository | RepositoryId = "fal"
|
|
63
63
|
OBJECT_LIFECYCLE_PREFERENCE_KEY = "x-fal-object-lifecycle-preference"
|
|
64
64
|
|
|
65
65
|
|
|
@@ -153,9 +153,12 @@ class File(BaseModel):
|
|
|
153
153
|
object_lifecycle_preference = (
|
|
154
154
|
request_lifecycle_preference(request) or LIFECYCLE_PREFERENCE.get()
|
|
155
155
|
)
|
|
156
|
+
save_kwargs.setdefault(
|
|
157
|
+
"object_lifecycle_preference", object_lifecycle_preference
|
|
158
|
+
)
|
|
156
159
|
|
|
157
160
|
try:
|
|
158
|
-
url = repo.save(fdata,
|
|
161
|
+
url = repo.save(fdata, **save_kwargs)
|
|
159
162
|
except Exception:
|
|
160
163
|
if not fallback_repository:
|
|
161
164
|
raise
|
|
File without changes
|
{fal-1.8.1 → fal-1.8.3}/Makefile
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/api/workflows/list_user_workflows.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_extra_data.py
RENAMED
|
File without changes
|
{fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_fal_inputs.py
RENAMED
|
File without changes
|
|
File without changes
|
{fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/comfy_workflow_schema_prompt.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/page_comfy_workflow_item.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/typed_comfy_workflow_update.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_metadata.py
RENAMED
|
File without changes
|
|
File without changes
|
{fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_contents_output.py
RENAMED
|
File without changes
|
|
File without changes
|
{fal-1.8.1 → fal-1.8.3}/openapi-fal-rest/openapi_fal_rest/models/workflow_detail_contents.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|