@@ -65,11 +65,11 @@ function addUsageValue(current: unknown, next: unknown): unknown {
6565 return next ;
6666}
6767
68- function accumulateUsage ( current : unknown | null , next : unknown | null | undefined ) : unknown | null {
68+ function accumulateUsage ( current : ModelUsage | null , next : unknown | null | undefined ) : ModelUsage | null {
6969 if ( next == null ) {
7070 return current ?? null ;
7171 }
72- return addUsageValue ( current , next ) ;
72+ return addUsageValue ( current , next ) as ModelUsage ;
7373}
7474
7575function getExtensionRoot ( ) : string {
@@ -81,7 +81,7 @@ function getExtensionRoot(): string {
8181 return path . resolve ( path . dirname ( currentFilePath ) , ".." ) ;
8282}
8383
84- function getTotalTokens ( usage : unknown | null | undefined ) : number {
84+ function getTotalTokens ( usage : ModelUsage | null | undefined ) : number {
8585 if ( ! isUsageRecord ( usage ) ) {
8686 return 0 ;
8787 }
@@ -91,6 +91,17 @@ function getTotalTokens(usage: unknown | null | undefined): number {
9191
9292export type SessionStatus = "failed" | "pending" | "processing" | "waiting_for_user" | "completed" | "interrupted" ;
9393
94+ export type ModelUsage = {
95+ prompt_tokens : number ;
96+ completion_tokens : number ;
97+ total_tokens : number ;
98+ completion_tokens_details ?: Record < string , unknown > ;
99+ prompt_tokens_details ?: Record < string , unknown > ;
100+ prompt_cache_hit_tokens ?: number ;
101+ prompt_cache_miss_tokens ?: number ;
102+ total_reqs ?: number ;
103+ } ;
104+
94105export type SessionEntry = {
95106 id : string ;
96107 summary : string | null ;
@@ -100,7 +111,7 @@ export type SessionEntry = {
100111 toolCalls : unknown [ ] | null ;
101112 status : SessionStatus ;
102113 failReason : string | null ;
103- usage : unknown | null ;
114+ usage : ModelUsage | null ;
104115 activeTokens : number ;
105116 createTime : string ;
106117 updateTime : string ;
@@ -286,7 +297,7 @@ export class SessionManager {
286297 debug ?: ChatCompletionDebugOptions
287298 ) : Promise < {
288299 choices ?: Array < { message ?: Record < string , unknown > } > ;
289- usage ?: unknown ;
300+ usage ?: ModelUsage | null ;
290301 } > {
291302 const requestId = crypto . randomUUID ( ) ;
292303 const startedAt = new Date ( ) . toISOString ( ) ;
@@ -355,13 +366,13 @@ export class SessionManager {
355366 request : streamRequest ,
356367 response,
357368 } ) ;
358- return response as { choices ?: Array < { message ?: Record < string , unknown > } > ; usage ?: unknown } ;
369+ return response as { choices ?: Array < { message ?: Record < string , unknown > } > ; usage ?: ModelUsage | null } ;
359370 }
360371
361372 let content = "" ;
362373 let reasoningContent = "" ;
363374 let refusal : string | null = null ;
364- let usage : unknown = null ;
375+ let usage : ModelUsage | null = null ;
365376 const responseChunks : unknown [ ] = [ ] ;
366377 const toolCallsByIndex = new Map <
367378 number ,
@@ -386,7 +397,7 @@ export class SessionManager {
386397 responseChunks . push ( chunk ) ;
387398 }
388399 if ( "usage" in chunk && chunk . usage != null ) {
389- usage = chunk . usage ;
400+ usage = chunk . usage as ModelUsage ;
390401 }
391402
392403 const choices = Array . isArray ( chunk . choices ) ? chunk . choices : [ ] ;
@@ -2096,7 +2107,7 @@ ${skillMd}
20962107 toolCalls : Array . isArray ( value . toolCalls ) ? value . toolCalls : null ,
20972108 status : this . normalizeSessionStatus ( value . status ) ,
20982109 failReason : typeof value . failReason === "string" ? value . failReason : null ,
2099- usage : value . usage ?? null ,
2110+ usage : ( value . usage as ModelUsage ) ?? null ,
21002111 activeTokens : typeof value . activeTokens === "number" ? value . activeTokens : 0 ,
21012112 createTime : typeof value . createTime === "string" ? value . createTime : new Date ( ) . toISOString ( ) ,
21022113 updateTime : typeof value . updateTime === "string" ? value . updateTime : new Date ( ) . toISOString ( ) ,
0 commit comments