ai-token-cost-meter
v1.0.1
Published
Real-time token cost tracker across multiple AI providers (Claude, OpenAI, Gemini)
Maintainers
Readme
ai-token-cost-meter
Real-time token cost tracker across multiple AI providers — Claude, OpenAI, Gemini, and more.
Install
npm install ai-token-cost-meterQuick Start
const { meter } = require('ai-token-cost-meter');
meter.track('claude-sonnet-4-6', 1000, 500);
meter.track('gpt-4o', 2000, 800);
meter.track('gemini-1.5-flash', 5000, 1200);
meter.report();Output:
┌──────────────────────────────────────────────────────────────────────────────────────┐
│ Model │ Provider │ Input │ Output │ Total │ Cost │
├──────────────────────────────────────────────────────────────────────────────────────┤
│ claude-sonnet-4-6 │ Anthropic │ 1.0K │ 500 │ 1.5K │ $0.0105 │
│ gpt-4o │ OpenAI │ 2.0K │ 800 │ 2.8K │ $0.0130 │
│ gemini-1.5-flash │ Google │ 5.0K │ 1.2K │ 6.2K │ $0.0008 │
├──────────────────────────────────────────────────────────────────────────────────────┤
│ TOTAL │ │ 8.0K │ 2.5K │ 10.5K │ $0.0243 │
└──────────────────────────────────────────────────────────────────────────────────────┘API
meter.track(model, inputTokens, outputTokens)
Track token usage manually.
meter.track('claude-sonnet-4-6', 1500, 800);meter.trackFromResponse(model, response)
Automatically read token counts from an AI SDK response object. Supports Anthropic, OpenAI, and Gemini response shapes.
// Anthropic
const response = await anthropic.messages.create({ ... });
meter.trackFromResponse('claude-sonnet-4-6', response);
// OpenAI
const response = await openai.chat.completions.create({ ... });
meter.trackFromResponse('gpt-4o', response);
// Google Gemini
const response = await model.generateContent({ ... });
meter.trackFromResponse('gemini-1.5-pro', response);meter.report()
Print a formatted cost table to the console.
meter.totalCost()
Returns the total cost of the current session as a number.
console.log(`Total spent: $${meter.totalCost()}`);meter.totalTokens()
Returns total token count across all models.
meter.budget(amount)
Set a spending budget in USD. Logs a warning when exceeded.
meter.budget(1.00); // warn if session exceeds $1.00meter.onTrack(fn)
Register a callback that fires on every track() call.
meter.onTrack((entry, totalCost) => {
console.log(`${entry.model}: ${entry.inputTokens} in / ${entry.outputTokens} out — total $${totalCost}`);
});meter.addModel(id, inputPricePerM, outputPricePerM, provider)
Register a custom model with your own pricing (price per 1M tokens).
meter.addModel('my-fine-tuned-model', 5.00, 20.00, 'MyProvider');
meter.track('my-fine-tuned-model', 1000, 500);meter.export(format)
Export session data. Supports "json" (default) and "csv".
const json = meter.export('json');
const csv = meter.export('csv');
require('fs').writeFileSync('costs.csv', csv);meter.getSession()
Returns raw session data as an object.
meter.getHistory()
Returns the full call-by-call history array.
meter.reset()
Clear all tracked data for the current session.
meter.listModels()
Returns an array of all built-in supported model IDs.
Supported Models
| Provider | Models |
|-----------|--------|
| Anthropic | claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5, and Claude 3.x series |
| OpenAI | gpt-4o, gpt-4o-mini, gpt-4-turbo, gpt-4, gpt-3.5-turbo, o1, o1-mini, o3-mini |
| Google | gemini-1.5-pro, gemini-1.5-flash, gemini-2.0-flash, gemini-2.0-flash-lite |
| Meta | llama-3.3-70b, llama-3.1-8b |
| Mistral | mistral-large, mistral-small, mixtral-8x7b |
Custom Instances
For multiple isolated sessions (e.g. per-user tracking):
const { Tracker } = require('ai-token-cost-meter');
const userTracker = new Tracker();
userTracker.track('gpt-4o', 1000, 500);
console.log(userTracker.totalCost());License
MIT
