Add input/output multipliers

This commit is contained in:
Siddharth Ganesan
2025-09-04 11:19:00 -07:00
parent 1de59668e4
commit a672f17136
2 changed files with 21 additions and 11 deletions

View File

@@ -16,7 +16,8 @@ const UpdateCostSchema = z.object({
input: z.number().min(0, 'Input tokens must be a non-negative number'),
output: z.number().min(0, 'Output tokens must be a non-negative number'),
model: z.string().min(1, 'Model is required'),
multiplier: z.number().min(0),
inputMultiplier: z.number().min(0),
outputMultiplier: z.number().min(0),
})
/**
@@ -75,14 +76,15 @@ export async function POST(req: NextRequest) {
)
}
const { userId, input, output, model, multiplier } = validation.data
const { userId, input, output, model, inputMultiplier, outputMultiplier } = validation.data
logger.info(`[${requestId}] Processing cost update`, {
userId,
input,
output,
model,
multiplier,
inputMultiplier,
outputMultiplier,
})
const finalPromptTokens = input
@@ -95,7 +97,8 @@ export async function POST(req: NextRequest) {
finalPromptTokens,
finalCompletionTokens,
false,
multiplier
inputMultiplier,
outputMultiplier
)
logger.info(`[${requestId}] Cost calculation result`, {
@@ -104,7 +107,8 @@ export async function POST(req: NextRequest) {
promptTokens: finalPromptTokens,
completionTokens: finalCompletionTokens,
totalTokens: totalTokens,
multiplier,
inputMultiplier,
outputMultiplier,
costResult,
})

View File

@@ -444,7 +444,8 @@ export function calculateCost(
promptTokens = 0,
completionTokens = 0,
useCachedInput = false,
customMultiplier?: number
inputMultiplier?: number,
outputMultiplier?: number
) {
// First check if it's an embedding model
let pricing = getEmbeddingModelPricing(model)
@@ -479,13 +480,18 @@ export function calculateCost(
: pricing.input / 1_000_000)
const outputCost = completionTokens * (pricing.output / 1_000_000)
const totalCost = inputCost + outputCost
const costMultiplier = customMultiplier ?? getCostMultiplier()
logger.info('Input multiplier', { inputMultiplier })
logger.info('Output multiplier', { outputMultiplier })
const finalInputCost = inputCost * costMultiplier
const finalOutputCost = outputCost * costMultiplier
const finalTotalCost = totalCost * costMultiplier
const finalInputCost = inputCost * (inputMultiplier ?? 1)
const finalOutputCost = outputCost * (outputMultiplier ?? 1)
const finalTotalCost = finalInputCost + finalOutputCost
logger.info('Final input cost', { finalInputCost })
logger.info('Final output cost', { finalOutputCost })
logger.info('Final total cost', { finalTotalCost })
return {
input: Number.parseFloat(finalInputCost.toFixed(8)), // Use 8 decimal places for small costs