indexify 0.2.14__py3-none-any.whl → 0.2.16__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.
@@ -1,11 +1,20 @@
1
+ def python_version_to_image(python_version):
2
+ if python_version.startswith("3.9"):
3
+ return "python:3.9.20-bookworm"
4
+ elif python_version.startswith("3.10"):
5
+ return "python:3.10.15-bookworm"
6
+ elif python_version.startswith("3.11"):
7
+ return "python:3.11.10-bookworm"
8
+ else:
9
+ raise ValueError(f"unsupported Python version: {python_version}")
10
+
11
+
1
12
  class Image:
2
- def __init__(self):
13
+ def __init__(self, python="3.10"):
3
14
  self._image_name = None
4
-
5
15
  self._tag = "latest"
6
-
7
- self._base_image = "python:3.11.10-slim-bookworm"
8
-
16
+ self._base_image = python_version_to_image(python)
17
+ self._python_version = python
9
18
  self._run_strs = []
10
19
 
11
20
  def name(self, image_name):
@@ -79,6 +79,10 @@ class IndexifyFunction(ABC):
79
79
 
80
80
  return partial(self.run, **kwargs)
81
81
 
82
+ @classmethod
83
+ def deserialize_output(cls, output: IndexifyData) -> Any:
84
+ serializer = get_serializer(cls.payload_encoder)
85
+ return serializer.deserialize(output.payload)
82
86
 
83
87
  class IndexifyRouter(ABC):
84
88
  name: str = ""
@@ -214,6 +218,8 @@ class IndexifyFunctionWrapper:
214
218
  args.append(input)
215
219
 
216
220
  extracted_data = self.indexify_function.run(*args, **kwargs)
221
+ if extracted_data is None:
222
+ return []
217
223
 
218
224
  return extracted_data if isinstance(extracted_data, list) else [extracted_data]
219
225
 
@@ -230,7 +236,7 @@ class IndexifyFunctionWrapper:
230
236
  acc = self.indexify_function.accumulate.model_validate(
231
237
  self.indexify_function.accumulate()
232
238
  )
233
- outputs: List[Any] = self.run_fn(input, acc=acc)
239
+ outputs: Optional[List[Any]] = self.run_fn(input, acc=acc)
234
240
  return [
235
241
  IndexifyData(payload=serializer.serialize(output)) for output in outputs
236
242
  ]
@@ -265,7 +271,3 @@ class IndexifyFunctionWrapper:
265
271
  payload = list(payload.values())[0]
266
272
  return arg_type.model_validate(payload)
267
273
  return payload
268
-
269
- def deserialize_fn_output(self, output: IndexifyData) -> Any:
270
- serializer = get_serializer(self.indexify_function.payload_encoder)
271
- return serializer.deserialize(output.payload)
indexify/http_client.py CHANGED
@@ -13,7 +13,7 @@ from rich import print
13
13
  from indexify.error import ApiException
14
14
  from indexify.functions_sdk.data_objects import IndexifyData
15
15
  from indexify.functions_sdk.graph import ComputeGraphMetadata, Graph
16
- from indexify.functions_sdk.indexify_functions import IndexifyFunctionWrapper
16
+ from indexify.functions_sdk.indexify_functions import IndexifyFunction
17
17
  from indexify.settings import DEFAULT_SERVICE_URL, DEFAULT_SERVICE_URL_HTTPS
18
18
 
19
19
 
@@ -71,7 +71,7 @@ class IndexifyClient:
71
71
  self._service_url = service_url
72
72
  self._timeout = kwargs.get("timeout")
73
73
  self._graphs: Dict[str, Graph] = {}
74
- self._fns = {}
74
+ self._fns: Dict[str, IndexifyFunction] = {}
75
75
 
76
76
  def _request(self, method: str, **kwargs) -> httpx.Response:
77
77
  try:
@@ -181,14 +181,12 @@ class IndexifyClient:
181
181
  response = self._get(f"namespaces/{self.namespace}/compute_graphs/{name}")
182
182
  return ComputeGraphMetadata(**response.json())
183
183
 
184
- def load_fn_wrapper(self, name: str, fn_name: str) -> IndexifyFunctionWrapper:
184
+ def load_fn(self, name: str, fn_name: str) -> IndexifyFunction:
185
185
  response = self._get(
186
186
  f"internal/namespaces/{self.namespace}/compute_graphs/{name}/code"
187
187
  )
188
188
  pickled_functions_by_name = cloudpickle.loads(response.content)
189
- return IndexifyFunctionWrapper(
190
- cloudpickle.loads(pickled_functions_by_name[fn_name])
191
- )
189
+ return cloudpickle.loads(pickled_functions_by_name[fn_name])
192
190
 
193
191
  def namespaces(self) -> List[str]:
194
192
  response = self._get(f"namespaces")
