modal 1.0.5.dev23__tar.gz → 1.0.5.dev24__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.
Files changed (184) hide show
  1. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/PKG-INFO +1 -1
  2. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_functions.py +7 -1
  3. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/blob_utils.py +3 -0
  4. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/function_utils.py +22 -4
  5. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/client.pyi +2 -2
  6. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/functions.pyi +6 -6
  7. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal.egg-info/PKG-INFO +1 -1
  8. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_version/__init__.py +1 -1
  9. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/LICENSE +0 -0
  10. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/README.md +0 -0
  11. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/__init__.py +0 -0
  12. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/__main__.py +0 -0
  13. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_clustered_functions.py +0 -0
  14. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_clustered_functions.pyi +0 -0
  15. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_container_entrypoint.py +0 -0
  16. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_ipython.py +0 -0
  17. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_location.py +0 -0
  18. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_object.py +0 -0
  19. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_output.py +0 -0
  20. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_partial_function.py +0 -0
  21. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_pty.py +0 -0
  22. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_resolver.py +0 -0
  23. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_resources.py +0 -0
  24. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_runtime/__init__.py +0 -0
  25. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_runtime/asgi.py +0 -0
  26. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_runtime/container_io_manager.py +0 -0
  27. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_runtime/container_io_manager.pyi +0 -0
  28. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_runtime/execution_context.py +0 -0
  29. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_runtime/execution_context.pyi +0 -0
  30. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  31. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_runtime/telemetry.py +0 -0
  32. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_runtime/user_code_imports.py +0 -0
  33. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_serialization.py +0 -0
  34. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_traceback.py +0 -0
  35. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_tunnel.py +0 -0
  36. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_tunnel.pyi +0 -0
  37. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_type_manager.py +0 -0
  38. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/__init__.py +0 -0
  39. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/app_utils.py +0 -0
  40. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/async_utils.py +0 -0
  41. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/bytes_io_segment_payload.py +0 -0
  42. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/deprecation.py +0 -0
  43. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/docker_utils.py +0 -0
  44. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/git_utils.py +0 -0
  45. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/grpc_testing.py +0 -0
  46. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/grpc_utils.py +0 -0
  47. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/hash_utils.py +0 -0
  48. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/http_utils.py +0 -0
  49. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/jwt_utils.py +0 -0
  50. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/logger.py +0 -0
  51. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/mount_utils.py +0 -0
  52. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/name_utils.py +0 -0
  53. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/package_utils.py +0 -0
  54. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/pattern_utils.py +0 -0
  55. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/rand_pb_testing.py +0 -0
  56. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/shell_utils.py +0 -0
  57. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_utils/time_utils.py +0 -0
  58. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_vendor/__init__.py +0 -0
  59. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  60. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_vendor/cloudpickle.py +0 -0
  61. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_vendor/tblib.py +0 -0
  62. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/_watcher.py +0 -0
  63. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/app.py +0 -0
  64. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/app.pyi +0 -0
  65. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/call_graph.py +0 -0
  66. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/__init__.py +0 -0
  67. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/_download.py +0 -0
  68. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/_traceback.py +0 -0
  69. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/app.py +0 -0
  70. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/cluster.py +0 -0
  71. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/config.py +0 -0
  72. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/container.py +0 -0
  73. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/dict.py +0 -0
  74. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/entry_point.py +0 -0
  75. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/environment.py +0 -0
  76. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/import_refs.py +0 -0
  77. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/launch.py +0 -0
  78. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/network_file_system.py +0 -0
  79. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/profile.py +0 -0
  80. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/programs/__init__.py +0 -0
  81. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/programs/run_jupyter.py +0 -0
  82. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/programs/vscode.py +0 -0
  83. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/queues.py +0 -0
  84. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/run.py +0 -0
  85. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/secret.py +0 -0
  86. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/token.py +0 -0
  87. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/utils.py +0 -0
  88. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cli/volume.py +0 -0
  89. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/client.py +0 -0
  90. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cloud_bucket_mount.py +0 -0
  91. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cloud_bucket_mount.pyi +0 -0
  92. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cls.py +0 -0
  93. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/cls.pyi +0 -0
  94. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/config.py +0 -0
  95. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/container_process.py +0 -0
  96. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/container_process.pyi +0 -0
  97. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/dict.py +0 -0
  98. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/dict.pyi +0 -0
  99. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/environments.py +0 -0
  100. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/environments.pyi +0 -0
  101. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/exception.py +0 -0
  102. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/experimental/__init__.py +0 -0
  103. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/experimental/ipython.py +0 -0
  104. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/file_io.py +0 -0
  105. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/file_io.pyi +0 -0
  106. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/file_pattern_matcher.py +0 -0
  107. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/functions.py +0 -0
  108. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/gpu.py +0 -0
  109. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/image.py +0 -0
  110. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/image.pyi +0 -0
  111. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/io_streams.py +0 -0
  112. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/io_streams.pyi +0 -0
  113. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/mount.py +0 -0
  114. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/mount.pyi +0 -0
  115. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/network_file_system.py +0 -0
  116. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/network_file_system.pyi +0 -0
  117. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/object.py +0 -0
  118. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/object.pyi +0 -0
  119. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/output.py +0 -0
  120. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/parallel_map.py +0 -0
  121. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/parallel_map.pyi +0 -0
  122. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/partial_function.py +0 -0
  123. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/partial_function.pyi +0 -0
  124. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/proxy.py +0 -0
  125. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/proxy.pyi +0 -0
  126. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/py.typed +0 -0
  127. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/queue.py +0 -0
  128. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/queue.pyi +0 -0
  129. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/requirements/2023.12.312.txt +0 -0
  130. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/requirements/2023.12.txt +0 -0
  131. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/requirements/2024.04.txt +0 -0
  132. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/requirements/2024.10.txt +0 -0
  133. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/requirements/PREVIEW.txt +0 -0
  134. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/requirements/README.md +0 -0
  135. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/requirements/base-images.json +0 -0
  136. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/retries.py +0 -0
  137. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/runner.py +0 -0
  138. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/runner.pyi +0 -0
  139. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/running_app.py +0 -0
  140. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/sandbox.py +0 -0
  141. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/sandbox.pyi +0 -0
  142. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/schedule.py +0 -0
  143. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/scheduler_placement.py +0 -0
  144. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/secret.py +0 -0
  145. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/secret.pyi +0 -0
  146. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/serving.py +0 -0
  147. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/serving.pyi +0 -0
  148. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/snapshot.py +0 -0
  149. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/snapshot.pyi +0 -0
  150. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/stream_type.py +0 -0
  151. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/token_flow.py +0 -0
  152. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/token_flow.pyi +0 -0
  153. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/volume.py +0 -0
  154. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal/volume.pyi +0 -0
  155. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal.egg-info/SOURCES.txt +0 -0
  156. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal.egg-info/dependency_links.txt +0 -0
  157. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal.egg-info/entry_points.txt +0 -0
  158. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal.egg-info/requires.txt +0 -0
  159. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal.egg-info/top_level.txt +0 -0
  160. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_docs/__init__.py +0 -0
  161. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_docs/gen_cli_docs.py +0 -0
  162. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_docs/gen_reference_docs.py +0 -0
  163. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_docs/mdmd/__init__.py +0 -0
  164. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_docs/mdmd/mdmd.py +0 -0
  165. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_docs/mdmd/signatures.py +0 -0
  166. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/__init__.py +0 -0
  167. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/api.proto +0 -0
  168. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/api_grpc.py +0 -0
  169. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/api_pb2.py +0 -0
  170. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/api_pb2.pyi +0 -0
  171. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/api_pb2_grpc.py +0 -0
  172. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/api_pb2_grpc.pyi +0 -0
  173. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/modal_api_grpc.py +0 -0
  174. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/modal_options_grpc.py +0 -0
  175. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/options.proto +0 -0
  176. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/options_grpc.py +0 -0
  177. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/options_pb2.py +0 -0
  178. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/options_pb2.pyi +0 -0
  179. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/options_pb2_grpc.py +0 -0
  180. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/options_pb2_grpc.pyi +0 -0
  181. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_proto/py.typed +0 -0
  182. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/modal_version/__main__.py +0 -0
  183. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/pyproject.toml +0 -0
  184. {modal-1.0.5.dev23 → modal-1.0.5.dev24}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.0.5.dev23
