modal 1.5.2.dev0__tar.gz → 1.5.2.dev2__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.2.dev0 → modal-1.5.2.dev2}/PKG-INFO +1 -1
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/client.pyi +2 -2
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/functions.pyi +6 -6
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/sandbox.py +28 -5
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/sandbox.pyi +39 -9
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/api_pb2.py +386 -386
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/api_pb2.pyi +8 -1
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/api_pb2_grpc.py +1 -1
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/api_pb2_grpc.pyi +2 -2
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_version/__init__.py +1 -1
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/LICENSE +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/README.md +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/__init__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/__main__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_billing.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_clustered_functions.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_clustered_functions.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_container_entrypoint.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_environments.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_function_variants.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_functions.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_grpc_client.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_image.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_ipython.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_load_context.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_location.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_logs.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_object.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_output/__init__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_output/manager.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_output/pty.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_output/rich.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_output/status.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_partial_function.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_resolver.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_resources.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_runtime/__init__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_runtime/asgi.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_runtime/execution_context.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_runtime/task_lifecycle_manager.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_runtime/telemetry.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_serialization.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_server.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_traceback.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_tunnel.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_tunnel.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_type_manager.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/__init__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/app_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/async_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/blob_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/browser_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/curl_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/deprecation.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/docker_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/function_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/git_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/hash_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/http_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/logger.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/mount_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/name_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/package_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/proxy_support.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/shell_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_utils/time_utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_vendor/__init__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_vendor/tblib.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_vendor/version.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_watcher.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/_workspace.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/app.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/app.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/billing.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/billing.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/builder/2023.12.txt +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/builder/2024.04.txt +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/builder/2024.10.txt +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/builder/2025.06.txt +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/builder/README.md +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/builder/base-images.json +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/call_graph.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/__init__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/_download.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/_help.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/_traceback.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/app.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/billing.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/bootstrap.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/changelog.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/cluster.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/config.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/container.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/curl.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/dashboard.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/dict.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/endpoint.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/entry_point.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/environment.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/image.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/import_refs.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/launch.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/logo.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/network_file_system.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/profile.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/programs/__init__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/programs/vscode.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/queues.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/run.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/secret.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/selector.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/shell.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/skills.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/token.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/utils.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/volume.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cli/workspace.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/client.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cls.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/cls.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/config.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/container_process.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/container_process.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/dict.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/dict.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/environments.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/environments.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/exception.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/experimental/__init__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/experimental/flash.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/experimental/flash.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/experimental/ipython.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/file_io.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/file_io.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/file_pattern_matcher.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/functions.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/image.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/image.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/io_streams.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/io_streams.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/mount.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/mount.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/network_file_system.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/network_file_system.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/object.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/object.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/output.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/parallel_map.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/parallel_map.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/partial_function.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/partial_function.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/proxy.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/proxy.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/py.typed +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/queue.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/queue.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/retries.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/runner.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/runner.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/running_app.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/sandbox_fs.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/sandbox_fs.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/schedule.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/scheduler_placement.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/secret.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/secret.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/server.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/server.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/serving.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/serving.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/skills/modal/SKILL.md +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/snapshot.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/snapshot.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/stream_type.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/token_flow.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/token_flow.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/volume.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/volume.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/workspace.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal/workspace.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal.egg-info/requires.txt +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal.egg-info/top_level.txt +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_docs/__init__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_docs/mdmd/types.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/__init__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/api_grpc.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/py.typed +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/modal_version/__main__.py +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/pyproject.toml +0 -0
- {modal-1.5.2.dev0 → modal-1.5.2.dev2}/setup.cfg +0 -0
|
@@ -35,7 +35,7 @@ class _Client:
|
|
|
35
35
|
server_url: str,
|
|
36
36
|
client_type: int,
|
|
37
37
|
credentials: typing.Optional[tuple[str, str]],
|
|
38
|
-
version: str = "1.5.2.
|
|
38
|
+
version: str = "1.5.2.dev2",
|
|
39
39
|
):
|
|
40
40
|
"""mdmd:hidden
|
|
41
41
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -205,7 +205,7 @@ class Client:
|
|
|
205
205
|
server_url: str,
|
|
206
206
|
client_type: int,
|
|
207
207
|
credentials: typing.Optional[tuple[str, str]],
|
|
208
|
-
version: str = "1.5.2.
|
|
208
|
+
version: str = "1.5.2.dev2",
|
|
209
209
|
):
|
|
210
210
|
"""mdmd:hidden
|
|
211
211
|
The Modal client object is not intended to be instantiated directly by users.
|
|
@@ -490,7 +490,7 @@ class Function(
|
|
|
490
490
|
|
|
491
491
|
_call_generator: ___call_generator_spec
|
|
492
492
|
|
|
493
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
493
|
+
class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
|
|
494
494
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
495
495
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result.
|
|
496
496
|
|
|
@@ -515,7 +515,7 @@ class Function(
|
|
|
515
515
|
"""
|
|
516
516
|
...
|
|
517
517
|
|
|
518
|
-
remote: __remote_spec[modal._functions.
|
|
518
|
+
remote: __remote_spec[modal._functions.P, modal._functions.ReturnType]
|
|
519
519
|
|
|
520
520
|
class __remote_gen_spec(typing_extensions.Protocol):
|
|
521
521
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -565,7 +565,7 @@ class Function(
|
|
|
565
565
|
"""
|
|
566
566
|
...
|
|
567
567
|
|
|
568
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
568
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
|
|
569
569
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
570
570
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
571
571
|
|
|
@@ -598,7 +598,7 @@ class Function(
|
|
|
598
598
|
"""
|
|
599
599
|
...
|
|
600
600
|
|
|
601
|
-
_experimental_spawn: ___experimental_spawn_spec[modal._functions.
|
|
601
|
+
_experimental_spawn: ___experimental_spawn_spec[modal._functions.P, modal._functions.ReturnType]
|
|
602
602
|
|
|
603
603
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
|
|
604
604
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
|
|
@@ -606,7 +606,7 @@ class Function(
|
|
|
606
606
|
|
|
607
607
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
|
|
608
608
|
|
|
609
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
609
|
+
class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER]):
|
|
610
610
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
611
611
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
612
612
|
|
|
@@ -639,7 +639,7 @@ class Function(
|
|
|
639
639
|
"""
|
|
640
640
|
...
|
|
641
641
|
|
|
642
|
-
spawn: __spawn_spec[modal._functions.
|
|
642
|
+
spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType]
|
|
643
643
|
|
|
644
644
|
def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
|
|
645
645
|
"""Return the inner Python object wrapped by this Modal Function.
|
|
@@ -839,7 +839,9 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
839
839
|
region: str | Sequence[str] | None = None,
|
|
840
840
|
block_network: bool = False,
|
|
841
841
|
outbound_cidr_allowlist: Sequence[str] | None = None,
|
|
842
|
+
outbound_domain_allowlist: Sequence[str] | None = None,
|
|
842
843
|
inbound_cidr_allowlist: Sequence[str] | None = None,
|
|
844
|
+
i6pn: bool = False,
|
|
843
845
|
volumes: dict[str | os.PathLike, _Volume | _CloudBucketMount] = {},
|
|
844
846
|
pty: bool = False,
|
|
845
847
|
encrypted_ports: Sequence[int] = [],
|
|
@@ -847,6 +849,7 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
847
849
|
unencrypted_ports: Sequence[int] = [],
|
|
848
850
|
proxy: _Proxy | None = None,
|
|
849
851
|
readiness_probe: Probe | None = None,
|
|
852
|
+
experimental_options: dict[str, Any] | None = None,
|
|
850
853
|
include_oidc_identity_token: bool = False,
|
|
851
854
|
verbose: bool = False,
|
|
852
855
|
client: _Client | None = None,
|
|
@@ -854,13 +857,20 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
854
857
|
"""Create a sandbox using the V2 backend.
|
|
855
858
|
|
|
856
859
|
Supported features include exec, encrypted tunnels, wait/poll/terminate,
|
|
857
|
-
CPU and memory configuration, region placement,
|
|
858
|
-
(with static credentials via
|
|
859
|
-
identity tokens, proxies, and
|
|
860
|
+
CPU and memory configuration, region placement, private IPv6 networking
|
|
861
|
+
(i6pn), volumes, cloud bucket mounts (with static credentials via
|
|
862
|
+
`secret=...` or `oidc_auth_role_arn`), OIDC identity tokens, proxies, and
|
|
863
|
+
filesystem snapshots.
|
|
860
864
|
|
|
861
865
|
Features like tags, memory snapshots, network file systems, GPUs, and custom
|
|
862
866
|
domains are not supported.
|
|
863
867
|
|
|
868
|
+
Set `i6pn=True` to enable private IPv6 networking so sandboxes in the same
|
|
869
|
+
workspace can address each other directly at their `i6pn.modal.local`
|
|
870
|
+
address. i6pn only connects sandboxes co-located on the same routable
|
|
871
|
+
network, so pin every sandbox in the group to the same specific region
|
|
872
|
+
(e.g. `region="us-east-1"`).
|
|
873
|
+
|
|
864
874
|
V2 sandboxes created with this method are not currently returned by
|
|
865
875
|
`Sandbox.list()` and cannot be looked up with `Sandbox.from_name()`.
|
|
866
876
|
Store `sandbox.object_id` if you need to retrieve the sandbox later, and
|
|
@@ -878,6 +888,12 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
878
888
|
if block_network and (encrypted_ports or h2_ports or unencrypted_ports):
|
|
879
889
|
raise InvalidError("Cannot specify open ports when `block_network` is enabled")
|
|
880
890
|
|
|
891
|
+
if block_network and i6pn:
|
|
892
|
+
raise InvalidError(
|
|
893
|
+
"`block_network` disables all networking, including i6pn. To keep i6pn while blocking "
|
|
894
|
+
"public egress, use an empty outbound allowlist (`outbound_cidr_allowlist=[]`) instead."
|
|
895
|
+
)
|
|
896
|
+
|
|
881
897
|
validated_volumes = validate_volumes(volumes)
|
|
882
898
|
cloud_bucket_mounts = [(k, v) for k, v in validated_volumes if isinstance(v, _CloudBucketMount)]
|
|
883
899
|
validated_volumes = [(k, v) for k, v in validated_volumes if isinstance(v, _Volume)]
|
|
@@ -915,19 +931,22 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
915
931
|
if block_network:
|
|
916
932
|
if outbound_cidr_allowlist is not None:
|
|
917
933
|
raise InvalidError("`outbound_cidr_allowlist` cannot be used when `block_network` is enabled")
|
|
934
|
+
if outbound_domain_allowlist is not None:
|
|
935
|
+
raise InvalidError("`outbound_domain_allowlist` cannot be used when `block_network` is enabled")
|
|
918
936
|
if inbound_cidr_allowlist is not None:
|
|
919
937
|
raise InvalidError("`inbound_cidr_allowlist` cannot be used when `block_network` is enabled")
|
|
920
938
|
network_access = api_pb2.NetworkAccess(
|
|
921
939
|
network_access_type=api_pb2.NetworkAccess.NetworkAccessType.BLOCKED,
|
|
922
940
|
)
|
|
923
|
-
elif outbound_cidr_allowlist is None:
|
|
941
|
+
elif outbound_domain_allowlist is None and outbound_cidr_allowlist is None:
|
|
924
942
|
network_access = api_pb2.NetworkAccess(
|
|
925
943
|
network_access_type=api_pb2.NetworkAccess.NetworkAccessType.OPEN,
|
|
926
944
|
)
|
|
927
945
|
else:
|
|
928
946
|
network_access = api_pb2.NetworkAccess(
|
|
929
947
|
network_access_type=api_pb2.NetworkAccess.NetworkAccessType.ALLOWLIST,
|
|
930
|
-
allowed_cidrs=outbound_cidr_allowlist,
|
|
948
|
+
allowed_cidrs=list(outbound_cidr_allowlist or []),
|
|
949
|
+
allowed_domains=list(outbound_domain_allowlist or []),
|
|
931
950
|
)
|
|
932
951
|
|
|
933
952
|
async def _load(self: _Sandbox, resolver: Resolver, load_context: LoadContext, _existing_object_id: str | None):
|
|
@@ -972,9 +991,13 @@ class _Sandbox(_Object, type_prefix="sb"):
|
|
|
972
991
|
name=name,
|
|
973
992
|
include_oidc_identity_token=include_oidc_identity_token,
|
|
974
993
|
inbound_cidr_allowlist=list(inbound_cidr_allowlist) if inbound_cidr_allowlist is not None else [],
|
|
994
|
+
i6pn_enabled=i6pn,
|
|
975
995
|
volume_mounts=volume_mounts,
|
|
976
996
|
cloud_bucket_mounts=cloud_bucket_mounts_to_proto(cloud_bucket_mounts),
|
|
977
997
|
readiness_probe=(readiness_probe._to_proto() if readiness_probe else None),
|
|
998
|
+
experimental_options_v2=(
|
|
999
|
+
{k: str(v) for k, v in experimental_options.items()} if experimental_options else None
|
|
1000
|
+
),
|
|
978
1001
|
)
|
|
979
1002
|
|
|
980
1003
|
create_req = api_pb2.SandboxCreateV2Request(
|
|
@@ -402,7 +402,9 @@ class _Sandbox(modal._object._Object):
|
|
|
402
402
|
region: typing.Union[str, collections.abc.Sequence[str], None] = None,
|
|
403
403
|
block_network: bool = False,
|
|
404
404
|
outbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
|
|
405
|
+
outbound_domain_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
|
|
405
406
|
inbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
|
|
407
|
+
i6pn: bool = False,
|
|
406
408
|
volumes: dict[
|
|
407
409
|
typing.Union[str, os.PathLike],
|
|
408
410
|
typing.Union[modal.volume._Volume, modal.cloud_bucket_mount._CloudBucketMount],
|
|
@@ -413,6 +415,7 @@ class _Sandbox(modal._object._Object):
|
|
|
413
415
|
unencrypted_ports: collections.abc.Sequence[int] = [],
|
|
414
416
|
proxy: typing.Optional[modal.proxy._Proxy] = None,
|
|
415
417
|
readiness_probe: typing.Optional[Probe] = None,
|
|
418
|
+
experimental_options: typing.Optional[dict[str, typing.Any]] = None,
|
|
416
419
|
include_oidc_identity_token: bool = False,
|
|
417
420
|
verbose: bool = False,
|
|
418
421
|
client: typing.Optional[modal.client._Client] = None,
|
|
@@ -420,13 +423,20 @@ class _Sandbox(modal._object._Object):
|
|
|
420
423
|
"""Create a sandbox using the V2 backend.
|
|
421
424
|
|
|
422
425
|
Supported features include exec, encrypted tunnels, wait/poll/terminate,
|
|
423
|
-
CPU and memory configuration, region placement,
|
|
424
|
-
(with static credentials via
|
|
425
|
-
identity tokens, proxies, and
|
|
426
|
+
CPU and memory configuration, region placement, private IPv6 networking
|
|
427
|
+
(i6pn), volumes, cloud bucket mounts (with static credentials via
|
|
428
|
+
`secret=...` or `oidc_auth_role_arn`), OIDC identity tokens, proxies, and
|
|
429
|
+
filesystem snapshots.
|
|
426
430
|
|
|
427
431
|
Features like tags, memory snapshots, network file systems, GPUs, and custom
|
|
428
432
|
domains are not supported.
|
|
429
433
|
|
|
434
|
+
Set `i6pn=True` to enable private IPv6 networking so sandboxes in the same
|
|
435
|
+
workspace can address each other directly at their `i6pn.modal.local`
|
|
436
|
+
address. i6pn only connects sandboxes co-located on the same routable
|
|
437
|
+
network, so pin every sandbox in the group to the same specific region
|
|
438
|
+
(e.g. `region="us-east-1"`).
|
|
439
|
+
|
|
430
440
|
V2 sandboxes created with this method are not currently returned by
|
|
431
441
|
`Sandbox.list()` and cannot be looked up with `Sandbox.from_name()`.
|
|
432
442
|
Store `sandbox.object_id` if you need to retrieve the sandbox later, and
|
|
@@ -1625,7 +1635,9 @@ class Sandbox(modal.object.Object):
|
|
|
1625
1635
|
region: typing.Union[str, collections.abc.Sequence[str], None] = None,
|
|
1626
1636
|
block_network: bool = False,
|
|
1627
1637
|
outbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
|
|
1638
|
+
outbound_domain_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
|
|
1628
1639
|
inbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
|
|
1640
|
+
i6pn: bool = False,
|
|
1629
1641
|
volumes: dict[
|
|
1630
1642
|
typing.Union[str, os.PathLike],
|
|
1631
1643
|
typing.Union[modal.volume.Volume, modal.cloud_bucket_mount.CloudBucketMount],
|
|
@@ -1636,6 +1648,7 @@ class Sandbox(modal.object.Object):
|
|
|
1636
1648
|
unencrypted_ports: collections.abc.Sequence[int] = [],
|
|
1637
1649
|
proxy: typing.Optional[modal.proxy.Proxy] = None,
|
|
1638
1650
|
readiness_probe: typing.Optional[Probe] = None,
|
|
1651
|
+
experimental_options: typing.Optional[dict[str, typing.Any]] = None,
|
|
1639
1652
|
include_oidc_identity_token: bool = False,
|
|
1640
1653
|
verbose: bool = False,
|
|
1641
1654
|
client: typing.Optional[modal.client.Client] = None,
|
|
@@ -1643,13 +1656,20 @@ class Sandbox(modal.object.Object):
|
|
|
1643
1656
|
"""Create a sandbox using the V2 backend.
|
|
1644
1657
|
|
|
1645
1658
|
Supported features include exec, encrypted tunnels, wait/poll/terminate,
|
|
1646
|
-
CPU and memory configuration, region placement,
|
|
1647
|
-
(with static credentials via
|
|
1648
|
-
identity tokens, proxies, and
|
|
1659
|
+
CPU and memory configuration, region placement, private IPv6 networking
|
|
1660
|
+
(i6pn), volumes, cloud bucket mounts (with static credentials via
|
|
1661
|
+
`secret=...` or `oidc_auth_role_arn`), OIDC identity tokens, proxies, and
|
|
1662
|
+
filesystem snapshots.
|
|
1649
1663
|
|
|
1650
1664
|
Features like tags, memory snapshots, network file systems, GPUs, and custom
|
|
1651
1665
|
domains are not supported.
|
|
1652
1666
|
|
|
1667
|
+
Set `i6pn=True` to enable private IPv6 networking so sandboxes in the same
|
|
1668
|
+
workspace can address each other directly at their `i6pn.modal.local`
|
|
1669
|
+
address. i6pn only connects sandboxes co-located on the same routable
|
|
1670
|
+
network, so pin every sandbox in the group to the same specific region
|
|
1671
|
+
(e.g. `region="us-east-1"`).
|
|
1672
|
+
|
|
1653
1673
|
V2 sandboxes created with this method are not currently returned by
|
|
1654
1674
|
`Sandbox.list()` and cannot be looked up with `Sandbox.from_name()`.
|
|
1655
1675
|
Store `sandbox.object_id` if you need to retrieve the sandbox later, and
|
|
@@ -1675,7 +1695,9 @@ class Sandbox(modal.object.Object):
|
|
|
1675
1695
|
region: typing.Union[str, collections.abc.Sequence[str], None] = None,
|
|
1676
1696
|
block_network: bool = False,
|
|
1677
1697
|
outbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
|
|
1698
|
+
outbound_domain_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
|
|
1678
1699
|
inbound_cidr_allowlist: typing.Optional[collections.abc.Sequence[str]] = None,
|
|
1700
|
+
i6pn: bool = False,
|
|
1679
1701
|
volumes: dict[
|
|
1680
1702
|
typing.Union[str, os.PathLike],
|
|
1681
1703
|
typing.Union[modal.volume.Volume, modal.cloud_bucket_mount.CloudBucketMount],
|
|
@@ -1686,6 +1708,7 @@ class Sandbox(modal.object.Object):
|
|
|
1686
1708
|
unencrypted_ports: collections.abc.Sequence[int] = [],
|
|
1687
1709
|
proxy: typing.Optional[modal.proxy.Proxy] = None,
|
|
1688
1710
|
readiness_probe: typing.Optional[Probe] = None,
|
|
1711
|
+
experimental_options: typing.Optional[dict[str, typing.Any]] = None,
|
|
1689
1712
|
include_oidc_identity_token: bool = False,
|
|
1690
1713
|
verbose: bool = False,
|
|
1691
1714
|
client: typing.Optional[modal.client.Client] = None,
|
|
@@ -1693,13 +1716,20 @@ class Sandbox(modal.object.Object):
|
|
|
1693
1716
|
"""Create a sandbox using the V2 backend.
|
|
1694
1717
|
|
|
1695
1718
|
Supported features include exec, encrypted tunnels, wait/poll/terminate,
|
|
1696
|
-
CPU and memory configuration, region placement,
|
|
1697
|
-
(with static credentials via
|
|
1698
|
-
identity tokens, proxies, and
|
|
1719
|
+
CPU and memory configuration, region placement, private IPv6 networking
|
|
1720
|
+
(i6pn), volumes, cloud bucket mounts (with static credentials via
|
|
1721
|
+
`secret=...` or `oidc_auth_role_arn`), OIDC identity tokens, proxies, and
|
|
1722
|
+
filesystem snapshots.
|
|
1699
1723
|
|
|
1700
1724
|
Features like tags, memory snapshots, network file systems, GPUs, and custom
|
|
1701
1725
|
domains are not supported.
|
|
1702
1726
|
|
|
1727
|
+
Set `i6pn=True` to enable private IPv6 networking so sandboxes in the same
|
|
1728
|
+
workspace can address each other directly at their `i6pn.modal.local`
|
|
1729
|
+
address. i6pn only connects sandboxes co-located on the same routable
|
|
1730
|
+
network, so pin every sandbox in the group to the same specific region
|
|
1731
|
+
(e.g. `region="us-east-1"`).
|
|
1732
|
+
|
|
1703
1733
|
V2 sandboxes created with this method are not currently returned by
|
|
1704
1734
|
`Sandbox.list()` and cannot be looked up with `Sandbox.from_name()`.
|
|
1705
1735
|
Store `sandbox.object_id` if you need to retrieve the sandbox later, and
|