parent
							
								
									37f549f4aa
								
							
						
					
					
						commit
						595781b82d
					
				|  | @ -63,6 +63,11 @@ jobs: | ||||||
|           uv run pytest ./tests/test_models.py |           uv run pytest ./tests/test_models.py | ||||||
|         if: ${{ success() || failure() }} |         if: ${{ success() || failure() }} | ||||||
| 
 | 
 | ||||||
|  |       - name: Memory tests | ||||||
|  |         run: | | ||||||
|  |           uv run pytest ./tests/test_memory.py | ||||||
|  |         if: ${{ success() || failure() }} | ||||||
|  | 
 | ||||||
|       - name: Monitoring tests |       - name: Monitoring tests | ||||||
|         run: | |         run: | | ||||||
|           uv run pytest ./tests/test_monitoring.py |           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