modAL 1.2.3.dev11__tar.gz → 1.2.3.dev13__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.
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/PKG-INFO +1 -1
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_functions.py +1 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_load_context.py +2 -1
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_object.py +12 -6
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/client.py +9 -9
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/client.pyi +8 -9
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/functions.pyi +6 -6
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/api.proto +8 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/api_pb2.py +662 -652
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/api_pb2.pyi +41 -4
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_version/__init__.py +1 -1
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/LICENSE +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/README.md +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/__init__.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/__main__.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_billing.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_clustered_functions.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_clustered_functions.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_container_entrypoint.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_grpc_client.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_ipython.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_location.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_output.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_partial_function.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_pty.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_resolver.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_resources.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_runtime/__init__.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_runtime/asgi.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_runtime/execution_context.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_runtime/telemetry.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_serialization.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_traceback.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_tunnel.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_tunnel.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_type_manager.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/__init__.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/app_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/async_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/blob_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/deprecation.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/docker_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/function_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/git_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/hash_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/http_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/logger.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/mount_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/name_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/package_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/shell_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_utils/time_utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_vendor/__init__.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_vendor/tblib.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/_watcher.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/app.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/app.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/billing.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/builder/2023.12.txt +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/builder/2024.04.txt +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/builder/2024.10.txt +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/builder/2025.06.txt +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/builder/README.md +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/builder/base-images.json +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/call_graph.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/__init__.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/_download.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/_traceback.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/app.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/cluster.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/config.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/container.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/dict.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/entry_point.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/environment.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/import_refs.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/launch.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/network_file_system.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/profile.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/programs/__init__.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/programs/launch_instance_ssh.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/programs/run_marimo.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/programs/vscode.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/queues.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/run.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/secret.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/token.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/utils.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cli/volume.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cls.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/cls.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/config.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/container_process.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/container_process.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/dict.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/dict.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/environments.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/environments.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/exception.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/experimental/__init__.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/experimental/flash.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/experimental/flash.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/experimental/ipython.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/file_io.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/file_io.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/file_pattern_matcher.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/functions.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/gpu.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/image.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/image.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/io_streams.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/io_streams.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/mount.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/mount.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/network_file_system.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/network_file_system.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/object.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/object.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/output.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/parallel_map.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/parallel_map.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/partial_function.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/partial_function.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/proxy.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/proxy.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/py.typed +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/queue.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/queue.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/retries.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/runner.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/runner.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/running_app.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/sandbox.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/sandbox.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/schedule.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/scheduler_placement.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/secret.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/secret.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/serving.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/serving.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/snapshot.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/snapshot.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/stream_type.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/token_flow.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/token_flow.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/volume.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal/volume.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal.egg-info/requires.txt +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal.egg-info/top_level.txt +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_docs/__init__.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/__init__.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/api_grpc.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/py.typed +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/sandbox_router.proto +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/sandbox_router_grpc.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/sandbox_router_pb2.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/sandbox_router_pb2.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/sandbox_router_pb2_grpc.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/sandbox_router_pb2_grpc.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/task_command_router.proto +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/modal_version/__main__.py +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/pyproject.toml +0 -0
- {modal-1.2.3.dev11 → modal-1.2.3.dev13}/setup.cfg +0 -0
|
@@ -536,6 +536,7 @@ class _InputPlaneInvocation:
|
|
|
536
536
|
async def _get_metadata(input_plane_region: str, client: _Client) -> list[tuple[str, str]]:
|
|
537
537
|
if not input_plane_region:
|
|
538
538
|
return []
|
|
539
|
+
assert client._auth_token_manager, "Client is not open"
|
|
539
540
|
token = await client._auth_token_manager.get_token()
|
|
540
541
|
return [("x-modal-input-plane-region", input_plane_region), ("x-modal-auth-token", token)]
|
|
541
542
|
|
|
@@ -66,8 +66,9 @@ class LoadContext:
|
|
|
66
66
|
|
|
67
67
|
Returns a new instance (no in place mutation)"""
|
|
68
68
|
|
|
69
|
+
is_valid_client = self._client is not None and not self._client._snapshotted
|
|
69
70
|
return LoadContext(
|
|
70
|
-
client=
|
|
71
|
+
client=self.client if is_valid_client else await _Client.from_env(),
|
|
71
72
|
environment_name=self._environment_name or config.get("environment") or "",
|
|
72
73
|
app_id=self._app_id,
|
|
73
74
|
)
|
|
@@ -43,7 +43,7 @@ class _Object:
|
|
|
43
43
|
_prefix_to_type: ClassVar[dict[str, type]] = {}
|
|
44
44
|
|
|
45
45
|
# For constructors
|
|
46
|
-
_load: Optional[Callable[[Self, Resolver, LoadContext, Optional[str]], Awaitable[None]]]
|
|
46
|
+
_load: Optional[Callable[[Self, Resolver, LoadContext, Optional[str]], Awaitable[None]]] = None
|
|
47
47
|
_preload: Optional[Callable[[Self, Resolver, LoadContext, Optional[str]], Awaitable[None]]]
|
|
48
48
|
_rep: str
|
|
49
49
|
_is_another_app: bool
|
|
@@ -308,11 +308,17 @@ class _Object:
|
|
|
308
308
|
# memory snapshots capture references which must be rehydrated
|
|
309
309
|
# on restore to handle staleness.
|
|
310
310
|
logger.debug(f"rehydrating {self} after snapshot")
|
|
311
|
-
self.
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
311
|
+
if self._hydrate_lazily:
|
|
312
|
+
logger.debug(f"reloading lazy {self} from server")
|
|
313
|
+
self._is_hydrated = False # un-hydrate and re-resolve
|
|
314
|
+
# we don't set an explicit Client here, relying on the default
|
|
315
|
+
# env client to be applied by LoadContext.apply_default
|
|
316
|
+
root_load_context = LoadContext.empty()
|
|
317
|
+
resolver = Resolver()
|
|
318
|
+
await resolver.load(typing.cast(_Object, self), root_load_context)
|
|
319
|
+
else:
|
|
320
|
+
logger.debug(f"reloading non-lazy {self} by replacing client")
|
|
321
|
+
self._client = client or await _Client.from_env()
|
|
316
322
|
self._is_rehydrated = True
|
|
317
323
|
logger.debug(f"rehydrated {self} with client {id(self.client)}")
|
|
318
324
|
elif not self._hydrate_lazily:
|
|
@@ -5,7 +5,7 @@ import platform
|
|
|
5
5
|
import sys
|
|
6
6
|
import urllib.parse
|
|
7
7
|
import warnings
|
|
8
|
-
from collections.abc import AsyncGenerator,
|
|
8
|
+
from collections.abc import AsyncGenerator, Collection, Mapping
|
|
9
9
|
from typing import Any, ClassVar, Optional, TypeVar, Union
|
|
10
10
|
|
|
11
11
|
import grpclib.client
|
|
@@ -14,7 +14,7 @@ from google.protobuf.message import Message
|
|
|
14
14
|
from synchronicity.async_wrap import asynccontextmanager
|
|
15
15
|
|
|
16
16
|
from modal._utils.async_utils import synchronizer
|
|
17
|
-
from modal_proto import
|
|
17
|
+
from modal_proto import api_pb2, modal_api_grpc
|
|
18
18
|
from modal_version import __version__
|
|
19
19
|
|
|
20
20
|
from ._traceback import print_server_warnings
|
|
@@ -70,10 +70,10 @@ class _Client:
|
|
|
70
70
|
_client_from_env: ClassVar[Optional["_Client"]] = None
|
|
71
71
|
_client_from_env_lock: ClassVar[Optional[asyncio.Lock]] = None
|
|
72
72
|
_cancellation_context: TaskContext
|
|
73
|
-
_cancellation_context_event_loop: asyncio.AbstractEventLoop = None
|
|
74
|
-
_stub: Optional[
|
|
75
|
-
_auth_token_manager: _AuthTokenManager = None
|
|
76
|
-
_snapshotted: bool
|
|
73
|
+
_cancellation_context_event_loop: Optional[asyncio.AbstractEventLoop] = None
|
|
74
|
+
_stub: Optional[modal_api_grpc.ModalClientModal]
|
|
75
|
+
_auth_token_manager: Optional[_AuthTokenManager] = None
|
|
76
|
+
_snapshotted: bool = False
|
|
77
77
|
|
|
78
78
|
def __init__(
|
|
79
79
|
self,
|
|
@@ -90,8 +90,8 @@ class _Client:
|
|
|
90
90
|
self._credentials = credentials
|
|
91
91
|
self.version = version
|
|
92
92
|
self._closed = False
|
|
93
|
-
self._stub
|
|
94
|
-
self._auth_token_manager
|
|
93
|
+
self._stub = None
|
|
94
|
+
self._auth_token_manager = None
|
|
95
95
|
self._snapshotted = False
|
|
96
96
|
self._owner_pid = None
|
|
97
97
|
|
|
@@ -163,7 +163,7 @@ class _Client:
|
|
|
163
163
|
|
|
164
164
|
@classmethod
|
|
165
165
|
@asynccontextmanager
|
|
166
|
-
async def anonymous(cls, server_url: str) ->
|
|
166
|
+
async def anonymous(cls, server_url: str) -> AsyncGenerator["_Client", None]:
|
|
167
167
|
"""mdmd:hidden
|
|
168
168
|
Create a connection with no credentials; to be used for token creation.
|
|
169
169
|
"""
|
|
@@ -5,7 +5,6 @@ import google.protobuf.message
|
|
|
5
5
|
import grpclib.client
|
|
6
6
|
import modal._utils.async_utils
|
|
7
7
|
import modal._utils.auth_token_manager
|
|
8
|
-
import modal_proto.api_grpc
|
|
9
8
|
import modal_proto.modal_api_grpc
|
|
10
9
|
import synchronicity.combined_types
|
|
11
10
|
import typing
|
|
@@ -23,9 +22,9 @@ class _Client:
|
|
|
23
22
|
_client_from_env: typing.ClassVar[typing.Optional[_Client]]
|
|
24
23
|
_client_from_env_lock: typing.ClassVar[typing.Optional[asyncio.locks.Lock]]
|
|
25
24
|
_cancellation_context: modal._utils.async_utils.TaskContext
|
|
26
|
-
_cancellation_context_event_loop: asyncio.events.AbstractEventLoop
|
|
27
|
-
_stub: typing.Optional[modal_proto.
|
|
28
|
-
_auth_token_manager: modal._utils.auth_token_manager._AuthTokenManager
|
|
25
|
+
_cancellation_context_event_loop: typing.Optional[asyncio.events.AbstractEventLoop]
|
|
26
|
+
_stub: typing.Optional[modal_proto.modal_api_grpc.ModalClientModal]
|
|
27
|
+
_auth_token_manager: typing.Optional[modal._utils.auth_token_manager._AuthTokenManager]
|
|
29
28
|
_snapshotted: bool
|
|
30
29
|
|
|
31
30
|
def __init__(
|
|
@@ -33,7 +32,7 @@ class _Client:
|
|
|
33
32
|
server_url: str,
|
|
34
33
|
client_type: int,
|
|
35
34
|
credentials: typing.Optional[tuple[str, str]],
|
|
36
|
-
version: str = "1.2.3.
|
|
35
|
+
version: str = "1.2.3.dev13",
|
|
37
36
|
):
|
|
38
37
|
"""mdmd:hidden
|
|
39
38
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -154,9 +153,9 @@ class Client:
|
|
|
154
153
|
_client_from_env: typing.ClassVar[typing.Optional[Client]]
|
|
155
154
|
_client_from_env_lock: typing.ClassVar[typing.Optional[asyncio.locks.Lock]]
|
|
156
155
|
_cancellation_context: modal._utils.async_utils.TaskContext
|
|
157
|
-
_cancellation_context_event_loop: asyncio.events.AbstractEventLoop
|
|
158
|
-
_stub: typing.Optional[modal_proto.
|
|
159
|
-
_auth_token_manager: modal._utils.auth_token_manager._AuthTokenManager
|
|
156
|
+
_cancellation_context_event_loop: typing.Optional[asyncio.events.AbstractEventLoop]
|
|
157
|
+
_stub: typing.Optional[modal_proto.modal_api_grpc.ModalClientModal]
|
|
158
|
+
_auth_token_manager: typing.Optional[modal._utils.auth_token_manager._AuthTokenManager]
|
|
160
159
|
_snapshotted: bool
|
|
161
160
|
|
|
162
161
|
def __init__(
|
|
@@ -164,7 +163,7 @@ class Client:
|
|
|
164
163
|
server_url: str,
|
|
165
164
|
client_type: int,
|
|
166
165
|
credentials: typing.Optional[tuple[str, str]],
|
|
167
|
-
version: str = "1.2.3.
|
|
166
|
+
version: str = "1.2.3.dev13",
|
|
168
167
|
):
|
|
169
168
|
"""mdmd:hidden
|
|
170
169
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -408,7 +408,7 @@ class Function(
|
|
|
408
408
|
|
|
409
409
|
_call_generator: ___call_generator_spec[typing_extensions.Self]
|
|
410
410
|
|
|
411
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
411
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
412
412
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
413
413
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
414
414
|
...
|
|
@@ -417,7 +417,7 @@ class Function(
|
|
|
417
417
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result."""
|
|
418
418
|
...
|
|
419
419
|
|
|
420
|
-
remote: __remote_spec[modal._functions.
|
|
420
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
|
421
421
|
|
|
422
422
|
class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
|
|
423
423
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -444,7 +444,7 @@ class Function(
|
|
|
444
444
|
"""
|
|
445
445
|
...
|
|
446
446
|
|
|
447
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
447
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
448
448
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
449
449
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
450
450
|
|
|
@@ -468,7 +468,7 @@ class Function(
|
|
|
468
468
|
...
|
|
469
469
|
|
|
470
470
|
_experimental_spawn: ___experimental_spawn_spec[
|
|
471
|
-
modal._functions.
|
|
471
|
+
modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
|
|
472
472
|
]
|
|
473
473
|
|
|
474
474
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
|
|
@@ -477,7 +477,7 @@ class Function(
|
|
|
477
477
|
|
|
478
478
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
|
|
479
479
|
|
|
480
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
480
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
|
|
481
481
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
482
482
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
483
483
|
|
|
@@ -498,7 +498,7 @@ class Function(
|
|
|
498
498
|
"""
|
|
499
499
|
...
|
|
500
500
|
|
|
501
|
-
spawn: __spawn_spec[modal._functions.
|
|
501
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
|
|
502
502
|
|
|
503
503
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
504
504
|
"""Return the inner Python object wrapped by this Modal Function."""
|
|
@@ -1550,6 +1550,7 @@ message Function {
|
|
|
1550
1550
|
uint32 startup_timeout_secs = 86;
|
|
1551
1551
|
repeated DataFormat supported_input_formats = 87; // can be used as inputs
|
|
1552
1552
|
repeated DataFormat supported_output_formats = 88;
|
|
1553
|
+
optional HTTPConfig http_config = 89;
|
|
1553
1554
|
}
|
|
1554
1555
|
|
|
1555
1556
|
message FunctionAsyncInvokeRequest {
|
|
@@ -1728,6 +1729,7 @@ message FunctionData {
|
|
|
1728
1729
|
uint32 startup_timeout_secs = 36;
|
|
1729
1730
|
repeated DataFormat supported_input_formats = 37;
|
|
1730
1731
|
repeated DataFormat supported_output_formats = 38;
|
|
1732
|
+
optional HTTPConfig http_config = 39;
|
|
1731
1733
|
}
|
|
1732
1734
|
|
|
1733
1735
|
message FunctionExtended {
|
|
@@ -2088,6 +2090,12 @@ message GenericResult { // Used for both tasks and function outputs
|
|
|
2088
2090
|
string propagation_reason = 13; // (?)
|
|
2089
2091
|
}
|
|
2090
2092
|
|
|
2093
|
+
message HTTPConfig {
|
|
2094
|
+
uint32 port = 1;
|
|
2095
|
+
repeated string proxy_regions = 2;
|
|
2096
|
+
uint32 startup_timeout = 3;
|
|
2097
|
+
uint32 exit_grace_period = 4;
|
|
2098
|
+
}
|
|
2091
2099
|
|
|
2092
2100
|
message Image {
|
|
2093
2101
|
repeated BaseImage base_images = 5;
|