mirror of https://github.com/kortix-ai/suna.git
192 lines
6.1 KiB
Python
192 lines
6.1 KiB
Python
# Master model configuration - single source of truth
|
|
MODELS = {
|
|
# Free tier models
|
|
|
|
"anthropic/claude-sonnet-4-20250514": {
|
|
"aliases": ["claude-sonnet-4"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 3.00,
|
|
"output_cost_per_million_tokens": 15.00
|
|
},
|
|
"tier_availability": ["free", "paid"]
|
|
},
|
|
|
|
"openrouter/deepseek/deepseek-chat": {
|
|
"aliases": ["deepseek"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 0.38,
|
|
"output_cost_per_million_tokens": 0.89
|
|
},
|
|
"tier_availability": ["free", "paid"]
|
|
},
|
|
"openrouter/qwen/qwen3-235b-a22b": {
|
|
"aliases": ["qwen3"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 0.13,
|
|
"output_cost_per_million_tokens": 0.60
|
|
},
|
|
"tier_availability": ["free", "paid"]
|
|
},
|
|
"openrouter/google/gemini-2.5-flash-preview-05-20": {
|
|
"aliases": ["gemini-flash-2.5"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 0.15,
|
|
"output_cost_per_million_tokens": 0.60
|
|
},
|
|
"tier_availability": ["free", "paid"]
|
|
},
|
|
|
|
# Additional free tier models
|
|
"openrouter/deepseek/deepseek-chat-v3-0324": {
|
|
"aliases": ["deepseek/deepseek-chat-v3-0324"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 0.38,
|
|
"output_cost_per_million_tokens": 0.89
|
|
},
|
|
"tier_availability": ["free", "paid"]
|
|
},
|
|
"openrouter/moonshotai/kimi-k2": {
|
|
"aliases": ["moonshotai/kimi-k2"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 1.00,
|
|
"output_cost_per_million_tokens": 3.00
|
|
},
|
|
"tier_availability": ["free", "paid"]
|
|
},
|
|
"xai/grok-4": {
|
|
"aliases": ["grok-4"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 5.00,
|
|
"output_cost_per_million_tokens": 15.00
|
|
},
|
|
"tier_availability": ["free", "paid"]
|
|
},
|
|
|
|
# Paid tier only models
|
|
"openrouter/google/gemini-2.5-pro": {
|
|
"aliases": ["google/gemini-2.5-pro"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 1.25,
|
|
"output_cost_per_million_tokens": 10.00
|
|
},
|
|
"tier_availability": ["paid"]
|
|
},
|
|
"openrouter/moonshotai/kimi-k2": {
|
|
"aliases": ["moonshotai/kimi-k2", "kimi-k2"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 1.00,
|
|
"output_cost_per_million_tokens": 3.00
|
|
},
|
|
"tier_availability": ["paid"]
|
|
},
|
|
"openai/gpt-4o": {
|
|
"aliases": ["gpt-4o"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 2.50,
|
|
"output_cost_per_million_tokens": 10.00
|
|
},
|
|
"tier_availability": ["paid"]
|
|
},
|
|
"openai/gpt-4.1": {
|
|
"aliases": ["gpt-4.1"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 15.00,
|
|
"output_cost_per_million_tokens": 60.00
|
|
},
|
|
"tier_availability": ["paid"]
|
|
},
|
|
"openai/gpt-4.1-mini": {
|
|
"aliases": ["gpt-4.1-mini"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 1.50,
|
|
"output_cost_per_million_tokens": 6.00
|
|
},
|
|
"tier_availability": ["paid"]
|
|
},
|
|
"anthropic/claude-3-7-sonnet-latest": {
|
|
"aliases": ["sonnet-3.7"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 3.00,
|
|
"output_cost_per_million_tokens": 15.00
|
|
},
|
|
"tier_availability": ["paid"]
|
|
},
|
|
"anthropic/claude-3-5-sonnet-latest": {
|
|
"aliases": ["sonnet-3.5"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 3.00,
|
|
"output_cost_per_million_tokens": 15.00
|
|
},
|
|
"tier_availability": ["paid"]
|
|
},
|
|
|
|
"xai/grok-4": {
|
|
"aliases": ["grok-4", "x-ai/grok-4"],
|
|
"pricing": {
|
|
"input_cost_per_million_tokens": 5.00,
|
|
"output_cost_per_million_tokens": 15.00
|
|
},
|
|
"tier_availability": ["paid"]
|
|
},
|
|
|
|
}
|
|
|
|
# Derived structures (auto-generated from MODELS)
|
|
def _generate_model_structures():
|
|
"""Generate all model structures from the master MODELS dictionary."""
|
|
|
|
# Generate tier lists
|
|
free_models = []
|
|
paid_models = []
|
|
|
|
# Generate aliases
|
|
aliases = {}
|
|
|
|
# Generate pricing
|
|
pricing = {}
|
|
|
|
for model_name, config in MODELS.items():
|
|
# Add to tier lists
|
|
if "free" in config["tier_availability"]:
|
|
free_models.append(model_name)
|
|
if "paid" in config["tier_availability"]:
|
|
paid_models.append(model_name)
|
|
|
|
# Add aliases
|
|
for alias in config["aliases"]:
|
|
aliases[alias] = model_name
|
|
|
|
# Add pricing
|
|
pricing[model_name] = config["pricing"]
|
|
|
|
# Also add pricing for legacy model name variations
|
|
if model_name.startswith("openrouter/deepseek/"):
|
|
legacy_name = model_name.replace("openrouter/", "")
|
|
pricing[legacy_name] = config["pricing"]
|
|
elif model_name.startswith("openrouter/qwen/"):
|
|
legacy_name = model_name.replace("openrouter/", "")
|
|
pricing[legacy_name] = config["pricing"]
|
|
elif model_name.startswith("openrouter/google/"):
|
|
legacy_name = model_name.replace("openrouter/", "")
|
|
pricing[legacy_name] = config["pricing"]
|
|
elif model_name.startswith("anthropic/"):
|
|
# Add anthropic/claude-sonnet-4 alias for claude-sonnet-4-20250514
|
|
if "claude-sonnet-4-20250514" in model_name:
|
|
pricing["anthropic/claude-sonnet-4"] = config["pricing"]
|
|
|
|
return free_models, paid_models, aliases, pricing
|
|
|
|
# Generate all structures
|
|
FREE_TIER_MODELS, PAID_TIER_MODELS, MODEL_NAME_ALIASES, HARDCODED_MODEL_PRICES = _generate_model_structures()
|
|
|
|
MODEL_ACCESS_TIERS = {
|
|
"free": FREE_TIER_MODELS,
|
|
"tier_2_20": PAID_TIER_MODELS,
|
|
"tier_6_50": PAID_TIER_MODELS,
|
|
"tier_12_100": PAID_TIER_MODELS,
|
|
"tier_25_200": PAID_TIER_MODELS,
|
|
"tier_50_400": PAID_TIER_MODELS,
|
|
"tier_125_800": PAID_TIER_MODELS,
|
|
"tier_200_1000": PAID_TIER_MODELS,
|
|
}
|