| | const { matchModelName, findMatchingPattern } = require('@librechat/api'); |
| | const defaultRate = 6; |
| |
|
| | |
| | |
| | |
| | |
| | const bedrockValues = { |
| | |
| | llama2: { prompt: 0.75, completion: 1.0 }, |
| | 'llama-2': { prompt: 0.75, completion: 1.0 }, |
| | 'llama2-13b': { prompt: 0.75, completion: 1.0 }, |
| | 'llama2:70b': { prompt: 1.95, completion: 2.56 }, |
| | 'llama2-70b': { prompt: 1.95, completion: 2.56 }, |
| |
|
| | |
| | llama3: { prompt: 0.3, completion: 0.6 }, |
| | 'llama-3': { prompt: 0.3, completion: 0.6 }, |
| | 'llama3-8b': { prompt: 0.3, completion: 0.6 }, |
| | 'llama3:8b': { prompt: 0.3, completion: 0.6 }, |
| | 'llama3-70b': { prompt: 2.65, completion: 3.5 }, |
| | 'llama3:70b': { prompt: 2.65, completion: 3.5 }, |
| |
|
| | |
| | 'llama3-1': { prompt: 0.22, completion: 0.22 }, |
| | 'llama3-1-8b': { prompt: 0.22, completion: 0.22 }, |
| | 'llama3-1-70b': { prompt: 0.72, completion: 0.72 }, |
| | 'llama3-1-405b': { prompt: 2.4, completion: 2.4 }, |
| | 'llama3-2': { prompt: 0.1, completion: 0.1 }, |
| | 'llama3-2-1b': { prompt: 0.1, completion: 0.1 }, |
| | 'llama3-2-3b': { prompt: 0.15, completion: 0.15 }, |
| | 'llama3-2-11b': { prompt: 0.16, completion: 0.16 }, |
| | 'llama3-2-90b': { prompt: 0.72, completion: 0.72 }, |
| | 'llama3-3': { prompt: 2.65, completion: 3.5 }, |
| | 'llama3-3-70b': { prompt: 2.65, completion: 3.5 }, |
| |
|
| | |
| | 'llama3.1': { prompt: 0.22, completion: 0.22 }, |
| | 'llama3.1:8b': { prompt: 0.22, completion: 0.22 }, |
| | 'llama3.1:70b': { prompt: 0.72, completion: 0.72 }, |
| | 'llama3.1:405b': { prompt: 2.4, completion: 2.4 }, |
| | 'llama3.2': { prompt: 0.1, completion: 0.1 }, |
| | 'llama3.2:1b': { prompt: 0.1, completion: 0.1 }, |
| | 'llama3.2:3b': { prompt: 0.15, completion: 0.15 }, |
| | 'llama3.2:11b': { prompt: 0.16, completion: 0.16 }, |
| | 'llama3.2:90b': { prompt: 0.72, completion: 0.72 }, |
| | 'llama3.3': { prompt: 2.65, completion: 3.5 }, |
| | 'llama3.3:70b': { prompt: 2.65, completion: 3.5 }, |
| |
|
| | |
| | 'llama-3.1': { prompt: 0.22, completion: 0.22 }, |
| | 'llama-3.1-8b': { prompt: 0.22, completion: 0.22 }, |
| | 'llama-3.1-70b': { prompt: 0.72, completion: 0.72 }, |
| | 'llama-3.1-405b': { prompt: 2.4, completion: 2.4 }, |
| | 'llama-3.2': { prompt: 0.1, completion: 0.1 }, |
| | 'llama-3.2-1b': { prompt: 0.1, completion: 0.1 }, |
| | 'llama-3.2-3b': { prompt: 0.15, completion: 0.15 }, |
| | 'llama-3.2-11b': { prompt: 0.16, completion: 0.16 }, |
| | 'llama-3.2-90b': { prompt: 0.72, completion: 0.72 }, |
| | 'llama-3.3': { prompt: 2.65, completion: 3.5 }, |
| | 'llama-3.3-70b': { prompt: 2.65, completion: 3.5 }, |
| | 'mistral-7b': { prompt: 0.15, completion: 0.2 }, |
| | 'mistral-small': { prompt: 0.15, completion: 0.2 }, |
| | 'mixtral-8x7b': { prompt: 0.45, completion: 0.7 }, |
| | 'mistral-large-2402': { prompt: 4.0, completion: 12.0 }, |
| | 'mistral-large-2407': { prompt: 3.0, completion: 9.0 }, |
| | 'command-text': { prompt: 1.5, completion: 2.0 }, |
| | 'command-light': { prompt: 0.3, completion: 0.6 }, |
| | |
| | 'j2-mid': { prompt: 12.5, completion: 12.5 }, |
| | 'j2-ultra': { prompt: 18.8, completion: 18.8 }, |
| | 'jamba-instruct': { prompt: 0.5, completion: 0.7 }, |
| | |
| | 'titan-text-lite': { prompt: 0.15, completion: 0.2 }, |
| | 'titan-text-express': { prompt: 0.2, completion: 0.6 }, |
| | 'titan-text-premier': { prompt: 0.5, completion: 1.5 }, |
| | |
| | 'nova-micro': { prompt: 0.035, completion: 0.14 }, |
| | 'nova-lite': { prompt: 0.06, completion: 0.24 }, |
| | 'nova-pro': { prompt: 0.8, completion: 3.2 }, |
| | 'nova-premier': { prompt: 2.5, completion: 12.5 }, |
| | 'deepseek.r1': { prompt: 1.35, completion: 5.4 }, |
| | }; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | const tokenValues = Object.assign( |
| | { |
| | |
| | '8k': { prompt: 30, completion: 60 }, |
| | '32k': { prompt: 60, completion: 120 }, |
| | '4k': { prompt: 1.5, completion: 2 }, |
| | '16k': { prompt: 3, completion: 4 }, |
| | |
| | 'claude-': { prompt: 0.8, completion: 2.4 }, |
| | deepseek: { prompt: 0.28, completion: 0.42 }, |
| | command: { prompt: 0.38, completion: 0.38 }, |
| | gemma: { prompt: 0.02, completion: 0.04 }, |
| | gemini: { prompt: 0.5, completion: 1.5 }, |
| | 'gpt-oss': { prompt: 0.05, completion: 0.2 }, |
| | |
| | 'gpt-3.5-turbo-1106': { prompt: 1, completion: 2 }, |
| | 'gpt-3.5-turbo-0125': { prompt: 0.5, completion: 1.5 }, |
| | 'gpt-4-1106': { prompt: 10, completion: 30 }, |
| | 'gpt-4.1': { prompt: 2, completion: 8 }, |
| | 'gpt-4.1-nano': { prompt: 0.1, completion: 0.4 }, |
| | 'gpt-4.1-mini': { prompt: 0.4, completion: 1.6 }, |
| | 'gpt-4.5': { prompt: 75, completion: 150 }, |
| | 'gpt-4o': { prompt: 2.5, completion: 10 }, |
| | 'gpt-4o-2024-05-13': { prompt: 5, completion: 15 }, |
| | 'gpt-4o-mini': { prompt: 0.15, completion: 0.6 }, |
| | 'gpt-5': { prompt: 1.25, completion: 10 }, |
| | 'gpt-5-nano': { prompt: 0.05, completion: 0.4 }, |
| | 'gpt-5-mini': { prompt: 0.25, completion: 2 }, |
| | 'gpt-5-pro': { prompt: 15, completion: 120 }, |
| | o1: { prompt: 15, completion: 60 }, |
| | 'o1-mini': { prompt: 1.1, completion: 4.4 }, |
| | 'o1-preview': { prompt: 15, completion: 60 }, |
| | o3: { prompt: 2, completion: 8 }, |
| | 'o3-mini': { prompt: 1.1, completion: 4.4 }, |
| | 'o4-mini': { prompt: 1.1, completion: 4.4 }, |
| | 'claude-instant': { prompt: 0.8, completion: 2.4 }, |
| | 'claude-2': { prompt: 8, completion: 24 }, |
| | 'claude-2.1': { prompt: 8, completion: 24 }, |
| | 'claude-3-haiku': { prompt: 0.25, completion: 1.25 }, |
| | 'claude-3-sonnet': { prompt: 3, completion: 15 }, |
| | 'claude-3-opus': { prompt: 15, completion: 75 }, |
| | 'claude-3-5-haiku': { prompt: 0.8, completion: 4 }, |
| | 'claude-3.5-haiku': { prompt: 0.8, completion: 4 }, |
| | 'claude-3-5-sonnet': { prompt: 3, completion: 15 }, |
| | 'claude-3.5-sonnet': { prompt: 3, completion: 15 }, |
| | 'claude-3-7-sonnet': { prompt: 3, completion: 15 }, |
| | 'claude-3.7-sonnet': { prompt: 3, completion: 15 }, |
| | 'claude-haiku-4-5': { prompt: 1, completion: 5 }, |
| | 'claude-opus-4': { prompt: 15, completion: 75 }, |
| | 'claude-opus-4-5': { prompt: 5, completion: 25 }, |
| | 'claude-sonnet-4': { prompt: 3, completion: 15 }, |
| | 'command-r': { prompt: 0.5, completion: 1.5 }, |
| | 'command-r-plus': { prompt: 3, completion: 15 }, |
| | 'command-text': { prompt: 1.5, completion: 2.0 }, |
| | 'deepseek-chat': { prompt: 0.28, completion: 0.42 }, |
| | 'deepseek-reasoner': { prompt: 0.28, completion: 0.42 }, |
| | 'deepseek-r1': { prompt: 0.4, completion: 2.0 }, |
| | 'deepseek-v3': { prompt: 0.2, completion: 0.8 }, |
| | 'gemma-2': { prompt: 0.01, completion: 0.03 }, |
| | 'gemma-3': { prompt: 0.02, completion: 0.04 }, |
| | 'gemma-3-27b': { prompt: 0.09, completion: 0.16 }, |
| | 'gemini-1.5': { prompt: 2.5, completion: 10 }, |
| | 'gemini-1.5-flash': { prompt: 0.15, completion: 0.6 }, |
| | 'gemini-1.5-flash-8b': { prompt: 0.075, completion: 0.3 }, |
| | 'gemini-2.0': { prompt: 0.1, completion: 0.4 }, |
| | 'gemini-2.0-flash': { prompt: 0.1, completion: 0.4 }, |
| | 'gemini-2.0-flash-lite': { prompt: 0.075, completion: 0.3 }, |
| | 'gemini-2.5': { prompt: 0.3, completion: 2.5 }, |
| | 'gemini-2.5-flash': { prompt: 0.3, completion: 2.5 }, |
| | 'gemini-2.5-flash-lite': { prompt: 0.1, completion: 0.4 }, |
| | 'gemini-2.5-pro': { prompt: 1.25, completion: 10 }, |
| | 'gemini-3': { prompt: 2, completion: 12 }, |
| | 'gemini-pro-vision': { prompt: 0.5, completion: 1.5 }, |
| | grok: { prompt: 2.0, completion: 10.0 }, |
| | 'grok-beta': { prompt: 5.0, completion: 15.0 }, |
| | 'grok-vision-beta': { prompt: 5.0, completion: 15.0 }, |
| | 'grok-2': { prompt: 2.0, completion: 10.0 }, |
| | 'grok-2-1212': { prompt: 2.0, completion: 10.0 }, |
| | 'grok-2-latest': { prompt: 2.0, completion: 10.0 }, |
| | 'grok-2-vision': { prompt: 2.0, completion: 10.0 }, |
| | 'grok-2-vision-1212': { prompt: 2.0, completion: 10.0 }, |
| | 'grok-2-vision-latest': { prompt: 2.0, completion: 10.0 }, |
| | 'grok-3': { prompt: 3.0, completion: 15.0 }, |
| | 'grok-3-fast': { prompt: 5.0, completion: 25.0 }, |
| | 'grok-3-mini': { prompt: 0.3, completion: 0.5 }, |
| | 'grok-3-mini-fast': { prompt: 0.6, completion: 4 }, |
| | 'grok-4': { prompt: 3.0, completion: 15.0 }, |
| | 'grok-4-fast': { prompt: 0.2, completion: 0.5 }, |
| | 'grok-4-1-fast': { prompt: 0.2, completion: 0.5 }, |
| | 'grok-code-fast': { prompt: 0.2, completion: 1.5 }, |
| | codestral: { prompt: 0.3, completion: 0.9 }, |
| | 'ministral-3b': { prompt: 0.04, completion: 0.04 }, |
| | 'ministral-8b': { prompt: 0.1, completion: 0.1 }, |
| | 'mistral-nemo': { prompt: 0.15, completion: 0.15 }, |
| | 'mistral-saba': { prompt: 0.2, completion: 0.6 }, |
| | 'pixtral-large': { prompt: 2.0, completion: 6.0 }, |
| | 'mistral-large': { prompt: 2.0, completion: 6.0 }, |
| | 'mixtral-8x22b': { prompt: 0.65, completion: 0.65 }, |
| | kimi: { prompt: 0.14, completion: 2.49 }, |
| | |
| | 'gpt-oss:20b': { prompt: 0.05, completion: 0.2 }, |
| | 'gpt-oss-20b': { prompt: 0.05, completion: 0.2 }, |
| | 'gpt-oss:120b': { prompt: 0.15, completion: 0.6 }, |
| | 'gpt-oss-120b': { prompt: 0.15, completion: 0.6 }, |
| | |
| | glm4: { prompt: 0.1, completion: 0.1 }, |
| | 'glm-4': { prompt: 0.1, completion: 0.1 }, |
| | 'glm-4-32b': { prompt: 0.1, completion: 0.1 }, |
| | 'glm-4.5': { prompt: 0.35, completion: 1.55 }, |
| | 'glm-4.5-air': { prompt: 0.14, completion: 0.86 }, |
| | 'glm-4.5v': { prompt: 0.6, completion: 1.8 }, |
| | 'glm-4.6': { prompt: 0.5, completion: 1.75 }, |
| | |
| | qwen: { prompt: 0.08, completion: 0.33 }, |
| | 'qwen2.5': { prompt: 0.08, completion: 0.33 }, |
| | 'qwen-turbo': { prompt: 0.05, completion: 0.2 }, |
| | 'qwen-plus': { prompt: 0.4, completion: 1.2 }, |
| | 'qwen-max': { prompt: 1.6, completion: 6.4 }, |
| | 'qwq-32b': { prompt: 0.15, completion: 0.4 }, |
| | |
| | qwen3: { prompt: 0.035, completion: 0.138 }, |
| | 'qwen3-8b': { prompt: 0.035, completion: 0.138 }, |
| | 'qwen3-14b': { prompt: 0.05, completion: 0.22 }, |
| | 'qwen3-30b-a3b': { prompt: 0.06, completion: 0.22 }, |
| | 'qwen3-32b': { prompt: 0.05, completion: 0.2 }, |
| | 'qwen3-235b-a22b': { prompt: 0.08, completion: 0.55 }, |
| | |
| | 'qwen3-vl-8b-thinking': { prompt: 0.18, completion: 2.1 }, |
| | 'qwen3-vl-8b-instruct': { prompt: 0.18, completion: 0.69 }, |
| | 'qwen3-vl-30b-a3b': { prompt: 0.29, completion: 1.0 }, |
| | 'qwen3-vl-235b-a22b': { prompt: 0.3, completion: 1.2 }, |
| | |
| | 'qwen3-max': { prompt: 1.2, completion: 6 }, |
| | 'qwen3-coder': { prompt: 0.22, completion: 0.95 }, |
| | 'qwen3-coder-30b-a3b': { prompt: 0.06, completion: 0.25 }, |
| | 'qwen3-coder-plus': { prompt: 1, completion: 5 }, |
| | 'qwen3-coder-flash': { prompt: 0.3, completion: 1.5 }, |
| | 'qwen3-next-80b-a3b': { prompt: 0.1, completion: 0.8 }, |
| | }, |
| | bedrockValues, |
| | ); |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | const cacheTokenValues = { |
| | 'claude-3.7-sonnet': { write: 3.75, read: 0.3 }, |
| | 'claude-3-7-sonnet': { write: 3.75, read: 0.3 }, |
| | 'claude-3.5-sonnet': { write: 3.75, read: 0.3 }, |
| | 'claude-3-5-sonnet': { write: 3.75, read: 0.3 }, |
| | 'claude-3.5-haiku': { write: 1, read: 0.08 }, |
| | 'claude-3-5-haiku': { write: 1, read: 0.08 }, |
| | 'claude-3-haiku': { write: 0.3, read: 0.03 }, |
| | 'claude-haiku-4-5': { write: 1.25, read: 0.1 }, |
| | 'claude-sonnet-4': { write: 3.75, read: 0.3 }, |
| | 'claude-opus-4': { write: 18.75, read: 1.5 }, |
| | 'claude-opus-4-5': { write: 6.25, read: 0.5 }, |
| | |
| | deepseek: { write: 0.28, read: 0.028 }, |
| | 'deepseek-chat': { write: 0.28, read: 0.028 }, |
| | 'deepseek-reasoner': { write: 0.28, read: 0.028 }, |
| | }; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | const getValueKey = (model, endpoint) => { |
| | if (!model || typeof model !== 'string') { |
| | return undefined; |
| | } |
| |
|
| | |
| | if (!endpoint || (typeof endpoint === 'string' && !tokenValues[endpoint])) { |
| | const matchedKey = findMatchingPattern(model, tokenValues); |
| | if (matchedKey) { |
| | return matchedKey; |
| | } |
| | } |
| |
|
| | |
| | const modelName = matchModelName(model, endpoint); |
| | if (!modelName) { |
| | return undefined; |
| | } |
| |
|
| | |
| | if (modelName.includes('gpt-3.5-turbo-16k')) { |
| | return '16k'; |
| | } else if (modelName.includes('gpt-3.5')) { |
| | return '4k'; |
| | } else if (modelName.includes('gpt-4-vision')) { |
| | return 'gpt-4-1106'; |
| | } else if (modelName.includes('gpt-4-0125')) { |
| | return 'gpt-4-1106'; |
| | } else if (modelName.includes('gpt-4-turbo')) { |
| | return 'gpt-4-1106'; |
| | } else if (modelName.includes('gpt-4-32k')) { |
| | return '32k'; |
| | } else if (modelName.includes('gpt-4')) { |
| | return '8k'; |
| | } |
| |
|
| | return undefined; |
| | }; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | const getMultiplier = ({ valueKey, tokenType, model, endpoint, endpointTokenConfig }) => { |
| | if (endpointTokenConfig) { |
| | return endpointTokenConfig?.[model]?.[tokenType] ?? defaultRate; |
| | } |
| |
|
| | if (valueKey && tokenType) { |
| | return tokenValues[valueKey][tokenType] ?? defaultRate; |
| | } |
| |
|
| | if (!tokenType || !model) { |
| | return 1; |
| | } |
| |
|
| | valueKey = getValueKey(model, endpoint); |
| | if (!valueKey) { |
| | return defaultRate; |
| | } |
| |
|
| | |
| | return tokenValues[valueKey]?.[tokenType] ?? defaultRate; |
| | }; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | const getCacheMultiplier = ({ valueKey, cacheType, model, endpoint, endpointTokenConfig }) => { |
| | if (endpointTokenConfig) { |
| | return endpointTokenConfig?.[model]?.[cacheType] ?? null; |
| | } |
| |
|
| | if (valueKey && cacheType) { |
| | return cacheTokenValues[valueKey]?.[cacheType] ?? null; |
| | } |
| |
|
| | if (!cacheType || !model) { |
| | return null; |
| | } |
| |
|
| | valueKey = getValueKey(model, endpoint); |
| | if (!valueKey) { |
| | return null; |
| | } |
| |
|
| | |
| | return cacheTokenValues[valueKey]?.[cacheType] ?? null; |
| | }; |
| |
|
| | module.exports = { |
| | tokenValues, |
| | getValueKey, |
| | getMultiplier, |
| | getCacheMultiplier, |
| | defaultRate, |
| | cacheTokenValues, |
| | }; |
| |
|