@@ -271,6 +271,7 @@ fn prompt_turn_config(
271271struct PromptUsage {
272272 input_tokens : usize ,
273273 output_tokens : usize ,
274+ total_tokens : usize ,
274275 cache_creation_input_tokens : usize ,
275276 cache_read_input_tokens : usize ,
276277}
@@ -280,6 +281,7 @@ impl PromptUsage {
280281 Self {
281282 input_tokens : session. total_input_tokens ,
282283 output_tokens : session. total_output_tokens ,
284+ total_tokens : session. total_tokens ,
283285 cache_creation_input_tokens : session. total_cache_creation_tokens ,
284286 cache_read_input_tokens : session. total_cache_read_tokens ,
285287 }
@@ -390,23 +392,24 @@ struct PromptUsageDelta {
390392 input_tokens : usize ,
391393 output_tokens : usize ,
392394 #[ serde( skip_serializing_if = "Option::is_none" ) ]
395+ reasoning_output_tokens : Option < usize > ,
396+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
397+ total_tokens : Option < usize > ,
398+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
393399 cache_creation_input_tokens : Option < usize > ,
394400 #[ serde( skip_serializing_if = "Option::is_none" ) ]
395401 cache_read_input_tokens : Option < usize > ,
396402}
397403
398404impl PromptUsageDelta {
399- fn new (
400- input_tokens : usize ,
401- output_tokens : usize ,
402- cache_creation_input_tokens : Option < usize > ,
403- cache_read_input_tokens : Option < usize > ,
404- ) -> Self {
405+ fn new ( usage : & devo_protocol:: Usage ) -> Self {
405406 Self {
406- input_tokens,
407- output_tokens,
408- cache_creation_input_tokens,
409- cache_read_input_tokens,
407+ input_tokens : usage. input_tokens ,
408+ output_tokens : usage. output_tokens ,
409+ reasoning_output_tokens : usage. reasoning_output_tokens ,
410+ total_tokens : usage. total_tokens ,
411+ cache_creation_input_tokens : usage. cache_creation_input_tokens ,
412+ cache_read_input_tokens : usage. cache_read_input_tokens ,
410413 }
411414 }
412415}
@@ -442,19 +445,9 @@ fn write_query_event_jsonl(session_id: &str, event: &QueryEvent) -> Result<()> {
442445 session_id,
443446 item_type : "reasoning" ,
444447 } ) ,
445- QueryEvent :: UsageDelta {
446- input_tokens,
447- output_tokens,
448- cache_creation_input_tokens,
449- cache_read_input_tokens,
450- } => write_jsonl ( & PromptJsonlEvent :: UsageDelta {
448+ QueryEvent :: UsageDelta { usage } => write_jsonl ( & PromptJsonlEvent :: UsageDelta {
451449 session_id,
452- usage : PromptUsageDelta :: new (
453- * input_tokens,
454- * output_tokens,
455- * cache_creation_input_tokens,
456- * cache_read_input_tokens,
457- ) ,
450+ usage : PromptUsageDelta :: new ( usage) ,
458451 } ) ,
459452 QueryEvent :: ToolUseStart { id, name, input } => {
460453 write_jsonl ( & PromptJsonlEvent :: ToolCallStarted {
@@ -512,19 +505,9 @@ fn write_query_event_jsonl(session_id: &str, event: &QueryEvent) -> Result<()> {
512505 session_id,
513506 stop_reason,
514507 } ) ,
515- QueryEvent :: Usage {
516- input_tokens,
517- output_tokens,
518- cache_creation_input_tokens,
519- cache_read_input_tokens,
520- } => write_jsonl ( & PromptJsonlEvent :: Usage {
508+ QueryEvent :: Usage { usage } => write_jsonl ( & PromptJsonlEvent :: Usage {
521509 session_id,
522- usage : PromptUsageDelta :: new (
523- * input_tokens,
524- * output_tokens,
525- * cache_creation_input_tokens,
526- * cache_read_input_tokens,
527- ) ,
510+ usage : PromptUsageDelta :: new ( usage) ,
528511 } ) ,
529512 }
530513}
@@ -591,6 +574,7 @@ mod tests {
591574 usage : PromptUsage {
592575 input_tokens : 3 ,
593576 output_tokens : 5 ,
577+ total_tokens : 8 ,
594578 cache_creation_input_tokens : 0 ,
595579 cache_read_input_tokens : 2 ,
596580 } ,
@@ -608,6 +592,7 @@ mod tests {
608592 "usage" : {
609593 "input_tokens" : 3 ,
610594 "output_tokens" : 5 ,
595+ "total_tokens" : 8 ,
611596 "cache_creation_input_tokens" : 0 ,
612597 "cache_read_input_tokens" : 2
613598 }
0 commit comments