@@ -306,6 +306,8 @@ export class VercelAIChatService implements IChatService {
306306 promptTokens ?: number ;
307307 completionTokens ?: number ;
308308 totalTokens ?: number ;
309+ inputTokens ?: number ;
310+ outputTokens ?: number ;
309311 } ,
310312 providerMetadata ?: {
311313 anthropic ?: {
@@ -315,8 +317,9 @@ export class VercelAIChatService implements IChatService {
315317 }
316318 ) : UsageInfo | undefined {
317319 if ( ! usage ) return undefined ;
318- const prompt = usage . promptTokens ?? 0 ;
319- const completion = usage . completionTokens ?? 0 ;
320+ // Vercel AI SDK 可能返回 inputTokens/outputTokens 或 promptTokens/completionTokens
321+ const prompt = usage . promptTokens ?? usage . inputTokens ?? 0 ;
322+ const completion = usage . completionTokens ?? usage . outputTokens ?? 0 ;
320323 const result : UsageInfo = {
321324 promptTokens : prompt ,
322325 completionTokens : completion ,
@@ -342,7 +345,7 @@ export class VercelAIChatService implements IChatService {
342345 const status = statusMatch
343346 ? parseInt ( statusMatch [ 1 ] , 10 )
344347 : ( error as Error & { status ?: number } ) . status ;
345- return [ 429 , 529 , 503 ] . includes ( status ) ;
348+ return status !== undefined && [ 429 , 529 , 503 ] . includes ( status ) ;
346349 }
347350
348351 async chat (
@@ -495,7 +498,7 @@ export class VercelAIChatService implements IChatService {
495498 yield {
496499 finishReason : ( part as { finishReason ?: string } ) . finishReason ,
497500 usage : this . convertUsage (
498- ( part as { totalUsage ?: { promptTokens ?: number ; completionTokens ?: number ; totalTokens ?: number } } ) . totalUsage ,
501+ ( part as { totalUsage ?: { promptTokens ?: number ; completionTokens ?: number ; totalTokens ?: number ; inputTokens ?: number ; outputTokens ?: number } } ) . totalUsage ,
499502 ( part as { providerMetadata ?: { anthropic ?: { cacheCreationInputTokens ?: number ; cacheReadInputTokens ?: number } } } ) . providerMetadata
500503 ) ,
501504 } ;
0 commit comments