| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- """
- Integration test for context persistence across agent calls.
- This test verifies that modifications to user_context are preserved
- between different agent invocations within the same agency.
- """
- import pytest
- from pydantic import Field
- from agency_swarm import Agency, Agent
- from agency_swarm.tools import BaseTool
- class StoreValueTool(BaseTool):
- """Store a value in the shared context."""
- key: str = Field(..., description="Key to store")
- value: str = Field(..., description="Value to store")
- def run(self):
- if self.context:
- self.context.set(self.key, self.value)
- return f"Stored {self.key}={self.value}"
- return "No context available"
- class ReadValueTool(BaseTool):
- """Read a value from the shared context."""
- key: str = Field(..., description="Key to read")
- def run(self):
- if self.context:
- value = self.context.get(self.key, "not_found")
- return f"Value for {self.key}: {value}"
- return "No context available"
- @pytest.mark.asyncio
- async def test_context_persistence_between_calls():
- """Test that context changes persist between separate agent calls."""
- # Create agent with both tools
- agent = Agent(
- name="ContextAgent",
- instructions="You store and retrieve data using the provided tools.",
- tools=[StoreValueTool, ReadValueTool],
- model="gpt-5.4-mini",
- )
- # Create agency with initial context
- agency = Agency(
- agent,
- user_context={"initial": "value"},
- )
- # First call: Store a value
- response1 = await agency.get_response("Store the value 'test_data' with key 'stored_key' using StoreValueTool")
- # Verify the tool was called
- tool_outputs = [item.output for item in response1.new_items if hasattr(item, "output")]
- assert any("Stored stored_key=test_data" in str(output) for output in tool_outputs)
- # Second call: Read the value back
- response2 = await agency.get_response("Read the value for key 'stored_key' using ReadValueTool")
- # Verify the value was persisted
- tool_outputs2 = [item.output for item in response2.new_items if hasattr(item, "output")]
- assert any("Value for stored_key: test_data" in str(output) for output in tool_outputs2)
- # Verify agency context was updated
- assert agency.user_context.get("stored_key") == "test_data"
- assert agency.user_context.get("initial") == "value" # Original value still there
- @pytest.mark.asyncio
- async def test_context_override_does_not_affect_agency():
- """Test that context_override doesn't modify the agency's user_context."""
- agent = Agent(
- name="TestAgent",
- instructions="You read data using ReadValueTool.",
- tools=[ReadValueTool],
- model="gpt-5.4-mini",
- )
- agency = Agency(
- agent,
- user_context={"agency_key": "agency_value"},
- )
- # Call with context override
- response = await agency.get_response(
- "Read the value for key 'override_key' using ReadValueTool", context_override={"override_key": "override_value"}
- )
- # Verify the override was used in the call
- tool_outputs = [item.output for item in response.new_items if hasattr(item, "output")]
- assert any("Value for override_key: override_value" in str(output) for output in tool_outputs)
- # Verify agency context was NOT modified
- assert "override_key" not in agency.user_context
- assert agency.user_context == {"agency_key": "agency_value"}
|