3
+ Version: 1.0.5.dev24
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -141,7 +141,13 @@ class _Invocation:
141
141
  stub = client.stub
142
142
 
143
143
  function_id = function.object_id
144
- item = await _create_input(args, kwargs, stub, method_name=function._use_method_name)
144
+ item = await _create_input(
145
+ args,
146
+ kwargs,
147
+ stub,
148
+ method_name=function._use_method_name,
149
+ function_call_invocation_type=function_call_invocation_type,
150
+ )
145
151
 
146
152
  request = api_pb2.FunctionMapRequest(
147
153
  function_id=function_id,
@@ -38,6 +38,9 @@ if TYPE_CHECKING:
38
38
  # Max size for function inputs and outputs.
39
39
  MAX_OBJECT_SIZE_BYTES = 2 * 1024 * 1024 # 2 MiB
40
40
 
41
+ # Max size for async function inputs and outputs.
42
+ MAX_ASYNC_OBJECT_SIZE_BYTES = 8 * 1024 # 8 KiB
43
+
41
44
  # If a file is LARGE_FILE_LIMIT bytes or larger, it's uploaded to blob store (s3) instead of going through grpc
42
45
  # It will also make sure to chunk the hash calculation to avoid reading the entire file into memory
43
46
  LARGE_FILE_LIMIT = 4 * 1024 * 1024 # 4 MiB
@@ -32,7 +32,7 @@ from ..exception import (
32
32
  RemoteError,
33
33
  )
34
34
  from ..mount import ROOT_DIR, _is_modal_path, _Mount
35
- from .blob_utils import MAX_OBJECT_SIZE_BYTES, blob_download, blob_upload
35
+ from .blob_utils import MAX_ASYNC_OBJECT_SIZE_BYTES, MAX_OBJECT_SIZE_BYTES, blob_download, blob_upload
36
36
  from .grpc_utils import RETRYABLE_GRPC_STATUS_CODES
37
37
 
38
38
 
@@ -511,8 +511,27 @@ async def _process_result(result: api_pb2.GenericResult, data_format: int, stub,
511
511
  ) from deser_exc
512
512
 
513
513
 
514
+ def should_upload(
515
+ num_bytes: int,
516
+ function_call_invocation_type: Optional["api_pb2.FunctionCallInvocationType.ValueType"],
517
+ ) -> bool:
518
+ """
519
+ Determine if the input should be uploaded to blob storage.
520
+ """
521
+ return num_bytes > MAX_OBJECT_SIZE_BYTES or (
522
+ function_call_invocation_type == api_pb2.FUNCTION_CALL_INVOCATION_TYPE_ASYNC
523
+ and num_bytes > MAX_ASYNC_OBJECT_SIZE_BYTES
524
+ )
525
+
526
+
514
527
  async def _create_input(
515
- args, kwargs, stub: ModalClientModal, *, idx: Optional[int] = None, method_name: Optional[str] = None
528
+ args,
529
+ kwargs,
530
+ stub: ModalClientModal,
531
+ *,
532
+ idx: Optional[int] = None,
533
+ method_name: Optional[str] = None,
534
+ function_call_invocation_type: Optional["api_pb2.FunctionCallInvocationType.ValueType"] = None,
516
535
  ) -> api_pb2.FunctionPutInputsItem:
517
536
  """Serialize function arguments and create a FunctionInput protobuf,
518
537
  uploading to blob storage if needed.
@@ -524,9 +543,8 @@ async def _create_input(
524
543
 
525
544
  args_serialized = serialize((args, kwargs))
526
545
 
527
- if len(args_serialized) > MAX_OBJECT_SIZE_BYTES:
546
+ if should_upload(len(args_serialized), function_call_invocation_type):
528
547
  args_blob_id = await blob_upload(args_serialized, stub)
529
-
530
548
  return api_pb2.FunctionPutInputsItem(
531
549
  input=api_pb2.FunctionInput(
532
550
  args_blob_id=args_blob_id,
@@ -31,7 +31,7 @@ class _Client:
31
31
  server_url: str,
32
32
  client_type: int,
33
33
  credentials: typing.Optional[tuple[str, str]],
34
- version: str = "1.0.5.dev23",
34
+ version: str = "1.0.5.dev24",
35
35
  ):
36
36
  """mdmd:hidden
37
37
  The Modal client object is not intended to be instantiated directly by users.
@@ -160,7 +160,7 @@ class Client:
160
160
  server_url: str,
161
161
  client_type: int,
162
162
  credentials: typing.Optional[tuple[str, str]],
163
- version: str = "1.0.5.dev23",
163
+ version: str = "1.0.5.dev24",
164
164
  ):
