77 lines
2.2 KiB
Python
77 lines
2.2 KiB
Python
"""
|
|
Example 1: Basic Trace Capture
|
|
|
|
Demonstrates capturing reasoning traces from M2.1 for a simple task.
|
|
This shows how interleaved thinking provides visibility into agent decisions.
|
|
"""
|
|
|
|
import os
|
|
from pathlib import Path
|
|
from dotenv import load_dotenv
|
|
|
|
from reasoning_trace_optimizer import TraceCapture
|
|
from reasoning_trace_optimizer.capture import format_trace_for_display
|
|
|
|
# Load environment variables from the project root
|
|
env_path = Path(__file__).parent.parent / ".env"
|
|
load_dotenv(env_path)
|
|
|
|
|
|
def main():
|
|
"""Run a simple task and capture the reasoning trace."""
|
|
|
|
# Initialize capture with M2.1
|
|
capture = TraceCapture(
|
|
api_key=os.getenv("ANTHROPIC_API_KEY"),
|
|
base_url="https://api.minimax.io/anthropic",
|
|
model="MiniMax-M2.1",
|
|
)
|
|
|
|
# Define a simple task
|
|
task = "Explain what interleaved thinking is and why it matters for AI agents."
|
|
system_prompt = "You are an AI researcher explaining concepts clearly."
|
|
|
|
print("=" * 60)
|
|
print("BASIC TRACE CAPTURE EXAMPLE")
|
|
print("=" * 60)
|
|
print(f"\nTask: {task}")
|
|
print(f"System Prompt: {system_prompt}")
|
|
print("\nCapturing reasoning trace...\n")
|
|
|
|
# Capture the trace
|
|
trace = capture.run(
|
|
task=task,
|
|
system_prompt=system_prompt,
|
|
max_turns=5,
|
|
)
|
|
|
|
# Display the trace
|
|
print(format_trace_for_display(trace))
|
|
|
|
# Summary statistics
|
|
print("\n" + "=" * 60)
|
|
print("TRACE STATISTICS")
|
|
print("=" * 60)
|
|
print(f"Session ID: {trace.session_id}")
|
|
print(f"Model: {trace.model}")
|
|
print(f"Success: {trace.success}")
|
|
print(f"Total Turns: {trace.total_turns}")
|
|
print(f"Thinking Blocks: {len(trace.thinking_blocks)}")
|
|
print(f"Tool Calls: {len(trace.tool_calls)}")
|
|
print(f"Total Tokens: {trace.total_tokens}")
|
|
|
|
# Show each thinking block summary
|
|
if trace.thinking_blocks:
|
|
print("\n" + "=" * 60)
|
|
print("THINKING BLOCK SUMMARIES")
|
|
print("=" * 60)
|
|
for i, thinking in enumerate(trace.thinking_blocks):
|
|
print(f"\n[Turn {thinking.turn_index}] ({len(thinking.content)} chars)")
|
|
# Show first 200 chars
|
|
preview = thinking.content[:200].replace("\n", " ")
|
|
print(f" Preview: {preview}...")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|