ComparEdge's picture
Upload app.py with huggingface_hub
d023fc1 verified
import gradio as gr
data = {
"OpenAI GPT-4o": {"input": 2.50, "output": 10.00, "context": "128K", "speed": "80 tok/s"},
"OpenAI GPT-4o-mini": {"input": 0.15, "output": 0.60, "context": "128K", "speed": "100 tok/s"},
"OpenAI o1": {"input": 15.00, "output": 60.00, "context": "200K", "speed": "30 tok/s"},
"OpenAI o3-mini": {"input": 1.10, "output": 4.40, "context": "200K", "speed": "60 tok/s"},
"Anthropic Claude Sonnet 4": {"input": 3.00, "output": 15.00, "context": "200K", "speed": "70 tok/s"},
"Anthropic Claude Haiku 3.5": {"input": 0.80, "output": 4.00, "context": "200K", "speed": "120 tok/s"},
"Anthropic Claude Opus 4": {"input": 15.00, "output": 75.00, "context": "200K", "speed": "25 tok/s"},
"Google Gemini 2.5 Pro": {"input": 1.25, "output": 10.00, "context": "1M", "speed": "60 tok/s"},
"Google Gemini 2.5 Flash": {"input": 0.15, "output": 0.60, "context": "1M", "speed": "150 tok/s"},
"Google Gemini 2.0 Flash": {"input": 0.10, "output": 0.40, "context": "1M", "speed": "180 tok/s"},
"Meta Llama 3.3 70B": {"input": 0.18, "output": 0.18, "context": "131K", "speed": "90 tok/s"},
"Meta Llama 4 Maverick": {"input": 0.20, "output": 0.20, "context": "1M", "speed": "100 tok/s"},
"Mistral Large": {"input": 2.00, "output": 6.00, "context": "128K", "speed": "70 tok/s"},
"Mistral Small": {"input": 0.10, "output": 0.30, "context": "128K", "speed": "130 tok/s"},
"DeepSeek V3": {"input": 0.27, "output": 1.10, "context": "128K", "speed": "60 tok/s"},
"DeepSeek R1": {"input": 0.55, "output": 2.19, "context": "128K", "speed": "30 tok/s"},
"xAI Grok 2": {"input": 2.00, "output": 10.00, "context": "131K", "speed": "50 tok/s"},
"xAI Grok 3 Mini": {"input": 0.30, "output": 0.50, "context": "131K", "speed": "120 tok/s"},
"Groq Llama 3.3 70B": {"input": 0.05, "output": 0.05, "context": "131K", "speed": "300 tok/s"},
"Cohere Command R+": {"input": 2.50, "output": 10.00, "context": "128K", "speed": "55 tok/s"},
}
model_names = list(data.keys())
def calculate_cost(model, input_tokens, output_tokens, requests_per_day):
if model not in data:
return "Select a model"
d = data[model]
input_cost = (input_tokens / 1_000_000) * d["input"]
output_cost = (output_tokens / 1_000_000) * d["output"]
per_request = input_cost + output_cost
daily = per_request * requests_per_day
monthly = daily * 30
results = []
for name, info in sorted(data.items(), key=lambda x: (input_tokens/1e6)*x[1]["input"] + (output_tokens/1e6)*x[1]["output"]):
ic = (input_tokens / 1_000_000) * info["input"]
oc = (output_tokens / 1_000_000) * info["output"]
total = (ic + oc) * requests_per_day * 30
marker = " << SELECTED" if name == model else ""
results.append(f"| {name} | ${total:,.2f} | {info['context']} | {info['speed']} |{marker}")
comparison = "\n".join(results)
return f"""## {model}
| Metric | Value |
|--------|-------|
| Per request | ${per_request:.4f} |
| Daily ({requests_per_day} req) | ${daily:.2f} |
| **Monthly** | **${monthly:.2f}** |
| Context window | {d['context']} tokens |
| Speed | {d['speed']} |
| Input price | ${d['input']}/1M tokens |
| Output price | ${d['output']}/1M tokens |
---
## All Models (sorted by monthly cost)
| Model | Monthly Cost | Context | Speed |
|-------|-------------|---------|-------|
{comparison}
---
*Data from [ComparEdge](https://comparedge.com/best/llm) — Updated April 2026*
"""
with gr.Blocks(title="LLM API Cost Calculator 2026") as demo:
gr.Markdown("# LLM API Cost Calculator 2026\nCompare costs across 20 LLM APIs. Data from [ComparEdge](https://comparedge.com/best/llm).")
with gr.Row():
model = gr.Dropdown(model_names, label="Model", value="OpenAI GPT-4o")
input_tokens = gr.Slider(100, 100000, value=2000, step=100, label="Input tokens/request")
with gr.Row():
output_tokens = gr.Slider(100, 50000, value=1000, step=100, label="Output tokens/request")
requests = gr.Slider(1, 10000, value=100, step=1, label="Requests/day")
output = gr.Markdown(label="Cost Breakdown")
for inp in [model, input_tokens, output_tokens, requests]:
inp.change(calculate_cost, [model, input_tokens, output_tokens, requests], output)
demo.load(calculate_cost, [model, input_tokens, output_tokens, requests], output)
if __name__ == "__main__":
demo.launch()