@@ -323,7 +321,7 @@ class IndexifyClient:
323
321
  """
324
322
  fn_key = f"{graph}/{fn_name}"
325
323
  if fn_key not in self._fns:
326
- self._fns[fn_key] = self.load_fn_wrapper(graph, fn_name)
324
+ self._fns[fn_key] = self.load_fn(graph, fn_name)
327
325
  response = self._get(
328
326
  f"namespaces/{self.namespace}/compute_graphs/{graph}/invocations/{invocation_id}/outputs",
329
327
  )
@@ -335,7 +333,7 @@ class IndexifyClient:
335
333
  indexify_data = self._download_output(
336
334
  self.namespace, graph, invocation_id, fn_name, output.id
337
335
  )
338
- output = self._fns[fn_key].deserialize_fn_output(indexify_data)
336
+ output = self._fns[fn_key].deserialize_output(indexify_data)
339
337
  outputs.append(output)
340
338
  return outputs
341
339
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: indexify
3
- Version: 0.2.14
3
+ Version: 0.2.16
4
4
  Summary: Python Client for Indexify
5
5
  Home-page: https://github.com/tensorlakeai/indexify
6
6
  License: Apache 2.0
@@ -17,17 +17,17 @@ indexify/functions_sdk/data_objects.py,sha256=CQZMzYiV7l6dyzFkYquWQHqdte6JnC7XA3
17
17
  indexify/functions_sdk/graph.py,sha256=3hUZjdCesiAHJ9y1_heQsEFO-WHROR4kRYxBtVnb7Y4,11937
18
18
  indexify/functions_sdk/graph_definition.py,sha256=EJfC0MdKEbFF1CBaU0htrveSlcAQJCH96DLSNfZ02V4,1178
19
19
  indexify/functions_sdk/graph_validation.py,sha256=XLHiC9PAtZungJLysU3hIUOPNDkO5TXUDZ_jiZ0H4hg,2508
20
- indexify/functions_sdk/image.py,sha256=Rsol3LfE15Kca78ruPfDrDPqCkeZPxZx0ULYrFFS5ig,905
21
- indexify/functions_sdk/indexify_functions.py,sha256=QnumxE0Ln_ryyyjLMopjCGZQUGSX7N25PRpisIdEEXI,9600
20
+ indexify/functions_sdk/image.py,sha256=0uM2VQXqB45ymnFyZVJIiyTGUYHWAHDZ1ORu-hWrofk,1338
21
+ indexify/functions_sdk/indexify_functions.py,sha256=2KZRKdyLSzsrVrWfJGQp_b8grffDKSt_ripgiISTz8Q,9660
22
22
  indexify/functions_sdk/local_cache.py,sha256=cNWF67zbhbTJe3g86hyLBy3Rqzs6dNvp2SjLazGZWvw,1348
23
23
  indexify/functions_sdk/object_serializer.py,sha256=Zz4GobW3ZamBBtFDF76QxU3TP6oJNdWnhsfKd0OUFoc,1660
24
24
  indexify/functions_sdk/pipeline.py,sha256=7hDatRK-SCHYvttf2Vj5YFyiJEVU0OOXEZBOIQenSmk,847
25
- indexify/http_client.py,sha256=EBzqwT3r90W4w0ADG8oRy8tCh47BHuMPB-vVh-bjUO8,13640
25
+ indexify/http_client.py,sha256=x92EbFD987pIxuBVVQZ-eN9nSL-oI2vpfv6OSKuBGgs,13589
26
26
  indexify/remote_graph.py,sha256=ILg6IY6EFgyvnfz1DSzicBZhqvPkg2-UUwgI6lxp6sA,3094
27
27
  indexify/remote_pipeline.py,sha256=FW7IAv3r24OOpiqlprw3kuFrpdkqi6Ic4_tT26FThjA,761
28
28
  indexify/settings.py,sha256=LSaWZ0ADIVmUv6o6dHWRC3-Ry5uLbCw2sBSg1e_U7UM,99
29
- indexify-0.2.14.dist-info/LICENSE.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
30
- indexify-0.2.14.dist-info/METADATA,sha256=zMLk24iy5hXk8BGlvSxkAMHenl2JNxSeXQuENZLNsuY,6199
31
- indexify-0.2.14.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
32
- indexify-0.2.14.dist-info/entry_points.txt,sha256=Pih7WV-XMpAzI5dEvROcpLr-ybVhd9Y-AtuzBKUdcDs,49
33
- indexify-0.2.14.dist-info/RECORD,,
29
+ indexify-0.2.16.dist-info/LICENSE.txt,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
30
+ indexify-0.2.16.dist-info/METADATA,sha256=kvomzkLgJZoVQYfukNvExhEMmzwJBMwOBTq6oPnEy9A,6199
31
+ indexify-0.2.16.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
32
+ indexify-0.2.16.dist-info/entry_points.txt,sha256=Pih7WV-XMpAzI5dEvROcpLr-ybVhd9Y-AtuzBKUdcDs,49
33
+ indexify-0.2.16.dist-info/RECORD,,