@@ -52,27 +52,40 @@ export interface LLMModelDef {
5252}
5353
5454/** Pricing table for system models (USD per 1M tokens) */
55- export const MODEL_PRICING : Record < string , { input : number ; output : number } > = {
56- "claude-opus-4-6" : { input : 15 , output : 75 } ,
57- "claude-sonnet-4-6" : { input : 3 , output : 15 } ,
58- "claude-opus-4-5" : { input : 15 , output : 75 } ,
59- "claude-sonnet-4-5" : { input : 3 , output : 15 } ,
60- "claude-haiku-4-5" : { input : 0.8 , output : 4 } ,
61- "gpt-5" : { input : 2 , output : 10 } ,
62- "gpt-5-mini" : { input : 0.4 , output : 1.6 } ,
63- o3 : { input : 2 , output : 10 } ,
64- "o4-mini" : { input : 1.1 , output : 4.4 } ,
55+ export const MODEL_PRICING : Record <
56+ string ,
57+ { input : number ; output : number ; cacheRead : number ; cacheWrite : number }
58+ > = {
59+ // Anthropic: cacheRead = 10% of input, cacheWrite = 125% of input
60+ "claude-opus-4-6" : { input : 15 , output : 75 , cacheRead : 1.5 , cacheWrite : 18.75 } ,
61+ "claude-sonnet-4-6" : { input : 3 , output : 15 , cacheRead : 0.3 , cacheWrite : 3.75 } ,
62+ "claude-opus-4-5" : { input : 15 , output : 75 , cacheRead : 1.5 , cacheWrite : 18.75 } ,
63+ "claude-sonnet-4-5" : { input : 3 , output : 15 , cacheRead : 0.3 , cacheWrite : 3.75 } ,
64+ "claude-haiku-4-5" : { input : 0.8 , output : 4 , cacheRead : 0.08 , cacheWrite : 1 } ,
65+ // OpenAI: cacheRead = 50% of input, no cacheWrite
66+ "gpt-5" : { input : 2 , output : 10 , cacheRead : 1 , cacheWrite : 2 } ,
67+ "gpt-5-mini" : { input : 0.4 , output : 1.6 , cacheRead : 0.2 , cacheWrite : 0.4 } ,
68+ o3 : { input : 2 , output : 10 , cacheRead : 1 , cacheWrite : 2 } ,
69+ "o4-mini" : { input : 1.1 , output : 4.4 , cacheRead : 0.55 , cacheWrite : 1.1 } ,
6570} ;
6671
6772/** Calculate cost in USD given model ID and token counts */
6873export function calculateModelCost (
6974 modelId : string ,
7075 inputTokens : number ,
7176 outputTokens : number ,
77+ cacheReadTokens : number = 0 ,
78+ cacheWriteTokens : number = 0 ,
7279) : number {
7380 const pricing = MODEL_PRICING [ modelId ] ;
7481 if ( ! pricing ) return 0 ;
75- return ( inputTokens * pricing . input + outputTokens * pricing . output ) / 1_000_000 ;
82+ return (
83+ ( inputTokens * pricing . input +
84+ outputTokens * pricing . output +
85+ cacheReadTokens * pricing . cacheRead +
86+ cacheWriteTokens * pricing . cacheWrite ) /
87+ 1_000_000
88+ ) ;
7689}
7790
7891// ──────────────────────────────────────────────
0 commit comments