mirror of
https://github.com/openai/codex.git
synced 2026-08-23 13:09:46 +00:00
Track prompt cache write token usage (#33454)
## What changed - Parse `cache_write_tokens` from response input token details and carry it through token usage aggregation. - Expose `cache_write_input_tokens` in protocol, app-server, exec, and TypeScript SDK usage events, defaulting it to zero for compatibility with older payloads. - Report cache-write usage in analytics, metrics, traces, and rollout data alongside existing cache-read usage. ## Testing - Add coverage for response parsing, usage event output, aggregation, analytics, metrics, and telemetry fields. GitOrigin-RevId: 634e4fbe3086a8923c0ee13b622573e7d9d221bd
This commit is contained in:
@@ -56,7 +56,7 @@ const handleEvent = (event: ThreadEvent): void => {
|
||||
break;
|
||||
case "turn.completed":
|
||||
console.log(
|
||||
`Used ${event.usage.input_tokens} input tokens, ${event.usage.cached_input_tokens} cached input tokens, ${event.usage.output_tokens} output tokens, ${event.usage.reasoning_output_tokens} reasoning output tokens.`,
|
||||
`Used ${event.usage.input_tokens} input tokens, ${event.usage.cached_input_tokens} cached input tokens, ${event.usage.cache_write_input_tokens} cache write input tokens, ${event.usage.output_tokens} output tokens, ${event.usage.reasoning_output_tokens} reasoning output tokens.`,
|
||||
);
|
||||
break;
|
||||
case "turn.failed":
|
||||
|
||||
@@ -23,6 +23,8 @@ export type Usage = {
|
||||
input_tokens: number;
|
||||
/** The number of cached input tokens used during the turn. */
|
||||
cached_input_tokens: number;
|
||||
/** The number of input tokens written to the prompt cache during the turn. */
|
||||
cache_write_input_tokens: number;
|
||||
/** The number of output tokens used during the turn. */
|
||||
output_tokens: number;
|
||||
/** The number of reasoning output tokens used during the turn. */
|
||||
|
||||
@@ -103,6 +103,8 @@ export class Thread {
|
||||
}
|
||||
if (parsed.type === "thread.started") {
|
||||
this._id = parsed.thread_id;
|
||||
} else if (parsed.type === "turn.completed") {
|
||||
parsed.usage.cache_write_input_tokens ??= 0;
|
||||
}
|
||||
yield parsed;
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ describe("Codex", () => {
|
||||
];
|
||||
expect(result.items).toEqual(expectedItems);
|
||||
expect(result.usage).toEqual({
|
||||
cache_write_input_tokens: 0,
|
||||
cached_input_tokens: 12,
|
||||
input_tokens: 42,
|
||||
output_tokens: 5,
|
||||
|
||||
@@ -47,6 +47,7 @@ describe("Codex", () => {
|
||||
{
|
||||
type: "turn.completed",
|
||||
usage: {
|
||||
cache_write_input_tokens: 0,
|
||||
cached_input_tokens: 12,
|
||||
input_tokens: 42,
|
||||
output_tokens: 5,
|
||||
|
||||
Reference in New Issue
Block a user