Preserve raw response usage metadata (#41980)

## What changed

- Include the complete upstream `response.usage` object in
  `ResponseUsageMetadata.metadata` while retaining the existing `amount` field.
- Expose the metadata through `rawResponse/completed` notifications and update
  the generated JSON and TypeScript schemas.

## Testing

- Cover SSE, WebSocket, turn, and compaction completion paths.

GitOrigin-RevId: 6d79b1b4c92ac11abf43ec98f380b4868288a701
This commit is contained in:
sayan-oai authored and copyberry committed 2026-09-01 05:17:11 +00:00
1 parent d038f3448f
commit e017e93ace
14 files changed
+62 -13

No files matched your search

@@ -118,11 +118,13 @@ async fn responses_stream_parses_items_and_completed_end_to_end() -> Result<()>
"input_tokens": 10,
"output_tokens": 5,
"total_tokens": 15,
"extra": { "label": "example", "items": [0, null, true] },
"codex_rollout_budget_units": 2.5
}
}
});
let expected_metadata = completed["response"]["usage"].clone();
let body = build_responses_body(vec![item1, item2, completed]);
let transport = FixtureSseTransport::new(body);
let client = ResponsesClient::new(transport, provider("openai"), Arc::new(NoAuth));
@@ -174,6 +176,7 @@ async fn responses_stream_parses_items_and_completed_end_to_end() -> Result<()>
usage_metadata,
&Some(codex_protocol::ResponseUsageMetadata {
amount: Some("0.12345678901234567890".to_string()),
metadata: Some(expected_metadata),
})
);
assert_eq!(