modAL 1.6.3.dev7__tar.gz → 1.6.3.dev8__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.dev7 → modal-1.6.3.dev8}/PKG-INFO +1 -1
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_image.py +45 -5
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/client.pyi +2 -2
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/functions.pyi +6 -6
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/api_pb2.py +1376 -1376
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/api_pb2.pyi +20 -5
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_version/__init__.py +1 -1
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/LICENSE +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/README.md +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/__init__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/__main__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_billing.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_cluster.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_cluster.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_container_entrypoint.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_environments.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_function_variants.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_functions.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_grpc_client.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_ipython.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_load_context.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_location.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_logs.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_logs_manager.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_logs_manager.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_metrics.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_metrics.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_object.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_outbound_policy.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_outbound_policy.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_output/__init__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_output/manager.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_output/pty.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_output/rich.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_output/status.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_partial_function.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_resolver.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_resources.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/__init__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/asgi.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/execution_context.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/task_lifecycle_manager.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/telemetry.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_serialization.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_server.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_server.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_supports_logs.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_traceback.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_tunnel.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_tunnel.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_type_manager.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/__init__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/app_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/async_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/blob_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/browser_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/curl_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/deprecation.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/display_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/docker_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/function_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/git_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/hash_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/http_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/idle_countdown.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/logger.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/mount_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/name_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/package_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/proxy_support.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/shell_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_utils/time_utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_vendor/__init__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_vendor/tblib.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_vendor/version.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_watcher.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/_workspace.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/app.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/app.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/billing.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/billing.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/2023.12.txt +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/2024.04.txt +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/2024.10.txt +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/2025.06.txt +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/README.md +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/builder/base-images.json +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/call_graph.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/__init__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/_download.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/_help.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/_logs.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/_stats.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/_traceback.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/app.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/billing.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/changelog.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/config.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/container.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/curl.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/dashboard.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/dict.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/endpoint.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/entry_point.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/environment.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/function.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/image.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/import_refs.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/logo.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/network_file_system.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/profile.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/queues.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/run.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/secret.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/selector.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/server.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/shell.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/skills.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/token.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/utils.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/volume.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cli/workspace.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/client.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cls.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cls.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cluster.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/cluster.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/config.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/container_process.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/container_process.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/dict.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/dict.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/environments.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/environments.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/exception.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/__init__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/_flash_container_entry.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/flash.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/flash.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/flash_server.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/flash_server.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/experimental/ipython.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/file_pattern_matcher.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/functions.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/image.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/image.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/io_streams.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/io_streams.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/mount.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/mount.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/network_file_system.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/network_file_system.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/object.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/object.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/output.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/parallel_map.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/parallel_map.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/partial_function.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/partial_function.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/proxy.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/proxy.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/py.typed +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/queue.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/queue.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/retries.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/runner.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/runner.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/running_app.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/__init__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_common.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_filesystem.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_impl_persistent.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_impl_v1.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_impl_v2.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_sandbox.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_sidecar.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_snapshot.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/_task_command_router_client.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/sandbox.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/sandbox/sandbox.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/schedule.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/scheduler_placement.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/secret.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/secret.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/server.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/server.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/serving.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/serving.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/skills/modal/SKILL.md +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/stream_type.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/token_flow.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/token_flow.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/types.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/volume.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/volume.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/workspace.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal/workspace.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal.egg-info/requires.txt +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal.egg-info/top_level.txt +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/__init__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/mdmd/types.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_docs/reference_intro.md +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/__init__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/api_grpc.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/py.typed +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/modal_version/__main__.py +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/pyproject.toml +0 -0
- {modal-1.6.3.dev7 → modal-1.6.3.dev8}/setup.cfg +0 -0
|
@@ -349,6 +349,13 @@ def _get_image_builder_version(server_version: ImageBuilderVersion) -> ImageBuil
|
|
|
349
349
|
return version
|
|
350
350
|
|
|
351
351
|
|
|
352
|
+
async def _resolve_image_builder_version(load_context: LoadContext) -> ImageBuilderVersion:
|
|
353
|
+
environment = await _get_environment_cached(load_context.environment_name or "", load_context.client)
|
|
354
|
+
# A bit hacky,but assume that the environment provides a valid builder version
|
|
355
|
+
image_builder_version = cast(ImageBuilderVersion, environment._settings.image_builder_version)
|
|
356
|
+
return _get_image_builder_version(image_builder_version)
|
|
357
|
+
|
|
358
|
+
|
|
352
359
|
def _create_context_mount(
|
|
353
360
|
docker_commands: Sequence[str],
|
|
354
361
|
ignore_fn: Callable[[Path], bool],
|
|
@@ -663,10 +670,7 @@ class _Image(_Object, type_prefix="im"):
|
|
|
663
670
|
|
|
664
671
|
async def _load(self: _Image, resolver: Resolver, load_context: LoadContext, existing_object_id: str | None):
|
|
665
672
|
assert load_context.app_id # type narrowing
|
|
666
|
-
|
|
667
|
-
# A bit hacky,but assume that the environment provides a valid builder version
|
|
668
|
-
image_builder_version = cast(ImageBuilderVersion, environment._settings.image_builder_version)
|
|
669
|
-
builder_version = _get_image_builder_version(image_builder_version)
|
|
673
|
+
builder_version = await _resolve_image_builder_version(load_context)
|
|
670
674
|
|
|
671
675
|
context_mount = context_mount_function(builder_version) if context_mount_function else None
|
|
672
676
|
if context_mount:
|
|
@@ -2289,12 +2293,48 @@ class _Image(_Object, type_prefix="im"):
|
|
|
2289
2293
|
context_files = {CONTAINER_REQUIREMENTS_PATH: _get_modal_requirements_path(version, add_python)}
|
|
2290
2294
|
return DockerfileSpec(commands=commands, context_files=context_files)
|
|
2291
2295
|
|
|
2292
|
-
|
|
2296
|
+
single_layer_image = _Image._from_args(
|
|
2293
2297
|
dockerfile_function=build_dockerfile,
|
|
2294
2298
|
context_mount_function=context_mount_function,
|
|
2295
2299
|
force_build=force_build,
|
|
2296
2300
|
**kwargs,
|
|
2297
2301
|
)
|
|
2302
|
+
if not add_python:
|
|
2303
|
+
return single_layer_image
|
|
2304
|
+
|
|
2305
|
+
# Builder versions after 2025.06 put the registry image and the standalone Python in separate layers.
|
|
2306
|
+
registry_image = _Image._from_args(
|
|
2307
|
+
dockerfile_function=lambda version: DockerfileSpec(commands=[f"FROM {tag}"], context_files={}),
|
|
2308
|
+
image_registry_config=kwargs.get("image_registry_config"),
|
|
2309
|
+
force_build=force_build,
|
|
2310
|
+
)
|
|
2311
|
+
|
|
2312
|
+
def build_python_dockerfile(version: ImageBuilderVersion) -> DockerfileSpec:
|
|
2313
|
+
commands = _Image._registry_setup_commands("base", version, setup_dockerfile_commands, add_python)
|
|
2314
|
+
return DockerfileSpec(commands=commands, context_files={})
|
|
2315
|
+
|
|
2316
|
+
split_image = _Image._from_args(
|
|
2317
|
+
base_images={"base": registry_image},
|
|
2318
|
+
dockerfile_function=build_python_dockerfile,
|
|
2319
|
+
context_mount_function=context_mount_function,
|
|
2320
|
+
force_build=force_build,
|
|
2321
|
+
**kwargs,
|
|
2322
|
+
)
|
|
2323
|
+
|
|
2324
|
+
async def _load(self: _Image, resolver: Resolver, load_context: LoadContext, existing_object_id: str | None):
|
|
2325
|
+
builder_version = await _resolve_image_builder_version(load_context)
|
|
2326
|
+
# Validate before the registry base image of split_image is built.
|
|
2327
|
+
_validate_python_version(
|
|
2328
|
+
add_python, builder_version, allow_micro_granularity=False, allow_free_threading=True
|
|
2329
|
+
)
|
|
2330
|
+
image = split_image if builder_version > "2025.06" else single_layer_image
|
|
2331
|
+
await resolver.load(image, load_context)
|
|
2332
|
+
self._hydrate_from_other(image)
|
|
2333
|
+
self._serve_mounts = image._serve_mounts
|
|
2334
|
+
|
|
2335
|
+
obj = _Image._from_loader(_load, f"Image.from_registry({tag!r})", load_context_overrides=LoadContext.empty())
|
|
2336
|
+
obj.force_build = force_build
|
|
2337
|
+
return obj
|
|
2298
2338
|
|
|
2299
2339
|
@staticmethod
|
|
2300
2340
|
def from_gcp_artifact_registry(
|
|
@@ -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.dev8",
|
|
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.dev8",
|
|
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[P_INNER, ReturnType_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.P, modal._functions.ReturnType]
|
|
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[P_INNER, ReturnType_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.P, modal._functions.ReturnType]
|
|
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[P_INNER, ReturnType_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.P, modal._functions.ReturnType]
|
|
772
772
|
|
|
773
773
|
@property
|
|
774
774
|
def _raw_f_(self) -> collections.abc.Callable[..., typing.Any]: ...
|