@@ -17,6 +17,7 @@ import { getModelParams } from "../transform/model-params"
1717
1818import { BaseProvider } from "./base-provider"
1919import type { SingleCompletionHandler , ApiHandlerCreateMessageMetadata } from "../index"
20+ import { calculateApiCostAnthropic } from "../../shared/cost"
2021
2122export class AnthropicHandler extends BaseProvider implements SingleCompletionHandler {
2223 private options : ApiHandlerOptions
@@ -132,20 +133,35 @@ export class AnthropicHandler extends BaseProvider implements SingleCompletionHa
132133 }
133134 }
134135
136+ let inputTokens = 0
137+ let outputTokens = 0
138+ let cacheWriteTokens = 0
139+ let cacheReadTokens = 0
140+
135141 for await ( const chunk of stream ) {
136142 switch ( chunk . type ) {
137143 case "message_start" : {
138144 // Tells us cache reads/writes/input/output.
139- const usage = chunk . message . usage
145+ const {
146+ input_tokens = 0 ,
147+ output_tokens = 0 ,
148+ cache_creation_input_tokens,
149+ cache_read_input_tokens,
150+ } = chunk . message . usage
140151
141152 yield {
142153 type : "usage" ,
143- inputTokens : usage . input_tokens || 0 ,
144- outputTokens : usage . output_tokens || 0 ,
145- cacheWriteTokens : usage . cache_creation_input_tokens || undefined ,
146- cacheReadTokens : usage . cache_read_input_tokens || undefined ,
154+ inputTokens : input_tokens ,
155+ outputTokens : output_tokens ,
156+ cacheWriteTokens : cache_creation_input_tokens || undefined ,
157+ cacheReadTokens : cache_read_input_tokens || undefined ,
147158 }
148159
160+ inputTokens += input_tokens
161+ outputTokens += output_tokens
162+ cacheWriteTokens += cache_creation_input_tokens || 0
163+ cacheReadTokens += cache_read_input_tokens || 0
164+
149165 break
150166 }
151167 case "message_delta" :
@@ -198,6 +214,21 @@ export class AnthropicHandler extends BaseProvider implements SingleCompletionHa
198214 break
199215 }
200216 }
217+
218+ if ( inputTokens > 0 || outputTokens > 0 || cacheWriteTokens > 0 || cacheReadTokens > 0 ) {
219+ yield {
220+ type : "usage" ,
221+ inputTokens : 0 ,
222+ outputTokens : 0 ,
223+ totalCost : calculateApiCostAnthropic (
224+ this . getModel ( ) . info ,
225+ inputTokens ,
226+ outputTokens ,
227+ cacheWriteTokens ,
228+ cacheReadTokens ,
229+ ) ,
230+ }
231+ }
201232 }
202233
203234 getModel ( ) {
0 commit comments