{"version":3,"file":"cache-pricing.d.ts","sourceRoot":"","sources":["../src/cache-pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,sBAAsB,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,MAAM,WAAW,2BAA2B;IAC3C,yBAAyB,EAAE,MAAM,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;CAClC;AAMD,wBAAgB,gCAAgC,CAAC,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAW9F;AAED,wBAAgB,sBAAsB,CACrC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,sBAAsB,GAC9B;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAS3C;AAED,wBAAgB,0BAA0B,CACzC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,sBAAsB,EAChC,aAAa,CAAC,EAAE,2BAA2B,GAAG,IAAI,GAChD,MAAM,CAkBR","sourcesContent":["import type { Api, Model } from \"./types.js\";\n\nexport type AnthropicCacheDuration = \"5m\" | \"1h\";\n\nexport interface AnthropicCacheCreationUsage {\n\tephemeral_5m_input_tokens: number;\n\tephemeral_1h_input_tokens: number;\n}\n\nconst ANTHROPIC_CACHE_READ_COST_MULTIPLIER = 0.1;\nconst ANTHROPIC_FIVE_MINUTE_CACHE_WRITE_COST_MULTIPLIER = 1.25;\nconst ANTHROPIC_ONE_HOUR_CACHE_WRITE_COST_MULTIPLIER = 2;\n\nexport function hasStandardAnthropicCachePricing<TApi extends Api>(model: Model<TApi>): boolean {\n\tconst modelId = model.id.toLowerCase();\n\tconst isAnthropicModel =\n\t\tmodel.provider === \"anthropic\" || modelId.startsWith(\"anthropic/\") || modelId.startsWith(\"claude-\");\n\tif (!isAnthropicModel) {\n\t\treturn false;\n\t}\n\n\tconst expectedCacheWriteCost = model.cost.input * ANTHROPIC_FIVE_MINUTE_CACHE_WRITE_COST_MULTIPLIER;\n\tconst tolerance = Number.EPSILON * Math.max(1, model.cost.cacheWrite, expectedCacheWriteCost);\n\treturn Math.abs(model.cost.cacheWrite - expectedCacheWriteCost) <= tolerance;\n}\n\nexport function getAnthropicCacheCosts(\n\tinputCost: number,\n\tduration: AnthropicCacheDuration,\n): { cacheRead: number; cacheWrite: number } {\n\treturn {\n\t\tcacheRead: inputCost * ANTHROPIC_CACHE_READ_COST_MULTIPLIER,\n\t\tcacheWrite:\n\t\t\tinputCost *\n\t\t\t(duration === \"1h\"\n\t\t\t\t? ANTHROPIC_ONE_HOUR_CACHE_WRITE_COST_MULTIPLIER\n\t\t\t\t: ANTHROPIC_FIVE_MINUTE_CACHE_WRITE_COST_MULTIPLIER),\n\t};\n}\n\nexport function getAnthropicCacheWriteCost(\n\tinputCost: number,\n\tduration: AnthropicCacheDuration,\n\tcacheCreation?: AnthropicCacheCreationUsage | null,\n): number {\n\tif (!cacheCreation) {\n\t\treturn getAnthropicCacheCosts(inputCost, duration).cacheWrite;\n\t}\n\n\tconst fiveMinuteTokens = cacheCreation.ephemeral_5m_input_tokens;\n\tconst oneHourTokens = cacheCreation.ephemeral_1h_input_tokens;\n\tconst totalTokens = fiveMinuteTokens + oneHourTokens;\n\tif (totalTokens === 0) {\n\t\treturn getAnthropicCacheCosts(inputCost, duration).cacheWrite;\n\t}\n\n\treturn (\n\t\t(inputCost *\n\t\t\t(fiveMinuteTokens * ANTHROPIC_FIVE_MINUTE_CACHE_WRITE_COST_MULTIPLIER +\n\t\t\t\toneHourTokens * ANTHROPIC_ONE_HOUR_CACHE_WRITE_COST_MULTIPLIER)) /\n\t\ttotalTokens\n\t);\n}\n"]}