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

@ -22,6 +22,7 @@ const (
KiloRmb float64 = KiloTokensUsd / USD2RMB KiloRmb float64 = KiloTokensUsd / USD2RMB
// MilliRmb multiply by the RMB price per 1 million tokens to get the quota cost per token // 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 var modelRatioLock sync.RWMutex
@ -33,80 +34,83 @@ var modelRatioLock sync.RWMutex
// 1 === $0.002 / 1K tokens // 1 === $0.002 / 1K tokens
// 1 === ¥0.014 / 1k tokens // 1 === ¥0.014 / 1k tokens
var ModelRatio = map[string]float64{ var ModelRatio = map[string]float64{
// -------------------------------------
// OpenAI
// https://openai.com/pricing // https://openai.com/pricing
// -------------------------------------
"gpt-4.5-preview": 75 * MilliTokensUsd, "gpt-4.5-preview": 75 * MilliTokensUsd,
"gpt-4.5-preview-2025-02-27": 75 * MilliTokensUsd, "gpt-4.5-preview-2025-02-27": 75 * MilliTokensUsd,
"gpt-4": 15, "gpt-4": 30 * MilliTokensUsd,
"gpt-4-0314": 15, "gpt-4-0314": 30 * MilliTokensUsd,
"gpt-4-0613": 15, "gpt-4-0613": 30 * MilliTokensUsd,
"gpt-4-32k": 30, "gpt-4-32k": 60 * MilliTokensUsd,
"gpt-4-32k-0314": 30, "gpt-4-32k-0314": 60 * MilliTokensUsd,
"gpt-4-32k-0613": 30, "gpt-4-32k-0613": 60 * MilliTokensUsd,
"gpt-4-1106-preview": 5, // $0.01 / 1K tokens "gpt-4-1106-preview": 10 * MilliTokensUsd,
"gpt-4-0125-preview": 5, // $0.01 / 1K tokens "gpt-4-0125-preview": 10 * MilliTokensUsd,
"gpt-4-turbo-preview": 5, // $0.01 / 1K tokens "gpt-4-turbo-preview": 10 * MilliTokensUsd,
"gpt-4-turbo": 5, // $0.01 / 1K tokens "gpt-4-turbo": 10 * MilliTokensUsd,
"gpt-4-turbo-2024-04-09": 5, // $0.01 / 1K tokens "gpt-4-turbo-2024-04-09": 10 * MilliTokensUsd,
"gpt-4o": 2.5, // $0.005 / 1K tokens "gpt-4o": 2.5 * MilliTokensUsd,
"chatgpt-4o-latest": 2.5, // $0.005 / 1K tokens "chatgpt-4o-latest": 5 * MilliTokensUsd,
"gpt-4o-2024-05-13": 2.5, // $0.005 / 1K tokens "gpt-4o-2024-05-13": 5 * MilliTokensUsd,
"gpt-4o-2024-08-06": 1.25, // $0.0025 / 1K tokens "gpt-4o-2024-08-06": 2.5 * MilliTokensUsd,
"gpt-4o-2024-11-20": 1.25, // $0.0025 / 1K tokens "gpt-4o-2024-11-20": 2.5 * MilliTokensUsd,
"gpt-4o-search-preview": 2.5, // $0.005 / 1K tokens "gpt-4o-search-preview": 5 * MilliTokensUsd,
"gpt-4o-mini": 0.075, // $0.00015 / 1K tokens "gpt-4o-mini": 0.15 * MilliTokensUsd,
"gpt-4o-mini-2024-07-18": 0.075, // $0.00015 / 1K tokens "gpt-4o-mini-2024-07-18": 0.15 * MilliTokensUsd,
"gpt-4o-mini-search-preview": 0.075, // $0.00015 / 1K tokens "gpt-4o-mini-search-preview": 0.15 * MilliTokensUsd,
"gpt-4-vision-preview": 5, // $0.01 / 1K tokens "gpt-4-vision-preview": 10 * MilliTokensUsd,
// Audio billing will mix text and audio tokens, the unit price is different. // Audio billing will mix text and audio tokens, the unit price is different.
// Here records the cost of text, the cost multiplier of audio // Here records the cost of text, the cost multiplier of audio
// relative to text is in AudioRatio // relative to text is in AudioRatio
"gpt-4o-audio-preview": 1.25, // $0.0025 / 1K tokens "gpt-4o-audio-preview": 2.5 * MilliTokensUsd,
"gpt-4o-audio-preview-2024-12-17": 1.25, // $0.0025 / 1K tokens "gpt-4o-audio-preview-2024-12-17": 2.5 * MilliTokensUsd,
"gpt-4o-audio-preview-2024-10-01": 1.25, // $0.0025 / 1K tokens "gpt-4o-audio-preview-2024-10-01": 2.5 * MilliTokensUsd,
"gpt-4o-mini-audio-preview": 0.15 * MilliTokensUsd, // $0.15/1M tokens "gpt-4o-mini-audio-preview": 0.15 * MilliTokensUsd,
"gpt-4o-mini-audio-preview-2024-12-17": 0.15 * MilliTokensUsd, // $0.15/1M tokens "gpt-4o-mini-audio-preview-2024-12-17": 0.15 * MilliTokensUsd,
"gpt-3.5-turbo": 0.25, // $0.0005 / 1K tokens "gpt-3.5-turbo": 0.5 * MilliTokensUsd,
"gpt-3.5-turbo-0301": 0.75, "gpt-3.5-turbo-0301": 1.5 * MilliTokensUsd,
"gpt-3.5-turbo-0613": 0.75, "gpt-3.5-turbo-0613": 1.5 * MilliTokensUsd,
"gpt-3.5-turbo-16k": 1.5, // $0.003 / 1K tokens "gpt-3.5-turbo-16k": 3 * MilliTokensUsd,
"gpt-3.5-turbo-16k-0613": 1.5, "gpt-3.5-turbo-16k-0613": 3 * MilliTokensUsd,
"gpt-3.5-turbo-instruct": 0.75, // $0.0015 / 1K tokens "gpt-3.5-turbo-instruct": 1.5 * MilliTokensUsd,
"gpt-3.5-turbo-1106": 0.5, // $0.001 / 1K tokens "gpt-3.5-turbo-1106": 1 * MilliTokensUsd,
"gpt-3.5-turbo-0125": 0.25, // $0.0005 / 1K tokens "gpt-3.5-turbo-0125": 0.5 * MilliTokensUsd,
"o1": 15 * MilliTokensUsd, // $15.00 / 1M input tokens "o1": 15 * MilliTokensUsd,
"o1-2024-12-17": 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-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, "o1-mini-2024-09-12": 1.1 * MilliTokensUsd,
"o3-mini": 1.1 * MilliTokensUsd, "o3-mini": 1.1 * MilliTokensUsd,
"o3-mini-2025-01-31": 1.1 * MilliTokensUsd, "o3-mini-2025-01-31": 1.1 * MilliTokensUsd,
"davinci-002": 1, // $0.002 / 1K tokens "davinci-002": 2 * MilliTokensUsd,
"babbage-002": 0.2, // $0.0004 / 1K tokens "babbage-002": 0.4 * MilliTokensUsd,
"text-ada-001": 0.2, "text-ada-001": 0.4 * MilliTokensUsd,
"text-babbage-001": 0.25, "text-babbage-001": 0.5 * MilliTokensUsd,
"text-curie-001": 1, "text-curie-001": 2 * MilliTokensUsd,
"text-davinci-002": 10, "text-davinci-002": 20 * MilliTokensUsd,
"text-davinci-003": 10, "text-davinci-003": 20 * MilliTokensUsd,
"text-davinci-edit-001": 10, "text-davinci-edit-001": 20 * MilliTokensUsd,
"code-davinci-edit-001": 10, "code-davinci-edit-001": 20 * MilliTokensUsd,
"whisper-1": 15, "whisper-1": 30 * MilliTokensUsd,
"tts-1": 7.5, // $0.015 / 1K characters "tts-1": 15 * MilliTokensUsd,
"tts-1-1106": 7.5, "tts-1-1106": 15 * MilliTokensUsd,
"tts-1-hd": 15, // $0.030 / 1K characters "tts-1-hd": 30 * MilliTokensUsd,
"tts-1-hd-1106": 15, "tts-1-hd-1106": 30 * MilliTokensUsd,
"davinci": 10, "davinci": 20 * MilliTokensUsd,
"curie": 10, "curie": 20 * MilliTokensUsd,
"babbage": 10, "babbage": 20 * MilliTokensUsd,
"ada": 10, "ada": 20 * MilliTokensUsd,
"text-embedding-ada-002": 0.05, "text-embedding-ada-002": 0.1 * MilliTokensUsd,
"text-embedding-3-small": 0.01, "text-embedding-3-small": 0.02 * MilliTokensUsd,
"text-embedding-3-large": 0.065, "text-embedding-3-large": 0.13 * MilliTokensUsd,
"text-search-ada-doc-001": 10, "text-search-ada-doc-001": 20 * MilliTokensUsd,
"text-moderation-stable": 0.1, "text-moderation-stable": 0.2 * MilliTokensUsd,
"text-moderation-latest": 0.1, "text-moderation-latest": 0.2 * MilliTokensUsd,
"dall-e-2": 20 * MilliTokensUsd, // $0.016 - $0.020 / image "dall-e-2": 0.02 * ImageUsdPerPic,
"dall-e-3": 40 * MilliTokensUsd, // $0.040 - $0.120 / image "dall-e-3": 0.04 * ImageUsdPerPic,
// https://www.anthropic.com/api#pricing // https://www.anthropic.com/api#pricing
"claude-instant-1.2": 0.8 * MilliTokensUsd, "claude-instant-1.2": 0.8 * MilliTokensUsd,
"claude-2.0": 8.0 * MilliTokensUsd, "claude-2.0": 8.0 * MilliTokensUsd,
@ -162,6 +166,7 @@ var ModelRatio = map[string]float64{
"gemini-2.0-flash-lite-preview-02-05": 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-flash-thinking-exp-01-21": 0.075 * MilliTokensUsd,
"gemini-2.0-pro-exp-02-05": 1.25 * MilliTokensUsd, "gemini-2.0-pro-exp-02-05": 1.25 * MilliTokensUsd,
"gemini-2.0-flash-exp-image-generation": 0.075 * MilliTokensUsd,
"aqa": 1, "aqa": 1,
// https://open.bigmodel.cn/pricing // https://open.bigmodel.cn/pricing
"glm-zero-preview": 0.01 * KiloRmb, "glm-zero-preview": 0.01 * KiloRmb,
@ -264,9 +269,9 @@ var ModelRatio = map[string]float64{
"text-embedding-v2": 0.0007 * KiloRmb, "text-embedding-v2": 0.0007 * KiloRmb,
"text-embedding-async-v2": 0.0007 * KiloRmb, "text-embedding-async-v2": 0.0007 * KiloRmb,
"text-embedding-async-v1": 0.0007 * KiloRmb, "text-embedding-async-v1": 0.0007 * KiloRmb,
"ali-stable-diffusion-xl": 8.00, "ali-stable-diffusion-xl": 0.016 * ImageUsdPerPic,
"ali-stable-diffusion-v1.5": 8.00, "ali-stable-diffusion-v1.5": 0.016 * ImageUsdPerPic,
"wanx-v1": 8.00, "wanx-v1": 0.016 * ImageUsdPerPic,
"deepseek-r1": 0.002 * KiloRmb, "deepseek-r1": 0.002 * KiloRmb,
"deepseek-v3": 0.001 * KiloRmb, "deepseek-v3": 0.001 * KiloRmb,
"deepseek-r1-distill-qwen-1.5b": 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-8b-8192": 0.05 * MilliTokensUsd,
"llama3-groq-70b-8192-tool-use-preview": 0.59 * MilliTokensUsd, "llama3-groq-70b-8192-tool-use-preview": 0.59 * MilliTokensUsd,
"llama3-groq-8b-8192-tool-use-preview": 0.05 * 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, "mixtral-8x7b-32768": 0.24 * MilliTokensUsd,
"whisper-large-v3": 0.111 * MilliTokensUsd, "whisper-large-v3": 0.111 * MilliTokensUsd,
"whisper-large-v3-turbo": 0.04 * MilliTokensUsd, "whisper-large-v3-turbo": 0.04 * MilliTokensUsd,
@ -379,52 +389,65 @@ var ModelRatio = map[string]float64{
"grok-beta": 5.0 * MilliTokensUsd, "grok-beta": 5.0 * MilliTokensUsd,
// vertex imagen3 // vertex imagen3
// https://cloud.google.com/vertex-ai/generative-ai/pricing#imagen-models // 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 // replicate charges based on the number of generated images
// https://replicate.com/pricing // 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-1.1-pro": 0.04 * ImageUsdPerPic,
"black-forest-labs/flux-canny-dev": 0.025 * KiloTokensUsd, "black-forest-labs/flux-1.1-pro-ultra": 0.06 * ImageUsdPerPic,
"black-forest-labs/flux-canny-pro": 0.05 * KiloTokensUsd, "black-forest-labs/flux-canny-dev": 0.025 * ImageUsdPerPic,
"black-forest-labs/flux-depth-dev": 0.025 * KiloTokensUsd, "black-forest-labs/flux-canny-pro": 0.05 * ImageUsdPerPic,
"black-forest-labs/flux-depth-pro": 0.05 * KiloTokensUsd, "black-forest-labs/flux-depth-dev": 0.025 * ImageUsdPerPic,
"black-forest-labs/flux-dev": 0.025 * KiloTokensUsd, "black-forest-labs/flux-depth-pro": 0.05 * ImageUsdPerPic,
"black-forest-labs/flux-dev-lora": 0.032 * KiloTokensUsd, "black-forest-labs/flux-dev": 0.025 * ImageUsdPerPic,
"black-forest-labs/flux-fill-dev": 0.04 * KiloTokensUsd, "black-forest-labs/flux-dev-lora": 0.032 * ImageUsdPerPic,
"black-forest-labs/flux-fill-pro": 0.05 * KiloTokensUsd, "black-forest-labs/flux-fill-dev": 0.04 * ImageUsdPerPic,
"black-forest-labs/flux-pro": 0.055 * KiloTokensUsd, "black-forest-labs/flux-fill-pro": 0.05 * ImageUsdPerPic,
"black-forest-labs/flux-redux-dev": 0.025 * KiloTokensUsd, "black-forest-labs/flux-pro": 0.055 * ImageUsdPerPic,
"black-forest-labs/flux-redux-schnell": 0.003 * KiloTokensUsd, "black-forest-labs/flux-redux-dev": 0.025 * ImageUsdPerPic,
"black-forest-labs/flux-schnell": 0.003 * KiloTokensUsd, "black-forest-labs/flux-redux-schnell": 0.003 * ImageUsdPerPic,
"black-forest-labs/flux-schnell-lora": 0.02 * KiloTokensUsd, "black-forest-labs/flux-schnell": 0.003 * ImageUsdPerPic,
"ideogram-ai/ideogram-v2": 0.08 * KiloTokensUsd, "black-forest-labs/flux-schnell-lora": 0.02 * ImageUsdPerPic,
"ideogram-ai/ideogram-v2-turbo": 0.05 * KiloTokensUsd, "ideogram-ai/ideogram-v2": 0.08 * ImageUsdPerPic,
"recraft-ai/recraft-v3": 0.04 * KiloTokensUsd, "ideogram-ai/ideogram-v2-turbo": 0.05 * ImageUsdPerPic,
"recraft-ai/recraft-v3-svg": 0.08 * KiloTokensUsd, "recraft-ai/recraft-v3": 0.04 * ImageUsdPerPic,
"stability-ai/stable-diffusion-3": 0.035 * KiloTokensUsd, "recraft-ai/recraft-v3-svg": 0.08 * ImageUsdPerPic,
"stability-ai/stable-diffusion-3.5-large": 0.065 * KiloTokensUsd, "stability-ai/stable-diffusion-3": 0.035 * ImageUsdPerPic,
"stability-ai/stable-diffusion-3.5-large-turbo": 0.04 * KiloTokensUsd, "stability-ai/stable-diffusion-3.5-large": 0.065 * ImageUsdPerPic,
"stability-ai/stable-diffusion-3.5-medium": 0.035 * KiloTokensUsd, "stability-ai/stable-diffusion-3.5-large-turbo": 0.04 * ImageUsdPerPic,
"stability-ai/stable-diffusion-3.5-medium": 0.035 * ImageUsdPerPic,
// replicate chat models // replicate chat models
"ibm-granite/granite-20b-code-instruct-8k": 0.100 * KiloTokensUsd, "anthropic/claude-3.5-haiku": 1.0 * MilliTokensUsd,
"ibm-granite/granite-3.0-2b-instruct": 0.030 * KiloTokensUsd, "anthropic/claude-3.5-sonnet": 3.75 * MilliTokensUsd,
"ibm-granite/granite-3.0-8b-instruct": 0.050 * KiloTokensUsd, "anthropic/claude-3.7-sonnet": 3.0 * MilliTokensUsd,
"ibm-granite/granite-8b-code-instruct-128k": 0.050 * KiloTokensUsd, "deepseek-ai/deepseek-r1": 10.0 * MilliTokensUsd,
"meta/llama-2-13b": 0.100 * KiloTokensUsd, "ibm-granite/granite-20b-code-instruct-8k": 0.100 * MilliTokensUsd,
"meta/llama-2-13b-chat": 0.100 * KiloTokensUsd, "ibm-granite/granite-3.0-2b-instruct": 0.030 * MilliTokensUsd,
"meta/llama-2-70b": 0.650 * KiloTokensUsd, "ibm-granite/granite-3.0-8b-instruct": 0.050 * MilliTokensUsd,
"meta/llama-2-70b-chat": 0.650 * KiloTokensUsd, "ibm-granite/granite-3.1-2b-instruct": 0.030 * MilliTokensUsd,
"meta/llama-2-7b": 0.050 * KiloTokensUsd, "ibm-granite/granite-3.1-8b-instruct": 0.030 * MilliTokensUsd,
"meta/llama-2-7b-chat": 0.050 * KiloTokensUsd, "ibm-granite/granite-3.2-8b-instruct": 0.030 * MilliTokensUsd,
"meta/meta-llama-3.1-405b-instruct": 9.500 * KiloTokensUsd, "ibm-granite/granite-8b-code-instruct-128k": 0.050 * MilliTokensUsd,
"meta/meta-llama-3-70b": 0.650 * KiloTokensUsd, "meta/llama-2-13b": 0.100 * MilliTokensUsd,
"meta/meta-llama-3-70b-instruct": 0.650 * KiloTokensUsd, "meta/llama-2-13b-chat": 0.100 * MilliTokensUsd,
"meta/meta-llama-3-8b": 0.050 * KiloTokensUsd, "meta/llama-2-70b": 0.650 * MilliTokensUsd,
"meta/meta-llama-3-8b-instruct": 0.050 * KiloTokensUsd, "meta/llama-2-70b-chat": 0.650 * MilliTokensUsd,
"mistralai/mistral-7b-instruct-v0.2": 0.050 * KiloTokensUsd, "meta/llama-2-7b": 0.050 * MilliTokensUsd,
"mistralai/mistral-7b-v0.1": 0.050 * KiloTokensUsd, "meta/llama-2-7b-chat": 0.050 * MilliTokensUsd,
"mistralai/mixtral-8x7b-instruct-v0.1": 0.300 * KiloTokensUsd, "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 //https://openrouter.ai/models
// -------------------------------------
"01-ai/yi-large": 1.5, "01-ai/yi-large": 1.5,
"aetherwiing/mn-starcannon-12b": 0.6, "aetherwiing/mn-starcannon-12b": 0.6,
"ai21/jamba-1-5-large": 4.0, "ai21/jamba-1-5-large": 4.0,
@ -453,11 +476,11 @@ var ModelRatio = map[string]float64{
"anthropic/claude-3-opus:beta": 37.5, "anthropic/claude-3-opus:beta": 37.5,
"anthropic/claude-3-sonnet": 7.5, "anthropic/claude-3-sonnet": 7.5,
"anthropic/claude-3-sonnet:beta": 7.5, "anthropic/claude-3-sonnet:beta": 7.5,
"anthropic/claude-3.5-haiku": 2.0, // "anthropic/claude-3.5-haiku": 2.0,
"anthropic/claude-3.5-haiku-20241022": 2.0, "anthropic/claude-3.5-haiku-20241022": 2.0,
"anthropic/claude-3.5-haiku-20241022:beta": 2.0, "anthropic/claude-3.5-haiku-20241022:beta": 2.0,
"anthropic/claude-3.5-haiku:beta": 2.0, "anthropic/claude-3.5-haiku:beta": 2.0,
"anthropic/claude-3.5-sonnet": 7.5, // "anthropic/claude-3.5-sonnet": 7.5,
"anthropic/claude-3.5-sonnet-20240620": 7.5, "anthropic/claude-3.5-sonnet-20240620": 7.5,
"anthropic/claude-3.5-sonnet-20240620:beta": 7.5, "anthropic/claude-3.5-sonnet-20240620:beta": 7.5,
"anthropic/claude-3.5-sonnet:beta": 7.5, "anthropic/claude-3.5-sonnet:beta": 7.5,
@ -472,10 +495,10 @@ var ModelRatio = map[string]float64{
"cohere/command-r-plus-08-2024": 4.75, "cohere/command-r-plus-08-2024": 4.75,
"cohere/command-r7b-12-2024": 0.075, "cohere/command-r7b-12-2024": 0.075,
"databricks/dbrx-instruct": 0.6, "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-v2.5": 1.0,
"deepseek/deepseek-chat:free": 0.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": 0.345,
"deepseek/deepseek-r1-distill-llama-70b:free": 0.0, "deepseek/deepseek-r1-distill-llama-70b:free": 0.0,
"deepseek/deepseek-r1-distill-llama-8b": 0.02, "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": 0.3,
"openai/gpt-4o-mini-2024-07-18": 0.3, "openai/gpt-4o-mini-2024-07-18": 0.3,
"openai/gpt-4o:extended": 9.0, "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": 30.0,
"openai/o1-mini": 2.2, "openai/o1-mini": 2.2,
"openai/o1-mini-2024-09-12": 2.2, "openai/o1-mini-2024-09-12": 2.2,
@ -613,7 +636,7 @@ var ModelRatio = map[string]float64{
"openai/o3-mini-high": 2.2, "openai/o3-mini-high": 2.2,
"openchat/openchat-7b": 0.0275, "openchat/openchat-7b": 0.0275,
"openchat/openchat-7b:free": 0.0, "openchat/openchat-7b:free": 0.0,
"openrouter/auto": -500000.0, // "openrouter/auto": -500000.0,
"perplexity/llama-3.1-sonar-huge-128k-online": 2.5, "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-chat": 0.5,
"perplexity/llama-3.1-sonar-large-128k-online": 0.5, "perplexity/llama-3.1-sonar-large-128k-online": 0.5,
@ -661,18 +684,26 @@ var ModelRatio = map[string]float64{
// CompletionRatio is the price ratio between completion tokens and prompt tokens // CompletionRatio is the price ratio between completion tokens and prompt tokens
var CompletionRatio = map[string]float64{ var CompletionRatio = map[string]float64{
// -------------------------------------
// aws llama3 // aws llama3
// -------------------------------------
"llama3-8b-8192(33)": 0.0006 / 0.0003, "llama3-8b-8192(33)": 0.0006 / 0.0003,
"llama3-70b-8192(33)": 0.0035 / 0.00265, "llama3-70b-8192(33)": 0.0035 / 0.00265,
// -------------------------------------
// whisper // whisper
// -------------------------------------
"whisper-1": 0, // only count input tokens "whisper-1": 0, // only count input tokens
"whisper-large-v3": 0, // only count input tokens "whisper-large-v3": 0, // only count input tokens
"whisper-large-v3-turbo": 0, // only count input tokens "whisper-large-v3-turbo": 0, // only count input tokens
"distil-whisper-large-v3-en": 0, // only count input tokens "distil-whisper-large-v3-en": 0, // only count input tokens
// -------------------------------------
// deepseek // deepseek
// -------------------------------------
"deepseek-chat": 1.1 / 0.27, "deepseek-chat": 1.1 / 0.27,
"deepseek-reasoner": 2.19 / 0.55, "deepseek-reasoner": 2.19 / 0.55,
// -------------------------------------
// openrouter // openrouter
// -------------------------------------
"deepseek/deepseek-chat": 1, "deepseek/deepseek-chat": 1,
"deepseek/deepseek-r1": 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-70b-8192-tool-use-preview": 0.79 / 0.59,
"llama3-groq-8b-8192-tool-use-preview": 0.08 / 0.05, "llama3-groq-8b-8192-tool-use-preview": 0.08 / 0.05,
"mixtral-8x7b-32768": 1.0, "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-specdec": 0.99 / 0.75,
"deepseek-r1-distill-llama-70b": 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 // AudioRatio represents the price ratio between audio tokens and text tokens
@ -812,11 +875,18 @@ func ModelRatio2JSONString() string {
return string(jsonBytes) return string(jsonBytes)
} }
// UpdateModelRatioByJSONString updates the ModelRatio map with the given JSON string.
func UpdateModelRatioByJSONString(jsonStr string) error { func UpdateModelRatioByJSONString(jsonStr string) error {
modelRatioLock.Lock() modelRatioLock.Lock()
defer modelRatioLock.Unlock() defer modelRatioLock.Unlock()
ModelRatio = make(map[string]float64) 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 { 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) logger.SysError("model ratio not found: " + name)
return 30 return 0.1 * QuotaPerUsd
} }
// CompletionRatio2JSONString returns the CompletionRatio map as a JSON string. // CompletionRatio2JSONString returns the CompletionRatio map as a JSON string.