Skip to main content

PricingEngine — JavaScript

The PricingEngine is the pure calculation core. No database dependency.

Creating an Engine

import { PricingEngine } from "@apoorwv/ducto";

// From a dict (testing, stateless)
const engine = PricingEngine.fromDict({
version: 1,
models: {
"gpt-4": "input_tokens * (0.01 / 1000) + output_tokens * (0.03 / 1000)",
"_default": "input_tokens * (0.001 / 1000) + output_tokens * (0.003 / 1000)",
},
});

Methods

calculate(metrics: UsageMetricsLike): CostBreakdown

const cost = engine.calculate({
model: "gpt-4",
inputTokens: 500,
outputTokens: 200,
});
console.log(`Total: ${cost.total}`); // 0.011
console.log(`Model credits: ${cost.modelCredits}`);
console.log(`Tool credits: ${cost.toolCredits}`);

calculateBatch(metrics: UsageMetricsLike[]): CostBreakdown[]

Evaluate multiple metrics at once.

resolveModel(modelVersion: string): string | null

Resolve a model version string against configured model names.

hasModel(modelName: string): boolean

Check if a specific model is configured.

getFixedCost(jobName: string): number | null

Get the fixed cost for a named job.

pricingSchema(): PricingConfigData

Get the raw pricing config dict.

minBalance: number

The configured minimum balance floor.

CostBreakdown

FieldTypeDescription
totalnumberTotal credits
modelCreditsnumberCredits from model expression
toolCreditsnumberCredits from tool expressions
searchCreditsnumberCredits from search expressions
cacheCreditsnumberCredits from cache (negative = savings)
fixedCreditsnumber ` null`
metadataRecord<string, unknown>Debug info

UsageMetricsLike

Input to calculate():

FieldTypeDefault
modelstring"_default"
inputTokensnumber0
outputTokensnumber0
cacheReadTokensnumber0
cacheWriteTokensnumber0
toolCallsstring[][]
searchQueriesnumber0
searchResultsnumber0
webSearchCallsnumber0
codeExecCallsnumber0
fixedJobstring ` null`