fix: improve error handling in pricing model calculations

This commit is contained in:
Laisky.Cai 2025-03-17 01:49:15 +00:00
parent adcf4712e6
commit bbfaf1fb95

View File

@ -21,7 +21,8 @@ const (
// KiloRmb multiply by the RMB price per 1,000 tokens to get the quota cost per token
KiloRmb float64 = KiloTokensUsd / USD2RMB
// MilliRmb multiply by the RMB price per 1 million tokens to get the quota cost per token
MilliRmb float64 = MilliTokensUsd / USD2RMB
MilliRmb float64 = MilliTokensUsd / USD2RMB
ImageUsdPerPic float64 = QuotaPerUsd / 1000
)
var modelRatioLock sync.RWMutex
@ -33,80 +34,83 @@ var modelRatioLock sync.RWMutex
// 1 === $0.002 / 1K tokens
// 1 === ¥0.014 / 1k tokens
var ModelRatio = map[string]float64{
// -------------------------------------
// OpenAI
// https://openai.com/pricing
// -------------------------------------
"gpt-4.5-preview": 75 * MilliTokensUsd,
"gpt-4.5-preview-2025-02-27": 75 * MilliTokensUsd,
"gpt-4": 15,
"gpt-4-0314": 15,
"gpt-4-0613": 15,
"gpt-4-32k": 30,
"gpt-4-32k-0314": 30,
"gpt-4-32k-0613": 30,
"gpt-4-1106-preview": 5, // $0.01 / 1K tokens
"gpt-4-0125-preview": 5, // $0.01 / 1K tokens
"gpt-4-turbo-preview": 5, // $0.01 / 1K tokens
"gpt-4-turbo": 5, // $0.01 / 1K tokens
"gpt-4-turbo-2024-04-09": 5, // $0.01 / 1K tokens
"gpt-4o": 2.5, // $0.005 / 1K tokens
"chatgpt-4o-latest": 2.5, // $0.005 / 1K tokens
"gpt-4o-2024-05-13": 2.5, // $0.005 / 1K tokens
"gpt-4o-2024-08-06": 1.25, // $0.0025 / 1K tokens
"gpt-4o-2024-11-20": 1.25, // $0.0025 / 1K tokens
"gpt-4o-search-preview": 2.5, // $0.005 / 1K tokens
"gpt-4o-mini": 0.075, // $0.00015 / 1K tokens
"gpt-4o-mini-2024-07-18": 0.075, // $0.00015 / 1K tokens
"gpt-4o-mini-search-preview": 0.075, // $0.00015 / 1K tokens
"gpt-4-vision-preview": 5, // $0.01 / 1K tokens
"gpt-4": 30 * MilliTokensUsd,
"gpt-4-0314": 30 * MilliTokensUsd,
"gpt-4-0613": 30 * MilliTokensUsd,
"gpt-4-32k": 60 * MilliTokensUsd,
"gpt-4-32k-0314": 60 * MilliTokensUsd,
"gpt-4-32k-0613": 60 * MilliTokensUsd,
"gpt-4-1106-preview": 10 * MilliTokensUsd,
"gpt-4-0125-preview": 10 * MilliTokensUsd,
"gpt-4-turbo-preview": 10 * MilliTokensUsd,
"gpt-4-turbo": 10 * MilliTokensUsd,
"gpt-4-turbo-2024-04-09": 10 * MilliTokensUsd,
"gpt-4o": 2.5 * MilliTokensUsd,
"chatgpt-4o-latest": 5 * MilliTokensUsd,
"gpt-4o-2024-05-13": 5 * MilliTokensUsd,
"gpt-4o-2024-08-06": 2.5 * MilliTokensUsd,
"gpt-4o-2024-11-20": 2.5 * MilliTokensUsd,
"gpt-4o-search-preview": 5 * MilliTokensUsd,
"gpt-4o-mini": 0.15 * MilliTokensUsd,
"gpt-4o-mini-2024-07-18": 0.15 * MilliTokensUsd,
"gpt-4o-mini-search-preview": 0.15 * MilliTokensUsd,
"gpt-4-vision-preview": 10 * MilliTokensUsd,
// Audio billing will mix text and audio tokens, the unit price is different.
// Here records the cost of text, the cost multiplier of audio
// relative to text is in AudioRatio
"gpt-4o-audio-preview": 1.25, // $0.0025 / 1K tokens
"gpt-4o-audio-preview-2024-12-17": 1.25, // $0.0025 / 1K tokens
"gpt-4o-audio-preview-2024-10-01": 1.25, // $0.0025 / 1K tokens
"gpt-4o-mini-audio-preview": 0.15 * MilliTokensUsd, // $0.15/1M tokens
"gpt-4o-mini-audio-preview-2024-12-17": 0.15 * MilliTokensUsd, // $0.15/1M tokens
"gpt-3.5-turbo": 0.25, // $0.0005 / 1K tokens
"gpt-3.5-turbo-0301": 0.75,
"gpt-3.5-turbo-0613": 0.75,
"gpt-3.5-turbo-16k": 1.5, // $0.003 / 1K tokens
"gpt-3.5-turbo-16k-0613": 1.5,
"gpt-3.5-turbo-instruct": 0.75, // $0.0015 / 1K tokens
"gpt-3.5-turbo-1106": 0.5, // $0.001 / 1K tokens
"gpt-3.5-turbo-0125": 0.25, // $0.0005 / 1K tokens
"o1": 15 * MilliTokensUsd, // $15.00 / 1M input tokens
"gpt-4o-audio-preview": 2.5 * MilliTokensUsd,
"gpt-4o-audio-preview-2024-12-17": 2.5 * MilliTokensUsd,
"gpt-4o-audio-preview-2024-10-01": 2.5 * MilliTokensUsd,
"gpt-4o-mini-audio-preview": 0.15 * MilliTokensUsd,
"gpt-4o-mini-audio-preview-2024-12-17": 0.15 * MilliTokensUsd,
"gpt-3.5-turbo": 0.5 * MilliTokensUsd,
"gpt-3.5-turbo-0301": 1.5 * MilliTokensUsd,
"gpt-3.5-turbo-0613": 1.5 * MilliTokensUsd,
"gpt-3.5-turbo-16k": 3 * MilliTokensUsd,
"gpt-3.5-turbo-16k-0613": 3 * MilliTokensUsd,
"gpt-3.5-turbo-instruct": 1.5 * MilliTokensUsd,
"gpt-3.5-turbo-1106": 1 * MilliTokensUsd,
"gpt-3.5-turbo-0125": 0.5 * MilliTokensUsd,
"o1": 15 * MilliTokensUsd,
"o1-2024-12-17": 15 * MilliTokensUsd,
"o1-preview": 15 * MilliTokensUsd, // $15.00 / 1M input tokens
"o1-preview": 15 * MilliTokensUsd,
"o1-preview-2024-09-12": 15 * MilliTokensUsd,
"o1-mini": 1.1 * MilliTokensUsd, // $3.00 / 1M input tokens
"o1-mini": 1.1 * MilliTokensUsd,
"o1-mini-2024-09-12": 1.1 * MilliTokensUsd,
"o3-mini": 1.1 * MilliTokensUsd,
"o3-mini-2025-01-31": 1.1 * MilliTokensUsd,
"davinci-002": 1, // $0.002 / 1K tokens
"babbage-002": 0.2, // $0.0004 / 1K tokens
"text-ada-001": 0.2,
"text-babbage-001": 0.25,
"text-curie-001": 1,
"text-davinci-002": 10,
"text-davinci-003": 10,
"text-davinci-edit-001": 10,
"code-davinci-edit-001": 10,
"whisper-1": 15,
"tts-1": 7.5, // $0.015 / 1K characters
"tts-1-1106": 7.5,
"tts-1-hd": 15, // $0.030 / 1K characters
"tts-1-hd-1106": 15,
"davinci": 10,
"curie": 10,
"babbage": 10,
"ada": 10,
"text-embedding-ada-002": 0.05,
"text-embedding-3-small": 0.01,
"text-embedding-3-large": 0.065,
"text-search-ada-doc-001": 10,
"text-moderation-stable": 0.1,
"text-moderation-latest": 0.1,
"dall-e-2": 20 * MilliTokensUsd, // $0.016 - $0.020 / image
"dall-e-3": 40 * MilliTokensUsd, // $0.040 - $0.120 / image
"davinci-002": 2 * MilliTokensUsd,
"babbage-002": 0.4 * MilliTokensUsd,
"text-ada-001": 0.4 * MilliTokensUsd,
"text-babbage-001": 0.5 * MilliTokensUsd,
"text-curie-001": 2 * MilliTokensUsd,
"text-davinci-002": 20 * MilliTokensUsd,
"text-davinci-003": 20 * MilliTokensUsd,
"text-davinci-edit-001": 20 * MilliTokensUsd,
"code-davinci-edit-001": 20 * MilliTokensUsd,
"whisper-1": 30 * MilliTokensUsd,
"tts-1": 15 * MilliTokensUsd,
"tts-1-1106": 15 * MilliTokensUsd,
"tts-1-hd": 30 * MilliTokensUsd,
"tts-1-hd-1106": 30 * MilliTokensUsd,
"davinci": 20 * MilliTokensUsd,
"curie": 20 * MilliTokensUsd,
"babbage": 20 * MilliTokensUsd,
"ada": 20 * MilliTokensUsd,
"text-embedding-ada-002": 0.1 * MilliTokensUsd,
"text-embedding-3-small": 0.02 * MilliTokensUsd,
"text-embedding-3-large": 0.13 * MilliTokensUsd,
"text-search-ada-doc-001": 20 * MilliTokensUsd,
"text-moderation-stable": 0.2 * MilliTokensUsd,
"text-moderation-latest": 0.2 * MilliTokensUsd,
"dall-e-2": 0.02 * ImageUsdPerPic,
"dall-e-3": 0.04 * ImageUsdPerPic,
// https://www.anthropic.com/api#pricing
"claude-instant-1.2": 0.8 * MilliTokensUsd,
"claude-2.0": 8.0 * MilliTokensUsd,
@ -143,26 +147,27 @@ var ModelRatio = map[string]float64{
// "gemma-2-2b-it": 0,
// "gemma-2-9b-it": 0,
// "gemma-2-27b-it": 0,
"gemini-pro": 0.25 * MilliTokensUsd, // $0.00025 / 1k characters -> $0.001 / 1k tokens
"gemini-1.0-pro": 0.125 * MilliTokensUsd,
"gemini-1.0-pro-vision": 0.125 * MilliTokensUsd,
"gemini-1.5-pro": 1.25 * MilliTokensUsd,
"gemini-1.5-pro-001": 1.25 * MilliTokensUsd,
"gemini-1.5-pro-002": 1.25 * MilliTokensUsd,
"gemini-1.5-pro-experimental": 1.25 * MilliTokensUsd,
"gemini-1.5-flash": 0.075 * MilliTokensUsd,
"gemini-1.5-flash-001": 0.075 * MilliTokensUsd,
"gemini-1.5-flash-002": 0.075 * MilliTokensUsd,
"gemini-1.5-flash-8b": 0.0375 * MilliTokensUsd,
"gemini-2.0-flash": 0.15 * MilliTokensUsd,
"gemini-2.0-flash-exp": 0.075 * MilliTokensUsd,
"gemini-2.0-flash-001": 0.15 * MilliTokensUsd,
"gemini-2.0-flash-lite": 0.075 * MilliTokensUsd,
"gemini-2.0-flash-lite-001": 0.075 * MilliTokensUsd,
"gemini-2.0-flash-lite-preview-02-05": 0.075 * MilliTokensUsd,
"gemini-2.0-flash-thinking-exp-01-21": 0.075 * MilliTokensUsd,
"gemini-2.0-pro-exp-02-05": 1.25 * MilliTokensUsd,
"aqa": 1,
"gemini-pro": 0.25 * MilliTokensUsd, // $0.00025 / 1k characters -> $0.001 / 1k tokens
"gemini-1.0-pro": 0.125 * MilliTokensUsd,
"gemini-1.0-pro-vision": 0.125 * MilliTokensUsd,
"gemini-1.5-pro": 1.25 * MilliTokensUsd,
"gemini-1.5-pro-001": 1.25 * MilliTokensUsd,
"gemini-1.5-pro-002": 1.25 * MilliTokensUsd,
"gemini-1.5-pro-experimental": 1.25 * MilliTokensUsd,
"gemini-1.5-flash": 0.075 * MilliTokensUsd,
"gemini-1.5-flash-001": 0.075 * MilliTokensUsd,
"gemini-1.5-flash-002": 0.075 * MilliTokensUsd,
"gemini-1.5-flash-8b": 0.0375 * MilliTokensUsd,
"gemini-2.0-flash": 0.15 * MilliTokensUsd,
"gemini-2.0-flash-exp": 0.075 * MilliTokensUsd,
"gemini-2.0-flash-001": 0.15 * MilliTokensUsd,
"gemini-2.0-flash-lite": 0.075 * MilliTokensUsd,
"gemini-2.0-flash-lite-001": 0.075 * MilliTokensUsd,
"gemini-2.0-flash-lite-preview-02-05": 0.075 * MilliTokensUsd,
"gemini-2.0-flash-thinking-exp-01-21": 0.075 * MilliTokensUsd,
"gemini-2.0-pro-exp-02-05": 1.25 * MilliTokensUsd,
"gemini-2.0-flash-exp-image-generation": 0.075 * MilliTokensUsd,
"aqa": 1,
// https://open.bigmodel.cn/pricing
"glm-zero-preview": 0.01 * KiloRmb,
"glm-4-plus": 0.05 * KiloRmb,
@ -264,9 +269,9 @@ var ModelRatio = map[string]float64{
"text-embedding-v2": 0.0007 * KiloRmb,
"text-embedding-async-v2": 0.0007 * KiloRmb,
"text-embedding-async-v1": 0.0007 * KiloRmb,
"ali-stable-diffusion-xl": 8.00,
"ali-stable-diffusion-v1.5": 8.00,
"wanx-v1": 8.00,
"ali-stable-diffusion-xl": 0.016 * ImageUsdPerPic,
"ali-stable-diffusion-v1.5": 0.016 * ImageUsdPerPic,
"wanx-v1": 0.016 * ImageUsdPerPic,
"deepseek-r1": 0.002 * KiloRmb,
"deepseek-v3": 0.001 * KiloRmb,
"deepseek-r1-distill-qwen-1.5b": 0.001 * KiloRmb,
@ -338,6 +343,11 @@ var ModelRatio = map[string]float64{
"llama3-8b-8192": 0.05 * MilliTokensUsd,
"llama3-groq-70b-8192-tool-use-preview": 0.59 * MilliTokensUsd,
"llama3-groq-8b-8192-tool-use-preview": 0.05 * MilliTokensUsd,
"llama-3.3-70b-specdec": 0.59 * MilliTokensUsd,
"mistral-saba-24b": 0.79 * MilliTokensUsd,
"qwen-qwq-32b": 0.29 * MilliTokensUsd,
"qwen-2.5-coder-32b": 0.79 * MilliTokensUsd,
"qwen-2.5-32b": 0.79 * MilliTokensUsd,
"mixtral-8x7b-32768": 0.24 * MilliTokensUsd,
"whisper-large-v3": 0.111 * MilliTokensUsd,
"whisper-large-v3-turbo": 0.04 * MilliTokensUsd,
@ -379,90 +389,103 @@ var ModelRatio = map[string]float64{
"grok-beta": 5.0 * MilliTokensUsd,
// vertex imagen3
// https://cloud.google.com/vertex-ai/generative-ai/pricing#imagen-models
"imagen-3.0-generate-001": 0.02 * KiloTokensUsd,
"imagen-3.0-generate-001": 0.04 * ImageUsdPerPic,
"imagen-3.0-generate-002": 0.04 * ImageUsdPerPic,
"imagen-3.0-fast-generate-001": 0.02 * ImageUsdPerPic,
"imagen-3.0-capability-001": 0.04 * ImageUsdPerPic,
// -------------------------------------
// replicate charges based on the number of generated images
// https://replicate.com/pricing
"black-forest-labs/flux-1.1-pro": 0.04 * KiloTokensUsd,
"black-forest-labs/flux-1.1-pro-ultra": 0.06 * KiloTokensUsd,
"black-forest-labs/flux-canny-dev": 0.025 * KiloTokensUsd,
"black-forest-labs/flux-canny-pro": 0.05 * KiloTokensUsd,
"black-forest-labs/flux-depth-dev": 0.025 * KiloTokensUsd,
"black-forest-labs/flux-depth-pro": 0.05 * KiloTokensUsd,
"black-forest-labs/flux-dev": 0.025 * KiloTokensUsd,
"black-forest-labs/flux-dev-lora": 0.032 * KiloTokensUsd,
"black-forest-labs/flux-fill-dev": 0.04 * KiloTokensUsd,
"black-forest-labs/flux-fill-pro": 0.05 * KiloTokensUsd,
"black-forest-labs/flux-pro": 0.055 * KiloTokensUsd,
"black-forest-labs/flux-redux-dev": 0.025 * KiloTokensUsd,
"black-forest-labs/flux-redux-schnell": 0.003 * KiloTokensUsd,
"black-forest-labs/flux-schnell": 0.003 * KiloTokensUsd,
"black-forest-labs/flux-schnell-lora": 0.02 * KiloTokensUsd,
"ideogram-ai/ideogram-v2": 0.08 * KiloTokensUsd,
"ideogram-ai/ideogram-v2-turbo": 0.05 * KiloTokensUsd,
"recraft-ai/recraft-v3": 0.04 * KiloTokensUsd,
"recraft-ai/recraft-v3-svg": 0.08 * KiloTokensUsd,
"stability-ai/stable-diffusion-3": 0.035 * KiloTokensUsd,
"stability-ai/stable-diffusion-3.5-large": 0.065 * KiloTokensUsd,
"stability-ai/stable-diffusion-3.5-large-turbo": 0.04 * KiloTokensUsd,
"stability-ai/stable-diffusion-3.5-medium": 0.035 * KiloTokensUsd,
// -------------------------------------
"black-forest-labs/flux-1.1-pro": 0.04 * ImageUsdPerPic,
"black-forest-labs/flux-1.1-pro-ultra": 0.06 * ImageUsdPerPic,
"black-forest-labs/flux-canny-dev": 0.025 * ImageUsdPerPic,
"black-forest-labs/flux-canny-pro": 0.05 * ImageUsdPerPic,
"black-forest-labs/flux-depth-dev": 0.025 * ImageUsdPerPic,
"black-forest-labs/flux-depth-pro": 0.05 * ImageUsdPerPic,
"black-forest-labs/flux-dev": 0.025 * ImageUsdPerPic,
"black-forest-labs/flux-dev-lora": 0.032 * ImageUsdPerPic,
"black-forest-labs/flux-fill-dev": 0.04 * ImageUsdPerPic,
"black-forest-labs/flux-fill-pro": 0.05 * ImageUsdPerPic,
"black-forest-labs/flux-pro": 0.055 * ImageUsdPerPic,
"black-forest-labs/flux-redux-dev": 0.025 * ImageUsdPerPic,
"black-forest-labs/flux-redux-schnell": 0.003 * ImageUsdPerPic,
"black-forest-labs/flux-schnell": 0.003 * ImageUsdPerPic,
"black-forest-labs/flux-schnell-lora": 0.02 * ImageUsdPerPic,
"ideogram-ai/ideogram-v2": 0.08 * ImageUsdPerPic,
"ideogram-ai/ideogram-v2-turbo": 0.05 * ImageUsdPerPic,
"recraft-ai/recraft-v3": 0.04 * ImageUsdPerPic,
"recraft-ai/recraft-v3-svg": 0.08 * ImageUsdPerPic,
"stability-ai/stable-diffusion-3": 0.035 * ImageUsdPerPic,
"stability-ai/stable-diffusion-3.5-large": 0.065 * ImageUsdPerPic,
"stability-ai/stable-diffusion-3.5-large-turbo": 0.04 * ImageUsdPerPic,
"stability-ai/stable-diffusion-3.5-medium": 0.035 * ImageUsdPerPic,
// replicate chat models
"ibm-granite/granite-20b-code-instruct-8k": 0.100 * KiloTokensUsd,
"ibm-granite/granite-3.0-2b-instruct": 0.030 * KiloTokensUsd,
"ibm-granite/granite-3.0-8b-instruct": 0.050 * KiloTokensUsd,
"ibm-granite/granite-8b-code-instruct-128k": 0.050 * KiloTokensUsd,
"meta/llama-2-13b": 0.100 * KiloTokensUsd,
"meta/llama-2-13b-chat": 0.100 * KiloTokensUsd,
"meta/llama-2-70b": 0.650 * KiloTokensUsd,
"meta/llama-2-70b-chat": 0.650 * KiloTokensUsd,
"meta/llama-2-7b": 0.050 * KiloTokensUsd,
"meta/llama-2-7b-chat": 0.050 * KiloTokensUsd,
"meta/meta-llama-3.1-405b-instruct": 9.500 * KiloTokensUsd,
"meta/meta-llama-3-70b": 0.650 * KiloTokensUsd,
"meta/meta-llama-3-70b-instruct": 0.650 * KiloTokensUsd,
"meta/meta-llama-3-8b": 0.050 * KiloTokensUsd,
"meta/meta-llama-3-8b-instruct": 0.050 * KiloTokensUsd,
"mistralai/mistral-7b-instruct-v0.2": 0.050 * KiloTokensUsd,
"mistralai/mistral-7b-v0.1": 0.050 * KiloTokensUsd,
"mistralai/mixtral-8x7b-instruct-v0.1": 0.300 * KiloTokensUsd,
"anthropic/claude-3.5-haiku": 1.0 * MilliTokensUsd,
"anthropic/claude-3.5-sonnet": 3.75 * MilliTokensUsd,
"anthropic/claude-3.7-sonnet": 3.0 * MilliTokensUsd,
"deepseek-ai/deepseek-r1": 10.0 * MilliTokensUsd,
"ibm-granite/granite-20b-code-instruct-8k": 0.100 * MilliTokensUsd,
"ibm-granite/granite-3.0-2b-instruct": 0.030 * MilliTokensUsd,
"ibm-granite/granite-3.0-8b-instruct": 0.050 * MilliTokensUsd,
"ibm-granite/granite-3.1-2b-instruct": 0.030 * MilliTokensUsd,
"ibm-granite/granite-3.1-8b-instruct": 0.030 * MilliTokensUsd,
"ibm-granite/granite-3.2-8b-instruct": 0.030 * MilliTokensUsd,
"ibm-granite/granite-8b-code-instruct-128k": 0.050 * MilliTokensUsd,
"meta/llama-2-13b": 0.100 * MilliTokensUsd,
"meta/llama-2-13b-chat": 0.100 * MilliTokensUsd,
"meta/llama-2-70b": 0.650 * MilliTokensUsd,
"meta/llama-2-70b-chat": 0.650 * MilliTokensUsd,
"meta/llama-2-7b": 0.050 * MilliTokensUsd,
"meta/llama-2-7b-chat": 0.050 * MilliTokensUsd,
"meta/meta-llama-3.1-405b-instruct": 9.500 * MilliTokensUsd,
"meta/meta-llama-3-70b": 0.650 * MilliTokensUsd,
"meta/meta-llama-3-70b-instruct": 0.650 * MilliTokensUsd,
"meta/meta-llama-3-8b": 0.050 * MilliTokensUsd,
"meta/meta-llama-3-8b-instruct": 0.050 * MilliTokensUsd,
"mistralai/mistral-7b-instruct-v0.2": 0.050 * MilliTokensUsd,
"mistralai/mistral-7b-v0.1": 0.050 * MilliTokensUsd,
// -------------------------------------
//https://openrouter.ai/models
"01-ai/yi-large": 1.5,
"aetherwiing/mn-starcannon-12b": 0.6,
"ai21/jamba-1-5-large": 4.0,
"ai21/jamba-1-5-mini": 0.2,
"ai21/jamba-instruct": 0.35,
"aion-labs/aion-1.0": 6.0,
"aion-labs/aion-1.0-mini": 1.2,
"aion-labs/aion-rp-llama-3.1-8b": 0.1,
"allenai/llama-3.1-tulu-3-405b": 5.0,
"alpindale/goliath-120b": 4.6875,
"alpindale/magnum-72b": 1.125,
"amazon/nova-lite-v1": 0.12,
"amazon/nova-micro-v1": 0.07,
"amazon/nova-pro-v1": 1.6,
"anthracite-org/magnum-v2-72b": 1.5,
"anthracite-org/magnum-v4-72b": 1.125,
"anthropic/claude-2": 12.0,
"anthropic/claude-2.0": 12.0,
"anthropic/claude-2.0:beta": 12.0,
"anthropic/claude-2.1": 12.0,
"anthropic/claude-2.1:beta": 12.0,
"anthropic/claude-2:beta": 12.0,
"anthropic/claude-3-haiku": 0.625,
"anthropic/claude-3-haiku:beta": 0.625,
"anthropic/claude-3-opus": 37.5,
"anthropic/claude-3-opus:beta": 37.5,
"anthropic/claude-3-sonnet": 7.5,
"anthropic/claude-3-sonnet:beta": 7.5,
"anthropic/claude-3.5-haiku": 2.0,
"anthropic/claude-3.5-haiku-20241022": 2.0,
"anthropic/claude-3.5-haiku-20241022:beta": 2.0,
"anthropic/claude-3.5-haiku:beta": 2.0,
"anthropic/claude-3.5-sonnet": 7.5,
"anthropic/claude-3.5-sonnet-20240620": 7.5,
"anthropic/claude-3.5-sonnet-20240620:beta": 7.5,
"anthropic/claude-3.5-sonnet:beta": 7.5,
"cognitivecomputations/dolphin-mixtral-8x22b": 0.45,
"cognitivecomputations/dolphin-mixtral-8x7b": 0.25,
// -------------------------------------
"01-ai/yi-large": 1.5,
"aetherwiing/mn-starcannon-12b": 0.6,
"ai21/jamba-1-5-large": 4.0,
"ai21/jamba-1-5-mini": 0.2,
"ai21/jamba-instruct": 0.35,
"aion-labs/aion-1.0": 6.0,
"aion-labs/aion-1.0-mini": 1.2,
"aion-labs/aion-rp-llama-3.1-8b": 0.1,
"allenai/llama-3.1-tulu-3-405b": 5.0,
"alpindale/goliath-120b": 4.6875,
"alpindale/magnum-72b": 1.125,
"amazon/nova-lite-v1": 0.12,
"amazon/nova-micro-v1": 0.07,
"amazon/nova-pro-v1": 1.6,
"anthracite-org/magnum-v2-72b": 1.5,
"anthracite-org/magnum-v4-72b": 1.125,
"anthropic/claude-2": 12.0,
"anthropic/claude-2.0": 12.0,
"anthropic/claude-2.0:beta": 12.0,
"anthropic/claude-2.1": 12.0,
"anthropic/claude-2.1:beta": 12.0,
"anthropic/claude-2:beta": 12.0,
"anthropic/claude-3-haiku": 0.625,
"anthropic/claude-3-haiku:beta": 0.625,
"anthropic/claude-3-opus": 37.5,
"anthropic/claude-3-opus:beta": 37.5,
"anthropic/claude-3-sonnet": 7.5,
"anthropic/claude-3-sonnet:beta": 7.5,
// "anthropic/claude-3.5-haiku": 2.0,
"anthropic/claude-3.5-haiku-20241022": 2.0,
"anthropic/claude-3.5-haiku-20241022:beta": 2.0,
"anthropic/claude-3.5-haiku:beta": 2.0,
// "anthropic/claude-3.5-sonnet": 7.5,
"anthropic/claude-3.5-sonnet-20240620": 7.5,
"anthropic/claude-3.5-sonnet-20240620:beta": 7.5,
"anthropic/claude-3.5-sonnet:beta": 7.5,
"cognitivecomputations/dolphin-mixtral-8x22b": 0.45,
"cognitivecomputations/dolphin-mixtral-8x7b": 0.25,
"cohere/command": 0.95,
"cohere/command-r": 0.7125,
"cohere/command-r-03-2024": 0.7125,
@ -472,10 +495,10 @@ var ModelRatio = map[string]float64{
"cohere/command-r-plus-08-2024": 4.75,
"cohere/command-r7b-12-2024": 0.075,
"databricks/dbrx-instruct": 0.6,
"deepseek/deepseek-chat": 1.25 * MilliTokensUsd,
"deepseek/deepseek-chat": 1.25,
"deepseek/deepseek-chat-v2.5": 1.0,
"deepseek/deepseek-chat:free": 0.0,
"deepseek/deepseek-r1": 7 * MilliTokensUsd,
"deepseek/deepseek-r1": 7,
"deepseek/deepseek-r1-distill-llama-70b": 0.345,
"deepseek/deepseek-r1-distill-llama-70b:free": 0.0,
"deepseek/deepseek-r1-distill-llama-8b": 0.02,
@ -603,7 +626,7 @@ var ModelRatio = map[string]float64{
"openai/gpt-4o-mini": 0.3,
"openai/gpt-4o-mini-2024-07-18": 0.3,
"openai/gpt-4o:extended": 9.0,
"openai/gpt-4.5-preview": 75 * MilliTokensUsd,
"openai/gpt-4.5-preview": 75,
"openai/o1": 30.0,
"openai/o1-mini": 2.2,
"openai/o1-mini-2024-09-12": 2.2,
@ -613,66 +636,74 @@ var ModelRatio = map[string]float64{
"openai/o3-mini-high": 2.2,
"openchat/openchat-7b": 0.0275,
"openchat/openchat-7b:free": 0.0,
"openrouter/auto": -500000.0,
"perplexity/llama-3.1-sonar-huge-128k-online": 2.5,
"perplexity/llama-3.1-sonar-large-128k-chat": 0.5,
"perplexity/llama-3.1-sonar-large-128k-online": 0.5,
"perplexity/llama-3.1-sonar-small-128k-chat": 0.1,
"perplexity/llama-3.1-sonar-small-128k-online": 0.1,
"perplexity/sonar": 0.5,
"perplexity/sonar-reasoning": 2.5,
"pygmalionai/mythalion-13b": 0.6,
"qwen/qvq-72b-preview": 0.25,
"qwen/qwen-2-72b-instruct": 0.45,
"qwen/qwen-2-7b-instruct": 0.027,
"qwen/qwen-2-7b-instruct:free": 0.0,
"qwen/qwen-2-vl-72b-instruct": 0.2,
"qwen/qwen-2-vl-7b-instruct": 0.05,
"qwen/qwen-2.5-72b-instruct": 0.2,
"qwen/qwen-2.5-7b-instruct": 0.025,
"qwen/qwen-2.5-coder-32b-instruct": 0.08,
"qwen/qwen-max": 3.2,
"qwen/qwen-plus": 0.6,
"qwen/qwen-turbo": 0.1,
"qwen/qwen-vl-plus:free": 0.0,
"qwen/qwen2.5-vl-72b-instruct:free": 0.0,
"qwen/qwq-32b-preview": 0.09,
"raifle/sorcererlm-8x22b": 2.25,
"sao10k/fimbulvetr-11b-v2": 0.6,
"sao10k/l3-euryale-70b": 0.4,
"sao10k/l3-lunaris-8b": 0.03,
"sao10k/l3.1-70b-hanami-x1": 1.5,
"sao10k/l3.1-euryale-70b": 0.4,
"sao10k/l3.3-euryale-70b": 0.4,
"sophosympatheia/midnight-rose-70b": 0.4,
"sophosympatheia/rogue-rose-103b-v0.2:free": 0.0,
"teknium/openhermes-2.5-mistral-7b": 0.085,
"thedrummer/rocinante-12b": 0.25,
"thedrummer/unslopnemo-12b": 0.25,
"undi95/remm-slerp-l2-13b": 0.6,
"undi95/toppy-m-7b": 0.035,
"undi95/toppy-m-7b:free": 0.0,
"x-ai/grok-2-1212": 5.0,
"x-ai/grok-2-vision-1212": 5.0,
"x-ai/grok-beta": 7.5,
"x-ai/grok-vision-beta": 7.5,
"xwin-lm/xwin-lm-70b": 1.875,
// "openrouter/auto": -500000.0,
"perplexity/llama-3.1-sonar-huge-128k-online": 2.5,
"perplexity/llama-3.1-sonar-large-128k-chat": 0.5,
"perplexity/llama-3.1-sonar-large-128k-online": 0.5,
"perplexity/llama-3.1-sonar-small-128k-chat": 0.1,
"perplexity/llama-3.1-sonar-small-128k-online": 0.1,
"perplexity/sonar": 0.5,
"perplexity/sonar-reasoning": 2.5,
"pygmalionai/mythalion-13b": 0.6,
"qwen/qvq-72b-preview": 0.25,
"qwen/qwen-2-72b-instruct": 0.45,
"qwen/qwen-2-7b-instruct": 0.027,
"qwen/qwen-2-7b-instruct:free": 0.0,
"qwen/qwen-2-vl-72b-instruct": 0.2,
"qwen/qwen-2-vl-7b-instruct": 0.05,
"qwen/qwen-2.5-72b-instruct": 0.2,
"qwen/qwen-2.5-7b-instruct": 0.025,
"qwen/qwen-2.5-coder-32b-instruct": 0.08,
"qwen/qwen-max": 3.2,
"qwen/qwen-plus": 0.6,
"qwen/qwen-turbo": 0.1,
"qwen/qwen-vl-plus:free": 0.0,
"qwen/qwen2.5-vl-72b-instruct:free": 0.0,
"qwen/qwq-32b-preview": 0.09,
"raifle/sorcererlm-8x22b": 2.25,
"sao10k/fimbulvetr-11b-v2": 0.6,
"sao10k/l3-euryale-70b": 0.4,
"sao10k/l3-lunaris-8b": 0.03,
"sao10k/l3.1-70b-hanami-x1": 1.5,
"sao10k/l3.1-euryale-70b": 0.4,
"sao10k/l3.3-euryale-70b": 0.4,
"sophosympatheia/midnight-rose-70b": 0.4,
"sophosympatheia/rogue-rose-103b-v0.2:free": 0.0,
"teknium/openhermes-2.5-mistral-7b": 0.085,
"thedrummer/rocinante-12b": 0.25,
"thedrummer/unslopnemo-12b": 0.25,
"undi95/remm-slerp-l2-13b": 0.6,
"undi95/toppy-m-7b": 0.035,
"undi95/toppy-m-7b:free": 0.0,
"x-ai/grok-2-1212": 5.0,
"x-ai/grok-2-vision-1212": 5.0,
"x-ai/grok-beta": 7.5,
"x-ai/grok-vision-beta": 7.5,
"xwin-lm/xwin-lm-70b": 1.875,
}
// CompletionRatio is the price ratio between completion tokens and prompt tokens
var CompletionRatio = map[string]float64{
// -------------------------------------
// aws llama3
// -------------------------------------
"llama3-8b-8192(33)": 0.0006 / 0.0003,
"llama3-70b-8192(33)": 0.0035 / 0.00265,
// -------------------------------------
// whisper
// -------------------------------------
"whisper-1": 0, // only count input tokens
"whisper-large-v3": 0, // only count input tokens
"whisper-large-v3-turbo": 0, // only count input tokens
"distil-whisper-large-v3-en": 0, // only count input tokens
// -------------------------------------
// deepseek
// -------------------------------------
"deepseek-chat": 1.1 / 0.27,
"deepseek-reasoner": 2.19 / 0.55,
// -------------------------------------
// openrouter
// -------------------------------------
"deepseek/deepseek-chat": 1,
"deepseek/deepseek-r1": 1,
// -------------------------------------
@ -693,9 +724,41 @@ var CompletionRatio = map[string]float64{
"llama3-groq-70b-8192-tool-use-preview": 0.79 / 0.59,
"llama3-groq-8b-8192-tool-use-preview": 0.08 / 0.05,
"mixtral-8x7b-32768": 1.0,
"deepseek-r1-distill-qwen-32b": 1,
"deepseek-r1-distill-qwen-32b": 1.0,
"deepseek-r1-distill-llama-70b-specdec": 0.99 / 0.75,
"deepseek-r1-distill-llama-70b": 0.99 / 0.75,
"llama-3.3-70b-specdec": 0.99 / 0.59,
"mistral-saba-24b": 1.0,
"qwen-qwq-32b": 0.39 / 0.29,
"qwen-2.5-coder-32b": 1.0,
"qwen-2.5-32b": 1.0,
// -------------------------------------
// Replicate
// -------------------------------------
"anthropic/claude-3.5-haiku": 5.0 / 1.0,
"anthropic/claude-3.5-sonnet": 18.75 / 3.75,
"anthropic/claude-3.7-sonnet": 15.0 / 3.0,
"deepseek-ai/deepseek-r1": 10.0 / 10.0,
"ibm-granite/granite-20b-code-instruct-8k": 0.5 / 0.1,
"ibm-granite/granite-3.0-2b-instruct": 0.25 / 0.03,
"ibm-granite/granite-3.0-8b-instruct": 0.25 / 0.05,
"ibm-granite/granite-3.1-2b-instruct": 0.25 / 0.03,
"ibm-granite/granite-3.1-8b-instruct": 0.25 / 0.03,
"ibm-granite/granite-3.2-8b-instruct": 0.25 / 0.03,
"ibm-granite/granite-8b-code-instruct-128k": 0.25 / 0.05,
"meta/llama-2-13b": 0.5 / 0.1,
"meta/llama-2-13b-chat": 0.5 / 0.1,
"meta/llama-2-70b": 2.75 / 0.65,
"meta/llama-2-70b-chat": 2.75 / 0.65,
"meta/llama-2-7b": 0.25 / 0.05,
"meta/llama-2-7b-chat": 0.25 / 0.05,
"meta/meta-llama-3.1-405b-instruct": 9.5 / 9.5,
"meta/meta-llama-3-70b": 2.75 / 0.65,
"meta/meta-llama-3-70b-instruct": 2.75 / 0.65,
"meta/meta-llama-3-8b": 0.25 / 0.05,
"meta/meta-llama-3-8b-instruct": 0.25 / 0.05,
"mistralai/mistral-7b-instruct-v0.2": 0.25 / 0.05,
"mistralai/mistral-7b-v0.1": 0.25 / 0.05,
}
// AudioRatio represents the price ratio between audio tokens and text tokens
@ -812,11 +875,18 @@ func ModelRatio2JSONString() string {
return string(jsonBytes)
}
// UpdateModelRatioByJSONString updates the ModelRatio map with the given JSON string.
func UpdateModelRatioByJSONString(jsonStr string) error {
modelRatioLock.Lock()
defer modelRatioLock.Unlock()
ModelRatio = make(map[string]float64)
return json.Unmarshal([]byte(jsonStr), &ModelRatio)
err := json.Unmarshal([]byte(jsonStr), &ModelRatio)
if err != nil {
logger.SysError("error unmarshalling model ratio: " + err.Error())
return err
}
return nil
}
func GetModelRatio(name string, channelType int) float64 {
@ -844,7 +914,7 @@ func GetModelRatio(name string, channelType int) float64 {
}
logger.SysError("model ratio not found: " + name)
return 30
return 0.1 * QuotaPerUsd
}
// CompletionRatio2JSONString returns the CompletionRatio map as a JSON string.