agent-from-scratch / test_session.py
shekkari21's picture
added session and memory
64462d2
"""Test session manager to verify context persistence across conversations."""
import asyncio
import sys
from pathlib import Path
# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent))
from agent_framework import Agent, LlmClient, InMemorySessionManager, display_trace
from agent_tools import calculator
async def main():
"""Test session persistence."""
print("=" * 60)
print("Session Manager Test - Context Persistence")
print("=" * 60)
# Create a shared session manager
session_manager = InMemorySessionManager()
# Create agent with session support
agent = Agent(
model=LlmClient(model="gpt-4o-mini"),
tools=[calculator],
instructions="You are a helpful assistant with memory. Remember what users tell you.",
max_steps=5,
session_manager=session_manager
)
session_id = "test-user-123"
# === Conversation 1: Introduce yourself ===
print("\n" + "-" * 60)
print("Conversation 1: User introduces themselves")
print("-" * 60)
result1 = await agent.run(
"Hi! My name is Alice and I'm a software engineer. I love Python.",
session_id=session_id
)
print(f"User: Hi! My name is Alice and I'm a software engineer. I love Python.")
print(f"Agent: {result1.output}")
print(f"Events in context: {len(result1.context.events)}")
# === Conversation 2: Ask about something else ===
print("\n" + "-" * 60)
print("Conversation 2: Continue conversation")
print("-" * 60)
result2 = await agent.run(
"What's 1234 * 5678?",
session_id=session_id
)
print(f"User: What's 1234 * 5678?")
print(f"Agent: {result2.output}")
print(f"Events in context: {len(result2.context.events)}")
# === Conversation 3: Test if it remembers ===
print("\n" + "-" * 60)
print("Conversation 3: Test memory - Does it remember?")
print("-" * 60)
result3 = await agent.run(
"What's my name and what do I do for work?",
session_id=session_id
)
print(f"User: What's my name and what do I do for work?")
print(f"Agent: {result3.output}")
print(f"Events in context: {len(result3.context.events)}")
# === Test with a DIFFERENT session ===
print("\n" + "-" * 60)
print("Conversation 4: Different session (should NOT remember)")
print("-" * 60)
result4 = await agent.run(
"What's my name?",
session_id="different-user-456" # Different session!
)
print(f"User: What's my name?")
print(f"Agent: {result4.output}")
print(f"Events in context: {len(result4.context.events)}")
# === Show session storage ===
print("\n" + "=" * 60)
print("Session Storage Summary")
print("=" * 60)
# Access internal storage to show what's stored
for sid, session in session_manager._sessions.items():
print(f"\nSession ID: {sid}")
print(f" Events: {len(session.events)}")
print(f" State keys: {list(session.state.keys())}")
print(f" Created: {session.created_at}")
# === Optional: Show full trace ===
print("\n" + "=" * 60)
print("Full Trace for Session 'test-user-123' (Last Conversation)")
print("=" * 60)
display_trace(result3.context)
if __name__ == "__main__":
asyncio.run(main())