modal 1.0.0.dev18__py3-none-any.whl → 1.0.0.dev19__py3-none-any.whl
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/_functions.py +9 -32
- modal/_utils/function_utils.py +1 -4
- modal/client.pyi +2 -2
- {modal-1.0.0.dev18.dist-info → modal-1.0.0.dev19.dist-info}/METADATA +1 -1
- {modal-1.0.0.dev18.dist-info → modal-1.0.0.dev19.dist-info}/RECORD +10 -10
- modal_version/__init__.py +1 -1
- {modal-1.0.0.dev18.dist-info → modal-1.0.0.dev19.dist-info}/WHEEL +0 -0
- {modal-1.0.0.dev18.dist-info → modal-1.0.0.dev19.dist-info}/entry_points.txt +0 -0
- {modal-1.0.0.dev18.dist-info → modal-1.0.0.dev19.dist-info}/licenses/LICENSE +0 -0
- {modal-1.0.0.dev18.dist-info → modal-1.0.0.dev19.dist-info}/top_level.txt +0 -0
modal/_functions.py
CHANGED
@@ -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
|
-
|
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=
|
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
|
378
|
+
return _InputPlaneInvocation(stub, attempt_token, client)
|
385
379
|
|
386
380
|
async def run_function(self) -> Any:
|
387
|
-
#
|
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
|
-
|
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
|
-
|
388
|
+
response: api_pb2.AttemptAwaitResponse = await retry_transient_errors(
|
397
389
|
self.stub.AttemptAwait,
|
398
|
-
|
390
|
+
request,
|
399
391
|
attempt_timeout=OUTPUTS_TIMEOUT + ATTEMPT_TIMEOUT_GRACE_PERIOD,
|
400
392
|
)
|
401
393
|
|
402
|
-
|
394
|
+
if response.HasField("output"):
|
403
395
|
return await _process_result(
|
404
|
-
|
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
|
modal/_utils/function_utils.py
CHANGED
@@ -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
|
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:
|
modal/client.pyi
CHANGED
@@ -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.
|
34
|
+
version: str = "1.0.0.dev19",
|
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.
|
97
|
+
version: str = "1.0.0.dev19",
|
98
98
|
): ...
|
99
99
|
def is_closed(self) -> bool: ...
|
100
100
|
@property
|
@@ -3,7 +3,7 @@ modal/__main__.py,sha256=sTJcc9EbDuCKSwg3tL6ZckFw9WWdlkXW8mId1IvJCNc,2846
|
|
3
3
|
modal/_clustered_functions.py,sha256=kTf-9YBXY88NutC1akI-gCbvf01RhMPCw-zoOI_YIUE,2700
|
4
4
|
modal/_clustered_functions.pyi,sha256=2aWxN2v5WUnj-R-sk6BzJ-3AvggkQGQjwhtvbDH3pds,777
|
5
5
|
modal/_container_entrypoint.py,sha256=2Zx9O_EMJg0H77EdnC2vGKs6uFMWwbP1NLFf-qYmWmU,28962
|
6
|
-
modal/_functions.py,sha256=
|
6
|
+
modal/_functions.py,sha256=HSQ8BVar2RsMD4ud83iUKvE7NSyEoVsTc-3quW8YObA,77149
|
7
7
|
modal/_ipython.py,sha256=TW1fkVOmZL3YYqdS2YlM1hqpf654Yf8ZyybHdBnlhSw,301
|
8
8
|
modal/_location.py,sha256=joiX-0ZeutEUDTrrqLF1GHXCdVLF-rHzstocbMcd_-k,366
|
9
9
|
modal/_object.py,sha256=KzzzZoM41UQUiY9TKOrft9BtZKgjWG_ukdlyLGjB4UY,10758
|
@@ -22,7 +22,7 @@ modal/app.py,sha256=NZ_rJ9TuMfiNiLg8-gOFgufD5flGtXWPHOZI0gdD3hE,46585
|
|
22
22
|
modal/app.pyi,sha256=4-b_vbe3lNAqQPcMRpQCEDsE1zsVkQRJGUql9B7HvbM,22659
|
23
23
|
modal/call_graph.py,sha256=1g2DGcMIJvRy-xKicuf63IVE98gJSnQsr8R_NVMptNc,2581
|
24
24
|
modal/client.py,sha256=o-aQThHpvDHUzg_kUafyhWzACViUBhY2WLZ2EitnSHA,16787
|
25
|
-
modal/client.pyi,sha256=
|
25
|
+
modal/client.pyi,sha256=SQcb7cVcVA9JvRHfZe0elbkd32wV3mwWyUl50N6lI-I,8459
|
26
26
|
modal/cloud_bucket_mount.py,sha256=YOe9nnvSr4ZbeCn587d7_VhE9IioZYRvF9VYQTQux08,5914
|
27
27
|
modal/cloud_bucket_mount.pyi,sha256=30T3K1a89l6wzmEJ_J9iWv9SknoGqaZDx59Xs-ZQcmk,1607
|
28
28
|
modal/cls.py,sha256=dBbeARwOWftlKd1cwtM0cHFtQWSWkwVXwVmOV4w0SyI,37907
|
@@ -96,7 +96,7 @@ modal/_utils/blob_utils.py,sha256=IexC2Jbtqp_Tkmy62ayfgzTYte0UPCNufB_v-DO21g8,18
|
|
96
96
|
modal/_utils/bytes_io_segment_payload.py,sha256=uunxVJS4PE1LojF_UpURMzVK9GuvmYWRqQo_bxEj5TU,3385
|
97
97
|
modal/_utils/deprecation.py,sha256=EXP1beU4pmEqEzWMLw6E3kUfNfpmNA_VOp6i0EHi93g,4856
|
98
98
|
modal/_utils/docker_utils.py,sha256=h1uETghR40mp_y3fSWuZAfbIASH1HMzuphJHghAL6DU,3722
|
99
|
-
modal/_utils/function_utils.py,sha256=
|
99
|
+
modal/_utils/function_utils.py,sha256=bhrjyOHPPXm6fAyJx3bzI1Yh56j6xh8eeMSFKdAWrHQ,26978
|
100
100
|
modal/_utils/git_utils.py,sha256=qtUU6JAttF55ZxYq51y55OR58B0tDPZsZWK5dJe6W5g,3182
|
101
101
|
modal/_utils/grpc_testing.py,sha256=H1zHqthv19eGPJz2HKXDyWXWGSqO4BRsxah3L5Xaa8A,8619
|
102
102
|
modal/_utils/grpc_utils.py,sha256=xSFosSJYQ4m6cH9WtChcSXqsnyk6DMeVvOHI4N3914g,10922
|
@@ -146,7 +146,7 @@ modal/requirements/2024.10.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddR
|
|
146
146
|
modal/requirements/PREVIEW.txt,sha256=qD-5cVIVM9wXesJ6JC89Ew-3m2KjEElUz3jaw_MddRo,296
|
147
147
|
modal/requirements/README.md,sha256=9tK76KP0Uph7O0M5oUgsSwEZDj5y-dcUPsnpR0Sc-Ik,854
|
148
148
|
modal/requirements/base-images.json,sha256=57vMSqzMbLBxw5tFWSaMiIkkVEps4JfX5PAtXGnkS4U,740
|
149
|
-
modal-1.0.0.
|
149
|
+
modal-1.0.0.dev19.dist-info/licenses/LICENSE,sha256=psuoW8kuDP96RQsdhzwOqi6fyWv0ct8CR6Jr7He_P_k,10173
|
150
150
|
modal_docs/__init__.py,sha256=svYKtV8HDwDCN86zbdWqyq5T8sMdGDj0PVlzc2tIxDM,28
|
151
151
|
modal_docs/gen_cli_docs.py,sha256=c1yfBS_x--gL5bs0N4ihMwqwX8l3IBWSkBAKNNIi6bQ,3801
|
152
152
|
modal_docs/gen_reference_docs.py,sha256=d_CQUGQ0rfw28u75I2mov9AlS773z9rG40-yq5o7g2U,6359
|
@@ -169,10 +169,10 @@ modal_proto/options_pb2.pyi,sha256=l7DBrbLO7q3Ir-XDkWsajm0d0TQqqrfuX54i4BMpdQg,1
|
|
169
169
|
modal_proto/options_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
170
170
|
modal_proto/options_pb2_grpc.pyi,sha256=CImmhxHsYnF09iENPoe8S4J-n93jtgUYD2JPAc0yJSI,247
|
171
171
|
modal_proto/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
172
|
-
modal_version/__init__.py,sha256
|
172
|
+
modal_version/__init__.py,sha256=FR4_HseRm9npOtRt6PAqTMeTh0iZcSgepflnoYAz040,121
|
173
173
|
modal_version/__main__.py,sha256=2FO0yYQQwDTh6udt1h-cBnGd1c4ZyHnHSI4BksxzVac,105
|
174
|
-
modal-1.0.0.
|
175
|
-
modal-1.0.0.
|
176
|
-
modal-1.0.0.
|
177
|
-
modal-1.0.0.
|
178
|
-
modal-1.0.0.
|
174
|
+
modal-1.0.0.dev19.dist-info/METADATA,sha256=onMFcBbloX_n7iUnqwySK_5uAg3gJyoC7JoDWiigpMM,2455
|
175
|
+
modal-1.0.0.dev19.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
|
176
|
+
modal-1.0.0.dev19.dist-info/entry_points.txt,sha256=An-wYgeEUnm6xzrAP9_NTSTSciYvvEWsMZILtYrvpAI,46
|
177
|
+
modal-1.0.0.dev19.dist-info/top_level.txt,sha256=4BWzoKYREKUZ5iyPzZpjqx4G8uB5TWxXPDwibLcVa7k,43
|
178
|
+
modal-1.0.0.dev19.dist-info/RECORD,,
|
modal_version/__init__.py
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|