shenmali's picture
Upload folder using huggingface_hub
53d41ca verified
Raw
History Blame Contribute Delete
1.39 kB
from dataclasses import dataclass
# NOTE: model ids and prices reflect OpenRouter's catalog. Verify/refresh against
# https://openrouter.ai/models before launch — ids change as providers release models.
@dataclass(frozen=True)
class ModelInfo:
id: str
label: str
prompt_cost: float # USD per 1M prompt tokens
completion_cost: float # USD per 1M completion tokens
MODELS: list[ModelInfo] = [
ModelInfo("openai/gpt-4o-mini", "GPT-4o mini (cheap)", 0.15, 0.60),
ModelInfo("anthropic/claude-3.5-haiku", "Claude 3.5 Haiku (cheap)", 0.80, 4.00),
ModelInfo("google/gemini-flash-1.5", "Gemini 1.5 Flash (cheap)", 0.075, 0.30),
ModelInfo("deepseek/deepseek-chat", "DeepSeek Chat (cheap)", 0.14, 0.28),
ModelInfo("anthropic/claude-3.5-sonnet", "Claude 3.5 Sonnet (strong)", 3.00, 15.00),
ModelInfo("openai/gpt-4o", "GPT-4o (strong)", 2.50, 10.00),
]
DEFAULT_MODEL = "openai/gpt-4o-mini"
def model_ids() -> list[str]:
return [m.id for m in MODELS]
def get_model(model_id: str) -> ModelInfo | None:
return next((m for m in MODELS if m.id == model_id), None)
def estimate_cost(model_id: str, prompt_tokens: int, completion_tokens: int) -> float:
m = get_model(model_id)
if m is None:
return 0.0
return (prompt_tokens / 1_000_000) * m.prompt_cost + (
completion_tokens / 1_000_000
) * m.completion_cost