Spaces:
Sleeping
Sleeping
| import pytest | |
| import numpy as np | |
| from app.vector_store import build_index, search_index, search_with_filter | |
| def sample_index_data(): | |
| np.random.seed(42) | |
| # 20 docs, 384 dim | |
| embeddings = np.random.randn(20, 384).astype(np.float32) | |
| labels = [i % 4 for i in range(20)] # 4 categories | |
| return build_index(embeddings, labels), embeddings | |
| def test_search_index_pagination(sample_index_data): | |
| index_data, embeddings = sample_index_data | |
| query = embeddings[0] # Exact match for doc 0 | |
| # Fetch first 5 | |
| dists1, idxs1 = search_index(index_data, query, limit=5, offset=0) | |
| assert len(idxs1) == 5 | |
| assert idxs1[0] == 0 | |
| # Fetch next 5 | |
| dists2, idxs2 = search_index(index_data, query, limit=5, offset=5) | |
| assert len(idxs2) == 5 | |
| # Ensure disjoint | |
| assert len(set(idxs1).intersection(set(idxs2))) == 0 | |
| def test_search_with_filter_pagination(sample_index_data): | |
| index_data, embeddings = sample_index_data | |
| query = embeddings[0] | |
| # Filter by category 0 (docs 0, 4, 8, 12, 16) | |
| dists, idxs = search_with_filter(index_data, query, category_filter=0, limit=2, offset=0) | |
| assert len(idxs) == 2 | |
| for idx in idxs: | |
| assert idx % 4 == 0 | |
| dists2, idxs2 = search_with_filter(index_data, query, category_filter=0, limit=2, offset=2) | |
| assert len(idxs2) <= 2 # Depending on how many are left, could be 2 or less | |
| # Ensure disjoint | |
| assert len(set(idxs).intersection(set(idxs2))) == 0 | |