"""Integration test for BaseTool context support.""" import pytest from pydantic import Field from agency_swarm import Agency, Agent, BaseTool @pytest.mark.asyncio async def test_basetool_context_integration(): """Test that BaseTools can access agency context.""" class ContextReaderTool(BaseTool): """A tool that reads from context.""" key: str = Field(..., description="Key to read from context") def run(self): if self.context is not None: value = self.context.get(self.key, "not_found") return f"Context value for {self.key}: {value}" else: return "No context available" # Create agent with context reader tool agent = Agent( name="ContextAgent", instructions="You read data from context using the ContextReaderTool.", tools=[ContextReaderTool], model="gpt-5.4-mini", ) # Create agency with initial context agency = Agency( agent, user_context={"test_key": "test_value", "another_key": "another_value"}, ) # Test reading from context response = await agency.get_response("Read the value of test_key using ContextReaderTool", recipient_agent=agent) # Check that the tool was called and returned the correct value tool_outputs = [item.output for item in response.new_items if hasattr(item, "output")] assert any("Context value for test_key: test_value" in str(output) for output in tool_outputs) @pytest.mark.asyncio async def test_basetool_async_context(): """Test that async BaseTools also receive context.""" class AsyncContextTool(BaseTool): """An async tool that uses context.""" data: str = Field(..., description="Data to process") async def run(self): if self.context is not None: ctx_data = self.context.get("async_key", "default") return f"Async processed: {self.data} with context: {ctx_data}" else: return f"Async processed: {self.data} without context" agent = Agent( name="AsyncAgent", instructions="You process data asynchronously.", tools=[AsyncContextTool], model="gpt-5.4-mini", ) agency = Agency( agent, user_context={"async_key": "async_value"}, ) response = await agency.get_response("Process 'test_data' using AsyncContextTool") # Check that the tool was called with context tool_outputs = [item.output for item in response.new_items if hasattr(item, "output")] assert any("Async processed: test_data with context: async_value" in str(output) for output in tool_outputs)