File size: 4,246 Bytes
175746c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2550bb7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175746c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2550bb7
175746c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2550bb7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# Headroom Examples

This directory contains examples demonstrating Headroom's capabilities.

## Quick Start Examples

### basic_usage.py

Basic integration with OpenAI client:

```bash
export OPENAI_API_KEY='your-key'
python examples/basic_usage.py
```

### anthropic_example.py

Integration with Anthropic Claude:

```bash
export ANTHROPIC_API_KEY='your-key'
python examples/anthropic_example.py
```

### streaming_example.py

Streaming responses with optimization:

```bash
export OPENAI_API_KEY='your-key'
python examples/streaming_example.py
```

## Evaluation Examples

### smart_vs_naive_eval.py

Compare SmartCrusher against naive truncation:

```bash
export OPENAI_API_KEY='your-key'
python examples/smart_vs_naive_eval.py
```

### real_world_eval.py

Comprehensive evaluation with Anthropic models:

```bash
export ANTHROPIC_API_KEY='your-key'
python examples/real_world_eval.py
```

### real_world_openai_eval.py

Comprehensive evaluation with OpenAI models:

```bash
export OPENAI_API_KEY='your-key'
python examples/real_world_openai_eval.py
```

## Demo Directories

### langchain_demo/

Full LangChain agent integration demo:

```bash
# No API key needed for compression demo
PYTHONPATH=. python -m examples.langchain_demo.show_compression

# Full comparison (requires API key)
export OPENAI_API_KEY='your-key'
PYTHONPATH=. python -m examples.langchain_demo.run_comparison
```

See [langchain_demo/README.md](langchain_demo/README.md) for details.

### mcp_demo/

MCP (Model Context Protocol) integration demo:

```bash
export OPENAI_API_KEY='your-key'
PYTHONPATH=. python -m examples.mcp_demo.run_agent_eval
```

### strands_bedrock_demo.py

AWS Strands Agents + Bedrock integration demo. Showcases two Headroom integration patterns:

1. **HeadroomHookProvider** - Compresses tool outputs in real-time
2. **HeadroomStrandsModel** - Optimizes entire conversation context

```bash
# Configure AWS credentials
export AWS_ACCESS_KEY_ID='your-access-key'
export AWS_SECRET_ACCESS_KEY='your-secret-key'
export AWS_DEFAULT_REGION='us-west-2'  # Optional, defaults to us-west-2

# Or use AWS profile
export AWS_PROFILE='your-profile-name'

# Run the full demo (both integration patterns)
python examples/strands_bedrock_demo.py

# Run only the hook provider demo
python examples/strands_bedrock_demo.py --hook

# Run only the model wrapper demo
python examples/strands_bedrock_demo.py --model

# Specify a different AWS region
python examples/strands_bedrock_demo.py --region us-east-1
```

The demo uses Claude 3 Haiku via Bedrock for cost efficiency. It creates agents with
4 tools that return verbose JSON output (search results, logs, database records, metrics)
and displays compression statistics with visual comparisons.

**Requirements:**
- AWS account with Bedrock enabled
- Claude 3 Haiku model access in your region
- `pip install strands-agents headroom-ai[strands]`

## Running Examples

All examples can be run from the repository root:

```bash
# Install dependencies
pip install -e ".[dev]"

# Run any example
python examples/<example_name>.py
```

## Expected Results

| Example | Token Savings | Notes |
|---------|---------------|-------|
| basic_usage | 50-70% | Simple tool output compression |
| langchain_demo | 70-85% | Real agent with multiple tools |
| mcp_demo | 60-80% | MCP tool outputs |
| strands_bedrock_demo | 60-85% | Strands + Bedrock with verbose tools |
| real_world_eval | 50-90% | Varies by scenario |

## Troubleshooting

**ModuleNotFoundError: No module named 'headroom'**

Run from the repository root with PYTHONPATH:

```bash
PYTHONPATH=. python examples/basic_usage.py
```

Or install in development mode:

```bash
pip install -e .
```

**API Key Errors**

Ensure your API keys are set:

```bash
export OPENAI_API_KEY='sk-...'
export ANTHROPIC_API_KEY='sk-ant-...'
```

**AWS Credentials Errors (for Strands demo)**

Ensure AWS credentials are configured:

```bash
# Option 1: Environment variables
export AWS_ACCESS_KEY_ID='your-access-key'
export AWS_SECRET_ACCESS_KEY='your-secret-key'

# Option 2: AWS profile
export AWS_PROFILE='your-profile-name'

# Option 3: AWS credentials file (~/.aws/credentials)
```

Also ensure Bedrock and the Claude 3 Haiku model are enabled in your AWS account.