Capture rollout budget units from response usage (#36641)

## What changed

- Parse `codex_rollout_budget_units` from completed Responses API usage into
  `TokenUsage`.
- Keep the provider-only value out of serialized protocol, JSON schema, and
  TypeScript representations.

## Testing

- Cover the value in unit and end-to-end SSE response parsing tests.

GitOrigin-RevId: a53d4202beb9c8985d25894cb10e7c01f20b2a44
This commit is contained in:
rka-oai authored and copyberry committed 2026-08-03 00:30:57 +00:00
1 parent 5157493c23
commit bb5054fe47
18 files changed
+63 -3

No files matched your search

+20 -2
View File
@@ -111,7 +111,15 @@ async fn responses_stream_parses_items_and_completed_end_to_end() -> Result<()>
let completed = serde_json::json!({
"type": "response.completed",
"response": { "id": "resp1" }
"response": {
"id": "resp1",
"usage": {
"input_tokens": 10,
"output_tokens": 5,
"total_tokens": 15,
"codex_rollout_budget_units": 2.5
}
}
});
let body = build_responses_body(vec![item1, item2, completed]);
@@ -160,7 +168,17 @@ async fn responses_stream_parses_items_and_completed_end_to_end() -> Result<()>
end_turn,
} => {
assert_eq!(response_id, "resp1");
assert!(token_usage.is_none());
assert_eq!(
token_usage.as_ref().map(|usage| usage.total_tokens),
Some(15)
);
assert_eq!(
token_usage
.as_ref()
.and_then(|usage| usage.codex_rollout_budget_units.as_ref())
.and_then(serde_json::Number::as_f64),
Some(2.5)
);
assert!(end_turn.is_none());
}
other => panic!("unexpected third event: {other:?}"),