Code formatting (#1986)
This commit is contained in:
@@ -33,11 +33,7 @@ def test_embed_text(mock_openai_client):
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"default_headers, expected_header",
|
||||
[
|
||||
(None, None),
|
||||
({"Test": "test_value"}, "test_value"),
|
||||
({}, None)
|
||||
],
|
||||
[(None, None), ({"Test": "test_value"}, "test_value"), ({}, None)],
|
||||
)
|
||||
def test_embed_text_with_default_headers(default_headers, expected_header):
|
||||
config = BaseEmbedderConfig(
|
||||
@@ -47,8 +43,8 @@ def test_embed_text_with_default_headers(default_headers, expected_header):
|
||||
"api_version": "test_version",
|
||||
"azure_endpoint": "test_endpoint",
|
||||
"azuer_deployment": "test_deployment",
|
||||
"default_headers": default_headers
|
||||
}
|
||||
"default_headers": default_headers,
|
||||
},
|
||||
)
|
||||
embedder = AzureOpenAIEmbedding(config)
|
||||
assert embedder.client.api_key == "test"
|
||||
|
||||
@@ -12,17 +12,11 @@ def mock_genai():
|
||||
|
||||
@pytest.fixture
|
||||
def config():
|
||||
return BaseEmbedderConfig(
|
||||
api_key="dummy_api_key",
|
||||
model="test_model"
|
||||
)
|
||||
return BaseEmbedderConfig(api_key="dummy_api_key", model="test_model")
|
||||
|
||||
|
||||
def test_embed_query(mock_genai, config):
|
||||
|
||||
mock_embedding_response = {
|
||||
'embedding': [0.1, 0.2, 0.3, 0.4]
|
||||
}
|
||||
mock_embedding_response = {"embedding": [0.1, 0.2, 0.3, 0.4]}
|
||||
mock_genai.return_value = mock_embedding_response
|
||||
|
||||
embedder = GoogleGenAIEmbedding(config)
|
||||
@@ -31,7 +25,4 @@ def test_embed_query(mock_genai, config):
|
||||
embedding = embedder.embed(text)
|
||||
|
||||
assert embedding == [0.1, 0.2, 0.3, 0.4]
|
||||
mock_genai.assert_called_once_with(
|
||||
model="test_model",
|
||||
content="Hello, world!"
|
||||
)
|
||||
mock_genai.assert_called_once_with(model="test_model", content="Hello, world!")
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import pytest
|
||||
from unittest.mock import Mock, patch
|
||||
from mem0.embeddings.vertexai import VertexAIEmbedding
|
||||
from mem0.configs.embeddings.base import BaseEmbedderConfig
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -35,15 +34,11 @@ def test_embed_default_model(mock_text_embedding_model, mock_os_environ, mock_co
|
||||
embedder = VertexAIEmbedding(config)
|
||||
|
||||
mock_embedding = Mock(values=[0.1, 0.2, 0.3])
|
||||
mock_text_embedding_model.from_pretrained.return_value.get_embeddings.return_value = [
|
||||
mock_embedding
|
||||
]
|
||||
mock_text_embedding_model.from_pretrained.return_value.get_embeddings.return_value = [mock_embedding]
|
||||
|
||||
result = embedder.embed("Hello world")
|
||||
embedder.embed("Hello world")
|
||||
|
||||
mock_text_embedding_model.from_pretrained.assert_called_once_with(
|
||||
"text-embedding-004"
|
||||
)
|
||||
mock_text_embedding_model.from_pretrained.assert_called_once_with("text-embedding-004")
|
||||
mock_text_embedding_model.from_pretrained.return_value.get_embeddings.assert_called_once_with(
|
||||
texts=["Hello world"], output_dimensionality=256
|
||||
)
|
||||
@@ -60,15 +55,11 @@ def test_embed_custom_model(mock_text_embedding_model, mock_os_environ, mock_con
|
||||
embedder = VertexAIEmbedding(config)
|
||||
|
||||
mock_embedding = Mock(values=[0.4, 0.5, 0.6])
|
||||
mock_text_embedding_model.from_pretrained.return_value.get_embeddings.return_value = [
|
||||
mock_embedding
|
||||
]
|
||||
mock_text_embedding_model.from_pretrained.return_value.get_embeddings.return_value = [mock_embedding]
|
||||
|
||||
result = embedder.embed("Test embedding")
|
||||
|
||||
mock_text_embedding_model.from_pretrained.assert_called_with(
|
||||
"custom-embedding-model"
|
||||
)
|
||||
mock_text_embedding_model.from_pretrained.assert_called_with("custom-embedding-model")
|
||||
mock_text_embedding_model.from_pretrained.return_value.get_embeddings.assert_called_once_with(
|
||||
texts=["Test embedding"], output_dimensionality=512
|
||||
)
|
||||
@@ -93,16 +84,12 @@ def test_missing_credentials(mock_os, mock_text_embedding_model, mock_config):
|
||||
|
||||
config = mock_config()
|
||||
|
||||
with pytest.raises(
|
||||
ValueError, match="Google application credentials JSON is not provided"
|
||||
):
|
||||
with pytest.raises(ValueError, match="Google application credentials JSON is not provided"):
|
||||
VertexAIEmbedding(config)
|
||||
|
||||
|
||||
@patch("mem0.embeddings.vertexai.TextEmbeddingModel")
|
||||
def test_embed_with_different_dimensions(
|
||||
mock_text_embedding_model, mock_os_environ, mock_config
|
||||
):
|
||||
def test_embed_with_different_dimensions(mock_text_embedding_model, mock_os_environ, mock_config):
|
||||
mock_config.vertex_credentials_json = "/path/to/credentials.json"
|
||||
mock_config.return_value.embedding_dims = 1024
|
||||
|
||||
@@ -110,9 +97,7 @@ def test_embed_with_different_dimensions(
|
||||
embedder = VertexAIEmbedding(config)
|
||||
|
||||
mock_embedding = Mock(values=[0.1] * 1024)
|
||||
mock_text_embedding_model.from_pretrained.return_value.get_embeddings.return_value = [
|
||||
mock_embedding
|
||||
]
|
||||
mock_text_embedding_model.from_pretrained.return_value.get_embeddings.return_value = [mock_embedding]
|
||||
|
||||
result = embedder.embed("Large embedding test")
|
||||
|
||||
|
||||
@@ -33,19 +33,19 @@ def test_generate_response_without_tools(mock_gemini_client: Mock):
|
||||
response = llm.generate_response(messages)
|
||||
|
||||
mock_gemini_client.generate_content.assert_called_once_with(
|
||||
contents = [
|
||||
{"parts": "THIS IS A SYSTEM PROMPT. YOU MUST OBEY THIS: You are a helpful assistant.", "role": "user"},
|
||||
{"parts": "Hello, how are you?", "role": "user"}
|
||||
contents=[
|
||||
{"parts": "THIS IS A SYSTEM PROMPT. YOU MUST OBEY THIS: You are a helpful assistant.", "role": "user"},
|
||||
{"parts": "Hello, how are you?", "role": "user"},
|
||||
],
|
||||
generation_config = GenerationConfig(temperature=0.7, max_output_tokens=100, top_p=1.0),
|
||||
tools = None,
|
||||
tool_config = content_types.to_tool_config(
|
||||
{"function_calling_config":
|
||||
{"mode": 'auto', "allowed_function_names": None}
|
||||
})
|
||||
generation_config=GenerationConfig(temperature=0.7, max_output_tokens=100, top_p=1.0),
|
||||
tools=None,
|
||||
tool_config=content_types.to_tool_config(
|
||||
{"function_calling_config": {"mode": "auto", "allowed_function_names": None}}
|
||||
),
|
||||
)
|
||||
assert response == "I'm doing well, thank you for asking!"
|
||||
|
||||
|
||||
|
||||
def test_generate_response_with_tools(mock_gemini_client: Mock):
|
||||
config = BaseLlmConfig(model="gemini-1.5-flash-latest", temperature=0.7, max_tokens=100, top_p=1.0)
|
||||
llm = GeminiLLM(config)
|
||||
@@ -74,13 +74,13 @@ def test_generate_response_with_tools(mock_gemini_client: Mock):
|
||||
|
||||
mock_part = Mock()
|
||||
mock_part.function_call = mock_tool_call
|
||||
mock_part.text="I've added the memory for you."
|
||||
mock_part.text = "I've added the memory for you."
|
||||
|
||||
mock_content = Mock()
|
||||
mock_content.parts=[mock_part]
|
||||
mock_content.parts = [mock_part]
|
||||
|
||||
mock_message = Mock()
|
||||
mock_message.content=mock_content
|
||||
mock_message.content = mock_content
|
||||
|
||||
mock_response = Mock(candidates=[mock_message])
|
||||
mock_gemini_client.generate_content.return_value = mock_response
|
||||
@@ -88,28 +88,29 @@ def test_generate_response_with_tools(mock_gemini_client: Mock):
|
||||
response = llm.generate_response(messages, tools=tools)
|
||||
|
||||
mock_gemini_client.generate_content.assert_called_once_with(
|
||||
contents = [
|
||||
{"parts": "THIS IS A SYSTEM PROMPT. YOU MUST OBEY THIS: You are a helpful assistant.", "role": "user"},
|
||||
{"parts": "Add a new memory: Today is a sunny day.", "role": "user"}
|
||||
contents=[
|
||||
{"parts": "THIS IS A SYSTEM PROMPT. YOU MUST OBEY THIS: You are a helpful assistant.", "role": "user"},
|
||||
{"parts": "Add a new memory: Today is a sunny day.", "role": "user"},
|
||||
],
|
||||
generation_config = GenerationConfig(temperature=0.7, max_output_tokens=100, top_p=1.0),
|
||||
tools = [
|
||||
generation_config=GenerationConfig(temperature=0.7, max_output_tokens=100, top_p=1.0),
|
||||
tools=[
|
||||
{
|
||||
"function_declarations": [{
|
||||
"name": "add_memory",
|
||||
"description": "Add a memory",
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {"data": {"type": "string", "description": "Data to add to memory"}},
|
||||
"required": ["data"]
|
||||
"function_declarations": [
|
||||
{
|
||||
"name": "add_memory",
|
||||
"description": "Add a memory",
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {"data": {"type": "string", "description": "Data to add to memory"}},
|
||||
"required": ["data"],
|
||||
},
|
||||
}
|
||||
}]
|
||||
]
|
||||
}
|
||||
],
|
||||
tool_config = content_types.to_tool_config(
|
||||
{"function_calling_config":
|
||||
{"mode": 'auto', "allowed_function_names": None}
|
||||
})
|
||||
tool_config=content_types.to_tool_config(
|
||||
{"function_calling_config": {"mode": "auto", "allowed_function_names": None}}
|
||||
),
|
||||
)
|
||||
|
||||
assert response["content"] == "I've added the memory for you."
|
||||
|
||||
@@ -31,8 +31,9 @@ def test_openai_llm_base_url():
|
||||
|
||||
# case3: with config.openai_base_url
|
||||
config_base_url = "https://api.config.com/v1"
|
||||
config = BaseLlmConfig(model="gpt-4o", temperature=0.7, max_tokens=100, top_p=1.0, api_key="api_key",
|
||||
openai_base_url=config_base_url)
|
||||
config = BaseLlmConfig(
|
||||
model="gpt-4o", temperature=0.7, max_tokens=100, top_p=1.0, api_key="api_key", openai_base_url=config_base_url
|
||||
)
|
||||
llm = OpenAILLM(config)
|
||||
# Note: openai client will parse the raw base_url into a URL object, which will have a trailing slash
|
||||
assert str(llm.client.base_url) == config_base_url + "/"
|
||||
|
||||
@@ -135,7 +135,9 @@ def test_update(memory_instance):
|
||||
|
||||
result = memory_instance.update("test_id", "Updated memory")
|
||||
|
||||
memory_instance._update_memory.assert_called_once_with("test_id", "Updated memory", {"Updated memory": [0.1, 0.2, 0.3]})
|
||||
memory_instance._update_memory.assert_called_once_with(
|
||||
"test_id", "Updated memory", {"Updated memory": [0.1, 0.2, 0.3]}
|
||||
)
|
||||
|
||||
assert result["message"] == "Memory updated successfully!"
|
||||
|
||||
@@ -177,7 +179,6 @@ def test_reset(memory_instance):
|
||||
memory_instance.db.reset = Mock()
|
||||
|
||||
with patch.object(VectorStoreFactory, "create", return_value=Mock()) as mock_create:
|
||||
|
||||
memory_instance.reset()
|
||||
|
||||
initial_vector_store.delete_col.assert_called_once()
|
||||
@@ -186,6 +187,7 @@ def test_reset(memory_instance):
|
||||
memory_instance.config.vector_store.provider, memory_instance.config.vector_store.config
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"version, enable_graph, expected_result",
|
||||
[
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from unittest.mock import Mock, patch
|
||||
import pytest
|
||||
from mem0.vector_stores.chroma import ChromaDB, OutputData
|
||||
from mem0.vector_stores.chroma import ChromaDB
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
@@ -12,13 +12,9 @@ def mock_chromadb_client():
|
||||
@pytest.fixture
|
||||
def chromadb_instance(mock_chromadb_client):
|
||||
mock_collection = Mock()
|
||||
mock_chromadb_client.return_value.get_or_create_collection.return_value = (
|
||||
mock_collection
|
||||
)
|
||||
mock_chromadb_client.return_value.get_or_create_collection.return_value = mock_collection
|
||||
|
||||
return ChromaDB(
|
||||
collection_name="test_collection", client=mock_chromadb_client.return_value
|
||||
)
|
||||
return ChromaDB(collection_name="test_collection", client=mock_chromadb_client.return_value)
|
||||
|
||||
|
||||
def test_insert_vectors(chromadb_instance, mock_chromadb_client):
|
||||
@@ -28,9 +24,7 @@ def test_insert_vectors(chromadb_instance, mock_chromadb_client):
|
||||
|
||||
chromadb_instance.insert(vectors=vectors, payloads=payloads, ids=ids)
|
||||
|
||||
chromadb_instance.collection.add.assert_called_once_with(
|
||||
ids=ids, embeddings=vectors, metadatas=payloads
|
||||
)
|
||||
chromadb_instance.collection.add.assert_called_once_with(ids=ids, embeddings=vectors, metadatas=payloads)
|
||||
|
||||
|
||||
def test_search_vectors(chromadb_instance, mock_chromadb_client):
|
||||
@@ -44,9 +38,7 @@ def test_search_vectors(chromadb_instance, mock_chromadb_client):
|
||||
query = [[0.1, 0.2, 0.3]]
|
||||
results = chromadb_instance.search(query=query, limit=2)
|
||||
|
||||
chromadb_instance.collection.query.assert_called_once_with(
|
||||
query_embeddings=query, where=None, n_results=2
|
||||
)
|
||||
chromadb_instance.collection.query.assert_called_once_with(query_embeddings=query, where=None, n_results=2)
|
||||
|
||||
print(results, type(results))
|
||||
assert len(results) == 2
|
||||
@@ -68,9 +60,7 @@ def test_update_vector(chromadb_instance):
|
||||
new_vector = [0.7, 0.8, 0.9]
|
||||
new_payload = {"name": "updated_vector"}
|
||||
|
||||
chromadb_instance.update(
|
||||
vector_id=vector_id, vector=new_vector, payload=new_payload
|
||||
)
|
||||
chromadb_instance.update(vector_id=vector_id, vector=new_vector, payload=new_payload)
|
||||
|
||||
chromadb_instance.collection.update.assert_called_once_with(
|
||||
ids=vector_id, embeddings=new_vector, metadatas=new_payload
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import unittest
|
||||
from unittest.mock import MagicMock, patch
|
||||
from unittest.mock import MagicMock
|
||||
import uuid
|
||||
from qdrant_client import QdrantClient
|
||||
from qdrant_client.models import (
|
||||
@@ -51,9 +51,7 @@ class TestQdrant(unittest.TestCase):
|
||||
|
||||
def test_search(self):
|
||||
query_vector = [0.1, 0.2]
|
||||
self.client_mock.search.return_value = [
|
||||
{"id": str(uuid.uuid4()), "score": 0.95, "payload": {"key": "value"}}
|
||||
]
|
||||
self.client_mock.search.return_value = [{"id": str(uuid.uuid4()), "score": 0.95, "payload": {"key": "value"}}]
|
||||
|
||||
results = self.qdrant.search(query=query_vector, limit=1)
|
||||
|
||||
@@ -83,9 +81,7 @@ class TestQdrant(unittest.TestCase):
|
||||
updated_vector = [0.2, 0.3]
|
||||
updated_payload = {"key": "updated_value"}
|
||||
|
||||
self.qdrant.update(
|
||||
vector_id=vector_id, vector=updated_vector, payload=updated_payload
|
||||
)
|
||||
self.qdrant.update(vector_id=vector_id, vector=updated_vector, payload=updated_payload)
|
||||
|
||||
self.client_mock.upsert.assert_called_once()
|
||||
point = self.client_mock.upsert.call_args[1]["points"][0]
|
||||
@@ -95,9 +91,7 @@ class TestQdrant(unittest.TestCase):
|
||||
|
||||
def test_get(self):
|
||||
vector_id = str(uuid.uuid4())
|
||||
self.client_mock.retrieve.return_value = [
|
||||
{"id": vector_id, "payload": {"key": "value"}}
|
||||
]
|
||||
self.client_mock.retrieve.return_value = [{"id": vector_id, "payload": {"key": "value"}}]
|
||||
|
||||
result = self.qdrant.get(vector_id=vector_id)
|
||||
|
||||
@@ -108,23 +102,17 @@ class TestQdrant(unittest.TestCase):
|
||||
self.assertEqual(result["payload"], {"key": "value"})
|
||||
|
||||
def test_list_cols(self):
|
||||
self.client_mock.get_collections.return_value = MagicMock(
|
||||
collections=[{"name": "test_collection"}]
|
||||
)
|
||||
self.client_mock.get_collections.return_value = MagicMock(collections=[{"name": "test_collection"}])
|
||||
result = self.qdrant.list_cols()
|
||||
self.assertEqual(result.collections[0]["name"], "test_collection")
|
||||
|
||||
def test_delete_col(self):
|
||||
self.qdrant.delete_col()
|
||||
self.client_mock.delete_collection.assert_called_once_with(
|
||||
collection_name="test_collection"
|
||||
)
|
||||
self.client_mock.delete_collection.assert_called_once_with(collection_name="test_collection")
|
||||
|
||||
def test_col_info(self):
|
||||
self.qdrant.col_info()
|
||||
self.client_mock.get_collection.assert_called_once_with(
|
||||
collection_name="test_collection"
|
||||
)
|
||||
self.client_mock.get_collection.assert_called_once_with(collection_name="test_collection")
|
||||
|
||||
def tearDown(self):
|
||||
del self.qdrant
|
||||
|
||||
Reference in New Issue
Block a user