@@ -38,6 +38,7 @@ import { ApiStream } from "../transform/stream"
3838import { BaseProvider } from "./base-provider"
3939import { logger } from "../../utils/logging"
4040import { Package } from "../../shared/package"
41+ import { calculateApiCostAnthropic } from "../../shared/cost"
4142import { MultiPointStrategy } from "../transform/cache-strategy/multi-point-strategy"
4243import { ModelInfo as CacheModelInfo } from "../transform/cache-strategy/types"
4344import { convertToBedrockConverseMessages as sharedConverter } from "../transform/bedrock-converse-format"
@@ -575,14 +576,24 @@ export class AwsBedrockHandler extends BaseProvider implements SingleCompletionH
575576 // Check both field naming conventions for cache tokens
576577 const cacheReadTokens = usage . cacheReadInputTokens || usage . cacheReadInputTokenCount || 0
577578 const cacheWriteTokens = usage . cacheWriteInputTokens || usage . cacheWriteInputTokenCount || 0
579+ const inputTokens = usage . inputTokens || 0
580+ const outputTokens = usage . outputTokens || 0
581+
582+ // Compute cost using user-configured pricing from model info.
583+ // Bedrock's inputTokens does NOT include cached tokens (Anthropic semantics).
584+ const costModelInfo = this . costModelConfig ?. info
585+ const { totalCost } = costModelInfo
586+ ? calculateApiCostAnthropic ( costModelInfo , inputTokens , outputTokens , cacheWriteTokens , cacheReadTokens )
587+ : { totalCost : 0 }
578588
579589 // Always include all available token information
580590 yield {
581591 type : "usage" ,
582- inputTokens : usage . inputTokens || 0 ,
583- outputTokens : usage . outputTokens || 0 ,
584- cacheReadTokens : cacheReadTokens ,
585- cacheWriteTokens : cacheWriteTokens ,
592+ inputTokens,
593+ outputTokens,
594+ cacheReadTokens,
595+ cacheWriteTokens,
596+ totalCost,
586597 }
587598 continue
588599 }
@@ -612,13 +623,22 @@ export class AwsBedrockHandler extends BaseProvider implements SingleCompletionH
612623 routerUsage . cacheReadTokens || routerUsage . cacheReadInputTokenCount || 0
613624 const cacheWriteTokens =
614625 routerUsage . cacheWriteTokens || routerUsage . cacheWriteInputTokenCount || 0
626+ const inputTokens = routerUsage . inputTokens || 0
627+ const outputTokens = routerUsage . outputTokens || 0
628+
629+ // Compute cost using user-configured pricing from model info.
630+ const costModelInfo = this . costModelConfig ?. info
631+ const { totalCost } = costModelInfo
632+ ? calculateApiCostAnthropic ( costModelInfo , inputTokens , outputTokens , cacheWriteTokens , cacheReadTokens )
633+ : { totalCost : 0 }
615634
616635 yield {
617636 type : "usage" ,
618- inputTokens : routerUsage . inputTokens || 0 ,
619- outputTokens : routerUsage . outputTokens || 0 ,
620- cacheReadTokens : cacheReadTokens ,
621- cacheWriteTokens : cacheWriteTokens ,
637+ inputTokens,
638+ outputTokens,
639+ cacheReadTokens,
640+ cacheWriteTokens,
641+ totalCost,
622642 }
623643 }
624644 } catch ( error ) {
0 commit comments