import random
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.openai import OpenAIChat
def get_weather_for_city(city: str) -> str:
"""Get weather for a city"""
conditions = ["Sunny", "Cloudy", "Rainy", "Snowy", "Foggy", "Windy"]
temperature = random.randint(-10, 35)
condition = random.choice(conditions)
return f"{city}: {temperature}°C, {condition}"
agent = Agent(
model=OpenAIChat(id="gpt-4o-mini"),
tools=[get_weather_for_city],
instructions="You are a weather assistant. Get the weather using the get_weather_for_city tool.",
# Only keep 3 most recent tool calls in context
max_tool_calls_from_history=3,
db=SqliteDb(db_file="tmp/weather_data.db"),
add_history_to_context=True,
markdown=True,
)
cities = [
"Tokyo",
"Delhi",
"Shanghai",
"São Paulo",
"Mumbai",
"Beijing",
"Cairo",
"London",
]
print(
f"{'Run':<5} | {'City':<15} | {'History':<8} | {'Current':<8} | {'In Context':<11} | {'In DB':<8}"
)
print("-" * 90)
for i, city in enumerate(cities, 1):
run_response = agent.run(f"What's the weather in {city}?")
# Count tool calls in context
history_tool_calls = sum(
len(msg.tool_calls)
for msg in run_response.messages
if msg.role == "assistant"
and msg.tool_calls
and getattr(msg, "from_history", False)
)
# Count tool calls from current run
current_tool_calls = sum(
len(msg.tool_calls)
for msg in run_response.messages
if msg.role == "assistant"
and msg.tool_calls
and not getattr(msg, "from_history", False)
)
total_in_context = history_tool_calls + current_tool_calls
# Total tool calls stored in database (unfiltered)
saved_messages = agent.get_session_messages()
saved_tool_calls = (
sum(
len(msg.tool_calls)
for msg in saved_messages
if msg.role == "assistant" and msg.tool_calls
)
if saved_messages
else 0
)
print(
f"{i:<5} | {city:<15} | {history_tool_calls:<8} | {current_tool_calls:<8} | {total_in_context:<11} | {saved_tool_calls:<8}"
)