Skip to content

Commit 69c3357

Browse files
authored
Docs: Add per-request usage to docs and example script (#2026)
1 parent 92fcf51 commit 69c3357

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

docs/usage.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ The Agents SDK automatically tracks token usage for every run. You can access it
88
- **input_tokens**: total input tokens sent
99
- **output_tokens**: total output tokens received
1010
- **total_tokens**: input + output
11+
- **request_usage_entries**: list of per-request usage breakdowns
1112
- **details**:
1213
- `input_tokens_details.cached_tokens`
1314
- `output_tokens_details.reasoning_tokens`
@@ -46,6 +47,17 @@ result = await Runner.run(agent, "What's the weather in Tokyo?")
4647
print(result.context_wrapper.usage.total_tokens)
4748
```
4849

50+
## Per-request usage tracking
51+
52+
The SDK automatically tracks usage for each API request in `request_usage_entries`, useful for detailed cost calculation and monitoring context window consumption.
53+
54+
```python
55+
result = await Runner.run(agent, "What's the weather in Tokyo?")
56+
57+
for request in enumerate(result.context_wrapper.usage.request_usage_entries):
58+
print(f"Request {i + 1}: {request.input_tokens} in, {request.output_tokens} out")
59+
```
60+
4961
## Accessing usage with sessions
5062

5163
When you use a `Session` (e.g., `SQLiteSession`), each call to `Runner.run(...)` returns usage for that specific run. Sessions maintain conversation history for context, but each run's usage is independent.
@@ -78,5 +90,6 @@ class MyHooks(RunHooks):
7890
For detailed API documentation, see:
7991

8092
- [`Usage`][agents.usage.Usage] - Usage tracking data structure
93+
- [`RequestUsage`][agents.usage.RequestUsage] - Per-request usage details
8194
- [`RunContextWrapper`][agents.run.RunContextWrapper] - Access usage from run context
8295
- [`RunHooks`][agents.run.RunHooks] - Hook into usage tracking lifecycle

examples/basic/usage_tracking.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ def get_weather(city: str) -> Weather:
1919

2020
def print_usage(usage: Usage) -> None:
2121
print("\n=== Usage ===")
22-
print(f"Requests: {usage.requests}")
2322
print(f"Input tokens: {usage.input_tokens}")
2423
print(f"Output tokens: {usage.output_tokens}")
2524
print(f"Total tokens: {usage.total_tokens}")
25+
print(f"Requests: {usage.requests}")
26+
for i, request in enumerate(usage.request_usage_entries):
27+
print(f" {i + 1}: {request.input_tokens} input, {request.output_tokens} output")
2628

2729

2830
async def main() -> None:

0 commit comments

Comments
 (0)