From bbfaf1fb95e1db53677f418c136a6cb7a33ed2b6 Mon Sep 17 00:00:00 2001 From: "Laisky.Cai" Date: Mon, 17 Mar 2025 01:49:15 +0000 Subject: [PATCH] fix: improve error handling in pricing model calculations --- relay/billing/ratio/model.go | 504 ++++++++++++++++++++--------------- 1 file changed, 287 insertions(+), 217 deletions(-) diff --git a/relay/billing/ratio/model.go b/relay/billing/ratio/model.go index 617a9c76..a5b088d2 100644 --- a/relay/billing/ratio/model.go +++ b/relay/billing/ratio/model.go @@ -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.