mirror of
https://github.com/simstudioai/sim.git
synced 2026-04-06 03:00:16 -04:00
Add input/output multipliers
This commit is contained in:
@@ -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,
|
||||
})
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user