test_local.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import pytest
  2. from unittest.mock import Mock, patch
  3. from mem0.llms.local import LocalLLM
  4. from mem0.configs.llms.base import BaseLlmConfig
  5. @pytest.fixture
  6. def mock_local_client():
  7. with patch('mem0.llms.local.local') as mock_local:
  8. mock_client = Mock()
  9. mock_local.return_value = mock_client
  10. yield mock_client
  11. def test_generate_response_without_tools(mock_local_client):
  12. config = BaseLlmConfig(model="glm-4", temperature=0.7, max_tokens=100, top_p=1.0)
  13. llm = LocalLLM(config)
  14. messages = [
  15. {"role": "system", "content": "You are a helpful assistant."},
  16. {"role": "user", "content": "Hello, how are you?"}
  17. ]
  18. mock_response = Mock()
  19. mock_response.choices = [Mock(message=Mock(content="I'm doing well, thank you for asking!"))]
  20. mock_local_client.chat.completions.create.return_value = mock_response
  21. response = llm.generate_response(messages)
  22. mock_local_client.chat.completions.create.assert_called_once_with(
  23. model="glm-4",
  24. messages=messages,
  25. temperature=0.7,
  26. max_tokens=100,
  27. top_p=1.0
  28. )
  29. assert response == "I'm doing well, thank you for asking!"
  30. def test_generate_response_with_tools(mock_local_client):
  31. config = BaseLlmConfig(model="glm-4", temperature=0.7, max_tokens=100, top_p=1.0)
  32. llm = LocalLLM(config)
  33. messages = [
  34. {"role": "system", "content": "You are a helpful assistant."},
  35. {"role": "user", "content": "Add a new memory: Today is a sunny day."}
  36. ]
  37. tools = [
  38. {
  39. "type": "function",
  40. "function": {
  41. "name": "add_memory",
  42. "description": "Add a memory",
  43. "parameters": {
  44. "type": "object",
  45. "properties": {
  46. "data": {"type": "string", "description": "Data to add to memory"}
  47. },
  48. "required": ["data"],
  49. },
  50. },
  51. }
  52. ]
  53. mock_response = Mock()
  54. mock_message = Mock()
  55. mock_message.content = "I've added the memory for you."
  56. mock_tool_call = Mock()
  57. mock_tool_call.function.name = "add_memory"
  58. mock_tool_call.function.arguments = '{"data": "Today is a sunny day."}'
  59. mock_message.tool_calls = [mock_tool_call]
  60. mock_response.choices = [Mock(message=mock_message)]
  61. mock_local_client.chat.completions.create.return_value = mock_response
  62. response = llm.generate_response(messages, tools=tools)
  63. mock_local_client.chat.completions.create.assert_called_once_with(
  64. model="gpt-4o",
  65. messages=messages,
  66. temperature=0.7,
  67. max_tokens=100,
  68. top_p=1.0,
  69. tools=tools,
  70. tool_choice="auto"
  71. )
  72. assert response["content"] == "I've added the memory for you."
  73. assert len(response["tool_calls"]) == 1
  74. assert response["tool_calls"][0]["name"] == "add_memory"
  75. assert response["tool_calls"][0]["arguments"] == {'data': 'Today is a sunny day.'}