indexify 0.2.14__tar.gz → 0.2.16__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 (32) hide show
  1. {indexify-0.2.14 → indexify-0.2.16}/PKG-INFO +1 -1
  2. {indexify-0.2.14 → indexify-0.2.16}/indexify/functions_sdk/image.py +14 -5
  3. {indexify-0.2.14 → indexify-0.2.16}/indexify/functions_sdk/indexify_functions.py +7 -5
  4. {indexify-0.2.14 → indexify-0.2.16}/indexify/http_client.py +6 -8
  5. {indexify-0.2.14 → indexify-0.2.16}/pyproject.toml +1 -1
  6. {indexify-0.2.14 → indexify-0.2.16}/LICENSE.txt +0 -0
  7. {indexify-0.2.14 → indexify-0.2.16}/README.md +0 -0
  8. {indexify-0.2.14 → indexify-0.2.16}/indexify/__init__.py +0 -0
  9. {indexify-0.2.14 → indexify-0.2.16}/indexify/cli.py +0 -0
  10. {indexify-0.2.14 → indexify-0.2.16}/indexify/data_loaders/__init__.py +0 -0
  11. {indexify-0.2.14 → indexify-0.2.16}/indexify/data_loaders/local_directory_loader.py +0 -0
  12. {indexify-0.2.14 → indexify-0.2.16}/indexify/data_loaders/url_loader.py +0 -0
  13. {indexify-0.2.14 → indexify-0.2.16}/indexify/error.py +0 -0
  14. {indexify-0.2.14 → indexify-0.2.16}/indexify/executor/agent.py +0 -0
  15. {indexify-0.2.14 → indexify-0.2.16}/indexify/executor/api_objects.py +0 -0
  16. {indexify-0.2.14 → indexify-0.2.16}/indexify/executor/downloader.py +0 -0
  17. {indexify-0.2.14 → indexify-0.2.16}/indexify/executor/executor_tasks.py +0 -0
  18. {indexify-0.2.14 → indexify-0.2.16}/indexify/executor/function_worker.py +0 -0
  19. {indexify-0.2.14 → indexify-0.2.16}/indexify/executor/indexify_executor.py +0 -0
  20. {indexify-0.2.14 → indexify-0.2.16}/indexify/executor/runtime_probes.py +0 -0
  21. {indexify-0.2.14 → indexify-0.2.16}/indexify/executor/task_reporter.py +0 -0
  22. {indexify-0.2.14 → indexify-0.2.16}/indexify/executor/task_store.py +0 -0
  23. {indexify-0.2.14 → indexify-0.2.16}/indexify/functions_sdk/data_objects.py +0 -0
  24. {indexify-0.2.14 → indexify-0.2.16}/indexify/functions_sdk/graph.py +0 -0
  25. {indexify-0.2.14 → indexify-0.2.16}/indexify/functions_sdk/graph_definition.py +0 -0
  26. {indexify-0.2.14 → indexify-0.2.16}/indexify/functions_sdk/graph_validation.py +0 -0
  27. {indexify-0.2.14 → indexify-0.2.16}/indexify/functions_sdk/local_cache.py +0 -0
  28. {indexify-0.2.14 → indexify-0.2.16}/indexify/functions_sdk/object_serializer.py +0 -0
  29. {indexify-0.2.14 → indexify-0.2.16}/indexify/functions_sdk/pipeline.py +0 -0
  30. {indexify-0.2.14 → indexify-0.2.16}/indexify/remote_graph.py +0 -0
  31. {indexify-0.2.14 → indexify-0.2.16}/indexify/remote_pipeline.py +0 -0
  32. {indexify-0.2.14 → indexify-0.2.16}/indexify/settings.py +0 -0
@@ -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
@@ -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)
@@ -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
  [tool.poetry]
2
2
  name = "indexify"
3
- version = "0.2.14"
3
+ version = "0.2.16"
4
4
  description = "Python Client for Indexify"
5
5
  authors = ["Tensorlake Inc. <support@tensorlake.ai>"]
6
6
  license = "Apache 2.0"
File without changes
File without changes
File without changes
File without changes