@@ -1080,7 +1080,7 @@ describe("session.getUsage", () => {
10801080 expect ( result . tokens . cache . read ) . toBe ( 200 )
10811081 } )
10821082
1083- test ( "handles reasoning tokens" , ( ) => {
1083+ test ( "separates reasoning tokens from output tokens" , ( ) => {
10841084 const model = createModel ( { context : 100_000 , output : 32_000 } )
10851085 const result = Session . getUsage ( {
10861086 model,
@@ -1092,7 +1092,35 @@ describe("session.getUsage", () => {
10921092 } ,
10931093 } )
10941094
1095+ expect ( result . tokens . input ) . toBe ( 1000 )
1096+ expect ( result . tokens . output ) . toBe ( 400 )
10951097 expect ( result . tokens . reasoning ) . toBe ( 100 )
1098+ expect ( result . tokens . total ) . toBe ( 1500 )
1099+ } )
1100+
1101+ test ( "does not double count reasoning tokens in cost" , ( ) => {
1102+ const model = createModel ( {
1103+ context : 100_000 ,
1104+ output : 32_000 ,
1105+ cost : {
1106+ input : 0 ,
1107+ output : 15 ,
1108+ cache : { read : 0 , write : 0 } ,
1109+ } ,
1110+ } )
1111+ const result = Session . getUsage ( {
1112+ model,
1113+ usage : {
1114+ inputTokens : 0 ,
1115+ outputTokens : 1_000_000 ,
1116+ totalTokens : 1_000_000 ,
1117+ reasoningTokens : 250_000 ,
1118+ } ,
1119+ } )
1120+
1121+ expect ( result . tokens . output ) . toBe ( 750_000 )
1122+ expect ( result . tokens . reasoning ) . toBe ( 250_000 )
1123+ expect ( result . cost ) . toBe ( 15 )
10961124 } )
10971125
10981126 test ( "handles undefined optional values gracefully" , ( ) => {
0 commit comments