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
| Field | Type | Description |
|---|---|---|
total | number | Total credits |
modelCredits | number | Credits from model expression |
toolCredits | number | Credits from tool expressions |
searchCredits | number | Credits from search expressions |
cacheCredits | number | Credits from cache (negative = savings) |
fixedCredits | number ` | null` |
metadata | Record<string, unknown> | Debug info |
UsageMetricsLike
Input to calculate():
| Field | Type | Default |
|---|---|---|
model | string | "_default" |
inputTokens | number | 0 |
outputTokens | number | 0 |
cacheReadTokens | number | 0 |
cacheWriteTokens | number | 0 |
toolCalls | string[] | [] |
searchQueries | number | 0 |
searchResults | number | 0 |
webSearchCalls | number | 0 |
codeExecCalls | number | 0 |
fixedJob | string ` | null` |