indexify 0.2.46__py3-none-any.whl → 0.2.48__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.
@@ -80,8 +80,8 @@ class SingleTaskRunner:
80
80
  return function_executor
81
81
  except Exception as e:
82
82
  self._logger.error(
83
- "failed to initialize function executor",
84
- exc_info=e,
83
+ f"failed to initialize function executor: {e.details()}",
84
+ # exc_info=e.details(),
85
85
  )
86
86
  await function_executor.destroy()
87
87
  raise
@@ -33,8 +33,8 @@ class TaskRunner:
33
33
  return await self._run(task_input, logger)
34
34
  except Exception as e:
35
35
  logger.error(
36
- "failed running the task",
37
- exc_info=e,
36
+ f"failed running the task: {e.details()}",
37
+ # exc_info=e.debug_error_string(),
38
38
  )
39
39
  return TaskOutput.internal_error(task_input.task)
40
40
 
@@ -56,7 +56,13 @@ class FunctionExecutorService(FunctionExecutorServicer):
56
56
  # share the model's file descriptor between all tasks or download function configuration
57
57
  # only once.
58
58
  graph_serializer = get_serializer(request.graph.content_type)
59
- graph = graph_serializer.deserialize(request.graph.bytes)
59
+
60
+ try:
61
+ graph = graph_serializer.deserialize(request.graph.bytes)
62
+ except Exception as e:
63
+ self._logger.error(f"Caught exception {e}")
64
+ return InitializeResponse(success=False)
65
+
60
66
  self._function = graph_serializer.deserialize(graph[request.function_name])
61
67
 
