flyte 0.0.1b0__py3-none-any.whl
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 flyte might be problematic. Click here for more details.
- flyte/__init__.py +62 -0
- flyte/_api_commons.py +3 -0
- flyte/_bin/__init__.py +0 -0
- flyte/_bin/runtime.py +126 -0
- flyte/_build.py +25 -0
- flyte/_cache/__init__.py +12 -0
- flyte/_cache/cache.py +146 -0
- flyte/_cache/defaults.py +9 -0
- flyte/_cache/policy_function_body.py +42 -0
- flyte/_cli/__init__.py +0 -0
- flyte/_cli/_common.py +287 -0
- flyte/_cli/_create.py +42 -0
- flyte/_cli/_delete.py +23 -0
- flyte/_cli/_deploy.py +140 -0
- flyte/_cli/_get.py +235 -0
- flyte/_cli/_run.py +152 -0
- flyte/_cli/main.py +72 -0
- flyte/_code_bundle/__init__.py +8 -0
- flyte/_code_bundle/_ignore.py +113 -0
- flyte/_code_bundle/_packaging.py +187 -0
- flyte/_code_bundle/_utils.py +339 -0
- flyte/_code_bundle/bundle.py +178 -0
- flyte/_context.py +146 -0
- flyte/_datastructures.py +342 -0
- flyte/_deploy.py +202 -0
- flyte/_doc.py +29 -0
- flyte/_docstring.py +32 -0
- flyte/_environment.py +43 -0
- flyte/_group.py +31 -0
- flyte/_hash.py +23 -0
- flyte/_image.py +760 -0
- flyte/_initialize.py +634 -0
- flyte/_interface.py +84 -0
- flyte/_internal/__init__.py +3 -0
- flyte/_internal/controllers/__init__.py +115 -0
- flyte/_internal/controllers/_local_controller.py +118 -0
- flyte/_internal/controllers/_trace.py +40 -0
- flyte/_internal/controllers/pbhash.py +39 -0
- flyte/_internal/controllers/remote/__init__.py +40 -0
- flyte/_internal/controllers/remote/_action.py +141 -0
- flyte/_internal/controllers/remote/_client.py +43 -0
- flyte/_internal/controllers/remote/_controller.py +361 -0
- flyte/_internal/controllers/remote/_core.py +402 -0
- flyte/_internal/controllers/remote/_informer.py +361 -0
- flyte/_internal/controllers/remote/_service_protocol.py +50 -0
- flyte/_internal/imagebuild/__init__.py +11 -0
- flyte/_internal/imagebuild/docker_builder.py +416 -0
- flyte/_internal/imagebuild/image_builder.py +241 -0
- flyte/_internal/imagebuild/remote_builder.py +0 -0
- flyte/_internal/resolvers/__init__.py +0 -0
- flyte/_internal/resolvers/_task_module.py +54 -0
- flyte/_internal/resolvers/common.py +31 -0
- flyte/_internal/resolvers/default.py +28 -0
- flyte/_internal/runtime/__init__.py +0 -0
- flyte/_internal/runtime/convert.py +199 -0
- flyte/_internal/runtime/entrypoints.py +135 -0
- flyte/_internal/runtime/io.py +136 -0
- flyte/_internal/runtime/resources_serde.py +138 -0
- flyte/_internal/runtime/task_serde.py +210 -0
- flyte/_internal/runtime/taskrunner.py +190 -0
- flyte/_internal/runtime/types_serde.py +54 -0
- flyte/_logging.py +124 -0
- flyte/_protos/__init__.py +0 -0
- flyte/_protos/common/authorization_pb2.py +66 -0
- flyte/_protos/common/authorization_pb2.pyi +108 -0
- flyte/_protos/common/authorization_pb2_grpc.py +4 -0
- flyte/_protos/common/identifier_pb2.py +71 -0
- flyte/_protos/common/identifier_pb2.pyi +82 -0
- flyte/_protos/common/identifier_pb2_grpc.py +4 -0
- flyte/_protos/common/identity_pb2.py +48 -0
- flyte/_protos/common/identity_pb2.pyi +72 -0
- flyte/_protos/common/identity_pb2_grpc.py +4 -0
- flyte/_protos/common/list_pb2.py +36 -0
- flyte/_protos/common/list_pb2.pyi +69 -0
- flyte/_protos/common/list_pb2_grpc.py +4 -0
- flyte/_protos/common/policy_pb2.py +37 -0
- flyte/_protos/common/policy_pb2.pyi +27 -0
- flyte/_protos/common/policy_pb2_grpc.py +4 -0
- flyte/_protos/common/role_pb2.py +37 -0
- flyte/_protos/common/role_pb2.pyi +53 -0
- flyte/_protos/common/role_pb2_grpc.py +4 -0
- flyte/_protos/common/runtime_version_pb2.py +28 -0
- flyte/_protos/common/runtime_version_pb2.pyi +24 -0
- flyte/_protos/common/runtime_version_pb2_grpc.py +4 -0
- flyte/_protos/logs/dataplane/payload_pb2.py +96 -0
- flyte/_protos/logs/dataplane/payload_pb2.pyi +168 -0
- flyte/_protos/logs/dataplane/payload_pb2_grpc.py +4 -0
- flyte/_protos/secret/definition_pb2.py +49 -0
- flyte/_protos/secret/definition_pb2.pyi +93 -0
- flyte/_protos/secret/definition_pb2_grpc.py +4 -0
- flyte/_protos/secret/payload_pb2.py +62 -0
- flyte/_protos/secret/payload_pb2.pyi +94 -0
- flyte/_protos/secret/payload_pb2_grpc.py +4 -0
- flyte/_protos/secret/secret_pb2.py +38 -0
- flyte/_protos/secret/secret_pb2.pyi +6 -0
- flyte/_protos/secret/secret_pb2_grpc.py +198 -0
- flyte/_protos/secret/secret_pb2_grpc_grpc.py +198 -0
- flyte/_protos/validate/validate/validate_pb2.py +76 -0
- flyte/_protos/workflow/node_execution_service_pb2.py +26 -0
- flyte/_protos/workflow/node_execution_service_pb2.pyi +4 -0
- flyte/_protos/workflow/node_execution_service_pb2_grpc.py +32 -0
- flyte/_protos/workflow/queue_service_pb2.py +106 -0
- flyte/_protos/workflow/queue_service_pb2.pyi +141 -0
- flyte/_protos/workflow/queue_service_pb2_grpc.py +172 -0
- flyte/_protos/workflow/run_definition_pb2.py +128 -0
- flyte/_protos/workflow/run_definition_pb2.pyi +310 -0
- flyte/_protos/workflow/run_definition_pb2_grpc.py +4 -0
- flyte/_protos/workflow/run_logs_service_pb2.py +41 -0
- flyte/_protos/workflow/run_logs_service_pb2.pyi +28 -0
- flyte/_protos/workflow/run_logs_service_pb2_grpc.py +69 -0
- flyte/_protos/workflow/run_service_pb2.py +133 -0
- flyte/_protos/workflow/run_service_pb2.pyi +175 -0
- flyte/_protos/workflow/run_service_pb2_grpc.py +412 -0
- flyte/_protos/workflow/state_service_pb2.py +58 -0
- flyte/_protos/workflow/state_service_pb2.pyi +71 -0
- flyte/_protos/workflow/state_service_pb2_grpc.py +138 -0
- flyte/_protos/workflow/task_definition_pb2.py +72 -0
- flyte/_protos/workflow/task_definition_pb2.pyi +65 -0
- flyte/_protos/workflow/task_definition_pb2_grpc.py +4 -0
- flyte/_protos/workflow/task_service_pb2.py +44 -0
- flyte/_protos/workflow/task_service_pb2.pyi +31 -0
- flyte/_protos/workflow/task_service_pb2_grpc.py +104 -0
- flyte/_resources.py +226 -0
- flyte/_retry.py +32 -0
- flyte/_reusable_environment.py +25 -0
- flyte/_run.py +411 -0
- flyte/_secret.py +61 -0
- flyte/_task.py +367 -0
- flyte/_task_environment.py +200 -0
- flyte/_timeout.py +47 -0
- flyte/_tools.py +27 -0
- flyte/_trace.py +128 -0
- flyte/_utils/__init__.py +20 -0
- flyte/_utils/asyn.py +119 -0
- flyte/_utils/coro_management.py +25 -0
- flyte/_utils/file_handling.py +72 -0
- flyte/_utils/helpers.py +108 -0
- flyte/_utils/lazy_module.py +54 -0
- flyte/_utils/uv_script_parser.py +49 -0
- flyte/_version.py +21 -0
- flyte/connectors/__init__.py +0 -0
- flyte/errors.py +143 -0
- flyte/extras/__init__.py +5 -0
- flyte/extras/_container.py +273 -0
- flyte/io/__init__.py +11 -0
- flyte/io/_dataframe.py +0 -0
- flyte/io/_dir.py +448 -0
- flyte/io/_file.py +468 -0
- flyte/io/pickle/__init__.py +0 -0
- flyte/io/pickle/transformer.py +117 -0
- flyte/io/structured_dataset/__init__.py +129 -0
- flyte/io/structured_dataset/basic_dfs.py +219 -0
- flyte/io/structured_dataset/structured_dataset.py +1061 -0
- flyte/py.typed +0 -0
- flyte/remote/__init__.py +25 -0
- flyte/remote/_client/__init__.py +0 -0
- flyte/remote/_client/_protocols.py +131 -0
- flyte/remote/_client/auth/__init__.py +12 -0
- flyte/remote/_client/auth/_authenticators/__init__.py +0 -0
- flyte/remote/_client/auth/_authenticators/base.py +397 -0
- flyte/remote/_client/auth/_authenticators/client_credentials.py +73 -0
- flyte/remote/_client/auth/_authenticators/device_code.py +118 -0
- flyte/remote/_client/auth/_authenticators/external_command.py +79 -0
- flyte/remote/_client/auth/_authenticators/factory.py +200 -0
- flyte/remote/_client/auth/_authenticators/pkce.py +516 -0
- flyte/remote/_client/auth/_channel.py +184 -0
- flyte/remote/_client/auth/_client_config.py +83 -0
- flyte/remote/_client/auth/_default_html.py +32 -0
- flyte/remote/_client/auth/_grpc_utils/__init__.py +0 -0
- flyte/remote/_client/auth/_grpc_utils/auth_interceptor.py +288 -0
- flyte/remote/_client/auth/_grpc_utils/default_metadata_interceptor.py +151 -0
- flyte/remote/_client/auth/_keyring.py +143 -0
- flyte/remote/_client/auth/_token_client.py +260 -0
- flyte/remote/_client/auth/errors.py +16 -0
- flyte/remote/_client/controlplane.py +95 -0
- flyte/remote/_console.py +18 -0
- flyte/remote/_data.py +155 -0
- flyte/remote/_logs.py +116 -0
- flyte/remote/_project.py +86 -0
- flyte/remote/_run.py +873 -0
- flyte/remote/_secret.py +132 -0
- flyte/remote/_task.py +227 -0
- flyte/report/__init__.py +3 -0
- flyte/report/_report.py +178 -0
- flyte/report/_template.html +124 -0
- flyte/storage/__init__.py +24 -0
- flyte/storage/_remote_fs.py +34 -0
- flyte/storage/_storage.py +251 -0
- flyte/storage/_utils.py +5 -0
- flyte/types/__init__.py +13 -0
- flyte/types/_interface.py +25 -0
- flyte/types/_renderer.py +162 -0
- flyte/types/_string_literals.py +120 -0
- flyte/types/_type_engine.py +2210 -0
- flyte/types/_utils.py +80 -0
- flyte-0.0.1b0.dist-info/METADATA +179 -0
- flyte-0.0.1b0.dist-info/RECORD +390 -0
- flyte-0.0.1b0.dist-info/WHEEL +5 -0
- flyte-0.0.1b0.dist-info/entry_points.txt +3 -0
- flyte-0.0.1b0.dist-info/top_level.txt +1 -0
- union/__init__.py +54 -0
- union/_api_commons.py +3 -0
- union/_bin/__init__.py +0 -0
- union/_bin/runtime.py +113 -0
- union/_build.py +25 -0
- union/_cache/__init__.py +12 -0
- union/_cache/cache.py +141 -0
- union/_cache/defaults.py +9 -0
- union/_cache/policy_function_body.py +42 -0
- union/_cli/__init__.py +0 -0
- union/_cli/_common.py +263 -0
- union/_cli/_create.py +40 -0
- union/_cli/_delete.py +23 -0
- union/_cli/_deploy.py +120 -0
- union/_cli/_get.py +162 -0
- union/_cli/_params.py +579 -0
- union/_cli/_run.py +150 -0
- union/_cli/main.py +72 -0
- union/_code_bundle/__init__.py +8 -0
- union/_code_bundle/_ignore.py +113 -0
- union/_code_bundle/_packaging.py +187 -0
- union/_code_bundle/_utils.py +342 -0
- union/_code_bundle/bundle.py +176 -0
- union/_context.py +146 -0
- union/_datastructures.py +295 -0
- union/_deploy.py +185 -0
- union/_doc.py +29 -0
- union/_docstring.py +26 -0
- union/_environment.py +43 -0
- union/_group.py +31 -0
- union/_hash.py +23 -0
- union/_image.py +760 -0
- union/_initialize.py +585 -0
- union/_interface.py +84 -0
- union/_internal/__init__.py +3 -0
- union/_internal/controllers/__init__.py +77 -0
- union/_internal/controllers/_local_controller.py +77 -0
- union/_internal/controllers/pbhash.py +39 -0
- union/_internal/controllers/remote/__init__.py +40 -0
- union/_internal/controllers/remote/_action.py +131 -0
- union/_internal/controllers/remote/_client.py +43 -0
- union/_internal/controllers/remote/_controller.py +169 -0
- union/_internal/controllers/remote/_core.py +341 -0
- union/_internal/controllers/remote/_informer.py +260 -0
- union/_internal/controllers/remote/_service_protocol.py +44 -0
- union/_internal/imagebuild/__init__.py +11 -0
- union/_internal/imagebuild/docker_builder.py +416 -0
- union/_internal/imagebuild/image_builder.py +243 -0
- union/_internal/imagebuild/remote_builder.py +0 -0
- union/_internal/resolvers/__init__.py +0 -0
- union/_internal/resolvers/_task_module.py +31 -0
- union/_internal/resolvers/common.py +24 -0
- union/_internal/resolvers/default.py +27 -0
- union/_internal/runtime/__init__.py +0 -0
- union/_internal/runtime/convert.py +163 -0
- union/_internal/runtime/entrypoints.py +121 -0
- union/_internal/runtime/io.py +136 -0
- union/_internal/runtime/resources_serde.py +134 -0
- union/_internal/runtime/task_serde.py +202 -0
- union/_internal/runtime/taskrunner.py +179 -0
- union/_internal/runtime/types_serde.py +53 -0
- union/_logging.py +124 -0
- union/_protos/__init__.py +0 -0
- union/_protos/common/authorization_pb2.py +66 -0
- union/_protos/common/authorization_pb2.pyi +106 -0
- union/_protos/common/authorization_pb2_grpc.py +4 -0
- union/_protos/common/identifier_pb2.py +71 -0
- union/_protos/common/identifier_pb2.pyi +82 -0
- union/_protos/common/identifier_pb2_grpc.py +4 -0
- union/_protos/common/identity_pb2.py +48 -0
- union/_protos/common/identity_pb2.pyi +72 -0
- union/_protos/common/identity_pb2_grpc.py +4 -0
- union/_protos/common/list_pb2.py +36 -0
- union/_protos/common/list_pb2.pyi +69 -0
- union/_protos/common/list_pb2_grpc.py +4 -0
- union/_protos/common/policy_pb2.py +37 -0
- union/_protos/common/policy_pb2.pyi +27 -0
- union/_protos/common/policy_pb2_grpc.py +4 -0
- union/_protos/common/role_pb2.py +37 -0
- union/_protos/common/role_pb2.pyi +51 -0
- union/_protos/common/role_pb2_grpc.py +4 -0
- union/_protos/common/runtime_version_pb2.py +28 -0
- union/_protos/common/runtime_version_pb2.pyi +24 -0
- union/_protos/common/runtime_version_pb2_grpc.py +4 -0
- union/_protos/logs/dataplane/payload_pb2.py +96 -0
- union/_protos/logs/dataplane/payload_pb2.pyi +168 -0
- union/_protos/logs/dataplane/payload_pb2_grpc.py +4 -0
- union/_protos/secret/definition_pb2.py +49 -0
- union/_protos/secret/definition_pb2.pyi +93 -0
- union/_protos/secret/definition_pb2_grpc.py +4 -0
- union/_protos/secret/payload_pb2.py +62 -0
- union/_protos/secret/payload_pb2.pyi +94 -0
- union/_protos/secret/payload_pb2_grpc.py +4 -0
- union/_protos/secret/secret_pb2.py +38 -0
- union/_protos/secret/secret_pb2.pyi +6 -0
- union/_protos/secret/secret_pb2_grpc.py +198 -0
- union/_protos/validate/validate/validate_pb2.py +76 -0
- union/_protos/workflow/node_execution_service_pb2.py +26 -0
- union/_protos/workflow/node_execution_service_pb2.pyi +4 -0
- union/_protos/workflow/node_execution_service_pb2_grpc.py +32 -0
- union/_protos/workflow/queue_service_pb2.py +75 -0
- union/_protos/workflow/queue_service_pb2.pyi +103 -0
- union/_protos/workflow/queue_service_pb2_grpc.py +172 -0
- union/_protos/workflow/run_definition_pb2.py +100 -0
- union/_protos/workflow/run_definition_pb2.pyi +256 -0
- union/_protos/workflow/run_definition_pb2_grpc.py +4 -0
- union/_protos/workflow/run_logs_service_pb2.py +41 -0
- union/_protos/workflow/run_logs_service_pb2.pyi +28 -0
- union/_protos/workflow/run_logs_service_pb2_grpc.py +69 -0
- union/_protos/workflow/run_service_pb2.py +133 -0
- union/_protos/workflow/run_service_pb2.pyi +173 -0
- union/_protos/workflow/run_service_pb2_grpc.py +412 -0
- union/_protos/workflow/state_service_pb2.py +58 -0
- union/_protos/workflow/state_service_pb2.pyi +69 -0
- union/_protos/workflow/state_service_pb2_grpc.py +138 -0
- union/_protos/workflow/task_definition_pb2.py +72 -0
- union/_protos/workflow/task_definition_pb2.pyi +65 -0
- union/_protos/workflow/task_definition_pb2_grpc.py +4 -0
- union/_protos/workflow/task_service_pb2.py +44 -0
- union/_protos/workflow/task_service_pb2.pyi +31 -0
- union/_protos/workflow/task_service_pb2_grpc.py +104 -0
- union/_resources.py +226 -0
- union/_retry.py +32 -0
- union/_reusable_environment.py +25 -0
- union/_run.py +374 -0
- union/_secret.py +61 -0
- union/_task.py +354 -0
- union/_task_environment.py +186 -0
- union/_timeout.py +47 -0
- union/_tools.py +27 -0
- union/_utils/__init__.py +11 -0
- union/_utils/asyn.py +119 -0
- union/_utils/file_handling.py +71 -0
- union/_utils/helpers.py +46 -0
- union/_utils/lazy_module.py +54 -0
- union/_utils/uv_script_parser.py +49 -0
- union/_version.py +21 -0
- union/connectors/__init__.py +0 -0
- union/errors.py +128 -0
- union/extras/__init__.py +5 -0
- union/extras/_container.py +263 -0
- union/io/__init__.py +11 -0
- union/io/_dataframe.py +0 -0
- union/io/_dir.py +425 -0
- union/io/_file.py +418 -0
- union/io/pickle/__init__.py +0 -0
- union/io/pickle/transformer.py +117 -0
- union/io/structured_dataset/__init__.py +122 -0
- union/io/structured_dataset/basic_dfs.py +219 -0
- union/io/structured_dataset/structured_dataset.py +1057 -0
- union/py.typed +0 -0
- union/remote/__init__.py +23 -0
- union/remote/_client/__init__.py +0 -0
- union/remote/_client/_protocols.py +129 -0
- union/remote/_client/auth/__init__.py +12 -0
- union/remote/_client/auth/_authenticators/__init__.py +0 -0
- union/remote/_client/auth/_authenticators/base.py +391 -0
- union/remote/_client/auth/_authenticators/client_credentials.py +73 -0
- union/remote/_client/auth/_authenticators/device_code.py +120 -0
- union/remote/_client/auth/_authenticators/external_command.py +77 -0
- union/remote/_client/auth/_authenticators/factory.py +200 -0
- union/remote/_client/auth/_authenticators/pkce.py +515 -0
- union/remote/_client/auth/_channel.py +184 -0
- union/remote/_client/auth/_client_config.py +83 -0
- union/remote/_client/auth/_default_html.py +32 -0
- union/remote/_client/auth/_grpc_utils/__init__.py +0 -0
- union/remote/_client/auth/_grpc_utils/auth_interceptor.py +204 -0
- union/remote/_client/auth/_grpc_utils/default_metadata_interceptor.py +144 -0
- union/remote/_client/auth/_keyring.py +154 -0
- union/remote/_client/auth/_token_client.py +258 -0
- union/remote/_client/auth/errors.py +16 -0
- union/remote/_client/controlplane.py +86 -0
- union/remote/_data.py +149 -0
- union/remote/_logs.py +74 -0
- union/remote/_project.py +86 -0
- union/remote/_run.py +820 -0
- union/remote/_secret.py +132 -0
- union/remote/_task.py +193 -0
- union/report/__init__.py +3 -0
- union/report/_report.py +178 -0
- union/report/_template.html +124 -0
- union/storage/__init__.py +24 -0
- union/storage/_remote_fs.py +34 -0
- union/storage/_storage.py +247 -0
- union/storage/_utils.py +5 -0
- union/types/__init__.py +11 -0
- union/types/_renderer.py +162 -0
- union/types/_string_literals.py +120 -0
- union/types/_type_engine.py +2131 -0
- union/types/_utils.py +80 -0
flyte/__init__.py
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Flyte SDK for authoring Compound AI applications, services and workflows.
|
|
3
|
+
|
|
4
|
+
## Environments
|
|
5
|
+
|
|
6
|
+
TaskEnvironment class to define a new environment for a set of tasks.
|
|
7
|
+
|
|
8
|
+
Example usage:
|
|
9
|
+
|
|
10
|
+
```python
|
|
11
|
+
env = flyte.TaskEnvironment(name="my_env", image="my_image", resources=Resources(cpu="1", memory="1Gi"))
|
|
12
|
+
|
|
13
|
+
@env.task
|
|
14
|
+
async def my_task():
|
|
15
|
+
pass
|
|
16
|
+
```
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
__all__ = [
|
|
20
|
+
"ABFS",
|
|
21
|
+
"GCS",
|
|
22
|
+
"GPU",
|
|
23
|
+
"S3",
|
|
24
|
+
"TPU",
|
|
25
|
+
"Cache",
|
|
26
|
+
"CachePolicy",
|
|
27
|
+
"CacheRequest",
|
|
28
|
+
"Device",
|
|
29
|
+
"Image",
|
|
30
|
+
"Resources",
|
|
31
|
+
"RetryStrategy",
|
|
32
|
+
"ReusePolicy",
|
|
33
|
+
"Secret",
|
|
34
|
+
"SecretRequest",
|
|
35
|
+
"TaskEnvironment",
|
|
36
|
+
"Timeout",
|
|
37
|
+
"TimeoutType",
|
|
38
|
+
"__version__",
|
|
39
|
+
"ctx",
|
|
40
|
+
"deploy",
|
|
41
|
+
"group",
|
|
42
|
+
"init",
|
|
43
|
+
"run",
|
|
44
|
+
"trace",
|
|
45
|
+
"with_runcontext",
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
from ._cache import Cache, CachePolicy, CacheRequest
|
|
49
|
+
from ._context import ctx
|
|
50
|
+
from ._deploy import deploy
|
|
51
|
+
from ._group import group
|
|
52
|
+
from ._image import Image
|
|
53
|
+
from ._initialize import ABFS, GCS, S3, init
|
|
54
|
+
from ._resources import GPU, TPU, Device, Resources
|
|
55
|
+
from ._retry import RetryStrategy
|
|
56
|
+
from ._reusable_environment import ReusePolicy
|
|
57
|
+
from ._run import run, with_runcontext
|
|
58
|
+
from ._secret import Secret, SecretRequest
|
|
59
|
+
from ._task_environment import TaskEnvironment
|
|
60
|
+
from ._timeout import Timeout, TimeoutType
|
|
61
|
+
from ._trace import trace
|
|
62
|
+
from ._version import __version__
|
flyte/_api_commons.py
ADDED
flyte/_bin/__init__.py
ADDED
|
File without changes
|
flyte/_bin/runtime.py
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Flyte runtime module, this is the entrypoint script for the Flyte runtime.
|
|
3
|
+
|
|
4
|
+
Caution: Startup time for this module is very important, as it is the entrypoint for the Flyte runtime.
|
|
5
|
+
Refrain from importing any modules here. If you need to import any modules, do it inside the main function.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import asyncio
|
|
9
|
+
import os
|
|
10
|
+
import sys
|
|
11
|
+
from typing import List
|
|
12
|
+
|
|
13
|
+
import click
|
|
14
|
+
|
|
15
|
+
# Todo: work with pvditt to make these the names
|
|
16
|
+
# ACTION_NAME = "_U_ACTION_NAME"
|
|
17
|
+
# RUN_NAME = "_U_RUN_NAME"
|
|
18
|
+
# PROJECT_NAME = "_U_PROJECT_NAME"
|
|
19
|
+
# DOMAIN_NAME = "_U_DOMAIN_NAME"
|
|
20
|
+
# ORG_NAME = "_U_ORG_NAME"
|
|
21
|
+
|
|
22
|
+
ACTION_NAME = "ACTION_NAME"
|
|
23
|
+
RUN_NAME = "RUN_NAME"
|
|
24
|
+
PROJECT_NAME = "FLYTE_INTERNAL_TASK_PROJECT"
|
|
25
|
+
DOMAIN_NAME = "FLYTE_INTERNAL_TASK_DOMAIN"
|
|
26
|
+
ORG_NAME = "_U_ORG_NAME"
|
|
27
|
+
ENDPOINT_OVERRIDE = "_U_EP_OVERRIDE"
|
|
28
|
+
RUN_OUTPUT_BASE_DIR = "_U_RUN_BASE"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@click.command("a0")
|
|
32
|
+
@click.option("--inputs", "-i", required=True)
|
|
33
|
+
@click.option("--outputs-path", "-o", required=True)
|
|
34
|
+
@click.option("--version", "-v", required=True)
|
|
35
|
+
@click.option("--run-base-dir", envvar=RUN_OUTPUT_BASE_DIR, required=True)
|
|
36
|
+
@click.option("--raw-data-path", "-r", required=False)
|
|
37
|
+
@click.option("--checkpoint-path", "-c", required=False)
|
|
38
|
+
@click.option("--prev-checkpoint", "-p", required=False)
|
|
39
|
+
@click.option("--name", envvar=ACTION_NAME, required=False)
|
|
40
|
+
@click.option("--run-name", envvar=RUN_NAME, required=False)
|
|
41
|
+
@click.option("--project", envvar=PROJECT_NAME, required=False)
|
|
42
|
+
@click.option("--domain", envvar=DOMAIN_NAME, required=False)
|
|
43
|
+
@click.option("--org", envvar=ORG_NAME, required=False)
|
|
44
|
+
@click.option("--image-cache", required=False)
|
|
45
|
+
@click.option("--tgz", required=False)
|
|
46
|
+
@click.option("--pkl", required=False)
|
|
47
|
+
@click.option("--dest", required=False)
|
|
48
|
+
@click.option("--resolver", required=False)
|
|
49
|
+
@click.argument(
|
|
50
|
+
"resolver-args",
|
|
51
|
+
type=click.UNPROCESSED,
|
|
52
|
+
nargs=-1,
|
|
53
|
+
)
|
|
54
|
+
def main(
|
|
55
|
+
run_name: str,
|
|
56
|
+
name: str,
|
|
57
|
+
project: str,
|
|
58
|
+
domain: str,
|
|
59
|
+
org: str,
|
|
60
|
+
image_cache: str,
|
|
61
|
+
version: str,
|
|
62
|
+
inputs: str,
|
|
63
|
+
run_base_dir: str,
|
|
64
|
+
outputs_path: str,
|
|
65
|
+
raw_data_path: str,
|
|
66
|
+
checkpoint_path: str,
|
|
67
|
+
prev_checkpoint: str,
|
|
68
|
+
tgz: str,
|
|
69
|
+
pkl: str,
|
|
70
|
+
dest: str,
|
|
71
|
+
resolver: str,
|
|
72
|
+
resolver_args: List[str],
|
|
73
|
+
):
|
|
74
|
+
sys.path.insert(0, ".")
|
|
75
|
+
|
|
76
|
+
import flyte._utils as utils
|
|
77
|
+
from flyte._datastructures import ActionID, Checkpoints, CodeBundle, RawDataPath
|
|
78
|
+
from flyte._initialize import S3, initialize_in_cluster
|
|
79
|
+
from flyte._internal.controllers import create_controller
|
|
80
|
+
from flyte._internal.imagebuild.image_builder import ImageCache
|
|
81
|
+
from flyte._internal.runtime.entrypoints import load_and_run_task
|
|
82
|
+
|
|
83
|
+
assert org, "Org is required for now"
|
|
84
|
+
assert project, "Project is required"
|
|
85
|
+
assert domain, "Domain is required"
|
|
86
|
+
assert run_name, f"Run name is required {run_name}"
|
|
87
|
+
assert name, f"Action name is required {name}"
|
|
88
|
+
|
|
89
|
+
if run_name.startswith("{{"):
|
|
90
|
+
run_name = os.getenv("RUN_NAME", "")
|
|
91
|
+
if name.startswith("{{"):
|
|
92
|
+
name = os.getenv("ACTION_NAME", "")
|
|
93
|
+
|
|
94
|
+
ep = os.environ.get(ENDPOINT_OVERRIDE, "host.docker.internal:8090")
|
|
95
|
+
|
|
96
|
+
bundle = CodeBundle(tgz=tgz, pkl=pkl, destination=dest, computed_version=version)
|
|
97
|
+
# TODO configure storage correctly for cluster
|
|
98
|
+
initialize_in_cluster(storage=S3.auto())
|
|
99
|
+
controller = create_controller(ct="remote", endpoint=ep, insecure=True)
|
|
100
|
+
|
|
101
|
+
ic = ImageCache.from_transport(image_cache) if image_cache else None
|
|
102
|
+
|
|
103
|
+
# Create a coroutine to load the task and run it
|
|
104
|
+
task_coroutine = load_and_run_task(
|
|
105
|
+
resolver=resolver,
|
|
106
|
+
resolver_args=resolver_args,
|
|
107
|
+
action=ActionID(name=name, run_name=run_name, project=project, domain=domain, org=org),
|
|
108
|
+
raw_data_path=RawDataPath(path=raw_data_path),
|
|
109
|
+
checkpoints=Checkpoints(checkpoint_path, prev_checkpoint),
|
|
110
|
+
code_bundle=bundle,
|
|
111
|
+
input_path=inputs,
|
|
112
|
+
output_path=outputs_path,
|
|
113
|
+
run_base_dir=run_base_dir,
|
|
114
|
+
version=version,
|
|
115
|
+
controller=controller,
|
|
116
|
+
image_cache=ic,
|
|
117
|
+
)
|
|
118
|
+
# Create a coroutine to watch for errors
|
|
119
|
+
controller_failure = controller.watch_for_errors()
|
|
120
|
+
|
|
121
|
+
# Run both coroutines concurrently and wait for first to finish and cancel the other
|
|
122
|
+
async def _run_and_stop():
|
|
123
|
+
await utils.run_coros(controller_failure, task_coroutine)
|
|
124
|
+
await controller.stop()
|
|
125
|
+
|
|
126
|
+
asyncio.run(_run_and_stop())
|
flyte/_build.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from ._api_commons import syncer
|
|
4
|
+
from ._image import Image
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@syncer.wrap
|
|
8
|
+
async def build(image: Image) -> str:
|
|
9
|
+
"""
|
|
10
|
+
Build an image. The existing async context will be used.
|
|
11
|
+
|
|
12
|
+
Example:
|
|
13
|
+
```
|
|
14
|
+
import flyte
|
|
15
|
+
image = flyte.Image("example_image")
|
|
16
|
+
if __name__ == "__main__":
|
|
17
|
+
asyncio.run(flyte.build.aio(image))
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
:param image: The image(s) to build.
|
|
21
|
+
:return: The image URI.
|
|
22
|
+
"""
|
|
23
|
+
from flyte._internal.imagebuild.image_builder import ImageBuildEngine
|
|
24
|
+
|
|
25
|
+
return await ImageBuildEngine.build(image)
|
flyte/_cache/__init__.py
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from .cache import Cache, CacheBehavior, CachePolicy, CacheRequest
|
|
2
|
+
from .defaults import get_default_policies
|
|
3
|
+
from .policy_function_body import FunctionBodyPolicy
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"Cache",
|
|
7
|
+
"CacheBehavior",
|
|
8
|
+
"CachePolicy",
|
|
9
|
+
"CacheRequest",
|
|
10
|
+
"FunctionBodyPolicy",
|
|
11
|
+
"get_default_policies",
|
|
12
|
+
]
|
flyte/_cache/cache.py
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import hashlib
|
|
2
|
+
from dataclasses import dataclass, field
|
|
3
|
+
from typing import (
|
|
4
|
+
Callable,
|
|
5
|
+
Generic,
|
|
6
|
+
List,
|
|
7
|
+
Optional,
|
|
8
|
+
Protocol,
|
|
9
|
+
Tuple,
|
|
10
|
+
Union,
|
|
11
|
+
runtime_checkable,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
import rich.repr
|
|
15
|
+
from typing_extensions import Literal, ParamSpec, TypeVar, get_args
|
|
16
|
+
|
|
17
|
+
from flyte._datastructures import CodeBundle
|
|
18
|
+
|
|
19
|
+
# if TYPE_CHECKING:
|
|
20
|
+
from flyte._image import Image
|
|
21
|
+
|
|
22
|
+
P = ParamSpec("P")
|
|
23
|
+
FuncOut = TypeVar("FuncOut")
|
|
24
|
+
|
|
25
|
+
CacheBehavior = Literal["auto", "override", "disable", "enabled"]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass
|
|
29
|
+
class VersionParameters(Generic[P, FuncOut]):
|
|
30
|
+
"""
|
|
31
|
+
Parameters used for cache version hash generation.
|
|
32
|
+
|
|
33
|
+
:param func: The function to generate a version for. This is a required parameter but can be any callable
|
|
34
|
+
:type func: Callable[P, FuncOut]
|
|
35
|
+
:param image: The container image to generate a version for. This can be a string representing the
|
|
36
|
+
image name or an Image object.
|
|
37
|
+
:type image: Optional[Union[str, Image]]
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
func: Callable[P, FuncOut] | None
|
|
41
|
+
image: Optional[Union[str, Image]] = None
|
|
42
|
+
code_bundle: Optional[CodeBundle] = None
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@runtime_checkable
|
|
46
|
+
class CachePolicy(Protocol):
|
|
47
|
+
def get_version(self, salt: str, params: VersionParameters) -> str: ...
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
@rich.repr.auto
|
|
51
|
+
@dataclass
|
|
52
|
+
class Cache:
|
|
53
|
+
"""
|
|
54
|
+
Cache configuration for a task.
|
|
55
|
+
:param behavior: The behavior of the cache. Can be "auto", "override" or "disable".
|
|
56
|
+
:param version_override: The version of the cache. If not provided, the version will be
|
|
57
|
+
generated based on the cache policies
|
|
58
|
+
:type version_override: Optional[str]
|
|
59
|
+
:param serialize: Boolean that indicates if identical (ie. same inputs) instances of this task should be executed in
|
|
60
|
+
serial when caching is enabled. This means that given multiple concurrent executions over identical inputs,
|
|
61
|
+
only a single instance executes and the rest wait to reuse the cached results.
|
|
62
|
+
:type serialize: bool
|
|
63
|
+
:param ignored_inputs: A tuple of input names to ignore when generating the version hash.
|
|
64
|
+
:type ignored_inputs: Union[Tuple[str, ...], str]
|
|
65
|
+
:param salt: A salt used in the hash generation.
|
|
66
|
+
:type salt: str
|
|
67
|
+
:param policies: A list of cache policies to generate the version hash.
|
|
68
|
+
:type policies: Optional[Union[List[CachePolicy], CachePolicy]]
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
behavior: CacheBehavior
|
|
72
|
+
version_override: Optional[str] = None
|
|
73
|
+
serialize: bool = False
|
|
74
|
+
ignored_inputs: Union[Tuple[str, ...], str] = field(default_factory=tuple)
|
|
75
|
+
salt: str = ""
|
|
76
|
+
policies: Optional[Union[List[CachePolicy], CachePolicy]] = None
|
|
77
|
+
|
|
78
|
+
def __post_init__(self):
|
|
79
|
+
if self.behavior not in get_args(CacheBehavior):
|
|
80
|
+
raise ValueError(f"Invalid cache behavior: {self.behavior}. Must be one of ['auto', 'override', 'disable']")
|
|
81
|
+
if self.behavior == "disable":
|
|
82
|
+
return
|
|
83
|
+
|
|
84
|
+
if isinstance(self.ignored_inputs, str):
|
|
85
|
+
self._ignored_inputs = (self.ignored_inputs,)
|
|
86
|
+
else:
|
|
87
|
+
self._ignored_inputs = self.ignored_inputs
|
|
88
|
+
|
|
89
|
+
# Normalize policies so that self._policies is always a list
|
|
90
|
+
if self.policies is None:
|
|
91
|
+
from flyte._cache.defaults import get_default_policies
|
|
92
|
+
|
|
93
|
+
self.policies = get_default_policies()
|
|
94
|
+
elif isinstance(self.policies, CachePolicy):
|
|
95
|
+
self.policies = [self.policies]
|
|
96
|
+
|
|
97
|
+
if self.version_override is None and not self.policies:
|
|
98
|
+
raise ValueError("If version is not defined then at least one cache policy needs to be set")
|
|
99
|
+
|
|
100
|
+
def is_enabled(self) -> bool:
|
|
101
|
+
"""
|
|
102
|
+
Check if the cache policy is enabled.
|
|
103
|
+
"""
|
|
104
|
+
return self.behavior in ["auto", "override"]
|
|
105
|
+
|
|
106
|
+
def get_ignored_inputs(self) -> Tuple[str, ...]:
|
|
107
|
+
return self._ignored_inputs
|
|
108
|
+
|
|
109
|
+
def get_version(self, params: Optional[VersionParameters] = None) -> str:
|
|
110
|
+
if not self.is_enabled():
|
|
111
|
+
return ""
|
|
112
|
+
|
|
113
|
+
if self.version_override is not None:
|
|
114
|
+
return self.version_override
|
|
115
|
+
|
|
116
|
+
if params is None:
|
|
117
|
+
raise ValueError("Version parameters must be provided when version_override is not set.")
|
|
118
|
+
|
|
119
|
+
if params.code_bundle is not None:
|
|
120
|
+
if params.code_bundle.pkl is not None:
|
|
121
|
+
return params.code_bundle.computed_version
|
|
122
|
+
|
|
123
|
+
task_hash = ""
|
|
124
|
+
if self.policies is None:
|
|
125
|
+
raise ValueError("Cache policies are not set.")
|
|
126
|
+
policies = self.policies if isinstance(self.policies, list) else [self.policies]
|
|
127
|
+
for policy in policies:
|
|
128
|
+
try:
|
|
129
|
+
task_hash += policy.get_version(self.salt, params)
|
|
130
|
+
except Exception as e:
|
|
131
|
+
raise ValueError(f"Failed to generate version for cache policy {policy}.") from e
|
|
132
|
+
|
|
133
|
+
hash_obj = hashlib.sha256(task_hash.encode())
|
|
134
|
+
return hash_obj.hexdigest()
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
CacheRequest = CacheBehavior | Cache
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def cache_from_request(cache: CacheRequest) -> Cache:
|
|
141
|
+
"""
|
|
142
|
+
Coerce user input into a cache object.
|
|
143
|
+
"""
|
|
144
|
+
if isinstance(cache, Cache):
|
|
145
|
+
return cache
|
|
146
|
+
return Cache(behavior=cache)
|
flyte/_cache/defaults.py
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import ast
|
|
2
|
+
import hashlib
|
|
3
|
+
import inspect
|
|
4
|
+
import textwrap
|
|
5
|
+
|
|
6
|
+
from .cache import CachePolicy, VersionParameters
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class FunctionBodyPolicy(CachePolicy):
|
|
10
|
+
"""
|
|
11
|
+
A class that implements a versioning mechanism for functions by generating
|
|
12
|
+
a SHA-256 hash of the function's source code combined with a salt.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
def get_version(self, salt: str, params: VersionParameters) -> str:
|
|
16
|
+
"""
|
|
17
|
+
This method generates a version string for a function by hashing the function's source code
|
|
18
|
+
combined with a salt.
|
|
19
|
+
|
|
20
|
+
:param salt: A string that is used to salt the hash.
|
|
21
|
+
:param params: VersionParameters object that contains the parameters (e.g. function, ImageSpec, etc.) that are
|
|
22
|
+
used to generate the version.
|
|
23
|
+
|
|
24
|
+
:return: A string that represents the version of the function.
|
|
25
|
+
"""
|
|
26
|
+
if params.func is None:
|
|
27
|
+
return ""
|
|
28
|
+
|
|
29
|
+
source = inspect.getsource(params.func)
|
|
30
|
+
dedented_source = textwrap.dedent(source)
|
|
31
|
+
|
|
32
|
+
# Parse the source code into an Abstract Syntax Tree (AST)
|
|
33
|
+
parsed_ast = ast.parse(dedented_source)
|
|
34
|
+
|
|
35
|
+
# Convert the AST into a string representation
|
|
36
|
+
ast_bytes = ast.dump(parsed_ast, include_attributes=False).encode("utf-8")
|
|
37
|
+
|
|
38
|
+
# Combine the AST bytes with the salt (encoded into bytes)
|
|
39
|
+
combined_data = ast_bytes + salt.encode("utf-8")
|
|
40
|
+
|
|
41
|
+
# Return the SHA-256 hash of the combined data (AST + salt)
|
|
42
|
+
return hashlib.sha256(combined_data).hexdigest()
|
flyte/_cli/__init__.py
ADDED
|
File without changes
|