Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions python/packages/core/agent_framework/_in_memory.py
Original file line number Diff line number Diff line change
Expand Up @@ -389,14 +389,14 @@ async def _inner_search(
) from exc
if score_threshold is not None and not comparison(score, score_threshold):
continue
results.append({"record": deepcopy(record), "score": score})
results.append({"record": record, "score": score})
results.sort(
key=lambda result: cast(float, result["score"]),
reverse=distance_function in _DESCENDING_DISTANCE_FUNCTIONS,
)
total_count = len(results)
return SearchResults(
results[skip : skip + top],
deepcopy(results[skip : skip + top]),
metadata={"in_memory_total_count": total_count},
)

Expand Down
24 changes: 24 additions & 0 deletions python/packages/core/tests/core/test_in_memory.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,30 @@ async def test_in_memory_get_filters_before_ordering_and_paging() -> None:
assert results == [Document("one", "Luxury hotel", "travel", 5, ["wifi", "pool"], "featured")]


@pytest.mark.parametrize("include_vectors", [False, True])
async def test_in_memory_search_page_is_detached_from_stored_records(include_vectors: bool) -> None:
collection = await _create_collection()
results = await collection.search(vector=[1.0, 0.0], skip=1, top=1, include_vectors=include_vectors)

assert results.metadata == {"in_memory_total_count": 2}
rows = [result async for result in results]
assert len(rows) == 1
record = rows[0]["record"]
assert record.id == "two"
assert rows[0]["score"] == 0.0
record.tags.append("changed")
if include_vectors:
assert record.vector is not None
assert record.vector == [0.0, 1.0]
record.vector[0] = 99.0
else:
assert record.vector is None

assert await collection.get(["two"], include_vectors=True) == [DOCUMENTS[1]]
next_results = await collection.search(vector=[1.0, 0.0], skip=1, top=1, include_vectors=True)
assert [result["record"] async for result in next_results] == [DOCUMENTS[1]]


async def test_in_memory_generates_missing_string_keys() -> None:
definition = VectorStoreCollectionDefinition(
[
Expand Down
Loading