62
68
  self._logger = self._logger.bind(
@@ -7,7 +7,7 @@ import pathlib
7
7
  import sys
8
8
  import tarfile
9
9
  from io import BytesIO
10
- from typing import List, Optional
10
+ from typing import Dict, List, Optional
11
11
 
12
12
  import docker
13
13
  import docker.api.build
@@ -32,12 +32,13 @@ HASH_BUFF_SIZE = 1024**2
32
32
 
33
33
  class BuildOp(BaseModel):
34
34
  op_type: str
35
+ options: Dict[str, str] = {}
35
36
  args: List[str]
36
37
 
37
38
  def hash(self, hash):
38
39
  match self.op_type:
39
- case "RUN":
40
- hash.update("RUN".encode())
40
+ case "RUN" | "ADD":
41
+ hash.update(self.op_type.encode())
41
42
  for a in self.args:
42
43
  hash.update(a.encode())
43
44
 
@@ -57,8 +58,10 @@ class BuildOp(BaseModel):
57
58
 
58
59
  def render(self):
59
60
  match self.op_type:
60
- case "RUN":
61
- return f"RUN {''.join(self.args)}"
61
+ case "RUN" | "ADD":
62
+ options = [f"--{k}={v}" for k, v in self.options.items()]
63
+ return f"{self.op_type} {' '.join(options)} {' '.join(self.args)}"
64
+
62
65
  case "COPY":
63
66
  return f"COPY {self.args[0]} {self.args[1]}"
64
67
  case _:
@@ -76,6 +79,7 @@ class Build(BaseModel):
76
79
  image_hash: str
77
80
  status: str | None
78
81
  result: str | None
82
+ error_message: str | None = None # Only provided when result is "failed"
79
83
 
80
84
  created_at: datetime.datetime | None
81
85
  started_at: datetime.datetime | None = None
@@ -105,12 +109,20 @@ class Image:
105
109
  self._base_image = base_image
106
110
  return self
107
111
 
108
- def run(self, run_str):
109
- self._build_ops.append(BuildOp(op_type="RUN", args=[run_str]))
112
+ def add(self, source: str, dest: str, **kwargs):
113
+ self._build_ops.append(
114
+ BuildOp(op_type="ADD", args=[source, dest], options=kwargs)
115
+ )
110
116
  return self
111
117
 
112
- def copy(self, source: str, dest: str):
113
- self._build_ops.append(BuildOp(op_type="COPY", args=[source, dest]))
118
+ def run(self, run_str, **kwargs):
119
+ self._build_ops.append(BuildOp(op_type="RUN", args=[run_str], options=kwargs))
120
+ return self
121
+
122
+ def copy(self, source: str, dest: str, **kwargs):
123
+ self._build_ops.append(
124
+ BuildOp(op_type="COPY", args=[source, dest], options=kwargs)
125
+ )
114
126
  return self
115
127
 
116
128
  def to_image_information(self):
@@ -267,6 +267,8 @@ class IndexifyFunctionWrapper:
267
267
  # with json encoding which won't deserialize in tuple.
268
268
  if isinstance(input, tuple) or isinstance(input, list):
269
269
  args += input
270
+ elif isinstance(input, dict):
271
+ kwargs.update(input)
270
272
  else:
271
273
  args.append(input)
272
274
  extracted_data = self.indexify_function._call_run(*args, **kwargs)
@@ -292,6 +294,8 @@ class IndexifyFunctionWrapper:
292
294
  # with json encoding which won't deserialize in tuple.
293
295
  if isinstance(input, tuple) or isinstance(input, list):
294
296
  args += input
297
+ elif isinstance(input, dict):
298
+ kwargs.update(input)
295
299
  else:
296
300
  args.append(input)
297
301
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: indexify
3
- Version: 0.2.46
3
+ Version: 0.2.48
4
4
  Summary: Python Client for Indexify
5
5
  Home-page: https://github.com/tensorlakeai/indexify
6
6
  License: Apache 2.0
@@ -15,14 +15,14 @@ indexify/executor/function_executor/server/function_executor_server.py,sha256=_D
15
15
  indexify/executor/function_executor/server/function_executor_server_factory.py,sha256=pGbJMQfC5TNvyWOs6VDKdqd2PK5OHQh5_wSDP-E7DbI,1677
16
16
  indexify/executor/function_executor/server/subprocess_function_executor_server.py,sha256=DxQMwAvQi03OGo2sFruUrxwcMPG8In4C62L3sped2FI,694
17
17
  indexify/executor/function_executor/server/subprocess_function_executor_server_factory.py,sha256=MrhlcH5UZXJn9mAuyCJVVcJTihx8SDDuaraXFvkWjsU,3628
18
- indexify/executor/function_executor/single_task_runner.py,sha256=mzYSUswpN-q98L1VALnt246AwmyNlQ-BcKZR96wF6gw,5722
18
+ indexify/executor/function_executor/single_task_runner.py,sha256=al4Ngq2oQgEbThNOn1qA45XZ2AUJCysGxXhiZmzFBZA,5750
19
19
  indexify/executor/function_executor/task_input.py,sha256=7Mkd-OCt1s9HdbyhrxKQkhxsVR9yeT6jC6zd2knt5-8,591
20
20
  indexify/executor/function_executor/task_output.py,sha256=3-qcT1aigmOFEp6QSJtUcQfqeJfrxvo265qgk9WAUVg,1064
21
21
  indexify/executor/runtime_probes.py,sha256=bo6Dq6AGZpJH099j0DHtVSDEH80tv3j9MXf3VXSx_p8,2182
22
22
  indexify/executor/task_fetcher.py,sha256=qBuVxgjzjkTi_1_hyQqtBxetBxdL7TGMgI4FBwyTANE,3004
23
23
  indexify/executor/task_reporter.py,sha256=xHEk_TVeXYo6rcuDWImFmjLjfwRvpohP1-MS4grCASM,6663
24
- indexify/executor/task_runner.py,sha256=yO_5o8-oA-TeSyxqS-DX6XfUb0947jrPijJeGI4wqQk,4807
25
- indexify/function_executor/function_executor_service.py,sha256=DVP19TUo5iPAki5dh320kT2JjO69bLszE1rWkWg2MiY,4244
24
+ indexify/executor/task_runner.py,sha256=7VCn5qLxsWV-NECnxX-29kh3wWLmKjR1Cbnt7g3cpps,4846
25
+ indexify/function_executor/function_executor_service.py,sha256=AyB65KREhNueB_iZu1QvNxhNPAQqJVsq3pKwZWKLzVA,4403
26
26
  indexify/function_executor/handlers/run_function/function_inputs_loader.py,sha256=x2Lrzb6CsEWDWW5qG9etS7TyV7KVYfuFKEbzKVhYizo,1553
27
27
  indexify/function_executor/handlers/run_function/handler.py,sha256=g6JZna852tQleASn9lA651fZh_chVYTKbyWDvgXi0NA,5695
28
28
  indexify/function_executor/handlers/run_function/request_validator.py,sha256=tVmbOS2g4AeV48CZCSDRycnoQjjGy12XD_vbaOLX_Z4,740
@@ -42,8 +42,8 @@ indexify/functions_sdk/data_objects.py,sha256=ZJ7B9b5OI7aieCWJFx18pV6tqScssIFtmt
42
42
  indexify/functions_sdk/graph.py,sha256=_54nK1xckZ8dYf6ApalTDmaQwa_QPf66e9rDXf5Ii_4,13356
43
43
  indexify/functions_sdk/graph_definition.py,sha256=yQ7c7jpA8RB8Yt81D1i5R3LPT8fmLvN8bLuEHvS4P_o,1775
44
44
  indexify/functions_sdk/graph_validation.py,sha256=mN2Fcp91GIwFZEQP6z_qGqt4LkLM70SnI7AWBi4CmKQ,2509
45
- indexify/functions_sdk/image.py,sha256=tXt_Ho5kIqH54MTCdK_Hp1eG6xnmYVnYiY70xlABZ0I,6245
46
- indexify/functions_sdk/indexify_functions.py,sha256=6OzZZILH3xoWzPYFMo167N6p8KmbN_-cEJRJMEzL5YE,12284
45
+ indexify/functions_sdk/image.py,sha256=iLvA7yHRGKcPLbPmb4mM5JqVduhr9aVn5kjaCMYsOgY,6754
46
+ indexify/functions_sdk/indexify_functions.py,sha256=PA1cH3wCZoNiGlO_5igNH-8T0NcUXzMhQYAvUSebdZQ,12434
47
47
  indexify/functions_sdk/invocation_state/invocation_state.py,sha256=azSRnX-ryii2Ehqfn5v2vuoXd0pWLu4koRf6RPBNQJk,828
48
48
  indexify/functions_sdk/invocation_state/local_invocation_state.py,sha256=f3m_xlfaGrep-YBqJFXUXpBykyKfEQtyaJ606htwGX4,1107
49
49
  indexify/functions_sdk/object_serializer.py,sha256=R58ALsl2Lb87ii6km4D6hBBsqRs_CHNISxhUICE2d9o,1931
@@ -53,8 +53,8 @@ indexify/logging.py,sha256=_TLnWT0RzABvExwTixjdpuxoSNUev4zeNV0K1VlEUmA,1099
53
53
  indexify/remote_graph.py,sha256=OzBucU4buR5UdTViNJvh1RfnOTmYA34Uel5qXnRsQsA,5006
54
54
  indexify/remote_pipeline.py,sha256=oqx57rSPszNS3DToXO_nf-CKqkCZWptm1u_p3orV_gQ,790
55
55
  indexify/settings.py,sha256=Ny59mzYI4gbXoK8hjx66a_men6ndbd1J1zCTcKOoyzg,50
56
- indexify-0.2.46.dist-info/LICENSE.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
57
- indexify-0.2.46.dist-info/METADATA,sha256=wTUz5oyqVdlH5IEGNBy456huBxR6zS8c7wu8r_m3wBs,6267
58
- indexify-0.2.46.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
59
- indexify-0.2.46.dist-info/entry_points.txt,sha256=Pih7WV-XMpAzI5dEvROcpLr-ybVhd9Y-AtuzBKUdcDs,49
60
- indexify-0.2.46.dist-info/RECORD,,
56
+ indexify-0.2.48.dist-info/LICENSE.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
57
+ indexify-0.2.48.dist-info/METADATA,sha256=4e9_2wZOkxC-Ae0bIxL5Q0G7P59O21Hw_H5MfS0ugY8,6267
58
+ indexify-0.2.48.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
59
+ indexify-0.2.48.dist-info/entry_points.txt,sha256=Pih7WV-XMpAzI5dEvROcpLr-ybVhd9Y-AtuzBKUdcDs,49
60
+ indexify-0.2.48.dist-info/RECORD,,