This commit is contained in:
duanfuxiang
2025-01-05 11:51:39 +08:00
commit 0c7ee142cb
215 changed files with 20611 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
import {
ANTHROPIC_PRICES,
GEMINI_PRICES,
GROQ_PRICES,
OPENAI_PRICES,
} from '../constants'
import { CustomLLMModel } from '../types/llm/model'
import { ResponseUsage } from '../types/llm/response'
// Returns the cost in dollars. Returns null if the model is not supported.
export const calculateLLMCost = ({
model,
usage,
}: {
model: CustomLLMModel
usage: ResponseUsage
}): number | null => {
switch (model.provider) {
case 'openai': {
const modelPricing = OPENAI_PRICES[model.name]
if (!modelPricing) return null
return (
(usage.prompt_tokens * modelPricing.input +
usage.completion_tokens * modelPricing.output) /
1_000_000
)
}
case 'anthropic': {
const modelPricing = ANTHROPIC_PRICES[model.name]
if (!modelPricing) return null
return (
(usage.prompt_tokens * modelPricing.input +
usage.completion_tokens * modelPricing.output) /
1_000_000
)
}
case 'gemini': {
const modelPricing = GEMINI_PRICES[model.name]
if (!modelPricing) return null
return (
(usage.prompt_tokens * modelPricing.input +
usage.completion_tokens * modelPricing.output) /
1_000_000
)
}
case 'groq': {
const modelPricing = GROQ_PRICES[model.name]
if (!modelPricing) return null
return (
(usage.prompt_tokens * modelPricing.input +
usage.completion_tokens * modelPricing.output) /
1_000_000
)
}
default:
return null
}
}