parent
							
								
									37f549f4aa
								
							
						
					
					
						commit
						595781b82d
					
				|  | @ -63,6 +63,11 @@ jobs: | |||
|           uv run pytest ./tests/test_models.py | ||||
|         if: ${{ success() || failure() }} | ||||
| 
 | ||||
|       - name: Memory tests | ||||
|         run: | | ||||
|           uv run pytest ./tests/test_memory.py | ||||
|         if: ${{ success() || failure() }} | ||||
| 
 | ||||
|       - name: Monitoring tests | ||||
|         run: | | ||||
|           uv run pytest ./tests/test_monitoring.py | ||||
|  |  | |||
|  | @ -0,0 +1,125 @@ | |||
| from smolagents.memory import ( | ||||
|     ActionStep, | ||||
|     AgentMemory, | ||||
|     ChatMessage, | ||||
|     Message, | ||||
|     MessageRole, | ||||
|     PlanningStep, | ||||
|     SystemPromptStep, | ||||
|     TaskStep, | ||||
| ) | ||||
| 
 | ||||
| 
 | ||||
| class TestAgentMemory: | ||||
|     def test_initialization(self): | ||||
|         system_prompt = "This is a system prompt." | ||||
|         memory = AgentMemory(system_prompt=system_prompt) | ||||
|         assert memory.system_prompt.system_prompt == system_prompt | ||||
|         assert memory.steps == [] | ||||
| 
 | ||||
| 
 | ||||
| def test_action_step_to_messages(): | ||||
|     action_step = ActionStep( | ||||
|         model_input_messages=[Message(role=MessageRole.USER, content="Hello")], | ||||
|         tool_calls=None, | ||||
|         start_time=0.0, | ||||
|         end_time=1.0, | ||||
|         step_number=1, | ||||
|         error=None, | ||||
|         duration=1.0, | ||||
|         model_output_message=ChatMessage(role=MessageRole.ASSISTANT, content="Hi"), | ||||
|         model_output="Hi", | ||||
|         observations="Observation", | ||||
|         observations_images=["image1.png"], | ||||
|         action_output="Output", | ||||
|     ) | ||||
|     messages = action_step.to_messages() | ||||
|     assert len(messages) == 2 | ||||
|     for message in messages: | ||||
|         assert isinstance(message, dict) | ||||
|         assert "role" in message | ||||
|         assert "content" in message | ||||
|         assert isinstance(message["role"], MessageRole) | ||||
|         assert isinstance(message["content"], list) | ||||
|     assistant_message = messages[0] | ||||
|     assert assistant_message["role"] == MessageRole.ASSISTANT | ||||
|     assert len(assistant_message["content"]) == 1 | ||||
|     for content in assistant_message["content"]: | ||||
|         assert isinstance(content, dict) | ||||
|         assert "type" in content | ||||
|         assert "text" in content | ||||
|     user_message = messages[1] | ||||
|     assert user_message["role"] == MessageRole.USER | ||||
|     assert len(user_message["content"]) == 2 | ||||
|     text_content = user_message["content"][0] | ||||
|     assert isinstance(text_content, dict) | ||||
|     assert "type" in text_content | ||||
|     assert "text" in text_content | ||||
|     for image_content in user_message["content"][1:]: | ||||
|         assert isinstance(image_content, dict) | ||||
|         assert "type" in image_content | ||||
|         assert "image" in image_content | ||||
| 
 | ||||
| 
 | ||||
| def test_planning_step_to_messages(): | ||||
|     planning_step = PlanningStep( | ||||
|         model_input_messages=[Message(role=MessageRole.USER, content="Hello")], | ||||
|         model_output_message_facts=ChatMessage(role=MessageRole.ASSISTANT, content="Facts"), | ||||
|         facts="These are facts.", | ||||
|         model_output_message_plan=ChatMessage(role=MessageRole.ASSISTANT, content="Plan"), | ||||
|         plan="This is a plan.", | ||||
|     ) | ||||
|     messages = planning_step.to_messages(summary_mode=False) | ||||
|     assert len(messages) == 2 | ||||
|     for message in messages: | ||||
|         assert isinstance(message, dict) | ||||
|         assert "role" in message | ||||
|         assert "content" in message | ||||
|         assert isinstance(message["role"], MessageRole) | ||||
|         assert message["role"] == MessageRole.ASSISTANT | ||||
|         assert isinstance(message["content"], list) | ||||
|         assert len(message["content"]) == 1 | ||||
|         for content in message["content"]: | ||||
|             assert isinstance(content, dict) | ||||
|             assert "type" in content | ||||
|             assert "text" in content | ||||
| 
 | ||||
| 
 | ||||
| def test_task_step_to_messages(): | ||||
|     task_step = TaskStep(task="This is a task.", task_images=["task_image1.png"]) | ||||
|     messages = task_step.to_messages(summary_mode=False) | ||||
|     assert len(messages) == 1 | ||||
|     for message in messages: | ||||
|         assert isinstance(message, dict) | ||||
|         assert "role" in message | ||||
|         assert "content" in message | ||||
|         assert isinstance(message["role"], MessageRole) | ||||
|         assert message["role"] == MessageRole.USER | ||||
|         assert isinstance(message["content"], list) | ||||
|         assert len(message["content"]) == 2 | ||||
|         text_content = message["content"][0] | ||||
|         assert isinstance(text_content, dict) | ||||
|         assert "type" in text_content | ||||
|         assert "text" in text_content | ||||
|         for image_content in message["content"][1:]: | ||||
|             assert isinstance(image_content, dict) | ||||
|             assert "type" in image_content | ||||
|             assert "image" in image_content | ||||
| 
 | ||||
| 
 | ||||
| def test_system_prompt_step_to_messages(): | ||||
|     system_prompt_step = SystemPromptStep(system_prompt="This is a system prompt.") | ||||
|     messages = system_prompt_step.to_messages(summary_mode=False) | ||||
|     assert len(messages) == 1 | ||||
|     for message in messages: | ||||
|         assert isinstance(message, dict) | ||||
|         assert "role" in message | ||||
|         assert "content" in message | ||||
|         assert isinstance(message["role"], MessageRole) | ||||
|         assert message["role"] == MessageRole.SYSTEM | ||||
|         assert isinstance(message["content"], list) | ||||
|         assert len(message["content"]) == 1 | ||||
|         for content in message["content"]: | ||||
|             assert isinstance(content, dict) | ||||
|             assert "type" in content | ||||
|             assert "text" in content | ||||
		Loading…
	
		Reference in New Issue