init
This commit is contained in:
58
src/utils/price-calculator.ts
Normal file
58
src/utils/price-calculator.ts
Normal 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user