Spaces:
Sleeping
Sleeping
| # backend/services/cost_calculator.py | |
| # TODO: Review pricing after 2026-05-31 | |
| import sys | |
| import os | |
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | |
| from config.ai_pricing import get_active_pricing, get_full_pricing | |
| def calculate_feature_cost( | |
| model_id: str, | |
| cache_hit_tokens: int, | |
| cache_miss_tokens: int, | |
| output_tokens: int, | |
| ) -> dict: | |
| """Calculate cost for a feature's token usage using active pricing.""" | |
| # TODO: Review pricing after 2026-05-31 | |
| pricing = get_active_pricing(model_id) | |
| cache_hit_cost = (cache_hit_tokens / 1_000_000) * pricing["input_cache_hit_per_1m"] | |
| cache_miss_cost = (cache_miss_tokens / 1_000_000) * pricing["input_cache_miss_per_1m"] | |
| output_cost = (output_tokens / 1_000_000) * pricing["output_per_1m"] | |
| total = cache_hit_cost + cache_miss_cost + output_cost | |
| return { | |
| "total_usd": round(total, 6), | |
| "cache_hit_cost": round(cache_hit_cost, 6), | |
| "cache_miss_cost": round(cache_miss_cost, 6), | |
| "output_cost": round(output_cost, 6), | |
| "is_promotional": pricing["is_promotional"], | |
| } | |
| def calculate_full_price_cost( | |
| model_id: str, | |
| cache_hit_tokens: int, | |
| cache_miss_tokens: int, | |
| output_tokens: int, | |
| ) -> float: | |
| """Calculate what the same usage would cost at full (non-promo) price.""" | |
| # TODO: Review pricing after 2026-05-31 | |
| full = get_full_pricing(model_id) | |
| cache_hit_cost = (cache_hit_tokens / 1_000_000) * full["input_cache_hit_per_1m"] | |
| cache_miss_cost = (cache_miss_tokens / 1_000_000) * full["input_cache_miss_per_1m"] | |
| output_cost = (output_tokens / 1_000_000) * full["output_per_1m"] | |
| return round(cache_hit_cost + cache_miss_cost + output_cost, 6) | |