modal 1.0.0.dev18__tar.gz → 1.0.0.dev20__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.

Files changed (183) hide show
  1. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/PKG-INFO +1 -1
  2. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_functions.py +9 -32
  3. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/function_utils.py +1 -4
  4. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/client.pyi +2 -2
  5. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/functions.pyi +6 -6
  6. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal.egg-info/PKG-INFO +1 -1
  7. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_version/__init__.py +1 -1
  8. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/LICENSE +0 -0
  9. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/README.md +0 -0
  10. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/__init__.py +0 -0
  11. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/__main__.py +0 -0
  12. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_clustered_functions.py +0 -0
  13. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_clustered_functions.pyi +0 -0
  14. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_container_entrypoint.py +0 -0
  15. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_ipython.py +0 -0
  16. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_location.py +0 -0
  17. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_object.py +0 -0
  18. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_output.py +0 -0
  19. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_partial_function.py +0 -0
  20. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_pty.py +0 -0
  21. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_resolver.py +0 -0
  22. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_resources.py +0 -0
  23. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_runtime/__init__.py +0 -0
  24. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_runtime/asgi.py +0 -0
  25. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_runtime/container_io_manager.py +0 -0
  26. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_runtime/container_io_manager.pyi +0 -0
  27. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_runtime/execution_context.py +0 -0
  28. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_runtime/execution_context.pyi +0 -0
  29. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_runtime/gpu_memory_snapshot.py +0 -0
  30. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_runtime/telemetry.py +0 -0
  31. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_runtime/user_code_imports.py +0 -0
  32. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_serialization.py +0 -0
  33. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_traceback.py +0 -0
  34. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_tunnel.py +0 -0
  35. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_tunnel.pyi +0 -0
  36. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_type_manager.py +0 -0
  37. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/__init__.py +0 -0
  38. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/app_utils.py +0 -0
  39. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/async_utils.py +0 -0
  40. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/blob_utils.py +0 -0
  41. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/bytes_io_segment_payload.py +0 -0
  42. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/deprecation.py +0 -0
  43. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/docker_utils.py +0 -0
  44. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/git_utils.py +0 -0
  45. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/grpc_testing.py +0 -0
  46. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/grpc_utils.py +0 -0
  47. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/hash_utils.py +0 -0
  48. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/http_utils.py +0 -0
  49. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/jwt_utils.py +0 -0
  50. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/logger.py +0 -0
  51. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/mount_utils.py +0 -0
  52. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/name_utils.py +0 -0
  53. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/package_utils.py +0 -0
  54. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/pattern_utils.py +0 -0
  55. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/rand_pb_testing.py +0 -0
  56. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_utils/shell_utils.py +0 -0
  57. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_vendor/__init__.py +0 -0
  58. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_vendor/a2wsgi_wsgi.py +0 -0
  59. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_vendor/cloudpickle.py +0 -0
  60. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_vendor/tblib.py +0 -0
  61. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/_watcher.py +0 -0
  62. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/app.py +0 -0
  63. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/app.pyi +0 -0
  64. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/call_graph.py +0 -0
  65. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/__init__.py +0 -0
  66. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/_download.py +0 -0
  67. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/_traceback.py +0 -0
  68. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/app.py +0 -0
  69. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/cluster.py +0 -0
  70. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/config.py +0 -0
  71. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/container.py +0 -0
  72. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/dict.py +0 -0
  73. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/entry_point.py +0 -0
  74. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/environment.py +0 -0
  75. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/import_refs.py +0 -0
  76. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/launch.py +0 -0
  77. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/network_file_system.py +0 -0
  78. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/profile.py +0 -0
  79. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/programs/__init__.py +0 -0
  80. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/programs/run_jupyter.py +0 -0
  81. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/programs/vscode.py +0 -0
  82. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/queues.py +0 -0
  83. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/run.py +0 -0
  84. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/secret.py +0 -0
  85. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/token.py +0 -0
  86. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/utils.py +0 -0
  87. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cli/volume.py +0 -0
  88. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/client.py +0 -0
  89. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cloud_bucket_mount.py +0 -0
  90. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cloud_bucket_mount.pyi +0 -0
  91. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cls.py +0 -0
  92. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/cls.pyi +0 -0
  93. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/config.py +0 -0
  94. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/container_process.py +0 -0
  95. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/container_process.pyi +0 -0
  96. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/dict.py +0 -0
  97. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/dict.pyi +0 -0
  98. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/environments.py +0 -0
  99. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/environments.pyi +0 -0
  100. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/exception.py +0 -0
  101. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/experimental/__init__.py +0 -0
  102. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/experimental/ipython.py +0 -0
  103. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/file_io.py +0 -0
  104. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/file_io.pyi +0 -0
  105. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/file_pattern_matcher.py +0 -0
  106. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/functions.py +0 -0
  107. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/gpu.py +0 -0
  108. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/image.py +0 -0
  109. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/image.pyi +0 -0
  110. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/io_streams.py +0 -0
  111. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/io_streams.pyi +0 -0
  112. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/mount.py +0 -0
  113. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/mount.pyi +0 -0
  114. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/network_file_system.py +0 -0
  115. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/network_file_system.pyi +0 -0
  116. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/object.py +0 -0
  117. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/object.pyi +0 -0
  118. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/output.py +0 -0
  119. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/parallel_map.py +0 -0
  120. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/parallel_map.pyi +0 -0
  121. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/partial_function.py +0 -0
  122. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/partial_function.pyi +0 -0
  123. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/proxy.py +0 -0
  124. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/proxy.pyi +0 -0
  125. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/py.typed +0 -0
  126. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/queue.py +0 -0
  127. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/queue.pyi +0 -0
  128. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/requirements/2023.12.312.txt +0 -0
  129. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/requirements/2023.12.txt +0 -0
  130. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/requirements/2024.04.txt +0 -0
  131. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/requirements/2024.10.txt +0 -0
  132. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/requirements/PREVIEW.txt +0 -0
  133. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/requirements/README.md +0 -0
  134. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/requirements/base-images.json +0 -0
  135. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/retries.py +0 -0
  136. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/runner.py +0 -0
  137. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/runner.pyi +0 -0
  138. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/running_app.py +0 -0
  139. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/sandbox.py +0 -0
  140. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/sandbox.pyi +0 -0
  141. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/schedule.py +0 -0
  142. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/scheduler_placement.py +0 -0
  143. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/secret.py +0 -0
  144. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/secret.pyi +0 -0
  145. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/serving.py +0 -0
  146. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/serving.pyi +0 -0
  147. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/snapshot.py +0 -0
  148. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/snapshot.pyi +0 -0
  149. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/stream_type.py +0 -0
  150. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/token_flow.py +0 -0
  151. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/token_flow.pyi +0 -0
  152. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/volume.py +0 -0
  153. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal/volume.pyi +0 -0
  154. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal.egg-info/SOURCES.txt +0 -0
  155. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal.egg-info/dependency_links.txt +0 -0
  156. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal.egg-info/entry_points.txt +0 -0
  157. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal.egg-info/requires.txt +0 -0
  158. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal.egg-info/top_level.txt +0 -0
  159. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_docs/__init__.py +0 -0
  160. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_docs/gen_cli_docs.py +0 -0
  161. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_docs/gen_reference_docs.py +0 -0
  162. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_docs/mdmd/__init__.py +0 -0
  163. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_docs/mdmd/mdmd.py +0 -0
  164. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_docs/mdmd/signatures.py +0 -0
  165. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/__init__.py +0 -0
  166. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/api.proto +0 -0
  167. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/api_grpc.py +0 -0
  168. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/api_pb2.py +0 -0
  169. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/api_pb2.pyi +0 -0
  170. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/api_pb2_grpc.py +0 -0
  171. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/api_pb2_grpc.pyi +0 -0
  172. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/modal_api_grpc.py +0 -0
  173. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/modal_options_grpc.py +0 -0
  174. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/options.proto +0 -0
  175. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/options_grpc.py +0 -0
  176. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/options_pb2.py +0 -0
  177. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/options_pb2.pyi +0 -0
  178. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/options_pb2_grpc.py +0 -0
  179. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/options_pb2_grpc.pyi +0 -0
  180. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_proto/py.typed +0 -0
  181. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/modal_version/__main__.py +0 -0
  182. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/pyproject.toml +0 -0
  183. {modal-1.0.0.dev18 → modal-1.0.0.dev20}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.0.0.dev18
