modAL 1.6.3.dev4__tar.gz → 1.6.3.dev6__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.6.3.dev4 → modal-1.6.3.dev6}/PKG-INFO +1 -1
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_image.py +12 -3
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/grpc_testing.py +3 -1
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/builder/2025.06.txt +1 -1
- modal-1.6.3.dev6/modal/builder/PREVIEW.txt +18 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/builder/base-images.json +2 -11
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/client.pyi +2 -2
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/functions.pyi +6 -6
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/runner.py +10 -25
- modal-1.6.3.dev6/modal/sandbox/_common.py +1134 -0
- modal-1.6.3.dev6/modal/sandbox/_impl_persistent.py +470 -0
- modal-1.6.3.dev6/modal/sandbox/_impl_v1.py +523 -0
- modal-1.6.3.dev6/modal/sandbox/_impl_v2.py +623 -0
- modal-1.6.3.dev6/modal/sandbox/_sandbox.py +1492 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/sandbox/_sidecar.py +67 -214
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/sandbox/_task_command_router_client.py +80 -115
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/sandbox/sandbox.pyi +110 -314
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal.egg-info/SOURCES.txt +3 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/api_pb2.py +1426 -1426
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/api_pb2.pyi +43 -41
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_version/__init__.py +1 -1
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/pyproject.toml +2 -0
- modal-1.6.3.dev4/modal/builder/PREVIEW.txt +0 -21
- modal-1.6.3.dev4/modal/sandbox/_common.py +0 -248
- modal-1.6.3.dev4/modal/sandbox/_sandbox.py +0 -2596
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/LICENSE +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/README.md +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/__init__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/__main__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_billing.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_cluster.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_cluster.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_container_entrypoint.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_environments.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_function_variants.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_functions.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_grpc_client.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_ipython.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_load_context.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_location.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_logs.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_logs_manager.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_logs_manager.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_metrics.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_metrics.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_object.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_outbound_policy.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_outbound_policy.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_output/__init__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_output/manager.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_output/pty.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_output/rich.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_output/status.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_partial_function.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_resolver.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_resources.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_runtime/__init__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_runtime/asgi.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_runtime/execution_context.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_runtime/task_lifecycle_manager.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_runtime/telemetry.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_serialization.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_server.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_server.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_supports_logs.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_traceback.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_tunnel.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_tunnel.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_type_manager.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/__init__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/app_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/async_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/blob_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/browser_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/curl_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/deprecation.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/display_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/docker_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/function_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/git_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/hash_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/http_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/idle_countdown.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/logger.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/mount_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/name_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/package_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/proxy_support.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/shell_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_utils/time_utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_vendor/__init__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_vendor/tblib.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_vendor/version.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_watcher.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/_workspace.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/app.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/app.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/billing.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/billing.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/builder/2023.12.txt +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/builder/2024.04.txt +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/builder/2024.10.txt +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/builder/README.md +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/call_graph.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/__init__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/_download.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/_help.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/_logs.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/_stats.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/_traceback.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/app.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/billing.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/changelog.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/config.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/container.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/curl.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/dashboard.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/dict.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/endpoint.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/entry_point.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/environment.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/function.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/image.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/import_refs.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/logo.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/network_file_system.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/profile.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/queues.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/run.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/secret.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/selector.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/server.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/shell.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/skills.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/token.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/utils.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/volume.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cli/workspace.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/client.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cls.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cls.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cluster.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/cluster.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/config.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/container_process.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/container_process.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/dict.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/dict.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/environments.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/environments.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/exception.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/experimental/__init__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/experimental/_flash_container_entry.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/experimental/flash.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/experimental/flash.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/experimental/flash_server.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/experimental/flash_server.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/experimental/ipython.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/file_pattern_matcher.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/functions.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/image.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/image.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/io_streams.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/io_streams.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/mount.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/mount.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/network_file_system.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/network_file_system.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/object.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/object.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/output.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/parallel_map.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/parallel_map.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/partial_function.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/partial_function.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/proxy.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/proxy.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/py.typed +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/queue.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/queue.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/retries.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/runner.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/running_app.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/sandbox/__init__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/sandbox/_filesystem.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/sandbox/_snapshot.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/sandbox/sandbox.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/schedule.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/scheduler_placement.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/secret.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/secret.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/server.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/server.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/serving.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/serving.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/skills/modal/SKILL.md +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/stream_type.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/token_flow.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/token_flow.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/types.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/volume.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/volume.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/workspace.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal/workspace.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal.egg-info/requires.txt +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal.egg-info/top_level.txt +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_docs/__init__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_docs/mdmd/types.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_docs/reference_intro.md +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/__init__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/api_grpc.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/py.typed +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/modal_version/__main__.py +0 -0
- {modal-1.6.3.dev4 → modal-1.6.3.dev6}/setup.cfg +0 -0
|
@@ -212,23 +212,32 @@ def _dockerhub_python_version(
|
|
|
212
212
|
python_version = _validate_python_version(
|
|
213
213
|
python_version, builder_version, allow_free_threading=allow_free_threading, caller_name=caller_name
|
|
214
214
|
)
|
|
215
|
+
|
|
215
216
|
version_components = python_version.split(".")
|
|
216
217
|
|
|
217
|
-
#
|
|
218
|
-
|
|
218
|
+
# - Users that want a specific patch version for reproducibility guarantees can specify that up
|
|
219
|
+
# front
|
|
220
|
+
# - Users on the newest builder can force-rebuild to get the latest patch versions, allowing
|
|
221
|
+
# quick responses to upstream bug fixes / CVEs.
|
|
222
|
+
if builder_version > "2025.06" or len(version_components) > 2:
|
|
219
223
|
return python_version
|
|
220
224
|
|
|
221
225
|
# Otherwise, use the same series, but a specific micro version, corresponding to the latest
|
|
222
226
|
# available from https://hub.docker.com/_/python at the time of each image builder release.
|
|
223
227
|
# This allows us to publish one pre-built debian-slim image per Python series.
|
|
224
228
|
python_versions = _base_image_config("python", builder_version)
|
|
225
|
-
series_to_micro_version
|
|
229
|
+
series_to_micro_version: dict[str, str] = {}
|
|
230
|
+
for v in python_versions:
|
|
231
|
+
series, micro = v.rsplit(".", 1)
|
|
232
|
+
series_to_micro_version[series] = micro
|
|
226
233
|
python_series_requested = "{}.{}".format(*version_components)
|
|
227
234
|
micro_version = series_to_micro_version[python_series_requested]
|
|
228
235
|
return f"{python_series_requested}.{micro_version}"
|
|
229
236
|
|
|
230
237
|
|
|
231
238
|
def _base_image_config(group: str, builder_version: ImageBuilderVersion) -> Any:
|
|
239
|
+
# data["python"] does not include image builder versions more recent than `2025.06`, as those do
|
|
240
|
+
# not rely on hardcoded patch versions.
|
|
232
241
|
with open(LOCAL_REQUIREMENTS_DIR / "base-images.json") as f:
|
|
233
242
|
data = json.load(f)
|
|
234
243
|
return data[group][builder_version]
|
|
@@ -116,7 +116,7 @@ class InterceptionContext:
|
|
|
116
116
|
"""Adds one response payload to an expected queue of responses for a method.
|
|
117
117
|
|
|
118
118
|
These responses will be used once each instead of calling the MockServicer's
|
|
119
|
-
implementation of the method.
|
|
119
|
+
implementation of the method. An exception payload is raised instead of being sent.
|
|
120
120
|
|
|
121
121
|
The interception context will throw an exception on exit if not all of the added
|
|
122
122
|
responses have been consumed.
|
|
@@ -184,6 +184,8 @@ class InterceptionContext:
|
|
|
184
184
|
async def responder(servicer_self, stream):
|
|
185
185
|
await stream.recv_message() # get the input message so we can track that
|
|
186
186
|
for msg in next_response_messages:
|
|
187
|
+
if isinstance(msg, Exception):
|
|
188
|
+
raise msg
|
|
187
189
|
await stream.send_message(msg)
|
|
188
190
|
|
|
189
191
|
return responder
|
|
@@ -7,7 +7,7 @@ aiosignal==1.4.0 ; python_version >= "3.14"
|
|
|
7
7
|
async-timeout==5.0.1 ; python_version < "3.11"
|
|
8
8
|
attrs==25.3.0
|
|
9
9
|
cbor2==5.7.0
|
|
10
|
-
certifi==
|
|
10
|
+
certifi==2026.10.19
|
|
11
11
|
frozenlist==1.6.0
|
|
12
12
|
grpclib==0.4.8 ; python_version < "3.14"
|
|
13
13
|
grpclib==0.4.9 ; python_version >= "3.14"
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
aiohappyeyeballs==2.7.1
|
|
2
|
+
aiohttp==3.14.5
|
|
3
|
+
aiosignal==1.4.0
|
|
4
|
+
async-timeout==5.0.1 ; python_version < "3.11"
|
|
5
|
+
attrs==26.1.0
|
|
6
|
+
cbor2==5.9.0
|
|
7
|
+
certifi==2026.10.19
|
|
8
|
+
frozenlist==1.8.0
|
|
9
|
+
grpclib==0.4.9
|
|
10
|
+
h2==4.4.1
|
|
11
|
+
hpack==4.2.0
|
|
12
|
+
hyperframe==6.1.0
|
|
13
|
+
idna==3.20
|
|
14
|
+
multidict==7.1.0
|
|
15
|
+
propcache==0.5.4
|
|
16
|
+
protobuf==7.36.2
|
|
17
|
+
typing_extensions==4.16.0
|
|
18
|
+
yarl==1.25.1
|
|
@@ -1,21 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"debian": {
|
|
3
|
-
"PREVIEW": "
|
|
3
|
+
"PREVIEW": "trixie",
|
|
4
4
|
"2025.06": "bookworm",
|
|
5
5
|
"2024.10": "bookworm",
|
|
6
6
|
"2024.04": "bookworm",
|
|
7
7
|
"2023.12": "bullseye"
|
|
8
8
|
},
|
|
9
9
|
"python": {
|
|
10
|
-
"PREVIEW": [
|
|
11
|
-
"3.9.22",
|
|
12
|
-
"3.10.17",
|
|
13
|
-
"3.11.12",
|
|
14
|
-
"3.12.10",
|
|
15
|
-
"3.13.3",
|
|
16
|
-
"3.14.2",
|
|
17
|
-
"3.15.0"
|
|
18
|
-
],
|
|
19
10
|
"2025.06": [
|
|
20
11
|
"3.9.22",
|
|
21
12
|
"3.10.17",
|
|
@@ -46,7 +37,7 @@
|
|
|
46
37
|
]
|
|
47
38
|
},
|
|
48
39
|
"micromamba": {
|
|
49
|
-
"PREVIEW": "2.
|
|
40
|
+
"PREVIEW": "2.9.0-debian13-slim",
|
|
50
41
|
"2025.06": "2.1.1-debian12-slim",
|
|
51
42
|
"2024.10": "1.5.10-bookworm-slim",
|
|
52
43
|
"2024.04": "1.5.8-bookworm-slim",
|
|
@@ -80,7 +80,7 @@ class _Client:
|
|
|
80
80
|
server_url: str,
|
|
81
81
|
client_type: int,
|
|
82
82
|
credentials: typing.Optional[tuple[str, str]],
|
|
83
|
-
version: str = "1.6.3.
|
|
83
|
+
version: str = "1.6.3.dev6",
|
|
84
84
|
*,
|
|
85
85
|
oauth_credentials: typing.Optional[_OAuthCredentials] = None,
|
|
86
86
|
):
|
|
@@ -290,7 +290,7 @@ class Client:
|
|
|
290
290
|
server_url: str,
|
|
291
291
|
client_type: int,
|
|
292
292
|
credentials: typing.Optional[tuple[str, str]],
|
|
293
|
-
version: str = "1.6.3.
|
|
293
|
+
version: str = "1.6.3.dev6",
|
|
294
294
|
*,
|
|
295
295
|
oauth_credentials: typing.Optional[_OAuthCredentials] = None,
|
|
296
296
|
):
|
|
@@ -619,7 +619,7 @@ class Function(
|
|
|
619
619
|
|
|
620
620
|
_call_generator: ___call_generator_spec
|
|
621
621
|
|
|
622
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
622
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
623
623
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
624
624
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result.
|
|
625
625
|
|
|
@@ -644,7 +644,7 @@ class Function(
|
|
|
644
644
|
"""
|
|
645
645
|
...
|
|
646
646
|
|
|
647
|
-
remote: __remote_spec[modal._functions.
|
|
647
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P]
|
|
648
648
|
|
|
649
649
|
class __remote_gen_spec(typing_extensions.Protocol):
|
|
650
650
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -694,7 +694,7 @@ class Function(
|
|
|
694
694
|
"""
|
|
695
695
|
...
|
|
696
696
|
|
|
697
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
697
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
698
698
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
699
699
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
700
700
|
|
|
@@ -727,7 +727,7 @@ class Function(
|
|
|
727
727
|
"""
|
|
728
728
|
...
|
|
729
729
|
|
|
730
|
-
_experimental_spawn: ___experimental_spawn_spec[modal._functions.
|
|
730
|
+
_experimental_spawn: ___experimental_spawn_spec[modal._functions.ReturnType, modal._functions.P]
|
|
731
731
|
|
|
732
732
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
|
|
733
733
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
|
|
@@ -735,7 +735,7 @@ class Function(
|
|
|
735
735
|
|
|
736
736
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
|
|
737
737
|
|
|
738
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
738
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
739
739
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
740
740
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
741
741
|
|
|
@@ -768,7 +768,7 @@ class Function(
|
|
|
768
768
|
"""
|
|
769
769
|
...
|
|
770
770
|
|
|
771
|
-
spawn: __spawn_spec[modal._functions.
|
|
771
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P]
|
|
772
772
|
|
|
773
773
|
@property
|
|
774
774
|
def _raw_f_(self) -> collections.abc.Callable[..., typing.Any]: ...
|
|
@@ -43,7 +43,9 @@ from .exception import (
|
|
|
43
43
|
)
|
|
44
44
|
from .output import OutputManager
|
|
45
45
|
from .running_app import RunningApp, running_app_from_layout
|
|
46
|
-
from .sandbox.
|
|
46
|
+
from .sandbox._common import SandboxCreateArgs
|
|
47
|
+
from .sandbox._impl_v2 import SandboxImplV2
|
|
48
|
+
from .sandbox._sandbox import _Sandbox, impl_class_for_create_args
|
|
47
49
|
from .secret import _Secret
|
|
48
50
|
from .stream_type import StreamType
|
|
49
51
|
|
|
@@ -758,21 +760,10 @@ async def _interactive_shell(
|
|
|
758
760
|
for option in ("gpu", "network_file_systems"):
|
|
759
761
|
if kwargs.pop(option, None):
|
|
760
762
|
raise InvalidError(f"`{option}` is not supported for V2 sandboxes")
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
secrets=secrets,
|
|
766
|
-
**kwargs,
|
|
767
|
-
)
|
|
768
|
-
else:
|
|
769
|
-
sandbox = await _Sandbox._create(
|
|
770
|
-
"sleep",
|
|
771
|
-
"100000",
|
|
772
|
-
app=_app,
|
|
773
|
-
secrets=secrets,
|
|
774
|
-
**kwargs,
|
|
775
|
-
)
|
|
763
|
+
create_args = SandboxCreateArgs(args=("sleep", "100000"), secrets=secrets, **kwargs)
|
|
764
|
+
impl_cls = SandboxImplV2 if v2 else impl_class_for_create_args(create_args)
|
|
765
|
+
impl, metadata = await impl_cls.create(create_args, app=_app, client=None)
|
|
766
|
+
sandbox = _Sandbox._from_impl(impl, metadata)
|
|
776
767
|
|
|
777
768
|
# Re-enable quiet mode before starting the interactive session
|
|
778
769
|
output_mgr.set_quiet_mode(True)
|
|
@@ -790,15 +781,9 @@ async def _interactive_shell(
|
|
|
790
781
|
await container_process.wait()
|
|
791
782
|
except InteractiveTimeoutError:
|
|
792
783
|
# Check on status of Sandbox. It may have crashed, causing connection failure.
|
|
793
|
-
|
|
794
|
-
if sandbox.
|
|
795
|
-
|
|
796
|
-
auth_token = await sandbox._client._auth_token_manager.get_token()
|
|
797
|
-
resp = await sandbox._client._stub.SandboxWaitV2(req, metadata=[("x-modal-auth-token", auth_token)])
|
|
798
|
-
else:
|
|
799
|
-
resp = await sandbox._client._stub.SandboxWait(req)
|
|
800
|
-
if resp.result.exception:
|
|
801
|
-
raise RemoteError(resp.result.exception)
|
|
784
|
+
await sandbox.poll()
|
|
785
|
+
if sandbox._impl.result is not None and sandbox._impl.result.exception:
|
|
786
|
+
raise RemoteError(sandbox._impl.result.exception)
|
|
802
787
|
else:
|
|
803
788
|
raise
|
|
804
789
|
|