test_zhipu.py 3.1 KB

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