modal 1.5.5.dev17__tar.gz → 1.5.6.dev0__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.5.dev17 → modal-1.5.6.dev0}/PKG-INFO +1 -1
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_function_variants.py +1 -1
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_functions.py +17 -17
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_image.py +5 -5
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/function_utils.py +9 -9
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/app.py +13 -11
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/app.pyi +6 -6
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/import_refs.py +1 -1
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/run.py +3 -3
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/client.pyi +2 -2
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cls.py +3 -3
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/experimental/__init__.py +0 -1
- modal-1.5.6.dev0/modal/experimental/flash.py +389 -0
- modal-1.5.6.dev0/modal/experimental/flash.pyi +235 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/functions.pyi +6 -6
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal.egg-info/PKG-INFO +1 -1
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/api_grpc.py +16 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/api_pb2.py +1361 -1305
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/api_pb2.pyi +95 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/api_pb2_grpc.py +33 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/api_pb2_grpc.pyi +10 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/modal_api_grpc.py +1 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_version/__init__.py +1 -1
- modal-1.5.5.dev17/modal/experimental/flash.py +0 -833
- modal-1.5.5.dev17/modal/experimental/flash.pyi +0 -487
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/LICENSE +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/README.md +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/__init__.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/__main__.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_billing.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_clustered_functions.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_clustered_functions.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_container_entrypoint.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_environments.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_grpc_client.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_ipython.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_load_context.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_location.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_logs.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_logs_manager.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_logs_manager.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_object.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_output/__init__.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_output/manager.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_output/pty.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_output/rich.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_output/status.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_partial_function.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_resolver.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_resources.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/__init__.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/asgi.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/container_io_manager.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/container_io_manager.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/execution_context.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/execution_context.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/gpu_memory_snapshot.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/task_lifecycle_manager.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/task_lifecycle_manager.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/telemetry.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/user_code_event_loop.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_runtime/user_code_imports.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_serialization.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_server.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_supports_logs.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_traceback.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_tunnel.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_tunnel.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_type_manager.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/__init__.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/app_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/async_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/auth_token_manager.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/blob_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/browser_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/bytes_io_segment_payload.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/curl_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/deprecation.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/display_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/docker_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/git_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/grpc_testing.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/grpc_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/hash_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/http_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/jwt_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/logger.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/mount_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/name_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/package_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/pattern_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/proxy_support.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/rand_pb_testing.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/sandbox_fs_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/shell_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/task_command_router_client.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_utils/time_utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_vendor/__init__.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_vendor/a2wsgi_wsgi.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_vendor/cloudpickle.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_vendor/tblib.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_vendor/version.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_watcher.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/_workspace.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/billing.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/billing.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/2023.12.312.txt +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/2023.12.txt +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/2024.04.txt +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/2024.10.txt +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/2025.06.txt +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/PREVIEW.txt +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/README.md +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/builder/base-images.json +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/call_graph.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/__init__.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/_download.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/_help.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/_traceback.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/app.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/billing.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/bootstrap.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/changelog.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/cluster.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/config.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/container.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/curl.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/dashboard.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/dict.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/endpoint.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/entry_point.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/environment.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/image.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/launch.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/logo.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/network_file_system.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/profile.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/programs/__init__.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/programs/run_jupyter.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/programs/vscode.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/queues.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/secret.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/selector.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/shell.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/skills.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/token.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/utils.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/volume.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cli/workspace.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/client.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cloud_bucket_mount.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cloud_bucket_mount.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/cls.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/config.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/container_process.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/container_process.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/dict.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/dict.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/environments.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/environments.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/exception.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/experimental/ipython.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/file_io.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/file_io.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/file_pattern_matcher.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/functions.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/image.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/image.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/io_streams.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/io_streams.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/mount.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/mount.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/network_file_system.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/network_file_system.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/object.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/object.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/output.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/parallel_map.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/parallel_map.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/partial_function.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/partial_function.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/proxy.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/proxy.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/py.typed +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/queue.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/queue.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/retries.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/runner.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/runner.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/running_app.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/sandbox.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/sandbox.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/sandbox_fs.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/sandbox_fs.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/schedule.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/scheduler_placement.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/secret.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/secret.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/server.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/server.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/serving.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/serving.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/skills/modal/SKILL.md +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/snapshot.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/snapshot.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/stream_type.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/token_flow.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/token_flow.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/types.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/volume.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/volume.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/workspace.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal/workspace.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal.egg-info/SOURCES.txt +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal.egg-info/dependency_links.txt +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal.egg-info/entry_points.txt +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal.egg-info/requires.txt +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal.egg-info/top_level.txt +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/__init__.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/gen_cli_docs.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/gen_cli_docs_main.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/gen_reference_docs.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/gen_reference_docs_main.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/mdmd/__init__.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/mdmd/mdmd.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/mdmd/signatures.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/mdmd/types.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_docs/reference_intro.md +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/__init__.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/py.typed +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/task_command_router_grpc.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/task_command_router_pb2.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/task_command_router_pb2.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/task_command_router_pb2_grpc.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_proto/task_command_router_pb2_grpc.pyi +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/modal_version/__main__.py +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/pyproject.toml +0 -0
- {modal-1.5.5.dev17 → modal-1.5.6.dev0}/setup.cfg +0 -0
|
@@ -290,6 +290,6 @@ def _make_function_variant(
|
|
|
290
290
|
deps=_deps,
|
|
291
291
|
load_context_overrides=base_function._load_context_overrides,
|
|
292
292
|
)
|
|
293
|
-
fun.
|
|
293
|
+
fun._source_info = base_function._source_info
|
|
294
294
|
fun._spec = base_function._spec # TODO (elias): fix - this is incorrect when using with_options
|
|
295
295
|
return fun
|
|
@@ -50,7 +50,7 @@ from ._utils.deprecation import with_deprecation_warning
|
|
|
50
50
|
from ._utils.function_utils import (
|
|
51
51
|
ATTEMPT_TIMEOUT_GRACE_PERIOD,
|
|
52
52
|
OUTPUTS_TIMEOUT,
|
|
53
|
-
|
|
53
|
+
FunctionSourceInfo,
|
|
54
54
|
_create_input,
|
|
55
55
|
_parse_retries,
|
|
56
56
|
_process_result,
|
|
@@ -604,7 +604,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
|
604
604
|
"""
|
|
605
605
|
|
|
606
606
|
# TODO: more type annotations
|
|
607
|
-
|
|
607
|
+
_source_info: FunctionSourceInfo | None
|
|
608
608
|
_serve_mounts: frozenset[_Mount] # set at load time, only by loader
|
|
609
609
|
_app: "modal.app._App | None" = None
|
|
610
610
|
# only set for InstanceServiceFunctions and bound instance methods
|
|
@@ -665,7 +665,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
|
665
665
|
|
|
666
666
|
@staticmethod
|
|
667
667
|
def _from_local(
|
|
668
|
-
info:
|
|
668
|
+
info: FunctionSourceInfo,
|
|
669
669
|
app: "modal.app._App | None", # App here should only be None in case of Image.run_function
|
|
670
670
|
image: _Image,
|
|
671
671
|
env: dict[str, str | None] | None = None,
|
|
@@ -1170,7 +1170,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
|
1170
1170
|
)
|
|
1171
1171
|
|
|
1172
1172
|
obj._raw_f = info.raw_f
|
|
1173
|
-
obj.
|
|
1173
|
+
obj._source_info = info
|
|
1174
1174
|
obj._tag = tag
|
|
1175
1175
|
obj._app = app # needed for CLI right now
|
|
1176
1176
|
obj._obj = None
|
|
@@ -1429,14 +1429,14 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
|
1429
1429
|
(2026, 8, 26),
|
|
1430
1430
|
"`Function.info` is deprecated and will be removed in `modal` version 1.6.0",
|
|
1431
1431
|
)
|
|
1432
|
-
def info(self) ->
|
|
1432
|
+
def info(self) -> FunctionSourceInfo:
|
|
1433
1433
|
"""mdmd:hidden"""
|
|
1434
|
-
return self.
|
|
1434
|
+
return self._source_info_
|
|
1435
1435
|
|
|
1436
1436
|
@property
|
|
1437
|
-
def
|
|
1438
|
-
assert self.
|
|
1439
|
-
return self.
|
|
1437
|
+
def _source_info_(self) -> FunctionSourceInfo:
|
|
1438
|
+
assert self._source_info
|
|
1439
|
+
return self._source_info
|
|
1440
1440
|
|
|
1441
1441
|
@property
|
|
1442
1442
|
@with_deprecation_warning(
|
|
@@ -1477,7 +1477,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
|
1477
1477
|
self._is_generator = None
|
|
1478
1478
|
self._web_url = None
|
|
1479
1479
|
self._function_name = None
|
|
1480
|
-
self.
|
|
1480
|
+
self._source_info = None
|
|
1481
1481
|
self._serve_mounts = frozenset()
|
|
1482
1482
|
self._metadata = None
|
|
1483
1483
|
self._experimental_flash_urls = None
|
|
@@ -1609,7 +1609,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
|
1609
1609
|
new_function._webhook_config = self._webhook_config
|
|
1610
1610
|
|
|
1611
1611
|
# Other fields not necessarily initialized
|
|
1612
|
-
if self.
|
|
1612
|
+
if self._source_info is not None:
|
|
1613
1613
|
new_function._build_args = self._build_args
|
|
1614
1614
|
new_function._is_method = self._is_method
|
|
1615
1615
|
new_function._raw_f = self._raw_f
|
|
@@ -1915,12 +1915,12 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
|
1915
1915
|
yield item
|
|
1916
1916
|
|
|
1917
1917
|
def _is_local(self):
|
|
1918
|
-
return self.
|
|
1918
|
+
return self._source_info is not None
|
|
1919
1919
|
|
|
1920
|
-
def
|
|
1921
|
-
if not self.
|
|
1922
|
-
raise ExecutionError("Can't get info for a function that isn't locally defined")
|
|
1923
|
-
return self.
|
|
1920
|
+
def _get_source_info(self) -> FunctionSourceInfo:
|
|
1921
|
+
if not self._source_info:
|
|
1922
|
+
raise ExecutionError("Can't get source info for a function that isn't locally defined")
|
|
1923
|
+
return self._source_info
|
|
1924
1924
|
|
|
1925
1925
|
def _get_obj(self) -> "modal.cls._Obj | None":
|
|
1926
1926
|
if not self._is_method:
|
|
@@ -1955,7 +1955,7 @@ class _Function(typing.Generic[P, ReturnType, OriginalReturnType], _Object, type
|
|
|
1955
1955
|
)
|
|
1956
1956
|
raise ExecutionError(msg)
|
|
1957
1957
|
|
|
1958
|
-
info = self.
|
|
1958
|
+
info = self._get_source_info()
|
|
1959
1959
|
if not info.raw_f:
|
|
1960
1960
|
# Here if calling .local on a service function itself which should never happen
|
|
1961
1961
|
# TODO: check if we end up here in a container for a serialized function?
|
|
@@ -41,7 +41,7 @@ from ._utils.docker_utils import (
|
|
|
41
41
|
extract_copy_command_patterns,
|
|
42
42
|
find_dockerignore_file,
|
|
43
43
|
)
|
|
44
|
-
from ._utils.function_utils import
|
|
44
|
+
from ._utils.function_utils import FunctionSourceInfo, parse_gpu_config
|
|
45
45
|
from ._utils.mount_utils import validate_only_modal_volumes, validate_volumes_by_object_id
|
|
46
46
|
from ._utils.name_utils import check_object_name
|
|
47
47
|
from .client import _Client
|
|
@@ -681,8 +681,8 @@ class _Image(_Object, type_prefix="im"):
|
|
|
681
681
|
|
|
682
682
|
if build_function:
|
|
683
683
|
build_function_id = build_function.object_id
|
|
684
|
-
globals = build_function.
|
|
685
|
-
attrs = build_function.
|
|
684
|
+
globals = build_function._get_source_info().get_globals()
|
|
685
|
+
attrs = build_function._get_source_info().get_cls_var_attrs()
|
|
686
686
|
globals = {**globals, **attrs}
|
|
687
687
|
filtered_globals = {}
|
|
688
688
|
for k, v in globals.items():
|
|
@@ -694,7 +694,7 @@ class _Image(_Object, type_prefix="im"):
|
|
|
694
694
|
# Skip unserializable values for now.
|
|
695
695
|
logger.warning(
|
|
696
696
|
f"Skipping unserializable global variable {k} for "
|
|
697
|
-
f"{build_function.
|
|
697
|
+
f"{build_function._get_source_info().function_name}. "
|
|
698
698
|
"Changes to this variable won't invalidate the image."
|
|
699
699
|
)
|
|
700
700
|
continue
|
|
@@ -2754,7 +2754,7 @@ class _Image(_Object, type_prefix="im"):
|
|
|
2754
2754
|
# It may be possible to support lambdas eventually, but for now we don't handle them well, so reject quickly
|
|
2755
2755
|
raise InvalidError("Image.run_function does not support lambda functions.")
|
|
2756
2756
|
|
|
2757
|
-
info =
|
|
2757
|
+
info = FunctionSourceInfo(raw_f)
|
|
2758
2758
|
|
|
2759
2759
|
function = _Function._from_local(
|
|
2760
2760
|
info,
|
|
@@ -48,7 +48,7 @@ if typing.TYPE_CHECKING:
|
|
|
48
48
|
import modal._functions
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
class
|
|
51
|
+
class FunctionSourceInfoType(Enum):
|
|
52
52
|
PACKAGE = "package"
|
|
53
53
|
FILE = "file"
|
|
54
54
|
SERIALIZED = "serialized"
|
|
@@ -162,7 +162,7 @@ def _parse_retries(
|
|
|
162
162
|
raise InvalidError(msg)
|
|
163
163
|
|
|
164
164
|
|
|
165
|
-
class
|
|
165
|
+
class FunctionSourceInfo:
|
|
166
166
|
"""Utility that determines serialization/deserialization mechanisms for functions
|
|
167
167
|
|
|
168
168
|
* Stored as file vs serialized
|
|
@@ -178,7 +178,7 @@ class FunctionInfo:
|
|
|
178
178
|
user_cls: type[Any] | None
|
|
179
179
|
module_name: str | None
|
|
180
180
|
|
|
181
|
-
_type:
|
|
181
|
+
_type: FunctionSourceInfoType
|
|
182
182
|
_file: str | None
|
|
183
183
|
_base_dir: str
|
|
184
184
|
_remote_dir: PurePosixPath | None = None
|
|
@@ -245,7 +245,7 @@ class FunctionInfo:
|
|
|
245
245
|
self.module_name = module.__spec__.name
|
|
246
246
|
self._remote_dir = ROOT_DIR / PurePosixPath(module.__package__.split(".")[0])
|
|
247
247
|
self._is_serialized = False
|
|
248
|
-
self._type =
|
|
248
|
+
self._type = FunctionSourceInfoType.PACKAGE
|
|
249
249
|
elif hasattr(module, "__file__") and not serialized:
|
|
250
250
|
# This generally covers the case where it's invoked with
|
|
251
251
|
# python foo/bar/baz.py
|
|
@@ -255,16 +255,16 @@ class FunctionInfo:
|
|
|
255
255
|
self.module_name = inspect.getmodulename(self._file)
|
|
256
256
|
self._base_dir = os.path.dirname(self._file)
|
|
257
257
|
self._is_serialized = False
|
|
258
|
-
self._type =
|
|
258
|
+
self._type = FunctionSourceInfoType.FILE
|
|
259
259
|
else:
|
|
260
260
|
self.module_name = None
|
|
261
261
|
self._base_dir = os.path.abspath("") # get current dir
|
|
262
262
|
self._is_serialized = True # either explicitly, or by being in a notebook
|
|
263
263
|
if serialized: # if explicit
|
|
264
|
-
self._type =
|
|
264
|
+
self._type = FunctionSourceInfoType.SERIALIZED
|
|
265
265
|
else:
|
|
266
266
|
# notebook, or in general any exec() on a function definition
|
|
267
|
-
self._type =
|
|
267
|
+
self._type = FunctionSourceInfoType.NOTEBOOK
|
|
268
268
|
|
|
269
269
|
if not self.is_serialized():
|
|
270
270
|
# Sanity check that this function is defined in global scope
|
|
@@ -372,14 +372,14 @@ class FunctionInfo:
|
|
|
372
372
|
return {}
|
|
373
373
|
|
|
374
374
|
# make sure the function's own entrypoint is included:
|
|
375
|
-
if self._type ==
|
|
375
|
+
if self._type == FunctionSourceInfoType.PACKAGE:
|
|
376
376
|
top_level_package = self.module_name.split(".")[0]
|
|
377
377
|
# TODO: add deprecation warning if the following entrypoint mount
|
|
378
378
|
# includes non-.py files, since we'll want to migrate to .py-only
|
|
379
379
|
# soon to get it consistent with the `add_local_python_source()`
|
|
380
380
|
# defaults.
|
|
381
381
|
return {top_level_package: _Mount._from_local_python_packages(top_level_package)}
|
|
382
|
-
elif self._type ==
|
|
382
|
+
elif self._type == FunctionSourceInfoType.FILE:
|
|
383
383
|
# TODO: inspect if this file is already included as part of
|
|
384
384
|
# a package mount, and skip it + reference that package
|
|
385
385
|
# instead if that's the case. This avoids possible module
|
|
@@ -35,7 +35,7 @@ from ._supports_logs import _LogQueryData
|
|
|
35
35
|
from ._utils.async_utils import synchronize_api
|
|
36
36
|
from ._utils.deprecation import deprecation_warning, handle_deprecated_parameters, with_deprecation_warning
|
|
37
37
|
from ._utils.function_utils import (
|
|
38
|
-
|
|
38
|
+
FunctionSourceInfo,
|
|
39
39
|
is_flash_object,
|
|
40
40
|
is_global_object,
|
|
41
41
|
is_method_fn,
|
|
@@ -62,10 +62,10 @@ _default_image: _Image = _Image.debian_slim()
|
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
class _LocalEntrypoint:
|
|
65
|
-
_info:
|
|
65
|
+
_info: FunctionSourceInfo
|
|
66
66
|
_app: "_App"
|
|
67
67
|
|
|
68
|
-
def __init__(self, info:
|
|
68
|
+
def __init__(self, info: FunctionSourceInfo, app: "_App") -> None:
|
|
69
69
|
self._info = info
|
|
70
70
|
self._app = app
|
|
71
71
|
|
|
@@ -73,7 +73,7 @@ class _LocalEntrypoint:
|
|
|
73
73
|
return self._info.raw_f(*args, **kwargs)
|
|
74
74
|
|
|
75
75
|
@property
|
|
76
|
-
def info(self) ->
|
|
76
|
+
def info(self) -> FunctionSourceInfo:
|
|
77
77
|
return self._info
|
|
78
78
|
|
|
79
79
|
@property
|
|
@@ -627,8 +627,8 @@ class _App:
|
|
|
627
627
|
logger.warning(
|
|
628
628
|
f"Warning: function name '{function._tag_}' collision!"
|
|
629
629
|
" Overriding existing function "
|
|
630
|
-
f"[{old_function.
|
|
631
|
-
f" with new function [{function.
|
|
630
|
+
f"[{old_function._source_info.module_name}].{old_function._source_info.function_name}"
|
|
631
|
+
f" with new function [{function._source_info.module_name}].{function._source_info.function_name}"
|
|
632
632
|
)
|
|
633
633
|
if function._tag_ in local_state.classes:
|
|
634
634
|
logger.warning(f"Warning: tag {function._tag_} exists but is overridden by function")
|
|
@@ -803,7 +803,7 @@ class _App:
|
|
|
803
803
|
raise InvalidError("Invalid value for `name`: Must be string.")
|
|
804
804
|
|
|
805
805
|
def wrapped(raw_f: Callable[..., Any]) -> _LocalEntrypoint:
|
|
806
|
-
info =
|
|
806
|
+
info = FunctionSourceInfo(raw_f)
|
|
807
807
|
tag = name if name is not None else raw_f.__qualname__
|
|
808
808
|
local_state = self._local_state
|
|
809
809
|
if tag in local_state.local_entrypoints:
|
|
@@ -962,7 +962,7 @@ class _App:
|
|
|
962
962
|
rdma = f.params.rdma
|
|
963
963
|
fabric_size = f.params.fabric_size
|
|
964
964
|
|
|
965
|
-
info =
|
|
965
|
+
info = FunctionSourceInfo(f.raw_f, serialized=serialized, name_override=name)
|
|
966
966
|
raw_f = f.raw_f
|
|
967
967
|
webhook_config = f.params.webhook_config
|
|
968
968
|
is_generator = f.params.is_generator
|
|
@@ -1005,7 +1005,7 @@ class _App:
|
|
|
1005
1005
|
)
|
|
1006
1006
|
)
|
|
1007
1007
|
|
|
1008
|
-
info =
|
|
1008
|
+
info = FunctionSourceInfo(f, serialized=serialized, name_override=name)
|
|
1009
1009
|
raw_f = f
|
|
1010
1010
|
webhook_config = None
|
|
1011
1011
|
batch_max_size = None
|
|
@@ -1254,7 +1254,7 @@ class _App:
|
|
|
1254
1254
|
).values():
|
|
1255
1255
|
raise InvalidError("Callable decorators cannot be combined with web interface decorators.")
|
|
1256
1256
|
|
|
1257
|
-
info =
|
|
1257
|
+
info = FunctionSourceInfo(None, serialized=serialized, user_cls=user_cls)
|
|
1258
1258
|
|
|
1259
1259
|
i6pn_enabled = i6pn or cluster_size is not None
|
|
1260
1260
|
cls_func = _Function._from_local(
|
|
@@ -1466,7 +1466,9 @@ class _App:
|
|
|
1466
1466
|
local_state = self._local_state
|
|
1467
1467
|
|
|
1468
1468
|
# Create the FunctionInfo for the server, note we treat FunctionInfo as a class for servers
|
|
1469
|
-
info =
|
|
1469
|
+
info = FunctionSourceInfo(
|
|
1470
|
+
None, serialized=serialized, user_cls=user_cls, name_override=name or user_cls.__name__
|
|
1471
|
+
)
|
|
1470
1472
|
# Create the service function
|
|
1471
1473
|
service_function = _Function._from_local(
|
|
1472
1474
|
info,
|
|
@@ -27,10 +27,10 @@ import typing
|
|
|
27
27
|
import typing_extensions
|
|
28
28
|
|
|
29
29
|
class _LocalEntrypoint:
|
|
30
|
-
_info: modal._utils.function_utils.
|
|
30
|
+
_info: modal._utils.function_utils.FunctionSourceInfo
|
|
31
31
|
_app: _App
|
|
32
32
|
|
|
33
|
-
def __init__(self, info: modal._utils.function_utils.
|
|
33
|
+
def __init__(self, info: modal._utils.function_utils.FunctionSourceInfo, app: _App) -> None:
|
|
34
34
|
"""Initialize self. See help(type(self)) for accurate signature."""
|
|
35
35
|
...
|
|
36
36
|
|
|
@@ -39,18 +39,18 @@ class _LocalEntrypoint:
|
|
|
39
39
|
...
|
|
40
40
|
|
|
41
41
|
@property
|
|
42
|
-
def info(self) -> modal._utils.function_utils.
|
|
42
|
+
def info(self) -> modal._utils.function_utils.FunctionSourceInfo: ...
|
|
43
43
|
@property
|
|
44
44
|
def app(self) -> _App: ...
|
|
45
45
|
|
|
46
46
|
class LocalEntrypoint:
|
|
47
|
-
_info: modal._utils.function_utils.
|
|
47
|
+
_info: modal._utils.function_utils.FunctionSourceInfo
|
|
48
48
|
_app: App
|
|
49
49
|
|
|
50
|
-
def __init__(self, info: modal._utils.function_utils.
|
|
50
|
+
def __init__(self, info: modal._utils.function_utils.FunctionSourceInfo, app: App) -> None: ...
|
|
51
51
|
def __call__(self, *args: typing.Any, **kwargs: typing.Any) -> typing.Any: ...
|
|
52
52
|
@property
|
|
53
|
-
def info(self) -> modal._utils.function_utils.
|
|
53
|
+
def info(self) -> modal._utils.function_utils.FunctionSourceInfo: ...
|
|
54
54
|
@property
|
|
55
55
|
def app(self) -> App: ...
|
|
56
56
|
|
|
@@ -173,7 +173,7 @@ def list_cli_commands(
|
|
|
173
173
|
priorities[local_entrypoint] = AutoRunPriority.APP_LOCAL_ENTRYPOINT
|
|
174
174
|
for name, inner_function in app._local_state.functions.items():
|
|
175
175
|
function = cast(Function, synchronizer._translate_out(inner_function))
|
|
176
|
-
if function.
|
|
176
|
+
if function._source_info_.is_service_class() and not include_service_functions:
|
|
177
177
|
continue # Skip class and server service functions for all commands except `modal shell`.
|
|
178
178
|
all_runnables[function].append(f"{app_name}.{name}")
|
|
179
179
|
priorities[function] = AutoRunPriority.APP_FUNCTION
|
|
@@ -263,9 +263,9 @@ def _get_click_command_for_function(app: App, function: Function, ctx: click.Con
|
|
|
263
263
|
if function._is_generator_:
|
|
264
264
|
raise InvalidError("`modal run` is not supported for generator functions")
|
|
265
265
|
|
|
266
|
-
assert function.
|
|
267
|
-
sig: inspect.Signature = _get_signature(function.
|
|
268
|
-
type_hints = safe_get_type_hints(function.
|
|
266
|
+
assert function._source_info_.raw_f
|
|
267
|
+
sig: inspect.Signature = _get_signature(function._source_info_.raw_f)
|
|
268
|
+
type_hints = safe_get_type_hints(function._source_info_.raw_f)
|
|
269
269
|
signature: CliRunnableSignature = _get_cli_runnable_signature(sig, type_hints)
|
|
270
270
|
|
|
271
271
|
def _inner(args, click_kwargs):
|
|
@@ -77,7 +77,7 @@ class _Client:
|
|
|
77
77
|
server_url: str,
|
|
78
78
|
client_type: int,
|
|
79
79
|
credentials: typing.Optional[tuple[str, str]],
|
|
80
|
-
version: str = "1.5.
|
|
80
|
+
version: str = "1.5.6.dev0",
|
|
81
81
|
*,
|
|
82
82
|
oauth_credentials: typing.Optional[_OAuthCredentials] = None,
|
|
83
83
|
):
|
|
@@ -277,7 +277,7 @@ class Client:
|
|
|
277
277
|
server_url: str,
|
|
278
278
|
client_type: int,
|
|
279
279
|
credentials: typing.Optional[tuple[str, str]],
|
|
280
|
-
version: str = "1.5.
|
|
280
|
+
version: str = "1.5.6.dev0",
|
|
281
281
|
*,
|
|
282
282
|
oauth_credentials: typing.Optional[_OAuthCredentials] = None,
|
|
283
283
|
):
|
|
@@ -125,9 +125,9 @@ def _bind_instance_method(cls: "_Cls", service_function: _Function, method_name:
|
|
|
125
125
|
|
|
126
126
|
if cls._is_local():
|
|
127
127
|
partial_function = cls._method_partials[method_name]
|
|
128
|
-
from modal._utils.function_utils import
|
|
128
|
+
from modal._utils.function_utils import FunctionSourceInfo
|
|
129
129
|
|
|
130
|
-
fun.
|
|
130
|
+
fun._source_info = FunctionSourceInfo(
|
|
131
131
|
# ugly - needed for .local() TODO (elias): Clean up!
|
|
132
132
|
partial_function.raw_f,
|
|
133
133
|
user_cls=cls._user_cls,
|
|
@@ -242,7 +242,7 @@ class _Obj:
|
|
|
242
242
|
load_context_overrides=parent._load_context_overrides,
|
|
243
243
|
)
|
|
244
244
|
fun._obj = self
|
|
245
|
-
fun.
|
|
245
|
+
fun._source_info = parent._source_info
|
|
246
246
|
fun._spec = parent._spec
|
|
247
247
|
|
|
248
248
|
self._instance_service_function = fun
|