acl-api / tests /common /test_vector_index.py
ivykopal's picture
feat: add FAISS IndexFlatIP helpers for similarity search
1d1ee9b
Raw
History Blame Contribute Delete
1.26 kB
import numpy as np
import pytest
from common.vector_index import create_index, save_index, load_index, add_vector, search
def test_add_vector_returns_sequential_ids():
index = create_index(dim=4)
v1 = np.array([1.0, 0.0, 0.0, 0.0], dtype=np.float32)
v2 = np.array([0.0, 1.0, 0.0, 0.0], dtype=np.float32)
assert add_vector(index, v1) == 0
assert add_vector(index, v2) == 1
assert index.ntotal == 2
def test_search_returns_closest_vector_first():
index = create_index(dim=4)
add_vector(index, np.array([1.0, 0.0, 0.0, 0.0], dtype=np.float32))
add_vector(index, np.array([0.0, 1.0, 0.0, 0.0], dtype=np.float32))
query = np.array([0.9, 0.1, 0.0, 0.0], dtype=np.float32)
results = search(index, query, k=2)
assert results[0][0] == 0
assert results[0][1] > results[1][1]
def test_save_and_load_roundtrip(tmp_path):
index = create_index(dim=4)
add_vector(index, np.array([1.0, 0.0, 0.0, 0.0], dtype=np.float32))
path = str(tmp_path / "index.faiss")
save_index(index, path)
loaded = load_index(path)
assert loaded.ntotal == 1
assert loaded.d == 4
def test_load_missing_index_raises():
with pytest.raises(FileNotFoundError):
load_index("/nonexistent/path/index.faiss")