From d7d39873ce795e652b9d30ada9ed53b2510b59c8 Mon Sep 17 00:00:00 2001 From: VANDRANKI Date: Sun, 4 Oct 2026 16:20:26 -0400 Subject: [PATCH] Python: Fix VolatileMemoryStore.get_nearest_matches on an empty collection --- .../memory/volatile_memory_store.py | 2 ++ ..._volatile_memory_store_empty_collection.py | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 python/tests/unit/memory/test_volatile_memory_store_empty_collection.py diff --git a/python/semantic_kernel/memory/volatile_memory_store.py b/python/semantic_kernel/memory/volatile_memory_store.py index dd1a631d0614..16968fd9810c 100644 --- a/python/semantic_kernel/memory/volatile_memory_store.py +++ b/python/semantic_kernel/memory/volatile_memory_store.py @@ -250,6 +250,8 @@ async def get_nearest_matches( # Get all the records in the collection memory_records = list(self._store[collection_name].values()) + if not memory_records: + return [] # Convert the collection of embeddings into a numpy array (stacked) embeddings = array([x._embedding for x in memory_records], dtype=float) diff --git a/python/tests/unit/memory/test_volatile_memory_store_empty_collection.py b/python/tests/unit/memory/test_volatile_memory_store_empty_collection.py new file mode 100644 index 000000000000..37a63dcd0ef3 --- /dev/null +++ b/python/tests/unit/memory/test_volatile_memory_store_empty_collection.py @@ -0,0 +1,29 @@ +# Copyright (c) Microsoft. All rights reserved. + +import numpy as np + +from semantic_kernel.memory.memory_record import MemoryRecord +from semantic_kernel.memory.volatile_memory_store import VolatileMemoryStore + + +async def test_get_nearest_matches_empty_collection_returns_empty_list(): + store = VolatileMemoryStore() + await store.create_collection("c") + + result = await store.get_nearest_matches("c", np.array([1.0, 2.0]), limit=3) + + assert result == [] + + +async def test_get_nearest_matches_after_removing_all_records_returns_empty_list(): + store = VolatileMemoryStore() + await store.create_collection("c") + record = MemoryRecord.local_record( + id="a", text="t", description=None, additional_metadata=None, embedding=np.array([1.0, 0.0]) + ) + await store.upsert("c", record) + await store.remove("c", "a") + + result = await store.get_nearest_matches("c", np.array([1.0, 0.0]), limit=1) + + assert result == []