infinity-sdk 0.7.0.dev7__tar.gz → 0.7.2__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 (37) hide show
  1. {infinity_sdk-0.7.0.dev7/python/infinity_sdk/infinity_sdk.egg-info → infinity_sdk-0.7.2}/PKG-INFO +2 -2
  2. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/README.md +1 -1
  3. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/pyproject.toml +1 -1
  4. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/README.md +1 -1
  5. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/index.py +3 -0
  6. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/client.py +2 -3
  7. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/infinity_thrift_rpc/ttypes.py +3 -0
  8. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/utils.py +74 -1
  9. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/utils.py +4 -0
  10. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2/python/infinity_sdk/infinity_sdk.egg-info}/PKG-INFO +2 -2
  11. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/LICENSE +0 -0
  12. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/__init__.py +0 -0
  13. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/common.py +0 -0
  14. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/connection_pool.py +0 -0
  15. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/db.py +0 -0
  16. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/errors.py +0 -0
  17. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/http_utils.py +0 -0
  18. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/huqie.txt +0 -0
  19. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/huqie.txt.trie +0 -0
  20. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/infinity.py +0 -0
  21. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/infinity_http.py +0 -0
  22. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/rag_tokenizer.py +0 -0
  23. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/__init__.py +0 -0
  24. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/db.py +0 -0
  25. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/infinity.py +0 -0
  26. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/infinity_thrift_rpc/InfinityService.py +0 -0
  27. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/infinity_thrift_rpc/__init__.py +0 -0
  28. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/infinity_thrift_rpc/constants.py +0 -0
  29. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/query_builder.py +0 -0
  30. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/table.py +0 -0
  31. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/types.py +0 -0
  32. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/table.py +0 -0
  33. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity_sdk.egg-info/SOURCES.txt +0 -0
  34. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity_sdk.egg-info/dependency_links.txt +0 -0
  35. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity_sdk.egg-info/requires.txt +0 -0
  36. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity_sdk.egg-info/top_level.txt +0 -0
  37. {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: infinity-sdk
3
- Version: 0.7.0.dev7
3
+ Version: 0.7.2
4
4
  Summary: infinity
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: <3.14,>=3.11
@@ -97,7 +97,7 @@ Infinity supports two working modes, embedded mode and client-server mode. The f
97
97
 
98
98
  2. Install the `infinity-sdk` package:
99
99
  ```bash
100
- pip install infinity-sdk==0.7.0.dev7
100
+ pip install infinity-sdk==0.7.2
101
101
  ```
102
102
 
103
103
  3. Use Infinity to conduct a dense vector search:
@@ -96,7 +96,7 @@ If you are on Windows 10+, you must enable WSL or WSL2 to deploy Infinity using
96
96
  ### Install Infinity client
97
97
 
98
98
  ```
99
- pip install infinity-sdk==0.7.0.dev7
99
+ pip install infinity-sdk==0.7.2
100
100
  ```
101
101
 
102
102
  ### Run a vector search
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "infinity-sdk"
3
- version = "0.7.0.dev7"
3
+ version = "0.7.2"
4
4
  description = "infinity"
5
5
  readme = "python/infinity_sdk/README.md"
6
6
  license = "Apache-2.0"
@@ -63,7 +63,7 @@ Infinity supports two working modes, embedded mode and client-server mode. The f
63
63
 
64
64
  2. Install the `infinity-sdk` package:
65
65
  ```bash
66
- pip install infinity-sdk==0.7.0.dev7
66
+ pip install infinity-sdk==0.7.2
67
67
  ```
68
68
 
69
69
  3. Use Infinity to conduct a dense vector search:
@@ -31,6 +31,7 @@ class IndexType(Enum):
31
31
  BMP = 7
32
32
  DiskAnn = 8
33
33
  PLAID = 9
34
+ SMVE = 10
34
35
 
35
36
  def to_ttype(self):
36
37
  match self:
@@ -52,6 +53,8 @@ class IndexType(Enum):
52
53
  return ttypes.IndexType.DiskAnn
53
54
  case IndexType.PLAID:
54
55
  return ttypes.IndexType.PLAID
56
+ case IndexType.SMVE:
57
+ return ttypes.IndexType.SMVE
55
58
  case _:
56
59
  raise InfinityException(ErrorCode.INVALID_INDEX_TYPE, "Unknown index type")
57
60
 
@@ -123,9 +123,8 @@ class ThriftInfinityClient:
123
123
  # version: 0.6.8 and 0.6.9 and 0.6.10, client_version: 33
124
124
  # version: 0.6.13, client_version: 34
125
125
  # version: 0.6.15, client_version: 35
126
- # version: 0.7.0, 0.7.0.dev1, 0.7.0.dev2, 0.7.0.dev3, 0.7.0.dev4, 0.7.0.dev5,
127
- # 0.7.0.dev6 and 0.7.0.dev7, client_version: 36
128
- res = self.client.Connect(ConnectRequest(client_version=36)) # 0.7.0.dev7
126
+ # version: 0.7.0, 0.7.1, 0.7.2 client_version: 36
127
+ res = self.client.Connect(ConnectRequest(client_version=36)) # 0.7.2
129
128
  if res.error_code != 0:
130
129
  raise InfinityException(res.error_code, res.error_msg)
131
130
  self.session_id = res.session_id
@@ -399,6 +399,7 @@ class IndexType(object):
399
399
  EMVB = 6
400
400
  DiskAnn = 7
401
401
  PLAID = 8
402
+ SMVE = 9
402
403
 
403
404
  _VALUES_TO_NAMES = {
404
405
  0: "IVF",
@@ -410,6 +411,7 @@ class IndexType(object):
410
411
  6: "EMVB",
411
412
  7: "DiskAnn",
412
413
  8: "PLAID",
414
+ 9: "SMVE",
413
415
  }
414
416
 
415
417
  _NAMES_TO_VALUES = {
@@ -422,6 +424,7 @@ class IndexType(object):
422
424
  "EMVB": 6,
423
425
  "DiskAnn": 7,
424
426
  "PLAID": 8,
427
+ "SMVE": 9,
425
428
  }
426
429
 
427
430
 
@@ -224,13 +224,86 @@ def generic_match_to_string(generic_match_expr: ttypes.GenericMatchExpr) -> str:
224
224
  return f"match_text(fields='{generic_match_expr.match_text_expr.fields}', matching_text='{generic_match_expr.match_text_expr.matching_text}', options='{generic_match_expr.match_text_expr.options_text}')"
225
225
 
226
226
 
227
+ def _make_escape_expr(escape_char=None):
228
+ """Create escape expression, using explicit escape char if provided."""
229
+ escape_expr = ttypes.ParsedExpr()
230
+ escape_constant = ttypes.ConstantExpr()
231
+ escape_constant.literal_type = ttypes.LiteralType.String
232
+ # Use explicit escape char or default to backslash
233
+ # escape_char may be a sqlglot Literal or a string
234
+ if escape_char is not None:
235
+ if hasattr(escape_char, 'output_name'):
236
+ escape_value = escape_char.output_name
237
+ else:
238
+ escape_value = str(escape_char)
239
+ else:
240
+ escape_value = "\\"
241
+ escape_constant.str_value = escape_value
242
+ escape_expr_type = ttypes.ParsedExprType()
243
+ escape_expr_type.constant_expr = escape_constant
244
+ escape_expr.type = escape_expr_type
245
+ return escape_expr
246
+
247
+
248
+ def _parse_like(like_node, escape_char=None):
249
+ """Parse a Like node into a ParsedExpr."""
250
+ parsed_expr = ttypes.ParsedExpr()
251
+ function_expr = ttypes.FunctionExpr()
252
+ function_expr.function_name = binary_exp_to_paser_exp('like')
253
+
254
+ left_expr = parse_expr(like_node.args['this'])
255
+ pattern_expr = parse_expr(like_node.args['expression'])
256
+
257
+ escape_expr = _make_escape_expr(escape_char)
258
+
259
+ function_expr.arguments = [left_expr, pattern_expr, escape_expr]
260
+ parser_expr_type = ttypes.ParsedExprType()
261
+ parser_expr_type.function_expr = function_expr
262
+ parsed_expr.type = parser_expr_type
263
+ return parsed_expr
264
+
265
+
266
+ def _parse_not_like(like_node, escape_char=None):
267
+ """Parse a NOT LIKE node into a ParsedExpr."""
268
+ parsed_expr = ttypes.ParsedExpr()
269
+ function_expr = ttypes.FunctionExpr()
270
+ function_expr.function_name = binary_exp_to_paser_exp('notlike')
271
+
272
+ left_expr = parse_expr(like_node.args['this'])
273
+ pattern_expr = parse_expr(like_node.args['expression'])
274
+
275
+ escape_expr = _make_escape_expr(escape_char)
276
+
277
+ function_expr.arguments = [left_expr, pattern_expr, escape_expr]
278
+ parser_expr_type = ttypes.ParsedExprType()
279
+ parser_expr_type.function_expr = function_expr
280
+ parsed_expr.type = parser_expr_type
281
+ return parsed_expr
282
+
283
+
227
284
  def traverse_conditions(cons: exp.Condition, fn=None) -> ttypes.ParsedExpr:
228
285
  if isinstance(cons, exp.Alias):
229
286
  expr = traverse_conditions(cons.args['this'])
230
287
  expr.alias_name = cons.alias
231
288
  return expr
232
289
 
233
- if isinstance(cons, exp.Binary):
290
+ if isinstance(cons, exp.Escape):
291
+ # Handle LIKE with explicit ESCAPE clause: LIKE 'pattern' ESCAPE '!'
292
+ # SQLGlot 30.8.0+ wraps Like node in Escape wrapper when ESCAPE is present
293
+ like_node = cons.args['this']
294
+ escape_char = cons.args.get('expression')
295
+ return _parse_like(like_node, escape_char)
296
+ elif isinstance(cons, exp.Not) and isinstance(cons.args['this'], exp.Escape):
297
+ # Handle NOT LIKE with explicit ESCAPE clause
298
+ raw_escape = cons.args['this']
299
+ like_node = raw_escape.args['this']
300
+ escape_char = raw_escape.args.get('expression')
301
+ return _parse_not_like(like_node, escape_char)
302
+ elif isinstance(cons, exp.Like):
303
+ return _parse_like(cons, None)
304
+ elif isinstance(cons, exp.Not) and isinstance(cons.args['this'], exp.Like):
305
+ return _parse_not_like(cons.args['this'], None)
306
+ elif isinstance(cons, exp.Binary):
234
307
  parsed_expr = ttypes.ParsedExpr()
235
308
  function_expr = ttypes.FunctionExpr()
236
309
  function_expr.function_name = binary_exp_to_paser_exp(
@@ -60,6 +60,10 @@ def binary_exp_to_paser_exp(binary_expr_key) -> str:
60
60
  return "json_exists_path"
61
61
  elif binary_expr_key == "jsoncontains":
62
62
  return "json_contains"
63
+ elif binary_expr_key == "like":
64
+ return "like"
65
+ elif binary_expr_key == "notlike":
66
+ return "not_like"
63
67
  else:
64
68
  raise InfinityException(ErrorCode.INVALID_EXPRESSION, f"unknown binary expression: {binary_expr_key}")
65
69
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: infinity-sdk
3
- Version: 0.7.0.dev7
3
+ Version: 0.7.2
4
4
  Summary: infinity
5
5
  License-Expression: Apache-2.0
6
6
  Requires-Python: <3.14,>=3.11
@@ -97,7 +97,7 @@ Infinity supports two working modes, embedded mode and client-server mode. The f
97
97
 
98
98
  2. Install the `infinity-sdk` package:
99
99
  ```bash
100
- pip install infinity-sdk==0.7.0.dev7
100
+ pip install infinity-sdk==0.7.2
101
101
  ```
102
102
 
103
103
  3. Use Infinity to conduct a dense vector search:
File without changes