165
165
  """mdmd:hidden
166
166
  The Modal client object is not intended to be instantiated directly by users.
@@ -428,7 +428,7 @@ class Function(
428
428
 
429
429
  _call_generator: ___call_generator_spec[typing_extensions.Self]
430
430
 
431
- class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
431
+ class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
432
432
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER:
433
433
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
434
434
  ...
@@ -437,7 +437,7 @@ class Function(
437
437
  """Calls the function remotely, executing it with the given arguments and returning the execution's result."""
438
438
  ...
439
439
 
440
- remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
440
+ remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
441
441
 
442
442
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
443
443
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]:
@@ -464,7 +464,7 @@ class Function(
464
464
  """
465
465
  ...
466
466
 
467
- class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
467
+ class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
468
468
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
469
469
  """[Experimental] Calls the function with the given arguments, without waiting for the results.
470
470
 
@@ -488,7 +488,7 @@ class Function(
488
488
  ...
489
489
 
490
490
  _experimental_spawn: ___experimental_spawn_spec[
491
- modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
491
+ modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
492
492
  ]
493
493
 
494
494
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
@@ -497,7 +497,7 @@ class Function(
497
497
 
498
498
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
499
499
 
500
- class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
500
+ class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
501
501
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]:
502
502
  """Calls the function with the given arguments, without waiting for the results.
503
503
 
@@ -518,7 +518,7 @@ class Function(
518
518
  """
519
519
  ...
520
520
 
521
- spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
521
+ spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
522
522
 
523
523
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]:
524
524
  """Return the inner Python object wrapped by this Modal Function."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.0.5.dev23
3
+ Version: 1.0.5.dev24
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -1,4 +1,4 @@
1
1
  # Copyright Modal Labs 2025
2
2
  """Supplies the current version of the modal client library."""
3
3
 
4
- __version__ = "1.0.5.dev23"
4
+ __version__ = "1.0.5.dev24"
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