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.
- {infinity_sdk-0.7.0.dev7/python/infinity_sdk/infinity_sdk.egg-info → infinity_sdk-0.7.2}/PKG-INFO +2 -2
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/README.md +1 -1
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/pyproject.toml +1 -1
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/README.md +1 -1
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/index.py +3 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/client.py +2 -3
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/infinity_thrift_rpc/ttypes.py +3 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/utils.py +74 -1
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/utils.py +4 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2/python/infinity_sdk/infinity_sdk.egg-info}/PKG-INFO +2 -2
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/LICENSE +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/__init__.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/common.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/connection_pool.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/db.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/errors.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/http_utils.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/huqie.txt +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/huqie.txt.trie +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/infinity.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/infinity_http.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/rag_tokenizer.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/__init__.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/db.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/infinity.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/infinity_thrift_rpc/InfinityService.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/infinity_thrift_rpc/__init__.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/infinity_thrift_rpc/constants.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/query_builder.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/table.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/types.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/table.py +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity_sdk.egg-info/SOURCES.txt +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity_sdk.egg-info/dependency_links.txt +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity_sdk.egg-info/requires.txt +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity_sdk.egg-info/top_level.txt +0 -0
- {infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/setup.cfg +0 -0
{infinity_sdk-0.7.0.dev7/python/infinity_sdk/infinity_sdk.egg-info → infinity_sdk-0.7.2}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: infinity-sdk
|
|
3
|
-
Version: 0.7.
|
|
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.
|
|
100
|
+
pip install infinity-sdk==0.7.2
|
|
101
101
|
```
|
|
102
102
|
|
|
103
103
|
3. Use Infinity to conduct a dense vector search:
|
|
@@ -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.
|
|
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
|
|
{infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/client.py
RENAMED
|
@@ -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.
|
|
127
|
-
|
|
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
|
|
{infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/utils.py
RENAMED
|
@@ -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.
|
|
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
|
|
{infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2/python/infinity_sdk/infinity_sdk.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: infinity-sdk
|
|
3
|
-
Version: 0.7.
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
{infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/connection_pool.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/infinity_http.py
RENAMED
|
File without changes
|
{infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/rag_tokenizer.py
RENAMED
|
File without changes
|
|
File without changes
|
{infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/db.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/table.py
RENAMED
|
File without changes
|
{infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity/remote_thrift/types.py
RENAMED
|
File without changes
|
|
File without changes
|
{infinity_sdk-0.7.0.dev7 → infinity_sdk-0.7.2}/python/infinity_sdk/infinity_sdk.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|