3
+ Version: 1.0.0.dev20
4
4
  Summary: Python client library for Modal
5
5
  Author-email: Modal Labs <support@modal.com>
6
6
  License: Apache-2.0
@@ -99,8 +99,6 @@ if TYPE_CHECKING:
99
99
  import modal.cls
100
100
  import modal.partial_function
101
101
 
102
- MAX_INTERNAL_FAILURE_COUNT = 100
103
-
104
102
 
105
103
  @dataclasses.dataclass
106
104
  class _RetryContext:
@@ -350,14 +348,10 @@ class _InputPlaneInvocation:
350
348
  stub: ModalClientModal,
351
349
  attempt_token: str,
352
350
  client: _Client,
353
- input_item: api_pb2.FunctionPutInputsItem,
354
- function_id: str,
355
351
  ):
356
352
  self.stub = stub
357
353
  self.client = client # Used by the deserializer.
358
354
  self.attempt_token = attempt_token
359
- self.input_item = input_item
360
- self.function_id = function_id
361
355
 
362
356
  @staticmethod
363
357
  async def create(
@@ -371,53 +365,36 @@ class _InputPlaneInvocation:
371
365
  stub = await client.get_stub(input_plane_url)
372
366
 
373
367
  function_id = function.object_id
374
- input_item = await _create_input(args, kwargs, stub, method_name=function._use_method_name)
368
+ item = await _create_input(args, kwargs, stub, method_name=function._use_method_name)
375
369
 
376
370
  request = api_pb2.AttemptStartRequest(
377
371
  function_id=function_id,
378
372
  parent_input_id=current_input_id() or "",
379
- input=input_item,
373
+ input=item,
380
374
  )
381
375
  response = await retry_transient_errors(stub.AttemptStart, request)
382
376
  attempt_token = response.attempt_token
383
377
 
384
- return _InputPlaneInvocation(stub, attempt_token, client, input_item, function_id)
378
+ return _InputPlaneInvocation(stub, attempt_token, client)
385
379
 
386
380
  async def run_function(self) -> Any:
387
- # This will retry when the server returns GENERIC_STATUS_INTERNAL_FAILURE, i.e. lost inputs or worker preemption
388
- # TODO(ryan): add logic to retry for user defined
389
- internal_failure_count = 0
381
+ # TODO(nathan): add retry logic
390
382
  while True:
391
- await_request = api_pb2.AttemptAwaitRequest(
383
+ request = api_pb2.AttemptAwaitRequest(
392
384
  attempt_token=self.attempt_token,
393
385
  timeout_secs=OUTPUTS_TIMEOUT,
394
386
  requested_at=time.time(),
395
387
  )
396
- await_response: api_pb2.AttemptAwaitResponse = await retry_transient_errors(
388
+ response: api_pb2.AttemptAwaitResponse = await retry_transient_errors(
397
389
  self.stub.AttemptAwait,
398
- await_request,
390
+ request,
399
391
  attempt_timeout=OUTPUTS_TIMEOUT + ATTEMPT_TIMEOUT_GRACE_PERIOD,
400
392
  )
401
393
 
402
- try:
394
+ if response.HasField("output"):
403
395
  return await _process_result(
404
- await_response.output.result, await_response.output.data_format, self.stub, self.client
405
- )
406
- except InternalFailure as e:
407
- internal_failure_count += 1
408
- # Limit the number of times we retry
409
- if internal_failure_count >= MAX_INTERNAL_FAILURE_COUNT:
410
- raise e
411
- # For system failures on the server, we retry immediately,
412
- # and the failure does not count towards the retry policy.
413
- retry_request = api_pb2.AttemptRetryRequest(
414
- function_id=self.function_id,
415
- parent_input_id=current_input_id() or "",
416
- input=self.input_item,
417
- attempt_token=self.attempt_token,
396
+ response.output.result, response.output.data_format, self.stub, self.client
418
397
  )
419
- retry_response = await retry_transient_errors(self.stub.AttemptRetry, retry_request)
420
- self.attempt_token = retry_response.attempt_token
421
398
 
422
399
 
423
400
  # Wrapper type for api_pb2.FunctionStats
@@ -466,10 +466,7 @@ async def _process_result(result: api_pb2.GenericResult, data_format: int, stub,
466
466
 
467
467
  if result.status == api_pb2.GenericResult.GENERIC_STATUS_TIMEOUT:
468
468
  raise FunctionTimeoutError(result.exception)
469
- elif result.status in [
470
- api_pb2.GenericResult.GENERIC_STATUS_INTERNAL_FAILURE,
471
- api_pb2.GenericResult.GENERIC_STATUS_TERMINATED,
472
- ]:
469
+ elif result.status == api_pb2.GenericResult.GENERIC_STATUS_INTERNAL_FAILURE:
473
470
  raise InternalFailure(result.exception)
474
471
  elif result.status != api_pb2.GenericResult.GENERIC_STATUS_SUCCESS:
475
472
  if data:
@@ -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.0.dev18",
34
+ version: str = "1.0.0.dev20",
35
35
  ): ...
36
36
  def is_closed(self) -> bool: ...
37
37
  @property
@@ -94,7 +94,7 @@ class Client:
94
94
  server_url: str,
95
95
  client_type: int,
96
96
  credentials: typing.Optional[tuple[str, str]],
97
- version: str = "1.0.0.dev18",
97
+ version: str = "1.0.0.dev20",
98
98
  ): ...
99
99
  def is_closed(self) -> bool: ...
100
100
  @property
@@ -227,11 +227,11 @@ class Function(
227
227
 
228
228
  _call_generator: ___call_generator_spec[typing_extensions.Self]
229
229
 
230
- class __remote_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
230
+ class __remote_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
231
231
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
232
232
  async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> ReturnType_INNER: ...
233
233
 
234
- remote: __remote_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
234
+ remote: __remote_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
235
235
 
236
236
  class __remote_gen_spec(typing_extensions.Protocol[SUPERSELF]):
237
237
  def __call__(self, /, *args, **kwargs) -> typing.Generator[typing.Any, None, None]: ...
@@ -246,12 +246,12 @@ class Function(
246
246
  self, *args: modal._functions.P.args, **kwargs: modal._functions.P.kwargs
247
247
  ) -> modal._functions.OriginalReturnType: ...
248
248
 
249
- class ___experimental_spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
249
+ class ___experimental_spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
250
250
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
251
251
  async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
252
252
 
253
253
  _experimental_spawn: ___experimental_spawn_spec[
254
- modal._functions.P, modal._functions.ReturnType, typing_extensions.Self
254
+ modal._functions.ReturnType, modal._functions.P, typing_extensions.Self
255
255
  ]
256
256
 
257
257
  class ___spawn_map_inner_spec(typing_extensions.Protocol[P_INNER, SUPERSELF]):
@@ -260,11 +260,11 @@ class Function(
260
260
 
261
261
  _spawn_map_inner: ___spawn_map_inner_spec[modal._functions.P, typing_extensions.Self]
262
262
 
263
- class __spawn_spec(typing_extensions.Protocol[P_INNER, ReturnType_INNER, SUPERSELF]):
263
+ class __spawn_spec(typing_extensions.Protocol[ReturnType_INNER, P_INNER, SUPERSELF]):
264
264
  def __call__(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
265
265
  async def aio(self, /, *args: P_INNER.args, **kwargs: P_INNER.kwargs) -> FunctionCall[ReturnType_INNER]: ...
266
266
 
267
- spawn: __spawn_spec[modal._functions.P, modal._functions.ReturnType, typing_extensions.Self]
267
+ spawn: __spawn_spec[modal._functions.ReturnType, modal._functions.P, typing_extensions.Self]
268
268
 
269
269
  def get_raw_f(self) -> collections.abc.Callable[..., typing.Any]: ...
270
270
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modal
3
- Version: 1.0.0.dev18
3
+ Version: 1.0.0.dev20
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.0.dev18"
4
+ __version__ = "1.0.0.dev20"
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