Capture Reasoning Content with Reasoning Tools
Read available reasoning notes from non-streaming outputs and streaming completion events.
Reasoning content depends on the model calling a captured tool; it can be empty even when tools are configured. These are explicit notes, not hidden model reasoning.
Add the following code to your Python file
from textwrap import dedent
from agno.agent import Agent
from agno.run.agent import RunCompletedEvent
from agno.models.openai import OpenAIChat
from agno.tools.reasoning import ReasoningTools
"""Inspect reasoning_content when the model supplies captured notes."""
print("\n=== Testing reasoning_content generation ===\n")
# Create an agent with ReasoningTools
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
tools=[ReasoningTools(add_instructions=True)],
instructions=dedent("""\
You are an expert problem-solving assistant with strong analytical skills! π§
Use step-by-step reasoning to solve the problem.
\
"""),
)
# Test 1: Non-streaming mode
print("Running with stream=False...")
response = agent.run("What is the sum of the first 10 natural numbers?", stream=False)
# Check reasoning_content
if hasattr(response, "reasoning_content") and response.reasoning_content:
print("β
reasoning_content FOUND in non-streaming response")
print(f" Length: {len(response.reasoning_content)} characters")
print("\n=== reasoning_content preview (non-streaming) ===")
preview = response.reasoning_content[:1000]
if len(response.reasoning_content) > 1000:
preview += "..."
print(preview)
else:
print("β reasoning_content NOT FOUND in non-streaming response")
# Process streaming responses to find the final one
print("\n\n=== Test 2: Processing stream to find final response ===\n")
# Create another fresh agent
streaming_agent_alt = Agent(
model=OpenAIChat(id="gpt-4o"),
tools=[ReasoningTools(add_instructions=True)],
instructions=dedent("""\
You are an expert problem-solving assistant with strong analytical skills! π§
Use step-by-step reasoning to solve the problem.
\
"""),
)
# Process streaming responses and look for the completion event
final_response = None
for event in streaming_agent_alt.run(
"What is the value of 3! (factorial)?",
stream=True,
stream_events=True,
):
# Select the completion event explicitly
if isinstance(event, RunCompletedEvent):
final_response = event
print("--- Checking reasoning_content from final stream event ---")
if (
final_response
and hasattr(final_response, "reasoning_content")
and final_response.reasoning_content
):
print("β
reasoning_content FOUND in final stream event")
print(f" Length: {len(final_response.reasoning_content)} characters")
print("\n=== reasoning_content preview (final stream event) ===")
preview = final_response.reasoning_content[:1000]
if len(final_response.reasoning_content) > 1000:
preview += "..."
print(preview)
else:
print("β reasoning_content NOT FOUND in final stream event")Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateInstall dependencies
uv pip install -U agno openaiExport your OpenAI API key
export OPENAI_API_KEY="your_openai_api_key_here"Run Agent
python capture_reasoning_content_reasoning_tools.py