import os
import asyncio
from typing import List
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
# Import Maxim components
from maxim import Maxim
from maxim.logger.pydantic_ai import instrument_pydantic_ai
# Import Pydantic AI components
from pydantic_ai import Agent, RunContext
def create_simple_agent():
"""Create a simple Pydantic AI agent."""
# Create an agent with simple tools
agent = Agent(
model="openai:gpt-4o-mini",
name="Simple Agent",
instructions="You are a helpful assistant that can perform calculations."
)
@agent.tool
def add_numbers(ctx: RunContext, a: float, b: float) -> float:
"""Add two numbers together."""
print(f"[Tool] Adding {a} + {b}")
return a + b
@agent.tool
def multiply_numbers(ctx: RunContext, a: float, b: float) -> float:
"""Multiply two numbers together."""
print(f"[Tool] Multiplying {a} * {b}")
return a * b
return agent
def run_simple_example_with_session():
"""Run a simple example with session management."""
print("=== Simple Agent Example with Session Management ===")
# Create and instrument the agent
agent = create_simple_agent()
print("Instrumenting Pydantic AI...")
instrument_pydantic_ai(Maxim().logger(), debug=True)
print("Instrumentation complete!")
# Start a session trace to group multiple agent runs
print("Starting session trace...")
instrument_pydantic_ai.start_session("Math Calculator Session")
try:
# Run multiple calculations in the same session
print("Running first calculation...")
result = agent.run_sync("What is 15 + 27?")
print(f"Result: {result}")
print("Running second calculation...")
result = agent.run_sync("Calculate 8 * 12")
print(f"Result: {result}")
print("Running third calculation...")
result = agent.run_sync("What is 25 + 17 and then multiply that result by 3?")
print(f"Result: {result}")
finally:
# End the session trace
print("Ending session trace...")
instrument_pydantic_ai.end_session()
# Set up and run
run_simple_example_with_session()