modAL 1.5.3.dev10__tar.gz → 1.5.3.dev11__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.5.3.dev10 → modal-1.5.3.dev11}/PKG-INFO +1 -1
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/client.pyi +2 -2
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/exception.py +4 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/functions.pyi +6 -6
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/sandbox.py +67 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/sandbox.pyi +78 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/api_grpc.py +16 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/api_pb2.py +499 -441
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/api_pb2.pyi +88 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/api_pb2_grpc.py +33 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/api_pb2_grpc.pyi +10 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/modal_api_grpc.py +1 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_version/__init__.py +1 -1
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/pyproject.toml +0 -1
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/LICENSE +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/README.md +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/__init__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/__main__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_billing.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_clustered_functions.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_clustered_functions.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_container_entrypoint.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_environments.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_function_variants.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_functions.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_grpc_client.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_image.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_ipython.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_load_context.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_location.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_logs.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_object.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_output/__init__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_output/manager.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_output/pty.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_output/rich.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_output/status.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_partial_function.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_resolver.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_resources.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_runtime/__init__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_runtime/asgi.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_runtime/execution_context.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_runtime/task_lifecycle_manager.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_runtime/telemetry.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_serialization.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_server.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_traceback.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_tunnel.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_tunnel.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_type_manager.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/__init__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/app_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/async_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/blob_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/browser_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/curl_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/deprecation.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/docker_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/function_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/git_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/hash_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/http_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/logger.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/mount_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/name_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/package_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/proxy_support.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/shell_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_utils/time_utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_vendor/__init__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_vendor/tblib.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_vendor/version.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_watcher.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/_workspace.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/app.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/app.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/billing.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/billing.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/builder/2023.12.txt +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/builder/2024.04.txt +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/builder/2024.10.txt +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/builder/2025.06.txt +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/builder/README.md +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/builder/base-images.json +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/call_graph.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/__init__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/_download.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/_help.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/_traceback.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/app.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/billing.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/bootstrap.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/changelog.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/cluster.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/config.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/container.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/curl.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/dashboard.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/dict.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/endpoint.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/entry_point.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/environment.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/image.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/import_refs.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/launch.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/logo.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/network_file_system.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/profile.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/programs/__init__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/programs/vscode.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/queues.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/run.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/secret.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/selector.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/shell.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/skills.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/token.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/utils.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/volume.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cli/workspace.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/client.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cls.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/cls.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/config.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/container_process.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/container_process.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/dict.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/dict.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/environments.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/environments.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/experimental/__init__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/experimental/flash.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/experimental/flash.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/experimental/ipython.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/file_io.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/file_io.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/file_pattern_matcher.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/functions.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/image.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/image.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/io_streams.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/io_streams.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/mount.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/mount.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/network_file_system.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/network_file_system.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/object.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/object.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/output.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/parallel_map.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/parallel_map.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/partial_function.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/partial_function.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/proxy.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/proxy.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/py.typed +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/queue.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/queue.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/retries.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/runner.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/runner.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/running_app.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/sandbox_fs.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/sandbox_fs.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/schedule.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/scheduler_placement.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/secret.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/secret.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/server.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/server.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/serving.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/serving.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/skills/modal/SKILL.md +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/snapshot.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/snapshot.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/stream_type.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/token_flow.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/token_flow.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/types.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/volume.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/volume.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/workspace.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal/workspace.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal.egg-info/requires.txt +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal.egg-info/top_level.txt +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_docs/__init__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_docs/mdmd/types.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_docs/reference_intro.md +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/__init__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/py.typed +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/modal_version/__main__.py +0 -0
- {modal-1.5.3.dev10 → modal-1.5.3.dev11}/setup.cfg +0 -0
|
@@ -37,7 +37,7 @@ class _Client:
|
|
|
37
37
|
server_url: str,
|
|
38
38
|
client_type: int,
|
|
39
39
|
credentials: typing.Optional[tuple[str, str]],
|
|
40
|
-
version: str = "1.5.3.
|
|
40
|
+
version: str = "1.5.3.dev11",
|
|
41
41
|
):
|
|
42
42
|
"""mdmd:hidden
|
|
43
43
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -207,7 +207,7 @@ class Client:
|
|
|
207
207
|
server_url: str,
|
|
208
208
|
client_type: int,
|
|
209
209
|
credentials: typing.Optional[tuple[str, str]],
|
|
210
|
-
version: str = "1.5.3.
|
|
210
|
+
version: str = "1.5.3.dev11",
|
|
211
211
|
):
|
|
212
212
|
"""mdmd:hidden
|
|
213
213
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -188,6 +188,10 @@ class SandboxTimeoutError(TimeoutError):
|
|
|
188
188
|
"""Raised when a Sandbox exceeds its execution duration limit and times out."""
|
|
189
189
|
|
|
190
190
|
|
|
191
|
+
class SnapshotCreationError(Error):
|
|
192
|
+
"""Raised when a Sandbox fails to create an exit snapshot."""
|
|
193
|
+
|
|
194
|
+
|
|
191
195
|
class ExecTimeoutError(TimeoutError):
|
|
192
196
|
"""Raised when a container process exceeds its execution duration limit and times out."""
|
|
193
197
|
|
|
@@ -493,7 +493,7 @@ class Function(
|
|
|
493
493
|
|
|
494
494
|
_call_generator: ___call_generator_spec
|
|
495
495
|
|
|
496
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
496
|
+
class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
|
|
497
497
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
498
498
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result.
|
|
499
499
|
|
|
@@ -518,7 +518,7 @@ class Function(
|
|
|
518
518
|
"""
|
|
519
519
|
...
|
|
520
520
|
|
|
521
|
-
remote: __remote_spec[modal._functions.
|
|
521
|
+
remote: __remote_spec[modal._functions.P, modal._functions.ReturnType]
|
|
522
522
|
|
|
523
523
|
class __remote_gen_spec(typing_extensions.Protocol):
|
|
524
524
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -568,7 +568,7 @@ class Function(
|
|
|
568
568
|
"""
|
|
569
569
|
...
|
|
570
570
|
|
|
571
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
571
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
|
|
572
572
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
573
573
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
574
574
|
|
|
@@ -601,7 +601,7 @@ class Function(
|
|
|
601
601
|
"""
|
|
602
602
|
...
|
|
603
603
|
|
|
604
|
-
_experimental_spawn: ___experimental_spawn_spec[modal._functions.
|
|
604
|
+
_experimental_spawn: ___experimental_spawn_spec[modal._functions.P, modal._functions.ReturnType]
|
|
605
605
|
|
|
606
606
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
|
|
607
607
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
|
|
@@ -609,7 +609,7 @@ class Function(
|
|
|
609
609
|
|
|
610
610
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
|
|
611
611
|
|
|
612
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
612
|
+
class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
|
|
613
613
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
614
614
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
615
615
|
|
|
@@ -642,7 +642,7 @@ class Function(
|
|
|
642
642
|
"""
|
|
643
643
|
...
|
|
644
644
|
|
|
645
|
-
spawn: __spawn_spec[modal._functions.
|
|
645
|
+
spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType]
|
|
646
646
|
|
|
647
647
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
648
648
|
"""Return the inner Python object wrapped by this Modal Function.
|
|
@@ -52,10 +52,13 @@ from .exception import (
|
|
|
52
52
|
ClientClosed,
|
|
53
53
|
ConflictError,
|
|
54
54
|
ExecutionError,
|
|
55
|
+
InternalError,
|
|
55
56
|
InvalidError,
|
|
56
57
|
NotFoundError,
|
|
57
58
|
SandboxTerminatedError,
|
|
58
59
|
SandboxTimeoutError,
|
|
60
|
+
SnapshotCreationError,
|
|
61
|
+
TimeoutError,
|
|
59
62
|
)
|
|
60
63
|
from .file_io import _FileIO, ls, mkdir, rm, watch
|
|
61
64
|
from .io_streams import (
|
|
@@ -77,6 +80,8 @@ from .stream_type import StreamType
|
|
|
77
80
|
from .types import FileWatchEvent, FileWatchEventType, SandboxConnectCredentials
|
|
78
81
|
|
|
79
82
|
_default_image: _Image = _Image.debian_slim()
|
|
83
|
+
_EXIT_SNAPSHOT_POLL_INTERVAL_SECONDS = 1.0
|
|
84
|
+
_EXIT_SNAPSHOT_NOT_FOUND_ERROR_CODES = frozenset((api_pb2.SandboxGetExitSnapshotResponse.ERROR_CODE_TIMEOUT,))
|
|
80
85
|
|
|
81
86
|
|
|
82
87
|
async def _gather_load_with_timings(
|
|
@@ -1410,6 +1415,68 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
1410
1415
|
req = sr_pb2.TaskSetNetworkAccessRequest(task_id=task_id, network_access=network_access)
|
|
1411
1416
|
await command_router_client.set_network_access(req)
|
|
1412
1417
|
|
|
1418
|
+
async def _experimental_get_exit_snapshot(self, timeout: float | None = 60) -> _Image:
|
|
1419
|
+
"""Get the exit filesystem snapshot image.
|
|
1420
|
+
|
|
1421
|
+
Args:
|
|
1422
|
+
timeout: Client-side deadline in seconds (default 60). Use `None` to
|
|
1423
|
+
poll until the snapshot reaches a terminal state. Use `0` to
|
|
1424
|
+
perform an immediate check.
|
|
1425
|
+
|
|
1426
|
+
Returns:
|
|
1427
|
+
The exit snapshot Image.
|
|
1428
|
+
|
|
1429
|
+
Raises:
|
|
1430
|
+
InvalidError: If `timeout` is negative, or if exit snapshot is not
|
|
1431
|
+
enabled for the sandbox.
|
|
1432
|
+
TimeoutError: If `timeout` elapses before the snapshot reaches a
|
|
1433
|
+
terminal state. This includes `timeout=0` when the snapshot is
|
|
1434
|
+
still pending.
|
|
1435
|
+
SnapshotCreationError: If no exit snapshot image will be produced.
|
|
1436
|
+
NotFoundError: If the sandbox does not exist.
|
|
1437
|
+
PermissionDeniedError: If the caller cannot access the sandbox.
|
|
1438
|
+
InternalError: If persisted snapshot state is malformed.
|
|
1439
|
+
ServiceError: If a transient client/server communication failure occurs.
|
|
1440
|
+
"""
|
|
1441
|
+
if timeout is not None and timeout < 0:
|
|
1442
|
+
raise InvalidError("timeout must be non-negative or None")
|
|
1443
|
+
|
|
1444
|
+
deadline = None if timeout is None else time.monotonic() + timeout
|
|
1445
|
+
timeout_message = f"timed out waiting for exit snapshot for Sandbox {self.object_id}"
|
|
1446
|
+
|
|
1447
|
+
while True:
|
|
1448
|
+
resp: api_pb2.SandboxGetExitSnapshotResponse = await self._client.stub.SandboxGetExitSnapshot(
|
|
1449
|
+
api_pb2.SandboxGetExitSnapshotRequest(sandbox_id=self.object_id)
|
|
1450
|
+
)
|
|
1451
|
+
outcome = resp.WhichOneof("outcome")
|
|
1452
|
+
|
|
1453
|
+
if outcome == "success":
|
|
1454
|
+
if not resp.success.image_id:
|
|
1455
|
+
raise InternalError("Exit snapshot result is missing image ID")
|
|
1456
|
+
return _Image._new_hydrated(resp.success.image_id, self._client, None)
|
|
1457
|
+
|
|
1458
|
+
if outcome == "error":
|
|
1459
|
+
if resp.error.error_code in _EXIT_SNAPSHOT_NOT_FOUND_ERROR_CODES:
|
|
1460
|
+
message = resp.error.message or "No exit snapshot image will be produced"
|
|
1461
|
+
raise SnapshotCreationError(message)
|
|
1462
|
+
message = resp.error.message or "Exit snapshot state is malformed"
|
|
1463
|
+
raise InternalError(message)
|
|
1464
|
+
|
|
1465
|
+
if outcome != "pending":
|
|
1466
|
+
raise InternalError("Exit snapshot response is missing an outcome")
|
|
1467
|
+
|
|
1468
|
+
sleep_for = _EXIT_SNAPSHOT_POLL_INTERVAL_SECONDS
|
|
1469
|
+
if deadline is not None:
|
|
1470
|
+
remaining = deadline - time.monotonic()
|
|
1471
|
+
if remaining <= 0:
|
|
1472
|
+
raise TimeoutError(timeout_message)
|
|
1473
|
+
sleep_for = min(sleep_for, remaining)
|
|
1474
|
+
|
|
1475
|
+
await asyncio.sleep(sleep_for)
|
|
1476
|
+
|
|
1477
|
+
if deadline is not None and time.monotonic() >= deadline:
|
|
1478
|
+
raise TimeoutError(timeout_message)
|
|
1479
|
+
|
|
1413
1480
|
async def snapshot_filesystem(
|
|
1414
1481
|
self,
|
|
1415
1482
|
timeout: int = 55,
|
|
@@ -573,6 +573,31 @@ class _Sandbox(modal._object._Object):
|
|
|
573
573
|
"""
|
|
574
574
|
...
|
|
575
575
|
|
|
576
|
+
async def _experimental_get_exit_snapshot(self, timeout: typing.Optional[float] = 60) -> modal._image._Image:
|
|
577
|
+
"""Get the exit filesystem snapshot image.
|
|
578
|
+
|
|
579
|
+
Args:
|
|
580
|
+
timeout: Client-side deadline in seconds (default 60). Use `None` to
|
|
581
|
+
poll until the snapshot reaches a terminal state. Use `0` to
|
|
582
|
+
perform an immediate check.
|
|
583
|
+
|
|
584
|
+
Returns:
|
|
585
|
+
The exit snapshot Image.
|
|
586
|
+
|
|
587
|
+
Raises:
|
|
588
|
+
InvalidError: If `timeout` is negative, or if exit snapshot is not
|
|
589
|
+
enabled for the sandbox.
|
|
590
|
+
TimeoutError: If `timeout` elapses before the snapshot reaches a
|
|
591
|
+
terminal state. This includes `timeout=0` when the snapshot is
|
|
592
|
+
still pending.
|
|
593
|
+
SnapshotCreationError: If no exit snapshot image will be produced.
|
|
594
|
+
NotFoundError: If the sandbox does not exist.
|
|
595
|
+
PermissionDeniedError: If the caller cannot access the sandbox.
|
|
596
|
+
InternalError: If persisted snapshot state is malformed.
|
|
597
|
+
ServiceError: If a transient client/server communication failure occurs.
|
|
598
|
+
"""
|
|
599
|
+
...
|
|
600
|
+
|
|
576
601
|
async def snapshot_filesystem(
|
|
577
602
|
self, timeout: int = 55, *, ttl: typing.Optional[int] = 2592000
|
|
578
603
|
) -> modal._image._Image:
|
|
@@ -2198,6 +2223,59 @@ class Sandbox(modal.object.Object):
|
|
|
2198
2223
|
|
|
2199
2224
|
_experimental_set_outbound_network_policy: ___experimental_set_outbound_network_policy_spec
|
|
2200
2225
|
|
|
2226
|
+
class ___experimental_get_exit_snapshot_spec(typing_extensions.Protocol):
|
|
2227
|
+
def __call__(self, /, timeout: typing.Optional[float] = 60) -> modal.image.Image:
|
|
2228
|
+
"""Get the exit filesystem snapshot image.
|
|
2229
|
+
|
|
2230
|
+
Args:
|
|
2231
|
+
timeout: Client-side deadline in seconds (default 60). Use `None` to
|
|
2232
|
+
poll until the snapshot reaches a terminal state. Use `0` to
|
|
2233
|
+
perform an immediate check.
|
|
2234
|
+
|
|
2235
|
+
Returns:
|
|
2236
|
+
The exit snapshot Image.
|
|
2237
|
+
|
|
2238
|
+
Raises:
|
|
2239
|
+
InvalidError: If `timeout` is negative, or if exit snapshot is not
|
|
2240
|
+
enabled for the sandbox.
|
|
2241
|
+
TimeoutError: If `timeout` elapses before the snapshot reaches a
|
|
2242
|
+
terminal state. This includes `timeout=0` when the snapshot is
|
|
2243
|
+
still pending.
|
|
2244
|
+
SnapshotCreationError: If no exit snapshot image will be produced.
|
|
2245
|
+
NotFoundError: If the sandbox does not exist.
|
|
2246
|
+
PermissionDeniedError: If the caller cannot access the sandbox.
|
|
2247
|
+
InternalError: If persisted snapshot state is malformed.
|
|
2248
|
+
ServiceError: If a transient client/server communication failure occurs.
|
|
2249
|
+
"""
|
|
2250
|
+
...
|
|
2251
|
+
|
|
2252
|
+
async def aio(self, /, timeout: typing.Optional[float] = 60) -> modal.image.Image:
|
|
2253
|
+
"""Get the exit filesystem snapshot image.
|
|
2254
|
+
|
|
2255
|
+
Args:
|
|
2256
|
+
timeout: Client-side deadline in seconds (default 60). Use `None` to
|
|
2257
|
+
poll until the snapshot reaches a terminal state. Use `0` to
|
|
2258
|
+
perform an immediate check.
|
|
2259
|
+
|
|
2260
|
+
Returns:
|
|
2261
|
+
The exit snapshot Image.
|
|
2262
|
+
|
|
2263
|
+
Raises:
|
|
2264
|
+
InvalidError: If `timeout` is negative, or if exit snapshot is not
|
|
2265
|
+
enabled for the sandbox.
|
|
2266
|
+
TimeoutError: If `timeout` elapses before the snapshot reaches a
|
|
2267
|
+
terminal state. This includes `timeout=0` when the snapshot is
|
|
2268
|
+
still pending.
|
|
2269
|
+
SnapshotCreationError: If no exit snapshot image will be produced.
|
|
2270
|
+
NotFoundError: If the sandbox does not exist.
|
|
2271
|
+
PermissionDeniedError: If the caller cannot access the sandbox.
|
|
2272
|
+
InternalError: If persisted snapshot state is malformed.
|
|
2273
|
+
ServiceError: If a transient client/server communication failure occurs.
|
|
2274
|
+
"""
|
|
2275
|
+
...
|
|
2276
|
+
|
|
2277
|
+
_experimental_get_exit_snapshot: ___experimental_get_exit_snapshot_spec
|
|
2278
|
+
|
|
2201
2279
|
class __snapshot_filesystem_spec(typing_extensions.Protocol):
|
|
2202
2280
|
def __call__(self, /, timeout: int = 55, *, ttl: typing.Optional[int] = 2592000) -> modal.image.Image:
|
|
2203
2281
|
"""Snapshot the filesystem of the Sandbox.
|
|
@@ -595,6 +595,10 @@ class ModalClientBase(abc.ABC):
|
|
|
595
595
|
async def SandboxGetCommandRouterAccess(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest, modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse]') -> None:
|
|
596
596
|
pass
|
|
597
597
|
|
|
598
|
+
@abc.abstractmethod
|
|
599
|
+
async def SandboxGetExitSnapshot(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxGetExitSnapshotRequest, modal_proto.api_pb2.SandboxGetExitSnapshotResponse]') -> None:
|
|
600
|
+
pass
|
|
601
|
+
|
|
598
602
|
@abc.abstractmethod
|
|
599
603
|
async def SandboxGetFromName(self, stream: 'grpclib.server.Stream[modal_proto.api_pb2.SandboxGetFromNameRequest, modal_proto.api_pb2.SandboxGetFromNameResponse]') -> None:
|
|
600
604
|
pass
|
|
@@ -1813,6 +1817,12 @@ class ModalClientBase(abc.ABC):
|
|
|
1813
1817
|
modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest,
|
|
1814
1818
|
modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse,
|
|
1815
1819
|
),
|
|
1820
|
+
'/modal.client.ModalClient/SandboxGetExitSnapshot': grpclib.const.Handler(
|
|
1821
|
+
self.SandboxGetExitSnapshot,
|
|
1822
|
+
grpclib.const.Cardinality.UNARY_UNARY,
|
|
1823
|
+
modal_proto.api_pb2.SandboxGetExitSnapshotRequest,
|
|
1824
|
+
modal_proto.api_pb2.SandboxGetExitSnapshotResponse,
|
|
1825
|
+
),
|
|
1816
1826
|
'/modal.client.ModalClient/SandboxGetFromName': grpclib.const.Handler(
|
|
1817
1827
|
self.SandboxGetFromName,
|
|
1818
1828
|
grpclib.const.Cardinality.UNARY_UNARY,
|
|
@@ -3211,6 +3221,12 @@ class ModalClientStub:
|
|
|
3211
3221
|
modal_proto.api_pb2.SandboxGetCommandRouterAccessRequest,
|
|
3212
3222
|
modal_proto.api_pb2.SandboxGetCommandRouterAccessResponse,
|
|
3213
3223
|
)
|
|
3224
|
+
self.SandboxGetExitSnapshot = grpclib.client.UnaryUnaryMethod(
|
|
3225
|
+
channel,
|
|
3226
|
+
'/modal.client.ModalClient/SandboxGetExitSnapshot',
|
|
3227
|
+
modal_proto.api_pb2.SandboxGetExitSnapshotRequest,
|
|
3228
|
+
modal_proto.api_pb2.SandboxGetExitSnapshotResponse,
|
|
3229
|
+
)
|
|
3214
3230
|
self.SandboxGetFromName = grpclib.client.UnaryUnaryMethod(
|
|
3215
3231
|
channel,
|
|
3216
3232
|
'/modal.client.ModalClient/SandboxGetFromName',
|