token-costs 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -11
- package/dist/npm/client.d.ts +15 -17
- package/dist/npm/client.d.ts.map +1 -1
- package/dist/npm/client.js +68 -31
- package/dist/npm/client.js.map +1 -1
- package/dist/npm/index.d.ts +24 -6
- package/dist/npm/index.d.ts.map +1 -1
- package/dist/npm/index.js +23 -5
- package/dist/npm/index.js.map +1 -1
- package/dist/npm/types.d.ts +43 -4
- package/dist/npm/types.d.ts.map +1 -1
- package/package.json +9 -2
package/README.md
CHANGED
|
@@ -7,20 +7,22 @@ Daily-updated LLM pricing data for OpenAI, Anthropic, Google, and OpenRouter.
|
|
|
7
7
|
An npm package and JSON API that gives you up-to-date token pricing for major LLM providers. Stop hardcoding prices or manually checking pricing pages.
|
|
8
8
|
|
|
9
9
|
```typescript
|
|
10
|
-
import {
|
|
10
|
+
import { PricingClient } from 'token-costs';
|
|
11
11
|
|
|
12
|
-
//
|
|
13
|
-
const
|
|
14
|
-
// { input: 2.5, output: 10, context: 128000 }
|
|
15
|
-
```
|
|
12
|
+
// Create a client (fetches from remote API)
|
|
13
|
+
const client = new PricingClient();
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
// Get pricing for a model
|
|
16
|
+
const result = await client.getModelPricing('openai', 'gpt-4o');
|
|
17
|
+
console.log(`Input: $${result.pricing.input}/M tokens`);
|
|
18
|
+
console.log(`Output: $${result.pricing.output}/M tokens`);
|
|
19
|
+
|
|
20
|
+
// Calculate cost for an API call
|
|
21
|
+
const cost = await client.calculateCost('anthropic', 'claude-sonnet-4', {
|
|
20
22
|
inputTokens: 1500,
|
|
21
23
|
outputTokens: 800,
|
|
22
24
|
});
|
|
23
|
-
|
|
25
|
+
console.log(`Total cost: $${cost.totalCost.toFixed(6)}`);
|
|
24
26
|
```
|
|
25
27
|
|
|
26
28
|
Or fetch directly without dependencies:
|
|
@@ -33,6 +35,8 @@ const data = await fetch('https://mikkotikkanen.github.io/token-costs/api/v1/ope
|
|
|
33
35
|
|
|
34
36
|
- **Daily updates** - Crawled automatically at 00:01 UTC
|
|
35
37
|
- **4 providers** - OpenAI, Anthropic, Google, OpenRouter
|
|
38
|
+
- **Custom providers** - Add your own models or override pricing
|
|
39
|
+
- **Offline mode** - Work without network access using custom data
|
|
36
40
|
- **Zero dependencies** - npm package has no runtime dependencies
|
|
37
41
|
- **TypeScript** - Full type definitions included
|
|
38
42
|
- **Caching** - Fetches once per day, caches automatically
|
|
@@ -44,6 +48,34 @@ const data = await fetch('https://mikkotikkanen.github.io/token-costs/api/v1/ope
|
|
|
44
48
|
npm install token-costs
|
|
45
49
|
```
|
|
46
50
|
|
|
51
|
+
## Custom Providers & Offline Mode
|
|
52
|
+
|
|
53
|
+
Add custom models or use entirely custom pricing data:
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
// Add custom models alongside remote data
|
|
57
|
+
const client = new PricingClient({
|
|
58
|
+
customProviders: {
|
|
59
|
+
'my-company': {
|
|
60
|
+
'internal-llm': { input: 0.50, output: 1.00 }
|
|
61
|
+
},
|
|
62
|
+
'openai': {
|
|
63
|
+
'gpt-4-custom': { input: 25, output: 50 } // Override/add to openai
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Offline mode - no remote fetching
|
|
69
|
+
const offlineClient = new PricingClient({
|
|
70
|
+
offline: true,
|
|
71
|
+
customProviders: {
|
|
72
|
+
'openai': {
|
|
73
|
+
'gpt-4o': { input: 2.5, output: 10 }
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
47
79
|
## Documentation
|
|
48
80
|
|
|
49
81
|
Full usage guide, API reference, and data formats: **[mikkotikkanen.github.io/token-costs](https://mikkotikkanen.github.io/token-costs)**
|
|
@@ -53,8 +85,6 @@ Full usage guide, API reference, and data formats: **[mikkotikkanen.github.io/to
|
|
|
53
85
|
```
|
|
54
86
|
token-costs/
|
|
55
87
|
├── PricingClient # Main client class with caching
|
|
56
|
-
├── getModelPricing() # Quick lookup function
|
|
57
|
-
├── calculateCost() # Cost calculation helper
|
|
58
88
|
└── TypeScript types # Full type definitions
|
|
59
89
|
```
|
|
60
90
|
|
package/dist/npm/client.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export declare class ClockMismatchError extends Error {
|
|
|
19
19
|
*
|
|
20
20
|
* @example
|
|
21
21
|
* ```ts
|
|
22
|
-
* import { PricingClient } from 'token-
|
|
22
|
+
* import { PricingClient } from 'token-costs';
|
|
23
23
|
*
|
|
24
24
|
* const client = new PricingClient();
|
|
25
25
|
*
|
|
@@ -41,7 +41,13 @@ export declare class PricingClient {
|
|
|
41
41
|
private timeOffsetMs;
|
|
42
42
|
private cache;
|
|
43
43
|
private externalCache?;
|
|
44
|
+
private offline;
|
|
45
|
+
private customProviders;
|
|
44
46
|
constructor(options?: PricingClientOptions);
|
|
47
|
+
/**
|
|
48
|
+
* Check if a provider is a built-in provider with remote data
|
|
49
|
+
*/
|
|
50
|
+
private isBuiltInProvider;
|
|
45
51
|
/**
|
|
46
52
|
* Get today's date according to this client (with offset applied)
|
|
47
53
|
*/
|
|
@@ -58,6 +64,14 @@ export declare class PricingClient {
|
|
|
58
64
|
* Save to external cache
|
|
59
65
|
*/
|
|
60
66
|
private saveToExternalCache;
|
|
67
|
+
/**
|
|
68
|
+
* Get custom provider data as a ProviderFile structure
|
|
69
|
+
*/
|
|
70
|
+
private getCustomProviderFile;
|
|
71
|
+
/**
|
|
72
|
+
* Merge custom provider data into a ProviderFile
|
|
73
|
+
*/
|
|
74
|
+
private mergeCustomData;
|
|
61
75
|
/**
|
|
62
76
|
* Fetch provider data, using cache if available and fresh
|
|
63
77
|
*/
|
|
@@ -116,20 +130,4 @@ export declare class PricingClient {
|
|
|
116
130
|
*/
|
|
117
131
|
clearCache(provider?: Provider): void;
|
|
118
132
|
}
|
|
119
|
-
/**
|
|
120
|
-
* Get the default client instance
|
|
121
|
-
*/
|
|
122
|
-
export declare function getDefaultClient(): PricingClient;
|
|
123
|
-
/**
|
|
124
|
-
* Convenience function to get model pricing using default client
|
|
125
|
-
*/
|
|
126
|
-
export declare function getModelPricing(provider: Provider, modelId: string): Promise<PriceLookupResult>;
|
|
127
|
-
/**
|
|
128
|
-
* Convenience function to calculate cost using default client
|
|
129
|
-
*/
|
|
130
|
-
export declare function calculateCost(provider: Provider, modelId: string, tokens: {
|
|
131
|
-
inputTokens: number;
|
|
132
|
-
outputTokens: number;
|
|
133
|
-
cachedInputTokens?: number;
|
|
134
|
-
}): Promise<CostResult>;
|
|
135
133
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/npm/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/npm/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,QAAQ,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/npm/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,QAAQ,EAER,YAAY,EAEZ,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EAEX,MAAM,YAAY,CAAC;AA4BpB;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAEzB,UAAU,EAAE,MAAM;aAClB,QAAQ,EAAE,MAAM;aAChB,QAAQ,EAAE,MAAM;gBAFhB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM;CASnC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAwC;IACrD,OAAO,CAAC,aAAa,CAAC,CAAwC;IAC9D,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,eAAe,CAAuC;gBAElD,OAAO,GAAE,oBAAyB;IAS9C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;YACW,qBAAqB;IAcnC;;OAEG;YACW,mBAAmB;IAUjC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;YACW,aAAa;IAgF3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;;;;;;OAOG;IACG,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyBtF;;OAEG;IACG,qBAAqB,CACzB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAQpC;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAKlF;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKvD;;;;;;;;;OASG;IACG,aAAa,CACjB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GACA,OAAO,CAAC,UAAU,CAAC;IAqCtB;;OAEG;IACG,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAInE;;;OAGG;IACH,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI;IAKhD;;OAEG;IACH,UAAU,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI;CAOtC"}
|
package/dist/npm/client.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
// Default URL serves from GitHub Pages when configured, falls back to raw.githubusercontent.com
|
|
6
6
|
// Users can override with their own GitHub Pages URL via baseUrl option
|
|
7
|
-
const DEFAULT_BASE_URL = 'https://raw.githubusercontent.com/mikkotikkanen/token-
|
|
7
|
+
const DEFAULT_BASE_URL = 'https://raw.githubusercontent.com/mikkotikkanen/token-costs/main/docs/api/v1';
|
|
8
8
|
/**
|
|
9
9
|
* Get UTC date as YYYY-MM-DD with optional offset
|
|
10
10
|
*/
|
|
@@ -43,7 +43,7 @@ export class ClockMismatchError extends Error {
|
|
|
43
43
|
*
|
|
44
44
|
* @example
|
|
45
45
|
* ```ts
|
|
46
|
-
* import { PricingClient } from 'token-
|
|
46
|
+
* import { PricingClient } from 'token-costs';
|
|
47
47
|
*
|
|
48
48
|
* const client = new PricingClient();
|
|
49
49
|
*
|
|
@@ -65,11 +65,21 @@ export class PricingClient {
|
|
|
65
65
|
timeOffsetMs;
|
|
66
66
|
cache = new Map();
|
|
67
67
|
externalCache;
|
|
68
|
+
offline;
|
|
69
|
+
customProviders;
|
|
68
70
|
constructor(options = {}) {
|
|
69
71
|
this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;
|
|
70
72
|
this.fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
71
73
|
this.timeOffsetMs = options.timeOffsetMs ?? 0;
|
|
72
74
|
this.externalCache = options.externalCache;
|
|
75
|
+
this.offline = options.offline ?? false;
|
|
76
|
+
this.customProviders = options.customProviders ?? {};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if a provider is a built-in provider with remote data
|
|
80
|
+
*/
|
|
81
|
+
isBuiltInProvider(provider) {
|
|
82
|
+
return ['openai', 'anthropic', 'google', 'openrouter'].includes(provider);
|
|
73
83
|
}
|
|
74
84
|
/**
|
|
75
85
|
* Get today's date according to this client (with offset applied)
|
|
@@ -81,7 +91,7 @@ export class PricingClient {
|
|
|
81
91
|
* Get cache key for external cache
|
|
82
92
|
*/
|
|
83
93
|
getCacheKey(provider) {
|
|
84
|
-
return `token-
|
|
94
|
+
return `token-costs:${provider}`;
|
|
85
95
|
}
|
|
86
96
|
/**
|
|
87
97
|
* Try to load from external cache
|
|
@@ -113,11 +123,63 @@ export class PricingClient {
|
|
|
113
123
|
// External cache failed, continue without it
|
|
114
124
|
}
|
|
115
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Get custom provider data as a ProviderFile structure
|
|
128
|
+
*/
|
|
129
|
+
getCustomProviderFile(provider) {
|
|
130
|
+
const customModels = this.customProviders[provider];
|
|
131
|
+
if (!customModels)
|
|
132
|
+
return null;
|
|
133
|
+
return {
|
|
134
|
+
current: {
|
|
135
|
+
date: this.getToday(),
|
|
136
|
+
models: customModels,
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Merge custom provider data into a ProviderFile
|
|
142
|
+
*/
|
|
143
|
+
mergeCustomData(file, provider) {
|
|
144
|
+
const customModels = this.customProviders[provider];
|
|
145
|
+
if (!customModels)
|
|
146
|
+
return file;
|
|
147
|
+
return {
|
|
148
|
+
...file,
|
|
149
|
+
current: {
|
|
150
|
+
...file.current,
|
|
151
|
+
models: {
|
|
152
|
+
...file.current.models,
|
|
153
|
+
...customModels, // Custom takes precedence
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
}
|
|
116
158
|
/**
|
|
117
159
|
* Fetch provider data, using cache if available and fresh
|
|
118
160
|
*/
|
|
119
161
|
async fetchProvider(provider) {
|
|
120
162
|
const today = this.getToday();
|
|
163
|
+
const isBuiltIn = this.isBuiltInProvider(provider);
|
|
164
|
+
const hasCustomData = provider in this.customProviders;
|
|
165
|
+
// Offline mode: only use custom data
|
|
166
|
+
if (this.offline) {
|
|
167
|
+
const customFile = this.getCustomProviderFile(provider);
|
|
168
|
+
if (customFile) {
|
|
169
|
+
return customFile;
|
|
170
|
+
}
|
|
171
|
+
throw new Error(`Provider '${provider}' not found. In offline mode, only customProviders data is available.`);
|
|
172
|
+
}
|
|
173
|
+
// Custom-only provider (not built-in): return custom data directly
|
|
174
|
+
if (!isBuiltIn) {
|
|
175
|
+
const customFile = this.getCustomProviderFile(provider);
|
|
176
|
+
if (customFile) {
|
|
177
|
+
return customFile;
|
|
178
|
+
}
|
|
179
|
+
throw new Error(`Provider '${provider}' not found. Use a built-in provider (openai, anthropic, google, openrouter) ` +
|
|
180
|
+
`or add it to customProviders.`);
|
|
181
|
+
}
|
|
182
|
+
// Built-in provider: fetch from remote (with caching)
|
|
121
183
|
// Check in-memory cache first
|
|
122
184
|
let cached = this.cache.get(provider);
|
|
123
185
|
// If no in-memory cache, try external cache
|
|
@@ -131,7 +193,7 @@ export class PricingClient {
|
|
|
131
193
|
}
|
|
132
194
|
// If we have cached data from today, use it (don't fetch again)
|
|
133
195
|
if (cached && cached.fetchedDate === today) {
|
|
134
|
-
return cached.data;
|
|
196
|
+
return this.mergeCustomData(cached.data, provider);
|
|
135
197
|
}
|
|
136
198
|
// Try to fetch fresh data
|
|
137
199
|
const url = `${this.baseUrl}/${provider}.json`;
|
|
@@ -139,7 +201,7 @@ export class PricingClient {
|
|
|
139
201
|
if (!response.ok) {
|
|
140
202
|
// If fetch fails but we have cached data, use it
|
|
141
203
|
if (cached) {
|
|
142
|
-
return cached.data;
|
|
204
|
+
return this.mergeCustomData(cached.data, provider);
|
|
143
205
|
}
|
|
144
206
|
throw new Error(`Failed to fetch pricing data for ${provider}: ${response.status}`);
|
|
145
207
|
}
|
|
@@ -157,7 +219,7 @@ export class PricingClient {
|
|
|
157
219
|
const entry = { data, fetchedDate: today };
|
|
158
220
|
this.cache.set(provider, entry);
|
|
159
221
|
await this.saveToExternalCache(provider, entry);
|
|
160
|
-
return data;
|
|
222
|
+
return this.mergeCustomData(data, provider);
|
|
161
223
|
}
|
|
162
224
|
/**
|
|
163
225
|
* Get the effective pricing data, handling the dual-date fallback
|
|
@@ -284,29 +346,4 @@ export class PricingClient {
|
|
|
284
346
|
}
|
|
285
347
|
}
|
|
286
348
|
}
|
|
287
|
-
/**
|
|
288
|
-
* Default client instance for convenience
|
|
289
|
-
*/
|
|
290
|
-
let defaultClient = null;
|
|
291
|
-
/**
|
|
292
|
-
* Get the default client instance
|
|
293
|
-
*/
|
|
294
|
-
export function getDefaultClient() {
|
|
295
|
-
if (!defaultClient) {
|
|
296
|
-
defaultClient = new PricingClient();
|
|
297
|
-
}
|
|
298
|
-
return defaultClient;
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* Convenience function to get model pricing using default client
|
|
302
|
-
*/
|
|
303
|
-
export async function getModelPricing(provider, modelId) {
|
|
304
|
-
return getDefaultClient().getModelPricing(provider, modelId);
|
|
305
|
-
}
|
|
306
|
-
/**
|
|
307
|
-
* Convenience function to calculate cost using default client
|
|
308
|
-
*/
|
|
309
|
-
export async function calculateCost(provider, modelId, tokens) {
|
|
310
|
-
return getDefaultClient().calculateCost(provider, modelId, tokens);
|
|
311
|
-
}
|
|
312
349
|
//# sourceMappingURL=client.js.map
|
package/dist/npm/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/npm/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/npm/client.ts"],"names":[],"mappings":"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"}
|
package/dist/npm/index.d.ts
CHANGED
|
@@ -1,25 +1,43 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Token
|
|
2
|
+
* Token Costs - Daily LLM pricing data
|
|
3
3
|
*
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import {
|
|
6
|
+
* import { PricingClient } from 'token-costs';
|
|
7
|
+
*
|
|
8
|
+
* // Create a client (fetches from remote API)
|
|
9
|
+
* const client = new PricingClient();
|
|
7
10
|
*
|
|
8
11
|
* // Get pricing for a model
|
|
9
|
-
* const result = await getModelPricing('openai', 'gpt-4o');
|
|
12
|
+
* const result = await client.getModelPricing('openai', 'gpt-4o');
|
|
10
13
|
* console.log(`Input: $${result.pricing.input}/M tokens`);
|
|
11
14
|
* console.log(`Output: $${result.pricing.output}/M tokens`);
|
|
12
15
|
*
|
|
13
16
|
* // Calculate cost for an API call
|
|
14
|
-
* const cost = await calculateCost('anthropic', 'claude-sonnet-4', {
|
|
17
|
+
* const cost = await client.calculateCost('anthropic', 'claude-sonnet-4', {
|
|
15
18
|
* inputTokens: 1500,
|
|
16
19
|
* outputTokens: 800,
|
|
17
20
|
* });
|
|
18
21
|
* console.log(`Total cost: $${cost.totalCost.toFixed(6)}`);
|
|
22
|
+
*
|
|
23
|
+
* // With custom providers
|
|
24
|
+
* const customClient = new PricingClient({
|
|
25
|
+
* customProviders: {
|
|
26
|
+
* 'my-company': {
|
|
27
|
+
* 'internal-llm': { input: 0.50, output: 1.00 }
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* // Offline mode (no remote fetching)
|
|
33
|
+
* const offlineClient = new PricingClient({
|
|
34
|
+
* offline: true,
|
|
35
|
+
* customProviders: { ... }
|
|
36
|
+
* });
|
|
19
37
|
* ```
|
|
20
38
|
*
|
|
21
39
|
* @packageDocumentation
|
|
22
40
|
*/
|
|
23
|
-
export type { ModelPricing, ProviderData, ProviderFile, Provider, PricingClientOptions, PriceLookupResult, CostResult, } from './types.js';
|
|
24
|
-
export { PricingClient, ClockMismatchError
|
|
41
|
+
export type { ModelPricing, ProviderData, ProviderFile, Provider, BuiltInProvider, PricingClientOptions, PriceLookupResult, CostResult, CustomProviderModels, } from './types.js';
|
|
42
|
+
export { PricingClient, ClockMismatchError } from './client.js';
|
|
25
43
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/npm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/npm/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/npm/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAGH,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/npm/index.js
CHANGED
|
@@ -1,25 +1,43 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Token
|
|
2
|
+
* Token Costs - Daily LLM pricing data
|
|
3
3
|
*
|
|
4
4
|
* @example
|
|
5
5
|
* ```ts
|
|
6
|
-
* import {
|
|
6
|
+
* import { PricingClient } from 'token-costs';
|
|
7
|
+
*
|
|
8
|
+
* // Create a client (fetches from remote API)
|
|
9
|
+
* const client = new PricingClient();
|
|
7
10
|
*
|
|
8
11
|
* // Get pricing for a model
|
|
9
|
-
* const result = await getModelPricing('openai', 'gpt-4o');
|
|
12
|
+
* const result = await client.getModelPricing('openai', 'gpt-4o');
|
|
10
13
|
* console.log(`Input: $${result.pricing.input}/M tokens`);
|
|
11
14
|
* console.log(`Output: $${result.pricing.output}/M tokens`);
|
|
12
15
|
*
|
|
13
16
|
* // Calculate cost for an API call
|
|
14
|
-
* const cost = await calculateCost('anthropic', 'claude-sonnet-4', {
|
|
17
|
+
* const cost = await client.calculateCost('anthropic', 'claude-sonnet-4', {
|
|
15
18
|
* inputTokens: 1500,
|
|
16
19
|
* outputTokens: 800,
|
|
17
20
|
* });
|
|
18
21
|
* console.log(`Total cost: $${cost.totalCost.toFixed(6)}`);
|
|
22
|
+
*
|
|
23
|
+
* // With custom providers
|
|
24
|
+
* const customClient = new PricingClient({
|
|
25
|
+
* customProviders: {
|
|
26
|
+
* 'my-company': {
|
|
27
|
+
* 'internal-llm': { input: 0.50, output: 1.00 }
|
|
28
|
+
* }
|
|
29
|
+
* }
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* // Offline mode (no remote fetching)
|
|
33
|
+
* const offlineClient = new PricingClient({
|
|
34
|
+
* offline: true,
|
|
35
|
+
* customProviders: { ... }
|
|
36
|
+
* });
|
|
19
37
|
* ```
|
|
20
38
|
*
|
|
21
39
|
* @packageDocumentation
|
|
22
40
|
*/
|
|
23
41
|
// Re-export client
|
|
24
|
-
export { PricingClient, ClockMismatchError
|
|
42
|
+
export { PricingClient, ClockMismatchError } from './client.js';
|
|
25
43
|
//# sourceMappingURL=index.js.map
|
package/dist/npm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/npm/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/npm/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAeH,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/npm/types.d.ts
CHANGED
|
@@ -52,16 +52,54 @@ export interface ProviderFile {
|
|
|
52
52
|
previous?: ProviderData;
|
|
53
53
|
}
|
|
54
54
|
/**
|
|
55
|
-
*
|
|
55
|
+
* Built-in providers with remote data
|
|
56
56
|
*/
|
|
57
|
-
export type
|
|
57
|
+
export type BuiltInProvider = 'openai' | 'anthropic' | 'google' | 'openrouter';
|
|
58
|
+
/**
|
|
59
|
+
* Provider type - can be a built-in provider or a custom string
|
|
60
|
+
*/
|
|
61
|
+
export type Provider = BuiltInProvider | (string & {});
|
|
62
|
+
/**
|
|
63
|
+
* Custom provider data format for offline/custom providers
|
|
64
|
+
* Maps modelId to pricing data
|
|
65
|
+
*/
|
|
66
|
+
export type CustomProviderModels = Record<string, ModelPricing>;
|
|
58
67
|
/**
|
|
59
68
|
* Options for the pricing client
|
|
60
69
|
*/
|
|
61
70
|
export interface PricingClientOptions {
|
|
62
71
|
/**
|
|
63
|
-
*
|
|
64
|
-
*
|
|
72
|
+
* When true, disables fetching from remote API.
|
|
73
|
+
* Only customProviders data will be available.
|
|
74
|
+
* @default false
|
|
75
|
+
*/
|
|
76
|
+
offline?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Custom provider data. Can be used to:
|
|
79
|
+
* - Add custom/internal models not in the remote API
|
|
80
|
+
* - Override pricing for existing models
|
|
81
|
+
* - Provide all data locally (with offline: true)
|
|
82
|
+
*
|
|
83
|
+
* Custom data is merged with remote data (custom takes precedence).
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```ts
|
|
87
|
+
* new PricingClient({
|
|
88
|
+
* customProviders: {
|
|
89
|
+
* 'my-company': {
|
|
90
|
+
* 'internal-llm': { input: 0.50, output: 1.00, context: 32000 }
|
|
91
|
+
* },
|
|
92
|
+
* 'openai': {
|
|
93
|
+
* 'gpt-4-custom': { input: 25, output: 50 } // Override/add to openai
|
|
94
|
+
* }
|
|
95
|
+
* }
|
|
96
|
+
* });
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
customProviders?: Record<string, CustomProviderModels>;
|
|
100
|
+
/**
|
|
101
|
+
* Base URL for fetching pricing data (ignored if offline: true)
|
|
102
|
+
* @default 'https://raw.githubusercontent.com/mikkotikkanen/token-costs/main/docs/api/v1'
|
|
65
103
|
*/
|
|
66
104
|
baseUrl?: string;
|
|
67
105
|
/**
|
|
@@ -80,6 +118,7 @@ export interface PricingClientOptions {
|
|
|
80
118
|
/**
|
|
81
119
|
* External cache for persisting fetch timestamps across restarts/instances.
|
|
82
120
|
* If not provided, uses in-memory cache (lost on restart).
|
|
121
|
+
* Ignored if offline: true.
|
|
83
122
|
*
|
|
84
123
|
* This prevents hammering GitHub when:
|
|
85
124
|
* - Running in serverless (cold starts)
|
package/dist/npm/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/npm/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACtC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,OAAO,EAAE,YAAY,CAAC;IACtB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/npm/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "token-costs",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Daily LLM token pricing data with automatic updates",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/npm/index.js",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
"repository": {
|
|
46
46
|
"type": "git",
|
|
47
|
-
"url": "https://github.com/mikkotikkanen/token-costs.git"
|
|
47
|
+
"url": "git+https://github.com/mikkotikkanen/token-costs.git"
|
|
48
48
|
},
|
|
49
49
|
"homepage": "https://mikkotikkanen.github.io/token-costs",
|
|
50
50
|
"bugs": {
|
|
@@ -66,9 +66,16 @@
|
|
|
66
66
|
"author": "Mikko Tikkanen",
|
|
67
67
|
"license": "MIT",
|
|
68
68
|
"devDependencies": {
|
|
69
|
+
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
70
|
+
"@semantic-release/git": "^10.0.1",
|
|
71
|
+
"@semantic-release/github": "^12.0.2",
|
|
72
|
+
"@semantic-release/npm": "^13.1.3",
|
|
73
|
+
"@semantic-release/release-notes-generator": "^14.1.0",
|
|
69
74
|
"@types/node": "^20.10.0",
|
|
70
75
|
"cheerio": "^1.0.0-rc.12",
|
|
71
76
|
"node-fetch": "^3.3.2",
|
|
77
|
+
"playwright": "^1.57.0",
|
|
78
|
+
"semantic-release": "^25.0.2",
|
|
72
79
|
"typescript": "^5.3.0",
|
|
73
80
|
"vitest": "^1.0.0"
|
|
74
81
|
},
|