@@ -79,9 +79,10 @@ export class ResponseBodyHandler extends AbstractLogHandler {
7979 context . message . log . response . status =
8080 processedResponseBody . data . statusOverride ;
8181 }
82- context . processedLog . response . model = getModelFromResponse (
83- processedResponseBody . data ?. processedBody
84- ) ;
82+ // Get model from response body, or fall back to Worker-provided model when body isn't stored
83+ context . processedLog . response . model =
84+ getModelFromResponse ( processedResponseBody . data ?. processedBody ) ||
85+ context . message . log . response . model ;
8586
8687 const definedModel =
8788 calculateModel (
@@ -113,37 +114,55 @@ export class ResponseBodyHandler extends AbstractLogHandler {
113114 }
114115
115116 // Set legacy usage values captured from body processors
117+ // Fall back to Worker-provided tokens when body isn't stored (free tier limit exceeded)
116118 const legacyUsage =
117119 processedResponseBody . data ?. usage ??
118120 processedResponseBody . data ?. processedBody ?. usage ??
119121 { } ;
120- context . legacyUsage . completionTokens = legacyUsage . completionTokens ;
121- context . legacyUsage . promptTokens = legacyUsage . promptTokens ;
122- context . legacyUsage . totalTokens = legacyUsage . totalTokens ;
122+ context . legacyUsage . completionTokens =
123+ legacyUsage . completionTokens ??
124+ context . message . log . response . completionTokens ;
125+ context . legacyUsage . promptTokens =
126+ legacyUsage . promptTokens ?? context . message . log . response . promptTokens ;
127+ context . legacyUsage . totalTokens =
128+ legacyUsage . totalTokens ??
129+ ( ( context . legacyUsage . promptTokens ?? 0 ) +
130+ ( context . legacyUsage . completionTokens ?? 0 ) ||
131+ undefined ) ;
123132 context . legacyUsage . heliconeCalculated = legacyUsage . heliconeCalculated ;
133+ // Fall back to Worker-provided cache/audio tokens when body isn't stored
124134 context . legacyUsage . promptCacheWriteTokens =
125- legacyUsage . promptCacheWriteTokens ;
135+ legacyUsage . promptCacheWriteTokens ??
136+ context . message . log . response . promptCacheWriteTokens ;
126137 context . legacyUsage . promptCacheReadTokens =
127- legacyUsage . promptCacheReadTokens ;
128- context . legacyUsage . promptAudioTokens = legacyUsage . promptAudioTokens ;
138+ legacyUsage . promptCacheReadTokens ??
139+ context . message . log . response . promptCacheReadTokens ;
140+ context . legacyUsage . promptAudioTokens =
141+ legacyUsage . promptAudioTokens ??
142+ context . message . log . response . promptAudioTokens ;
129143 context . legacyUsage . completionAudioTokens =
130- legacyUsage . completionAudioTokens ;
144+ legacyUsage . completionAudioTokens ??
145+ context . message . log . response . completionAudioTokens ;
146+ context . legacyUsage . reasoningTokens =
147+ legacyUsage . reasoningTokens ??
148+ context . message . log . response . reasoningTokens ;
131149 context . legacyUsage . promptCacheWrite5m = legacyUsage . promptCacheWrite5m ;
132150 context . legacyUsage . promptCacheWrite1h = legacyUsage . promptCacheWrite1h ;
133151 if ( typeof legacyUsage . cost === "number" && legacyUsage . cost ) {
134152 context . legacyUsage . cost = legacyUsage . cost ;
135153 } else {
154+ // Use context.legacyUsage which has Worker-provided tokens as fallback
136155 const cost = modelCost ( {
137156 model : context . processedLog . model ?? "" ,
138157 provider : context . message . log . request . provider ?? "" ,
139- sum_prompt_tokens : legacyUsage . promptTokens ?? 0 ,
140- prompt_cache_write_tokens : legacyUsage . promptCacheWriteTokens ?? 0 ,
141- prompt_cache_read_tokens : legacyUsage . promptCacheReadTokens ?? 0 ,
142- prompt_audio_tokens : legacyUsage . promptAudioTokens ?? 0 ,
143- sum_completion_tokens : legacyUsage . completionTokens ?? 0 ,
144- completion_audio_tokens : legacyUsage . completionAudioTokens ?? 0 ,
145- prompt_cache_write_5m : legacyUsage . promptCacheWrite5m ?? 0 ,
146- prompt_cache_write_1h : legacyUsage . promptCacheWrite1h ?? 0 ,
158+ sum_prompt_tokens : context . legacyUsage . promptTokens ?? 0 ,
159+ prompt_cache_write_tokens : context . legacyUsage . promptCacheWriteTokens ?? 0 ,
160+ prompt_cache_read_tokens : context . legacyUsage . promptCacheReadTokens ?? 0 ,
161+ prompt_audio_tokens : context . legacyUsage . promptAudioTokens ?? 0 ,
162+ sum_completion_tokens : context . legacyUsage . completionTokens ?? 0 ,
163+ completion_audio_tokens : context . legacyUsage . completionAudioTokens ?? 0 ,
164+ prompt_cache_write_5m : context . legacyUsage . promptCacheWrite5m ?? 0 ,
165+ prompt_cache_write_1h : context . legacyUsage . promptCacheWrite1h ?? 0 ,
147166 } ) ;
148167
149168 context . legacyUsage . cost = cost ;
0 commit comments