v0.18.0
What's Changed
Bug Fixes
- fix: remove invalid thirdparty header files installation path by @wxyucs in #1228
- fix(sindi): bad alloc and bench issue caused by term id limit by @ShawnShawnYou in #1242
- fix(sindi): fix parameter checkCompatibility in deserialize by @cubicc in #1266
- fix(kmeans): fix kmeans unittest "0 == 161" bug by @LHT129 in #1259
- fix(SINDI): sparse vector len check by @ShawnShawnYou in #1264
- fix(hnsw): fix the OOM issue caused by large IDs by @inabao in #1313
- fix(ci): fix some intermittent bugs on CI by @LHT129 in #1330
- fix(python): fix python build by @hhy3 in #1344
- fix(tsan): fix the tsan error on CI by @inabao in #1366
- fix(ut): illegal instruction (sve) occurred on Apple Silicon by @wxyucs in #1372
- fix(SINDI): fix term out of bound by @ShawnShawnYou in #1383
- fix(leak): vt pool leak on concurrent search by @LHT129 in #1388
- fix(deserialize): fix HNSW in 0.14 cannot parse indexes in 0.16 by @inabao in #1394
- fix: correct allocator used to allocate neighbors_mutex by @wxyucs in #1378
- fix(test): fix compile of memleak in clang by @inabao in #1405
- fix: generate version when prepare and read in setup.py by @jac0626 in #1375
- fix(sparse): fix core dump when get vector with invalid id by @ShawnShawnYou in #1410
- fix(quantizer): fix sq8 code size being 8 times larger than expected by @ShawnShawnYou in #1416
- fix(ci): decrease memory cost in CI compilation by @LHT129 in #1425
- fix(Add): fix semantic issues when "recovery tombstone" fails by @ShawnShawnYou in #1419
- fix(hgraph): fix the process of getting raw vector when using quantizer by @inabao in #1436
- fix(example): solve storage location conflict in example 401 by @wxyucs in #1423
- fix(hgraph): fix coredump due to extra_info_size inconsistency by @inabao in #1404
- fix(hgraph): fix the asan issue in GetVectorByInnerId by @inabao in #1457
- fix(LocalFileReader): fix thread safety issues in LocalFileReader by @inabao in #1409
- fix(timer): fix the insufficient precision in timer's time measurement by @inabao in #1466
- fix(static_link): fix vsag_static loss libio.a by @LHT129 in #1463
- fix(hgraph): fix concurrency issues during hgraph insert by @inabao in #1431
- fix(sindi): enable returns failed ID when inserting duplicate id by @inabao in #1486
- fix(Hgraph): fix get memory usage bug after deserializaion by @LHT129 in #1529
- fix(hgraph): fix coredump when concurrent building from empty index by @inabao in #1520
- fix(analyzer): add nullptr check and copy query vectors in HGraphAnalyzer by @misaka0714 in #1528
- fix(compile): remove outdated directory from tools/CMakeLists.txt by @wxyucs in #1549
- fix iter search and add concurency by @shadowao in #1546
- fix(hgraph): refactor label remap handling in SetImmutable by @misaka0714 in #1550
New Features
- feat(SINDI): add term id limit check by @ShawnShawnYou in #1223
- refactor(sq): refactor sq quantizer by @LHT129 in #1236
- feat(clone): support passing a new allocator when cloning by @inabao in #1218
- feat: add parallelism search for bruteforce by @LHT129 in #1240
- feat(Hgraph): support TQ in Hgraph param by @ShawnShawnYou in #1248
- feat(sparse): support build and search in pybind by @ShawnShawnYou in #1275
- feat(hgraph): ensure that the removing is thread-safe. by @inabao in #1269
- feat(io): introduce io_array to manager multi buckets'IO by @LHT129 in #1246
- feat(ivf): add param to support on-disk IVF Index by @LHT129 in #1283
- feat: Automate Python Wheel Build And Release by @jac0626 in #1064
- feat(c_api): introduce some simple C api by @LHT129 in #1270
- feat(api): introduce an api for GetDetailInfo from Index by @LHT129 in #1294
- feat(python): support build python wheel without docker by @LHT129 in #1306
- feat(index): add write function for Serialize by @LHT129 in #1291
- feat(index): add "is_timeout" stat for search result by @LHT129 in #1316
- feat(c_api): add Error_t instead bool as return result by @LHT129 in #1299
- feat(ivf): add ivf sampling count function by @misaka0714 in #1303
- feat(sparse): support get raw vector by @ShawnShawnYou in #1347
- feat(sparse): doc prune function revision by @Roxanne0321 in #1325
- feat(c_api): add functional serialzie method for C api by @LHT129 in #1334
- feat(BruteForce): enable thread_count config by @LHT129 in #1349
- feat(index): Support get detail data with info from index by @LHT129 in #1309
- feat(c_api): add more api for c-sdk by @LHT129 in #1363
- feat: add more statistics for search process by @wxyucs in #1343
- feat(pyramid): support brute force in pyramid by @inabao in #1400
- feat(transformer): Add MRL-E preprocess Transformer by @LHT129 in #1371
- feat(hgraph): support deduplication under different quantization by @inabao in #1403
- feat(index): get data type in info by @ShawnShawnYou in #1450
- feat: add allocator parameter to GetRawVectorByIds by @wxyucs in #1434
- feat(hnsw): support get raw vector by @ShawnShawnYou in #1446
- feat(hgraph): support transform basic quant from fp32 to any other quant by Tune by @ShawnShawnYou in #1442
- feat(python): add doc/test for pyvsag by @LHT129 in #1398
- enhance(sindi): improve sindi performance with filter by @Ningsir in #1449
- feat(sq4): implement for sq4's simd by @LHT129 in #1391
- feat(SINDI): support update vector by @ShawnShawnYou in #1484
- feat(hgraph): limit train size by @ShawnShawnYou in #1483
- feat(hgraph): support tune high precision by @ShawnShawnYou in #1503
- feat(eval_performance): add search query count config by @LHT129 in #1511
- feat(quantizer): support extend rabitq by @ShawnShawnYou in #1515
- feat(rabitq): add extend-bit rabitq's simd by @LHT129 in #1532
- feat(stats): add search statistics io_cnt and io_time_ms by @wxyucs in #1547
Improvements
- tests: speedup daily test by reduce dims size by @LHT129 in #1226
- improvement: share vt in hgraph's different layer by @LHT129 in #1225
- tests: speedup daily test by remove some duplicate test by @LHT129 in #1232
- tools: Support eval_dataset's Save H5 File by @LHT129 in #1229
- refactor: avoiding similar declare in simd by @LHT129 in #1239
- [skip ci]chore: update GitHub release workflow by @wxyucs in #1234
- example(hgraph): int8 hgraph demo by @Coien-rr in #1209
- refactor(ivf): move the residual processing logic in IVF down to the bucket level by @inabao in #1276
- refactor(reorder): extract the reorder function into a class by @inabao in #1278
- improvement: split implement of MemoryIO by @LHT129 in #1272
- feat(StreamWriter): check vector not empty before writing it out by @wxyucs in #1277
- chore(tsan): Ignore TSan checks in OpenMP's race by @LHT129 in #1300
- improvement: performance of update vector by @ShawnShawnYou in #1289
- chore(python): make build wheel only trigger by workflow_dispatch by @LHT129 in #1301
- [skip ci]chore: add jac0626 to pyvsag reviewers by @wxyucs in #1322
- chore: optimize script directory structure by @wxyucs in #1311
- refactor(string): unify same string defination by @LHT129 in #1323
- improvement: speed up kmeans on large dataset by @LHT129 in #1219
- refactor(pyramid): refactor the parameters of the pyramid by @inabao in #1337
- improvment: use multi thread for get_data_by_ids by @LHT129 in #1260
- refactor(diskann): increase the upper bound of pq_dims in DiskANN by @inabao in #1319
- refactor(safe_call): add exception handling for bad_alloc by @inabao in #1315
- fix(ci): fix several issues that caused the CI to fail by @inabao in #1342
- refactor(pyramid): support insert as primary construction method by @inabao in #1339
- feat(pyramid): implement more fine-grained locks in pyramid by @inabao in #1350
- refactor(compile): optimize the compile memory use by @LHT129 in #1357
- improvement(ivf): balance parallel search on IVF by @LHT129 in #1351
- refactor(index_impl): adjust the behavior when input data is empty by @inabao in #1365
- feat(pyramid): supports queries with multiple paths and empty paths by @inabao in #1360
- feat(hgraph): support reader_io in base quantizer and graph by @inabao in #1362
- refactor(engine): add catching for new error types by @inabao in #1361
- improvement(BruteForce): enhance brute_force by @LHT129 in #1377
- chore(makefile): support set build options from environment variable by @wxyucs in #1382
- refactor(sindi): support sindi in using a buffer during deserialization by @inabao in #1387
- improvment(bruteforce): optimize concurrent add by @LHT129 in #1379
- feat(pyramid): support reordering and timeout checks by @inabao in #1384
- example: add python examples by @LHT129 in #1190
- refactor(deserialize): increase time of deserialization per IO operation by @inabao in #1390
- improvment(cmake): Support compile without libaio by @LHT129 in #1395
- refactor(blas): collect all blas dependance to one by @LHT129 in #1392
- refactor(sindi): revise sparse_term_datacell data structure to reduce memory by @Roxanne0321 in #1415
- refactor(pyramid): optimize the reorder of the pyramid by @inabao in #1420
- feat(sindi): support deseialize sindi without buffer by @inabao in #1437
- refactor(hgraph): remove reverse label_table from immutable index by @inabao in #1443
- improvment(parallel search): optimize hgraph parallel search by @LHT129 in #1352
- chore(ci): increase GitHub Actions artifact retention-days by @wxyucs in #1462
- improvement(pyramid): refactor some test for serialize by @LHT129 in #1471
- script(compatibility): update newer version tag index by @LHT129 in #1478
- refactor(diskann): convert some parameters into optional parameters by @inabao in #1490
- tests(speedup): speedup functest by decrease count by @LHT129 in #1479
- feat(pyramid): support Pyramid's deduplication capability by @inabao in #1473
- chore(ci): mark push-main CI non-concurrency by @LHT129 in #1489
- improvement(blas): speedup segmv on multi threads by @LHT129 in #1475
- feat(pyramid): support static optimization for pyramid by @inabao in #1485
- improvement(CI): try to fix some CI error by @LHT129 in #1492
- fix(diskann): remove redundant code by @inabao in #1500
- refactor(sindi): quantize SparseTermDatacell value to fp16 and sq8 by @Roxanne0321 in #1454
- refactor(cast): use static_cast instead C-like cast by @LHT129 in #1452
- refactor(index): refactor and optimize GetMemoryUsage by @LHT129 in #1470
- feat(pyramid): support calculating distance by id in pyramid by @inabao in #1480
- refactor(sindi): modify sindi memory estimate by @Ningsir in #1505
- refactor(analyzer): extract the analyzer and expose statistical information by @inabao in #1488
- tests(range): release range_search result count limit check by @LHT129 in #1517
- refactor(pyramid): support pyramid parallel search capability by @inabao in #1510
- enhance(sindi): improving performance through memory access optimization by @inabao in #1516
- [skip ci]update CODEOWNERS by @LHT129 in #1530
- chore(CI): add example check on asan test by @LHT129 in #1381
- enhance(pyramid): support dynamically adjusting size of subindex search parameters by @inabao in #1508
- chore(liburing): add liburing-dev on compile/runtime by @LHT129 in #1537
- improvement(memory_usage): add more on memory usage by @LHT129 in #1538
- chore(ci): add more example check on asan test by @inabao in #1539
- enhance(sindi): implement backward compatibility for sindi by @inabao in #1544
Other Changes
- [skip ci]Add SINDI arxiv marker to README.md by @Roxanne0321 in #1286
- [skip ci]docs: add Hologres,PolarDB to users in README by @wxyucs in #1312
- [skip ci]update users image by @wxyucs in #1318
- [skip ci] Add SINDI performance to README.md by @Roxanne0321 in #1364
- [skip ci]add all-contributors to README.md by @wxyucs in #1401
- [skip ci]Update tools documentation by @wxyucs in #1518
New Contributors
- @cubicc made their first contribution in #1266
- @Roxanne0321 made their first contribution in #1286
- @misaka0714 made their first contribution in #1303
- @hhy3 made their first contribution in #1344
Full Changelog: v0.17.0...v0.18.0