modal 1.5.6.dev31__tar.gz → 1.6.0__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.
Potentially problematic release.
This version of modal might be problematic. Click here for more details.
- {modal-1.5.6.dev31 → modal-1.6.0}/PKG-INFO +1 -1
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_functions.py +2 -2
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_partial_function.py +1 -1
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_server.py +11 -9
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_server.pyi +23 -17
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/client.pyi +2 -2
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/functions.pyi +6 -6
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/partial_function.pyi +1 -1
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/server.pyi +1 -1
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/types.py +4 -1
- {modal-1.5.6.dev31 → modal-1.6.0}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_version/__init__.py +1 -1
- {modal-1.5.6.dev31 → modal-1.6.0}/LICENSE +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/README.md +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/__init__.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/__main__.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_billing.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_cluster.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_cluster.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_container_entrypoint.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_environments.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_function_variants.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_grpc_client.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_image.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_ipython.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_load_context.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_location.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_logs.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_logs_manager.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_logs_manager.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_object.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_outbound_policy.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_outbound_policy.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_output/__init__.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_output/manager.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_output/pty.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_output/rich.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_output/status.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_resolver.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_resources.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_runtime/__init__.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_runtime/asgi.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_runtime/execution_context.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_runtime/task_lifecycle_manager.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_runtime/telemetry.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_serialization.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_supports_logs.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_traceback.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_tunnel.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_tunnel.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_type_manager.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/__init__.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/app_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/async_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/blob_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/browser_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/curl_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/deprecation.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/display_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/docker_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/function_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/git_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/hash_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/http_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/idle_countdown.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/logger.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/mount_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/name_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/package_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/proxy_support.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/shell_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_utils/time_utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_vendor/__init__.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_vendor/tblib.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_vendor/version.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_watcher.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/_workspace.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/app.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/app.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/billing.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/billing.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/builder/2023.12.txt +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/builder/2024.04.txt +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/builder/2024.10.txt +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/builder/2025.06.txt +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/builder/README.md +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/builder/base-images.json +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/call_graph.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/__init__.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/_download.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/_help.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/_logs.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/_stats.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/_traceback.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/app.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/billing.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/changelog.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/config.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/container.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/curl.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/dashboard.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/dict.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/endpoint.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/entry_point.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/environment.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/function.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/image.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/import_refs.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/logo.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/network_file_system.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/profile.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/queues.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/run.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/secret.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/selector.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/server.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/shell.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/skills.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/token.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/utils.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/volume.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cli/workspace.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/client.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cls.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cls.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cluster.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/cluster.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/config.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/container_process.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/container_process.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/dict.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/dict.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/environments.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/environments.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/exception.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/experimental/__init__.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/experimental/_flash_container_entry.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/experimental/flash.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/experimental/flash.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/experimental/flash_server.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/experimental/flash_server.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/experimental/ipython.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/file_pattern_matcher.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/functions.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/image.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/image.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/io_streams.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/io_streams.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/mount.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/mount.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/network_file_system.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/network_file_system.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/object.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/object.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/output.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/parallel_map.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/parallel_map.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/partial_function.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/proxy.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/proxy.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/py.typed +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/queue.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/queue.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/retries.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/runner.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/runner.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/running_app.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/sandbox.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/sandbox.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/sandbox_fs.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/sandbox_fs.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/schedule.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/scheduler_placement.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/secret.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/secret.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/server.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/serving.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/serving.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/skills/modal/SKILL.md +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/snapshot.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/snapshot.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/stream_type.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/token_flow.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/token_flow.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/volume.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/volume.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/workspace.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal/workspace.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal.egg-info/requires.txt +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal.egg-info/top_level.txt +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_docs/__init__.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_docs/mdmd/types.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_docs/reference_intro.md +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/__init__.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/api_grpc.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/api_pb2.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/api_pb2.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/api_pb2_grpc.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/api_pb2_grpc.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/modal_api_grpc.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/py.typed +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/modal_version/__main__.py +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/pyproject.toml +0 -0
- {modal-1.5.6.dev31 → modal-1.6.0}/setup.cfg +0 -0
|
@@ -1749,14 +1749,14 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
|
1749
1749
|
return list(self._experimental_flash_urls) if self._experimental_flash_urls else None
|
|
1750
1750
|
|
|
1751
1751
|
async def _fetch_flash_auth_token(self, retry: Retry) -> str:
|
|
1752
|
-
resp = await self.client.
|
|
1752
|
+
resp = await self.client._stub.FunctionGetFlashAuthToken(
|
|
1753
1753
|
api_pb2.FunctionGetFlashAuthTokenRequest(function_id=self.object_id), retry=retry
|
|
1754
1754
|
)
|
|
1755
1755
|
return resp.token
|
|
1756
1756
|
|
|
1757
1757
|
async def _get_flash_auth_token(self) -> str:
|
|
1758
1758
|
if self._flash_token_manager is None:
|
|
1759
|
-
self._flash_token_manager = _AuthTokenManager(self.client.
|
|
1759
|
+
self._flash_token_manager = _AuthTokenManager(self.client._stub, fetch=self._fetch_flash_auth_token)
|
|
1760
1760
|
return await self._flash_token_manager.get_token()
|
|
1761
1761
|
|
|
1762
1762
|
def _apply_dynamic_config(
|
|
@@ -732,7 +732,7 @@ def _sessioned() -> Callable[
|
|
|
732
732
|
[Callable[P, ReturnType] | _PartialFunction[P, ReturnType, ReturnType]],
|
|
733
733
|
_PartialFunction[P, ReturnType, ReturnType],
|
|
734
734
|
]:
|
|
735
|
-
"""Decorator that enables sessions on a Server.
|
|
735
|
+
"""Decorator that enables sticky sessions on a Server.
|
|
736
736
|
|
|
737
737
|
Every request must carry a session token obtained from a session start request; requests with the same token are
|
|
738
738
|
routed to the same container until the session is idle for `idle_timeout` seconds or explicitly terminated. A
|
|
@@ -113,7 +113,7 @@ class _Server:
|
|
|
113
113
|
|
|
114
114
|
@property
|
|
115
115
|
def sessions(self) -> "_ServerSessionsManager":
|
|
116
|
-
"""Start and terminate sessions on a Server decorated with `@modal.sessioned()`."""
|
|
116
|
+
"""Start and terminate sticky sessions on a Server decorated with `@modal.sessioned()`."""
|
|
117
117
|
return _ServerSessionsManager(self)
|
|
118
118
|
|
|
119
119
|
async def info(self, *, refresh: bool = False) -> ServerInfo:
|
|
@@ -160,7 +160,7 @@ class _Server:
|
|
|
160
160
|
This interface is experimental and may change or be removed without warning.
|
|
161
161
|
"""
|
|
162
162
|
service_function = self._get_service_function()
|
|
163
|
-
response = await service_function.client.
|
|
163
|
+
response = await service_function.client._stub.FlashContainerList(
|
|
164
164
|
api_pb2.FlashContainerListRequest(function_id=service_function.object_id)
|
|
165
165
|
)
|
|
166
166
|
return [
|
|
@@ -473,13 +473,13 @@ class _Server:
|
|
|
473
473
|
request.until.FromDatetime(until)
|
|
474
474
|
if container:
|
|
475
475
|
request.container_id = container
|
|
476
|
-
stats = await self._get_service_function().client.
|
|
476
|
+
stats = await self._get_service_function().client._stub.ServerGetTimeRangeStats(request)
|
|
477
477
|
return ServerStats._from_proto(stats)
|
|
478
478
|
|
|
479
479
|
|
|
480
480
|
@retry(n_attempts=5, base_delay=0.5, attempt_timeout=65, total_timeout=200)
|
|
481
481
|
async def _post_session_control(url: str, headers: dict[str, str]) -> tuple[int, str, str]:
|
|
482
|
-
"""POST to a session control endpoint, retrying connection errors and 5xx. Returns (status, reason, body)."""
|
|
482
|
+
"""POST to a sticky session control endpoint, retrying connection errors and 5xx. Returns (status, reason, body)."""
|
|
483
483
|
async with ClientSessionRegistry.get_session().post(url, headers=headers) as resp:
|
|
484
484
|
body = await resp.text()
|
|
485
485
|
if resp.status >= 400:
|
|
@@ -501,11 +501,11 @@ class _ServerSessionsManager:
|
|
|
501
501
|
raise InvalidError("`sessions` requires `@modal.sessioned()` on the Server.")
|
|
502
502
|
|
|
503
503
|
async def start(self, idle_timeout: int = 600) -> ServerSessionCredentials:
|
|
504
|
-
"""Start a session and return its ID and token.
|
|
504
|
+
"""Start a sticky session and return its ID and token.
|
|
505
505
|
|
|
506
|
-
Requests to the server URL that carry the returned token are routed to the same container until the
|
|
507
|
-
has had no connections for `idle_timeout` seconds or is terminated. A container won't be scaled down
|
|
508
|
-
as it holds a live session.
|
|
506
|
+
Requests to the server URL that carry the returned token are routed to the same container until the
|
|
507
|
+
session has had no connections for `idle_timeout` seconds or is terminated. A container won't be scaled down
|
|
508
|
+
for as long as it holds a live session.
|
|
509
509
|
|
|
510
510
|
Args:
|
|
511
511
|
idle_timeout: Seconds without an in-flight request before the session ends.
|
|
@@ -550,7 +550,9 @@ class _ServerSessionsManager:
|
|
|
550
550
|
raise ExecutionError("Failed to start session: unexpected response from server") from None
|
|
551
551
|
|
|
552
552
|
async def terminate(self, token: str) -> None:
|
|
553
|
-
"""Terminate a session.
|
|
553
|
+
"""Terminate a sticky session.
|
|
554
|
+
|
|
555
|
+
New requests to it will be rejected. The container continues serving other sessions.
|
|
554
556
|
|
|
555
557
|
Args:
|
|
556
558
|
token: The `token` of the `ServerSessionCredentials` to terminate.
|
|
@@ -67,7 +67,7 @@ class _Server:
|
|
|
67
67
|
|
|
68
68
|
@property
|
|
69
69
|
def sessions(self) -> _ServerSessionsManager:
|
|
70
|
-
"""Start and terminate sessions on a Server decorated with `@modal.sessioned()`."""
|
|
70
|
+
"""Start and terminate sticky sessions on a Server decorated with `@modal.sessioned()`."""
|
|
71
71
|
...
|
|
72
72
|
|
|
73
73
|
async def info(self, *, refresh: bool = False) -> modal.types.ServerInfo:
|
|
@@ -272,7 +272,7 @@ class _Server:
|
|
|
272
272
|
...
|
|
273
273
|
|
|
274
274
|
async def _post_session_control(url: str, headers: dict[str, str]) -> tuple[int, str, str]:
|
|
275
|
-
"""POST to a session control endpoint, retrying connection errors and 5xx. Returns (status, reason, body)."""
|
|
275
|
+
"""POST to a sticky session control endpoint, retrying connection errors and 5xx. Returns (status, reason, body)."""
|
|
276
276
|
...
|
|
277
277
|
|
|
278
278
|
class _ServerSessionsManager:
|
|
@@ -283,11 +283,11 @@ class _ServerSessionsManager:
|
|
|
283
283
|
|
|
284
284
|
def _validate(self) -> None: ...
|
|
285
285
|
async def start(self, idle_timeout: int = 600) -> modal.types.ServerSessionCredentials:
|
|
286
|
-
"""Start a session and return its ID and token.
|
|
286
|
+
"""Start a sticky session and return its ID and token.
|
|
287
287
|
|
|
288
|
-
Requests to the server URL that carry the returned token are routed to the same container until the
|
|
289
|
-
has had no connections for `idle_timeout` seconds or is terminated. A container won't be scaled down
|
|
290
|
-
as it holds a live session.
|
|
288
|
+
Requests to the server URL that carry the returned token are routed to the same container until the
|
|
289
|
+
session has had no connections for `idle_timeout` seconds or is terminated. A container won't be scaled down
|
|
290
|
+
for as long as it holds a live session.
|
|
291
291
|
|
|
292
292
|
Args:
|
|
293
293
|
idle_timeout: Seconds without an in-flight request before the session ends.
|
|
@@ -308,7 +308,9 @@ class _ServerSessionsManager:
|
|
|
308
308
|
...
|
|
309
309
|
|
|
310
310
|
async def terminate(self, token: str) -> None:
|
|
311
|
-
"""Terminate a session.
|
|
311
|
+
"""Terminate a sticky session.
|
|
312
|
+
|
|
313
|
+
New requests to it will be rejected. The container continues serving other sessions.
|
|
312
314
|
|
|
313
315
|
Args:
|
|
314
316
|
token: The `token` of the `ServerSessionCredentials` to terminate.
|
|
@@ -334,11 +336,11 @@ class ServerSessionsManager:
|
|
|
334
336
|
|
|
335
337
|
class __start_spec(typing_extensions.Protocol):
|
|
336
338
|
def __call__(self, /, idle_timeout: int = 600) -> modal.types.ServerSessionCredentials:
|
|
337
|
-
"""Start a session and return its ID and token.
|
|
339
|
+
"""Start a sticky session and return its ID and token.
|
|
338
340
|
|
|
339
|
-
Requests to the server URL that carry the returned token are routed to the same container until the
|
|
340
|
-
has had no connections for `idle_timeout` seconds or is terminated. A container won't be scaled down
|
|
341
|
-
as it holds a live session.
|
|
341
|
+
Requests to the server URL that carry the returned token are routed to the same container until the
|
|
342
|
+
session has had no connections for `idle_timeout` seconds or is terminated. A container won't be scaled down
|
|
343
|
+
for as long as it holds a live session.
|
|
342
344
|
|
|
343
345
|
Args:
|
|
344
346
|
idle_timeout: Seconds without an in-flight request before the session ends.
|
|
@@ -359,11 +361,11 @@ class ServerSessionsManager:
|
|
|
359
361
|
...
|
|
360
362
|
|
|
361
363
|
async def aio(self, /, idle_timeout: int = 600) -> modal.types.ServerSessionCredentials:
|
|
362
|
-
"""Start a session and return its ID and token.
|
|
364
|
+
"""Start a sticky session and return its ID and token.
|
|
363
365
|
|
|
364
|
-
Requests to the server URL that carry the returned token are routed to the same container until the
|
|
365
|
-
has had no connections for `idle_timeout` seconds or is terminated. A container won't be scaled down
|
|
366
|
-
as it holds a live session.
|
|
366
|
+
Requests to the server URL that carry the returned token are routed to the same container until the
|
|
367
|
+
session has had no connections for `idle_timeout` seconds or is terminated. A container won't be scaled down
|
|
368
|
+
for as long as it holds a live session.
|
|
367
369
|
|
|
368
370
|
Args:
|
|
369
371
|
idle_timeout: Seconds without an in-flight request before the session ends.
|
|
@@ -387,7 +389,9 @@ class ServerSessionsManager:
|
|
|
387
389
|
|
|
388
390
|
class __terminate_spec(typing_extensions.Protocol):
|
|
389
391
|
def __call__(self, /, token: str) -> None:
|
|
390
|
-
"""Terminate a session.
|
|
392
|
+
"""Terminate a sticky session.
|
|
393
|
+
|
|
394
|
+
New requests to it will be rejected. The container continues serving other sessions.
|
|
391
395
|
|
|
392
396
|
Args:
|
|
393
397
|
token: The `token` of the `ServerSessionCredentials` to terminate.
|
|
@@ -404,7 +408,9 @@ class ServerSessionsManager:
|
|
|
404
408
|
...
|
|
405
409
|
|
|
406
410
|
async def aio(self, /, token: str) -> None:
|
|
407
|
-
"""Terminate a session.
|
|
411
|
+
"""Terminate a sticky session.
|
|
412
|
+
|
|
413
|
+
New requests to it will be rejected. The container continues serving other sessions.
|
|
408
414
|
|
|
409
415
|
Args:
|
|
410
416
|
token: The `token` of the `ServerSessionCredentials` to terminate.
|
|
@@ -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.
|
|
83
|
+
version: str = "1.6.0",
|
|
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.
|
|
293
|
+
version: str = "1.6.0",
|
|
294
294
|
*,
|
|
295
295
|
oauth_credentials: typing.Optional[_OAuthCredentials] = None,
|
|
296
296
|
):
|
|
@@ -613,7 +613,7 @@ class Function(
|
|
|
613
613
|
|
|
614
614
|
_call_generator: ___call_generator_spec
|
|
615
615
|
|
|
616
|
-
class __remote_spec(typing_extensions.Protocol[
|
|
616
|
+
class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
617
617
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
|
|
618
618
|
"""Calls the function remotely, executing it with the given arguments and returning the execution's result.
|
|
619
619
|
|
|
@@ -638,7 +638,7 @@ class Function(
|
|
|
638
638
|
"""
|
|
639
639
|
...
|
|
640
640
|
|
|
641
|
-
remote: __remote_spec[modal._functions.
|
|
641
|
+
remote: __remote_spec[modal._functions.ReturnType, modal._functions.P]
|
|
642
642
|
|
|
643
643
|
class __remote_gen_spec(typing_extensions.Protocol):
|
|
644
644
|
def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
|
|
@@ -688,7 +688,7 @@ class Function(
|
|
|
688
688
|
"""
|
|
689
689
|
...
|
|
690
690
|
|
|
691
|
-
class ___experimental_spawn_spec(typing_extensions.Protocol[
|
|
691
|
+
class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
692
692
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
693
693
|
"""[Experimental] Calls the function with the given arguments, without waiting for the results.
|
|
694
694
|
|
|
@@ -721,7 +721,7 @@ class Function(
|
|
|
721
721
|
"""
|
|
722
722
|
...
|
|
723
723
|
|
|
724
|
-
_experimental_spawn: ___experimental_spawn_spec[modal._functions.
|
|
724
|
+
_experimental_spawn: ___experimental_spawn_spec[modal._functions.ReturnType, modal._functions.P]
|
|
725
725
|
|
|
726
726
|
class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER]):
|
|
727
727
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> None: ...
|
|
@@ -729,7 +729,7 @@ class Function(
|
|
|
729
729
|
|
|
730
730
|
_spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P]
|
|
731
731
|
|
|
732
|
-
class __spawn_spec(typing_extensions.Protocol[
|
|
732
|
+
class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER]):
|
|
733
733
|
def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
|
|
734
734
|
"""Calls the function with the given arguments, without waiting for the results.
|
|
735
735
|
|
|
@@ -762,7 +762,7 @@ class Function(
|
|
|
762
762
|
"""
|
|
763
763
|
...
|
|
764
764
|
|
|
765
|
-
spawn: __spawn_spec[modal._functions.
|
|
765
|
+
spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P]
|
|
766
766
|
|
|
767
767
|
@property
|
|
768
768
|
def _raw_f_(self) -> collections.abc.Callable[..., typing.Any]: ...
|
|
@@ -384,7 +384,7 @@ def sessioned() -> collections.abc.Callable[
|
|
|
384
384
|
],
|
|
385
385
|
PartialFunction[modal._partial_function.P, modal._partial_function.ReturnType, modal._partial_function.ReturnType],
|
|
386
386
|
]:
|
|
387
|
-
"""Decorator that enables sessions on a Server.
|
|
387
|
+
"""Decorator that enables sticky sessions on a Server.
|
|
388
388
|
|
|
389
389
|
Every request must carry a session token obtained from a session start request; requests with the same token are
|
|
390
390
|
routed to the same container until the session is idle for `idle_timeout` seconds or explicitly terminated. A
|
|
@@ -68,7 +68,7 @@ class Server:
|
|
|
68
68
|
|
|
69
69
|
@property
|
|
70
70
|
def sessions(self) -> modal._server.ServerSessionsManager:
|
|
71
|
-
"""Start and terminate sessions on a Server decorated with `@modal.sessioned()`."""
|
|
71
|
+
"""Start and terminate sticky sessions on a Server decorated with `@modal.sessioned()`."""
|
|
72
72
|
...
|
|
73
73
|
|
|
74
74
|
class __info_spec(typing_extensions.Protocol):
|
|
@@ -947,7 +947,10 @@ class ServerInfo:
|
|
|
947
947
|
|
|
948
948
|
@dataclass(frozen=True)
|
|
949
949
|
class ServerSessionCredentials:
|
|
950
|
-
"""Credentials for a session on a Server.
|
|
950
|
+
"""Credentials for a sticky session on a Server.
|
|
951
|
+
|
|
952
|
+
Requests carrying `token` are routed to the same container.
|
|
953
|
+
"""
|
|
951
954
|
|
|
952
955
|
session_id: str # Identifier of this session, for display and logging
|
|
953
956
|
token: str # Session token to send with every request
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|