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
2 changes: 1 addition & 1 deletion mem0/vector_stores/langchain.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ def update(self, vector_id, vector=None, payload=None):
Update a vector and its payload.
"""
self.delete(vector_id)
self.insert(vector, payload, [vector_id])
self.insert([vector], [payload], [vector_id])

def get(self, vector_id):
"""
Expand Down
34 changes: 27 additions & 7 deletions tests/vector_stores/test_langchain_vector_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def test_search_vectors_with_agent_id_run_id_filters(langchain_instance):
# Mock search results
mock_docs = [
Mock(metadata={"user_id": "alice", "agent_id": "agent1", "run_id": "run1"}, id="id1"),
Mock(metadata={"user_id": "bob", "agent_id": "agent2", "run_id": "run2"}, id="id2")
Mock(metadata={"user_id": "bob", "agent_id": "agent2", "run_id": "run2"}, id="id2"),
]
langchain_instance.client.similarity_search_by_vector.return_value = mock_docs

Expand Down Expand Up @@ -117,13 +117,33 @@ def test_search_vectors_with_no_filters(langchain_instance):
results = langchain_instance.search(query="", vectors=vectors, limit=2, filters=None)

# Verify that no filters were passed to the underlying vector store
langchain_instance.client.similarity_search_by_vector.assert_called_once_with(
embedding=vectors, k=2
)
langchain_instance.client.similarity_search_by_vector.assert_called_once_with(embedding=vectors, k=2)

assert len(results) == 1


def test_update_vector(langchain_instance):
# Test data
vector_id = "id1"
vector = [0.1, 0.2, 0.3]
payload = {"data": "updated text", "name": "updated_vector"}

# Mock delete and insert methods
langchain_instance.client.delete = Mock()
langchain_instance.client.add_embeddings = Mock()

# Test update
langchain_instance.update(vector_id=vector_id, vector=vector, payload=payload)

# Verify delete was called with correct vector_id
langchain_instance.client.delete.assert_called_once_with(ids=[vector_id])

# Verify insert was called with wrapped vector and payload (as lists)
langchain_instance.client.add_embeddings.assert_called_once_with(
embeddings=[vector], metadatas=[payload], ids=[vector_id]
)


def test_get_vector(langchain_instance):
# Mock get result
mock_doc = Mock(metadata={"name": "vector1"}, id="id1")
Expand All @@ -150,7 +170,7 @@ def test_list_with_filters(langchain_instance):
mock_collection.get.return_value = {
"ids": [["id1"]],
"metadatas": [[{"user_id": "alice", "agent_id": "agent1", "run_id": "run1"}]],
"documents": [["test document"]]
"documents": [["test document"]],
}
langchain_instance.client._collection = mock_collection

Expand All @@ -175,7 +195,7 @@ def test_list_with_single_filter(langchain_instance):
mock_collection.get.return_value = {
"ids": [["id1"]],
"metadatas": [[{"user_id": "alice"}]],
"documents": [["test document"]]
"documents": [["test document"]],
}
langchain_instance.client._collection = mock_collection

Expand All @@ -198,7 +218,7 @@ def test_list_with_no_filters(langchain_instance):
mock_collection.get.return_value = {
"ids": [["id1"]],
"metadatas": [[{"name": "vector1"}]],
"documents": [["test document"]]
"documents": [["test document"]],
}
langchain_instance.client._collection = mock_collection

Expand Down