ai-api-pricing 0.0.0-stage → 0.1.1

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.
@@ -0,0 +1,25 @@
1
+ import type { CostEstimate, EstimateCostInput, ListModelsOptions, LoadPricesOptions, ModelComparison, ModelPrice, PriceCatalog, Workload } from "./types.js";
2
+ export type * from "./types.js";
3
+ export declare const LIVE_PRICES_URL = "https://aicostbudget.github.io/ai-api-pricing-data/api/v1/prices.json";
4
+ export declare class PricingDataError extends Error {
5
+ readonly code: string;
6
+ constructor(message: string, code: string);
7
+ }
8
+ export declare class ModelNotFoundError extends PricingDataError {
9
+ constructor(modelId: string);
10
+ }
11
+ export declare class MissingPriceError extends PricingDataError {
12
+ constructor(modelId: string, component: string);
13
+ }
14
+ export declare class InvalidWorkloadError extends PricingDataError {
15
+ constructor(message: string);
16
+ }
17
+ export declare class UnsupportedPricingError extends PricingDataError {
18
+ constructor(message: string);
19
+ }
20
+ export declare function loadPrices(options?: LoadPricesOptions): Promise<PriceCatalog>;
21
+ export declare function getPrice(modelId: string, options?: LoadPricesOptions): Promise<ModelPrice>;
22
+ export declare function listModels(options?: ListModelsOptions): Promise<ModelPrice[]>;
23
+ export declare function estimateCost(input: EstimateCostInput): Promise<CostEstimate>;
24
+ export declare function compareModels(modelIds: string[], workload: Workload): Promise<ModelComparison[]>;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EAEZ,iBAAiB,EAEjB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,YAAY,EAKZ,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,mBAAmB,YAAY,CAAC;AAEhC,eAAO,MAAM,eAAe,0EAA0E,CAAC;AAGvG,qBAAa,gBAAiB,SAAQ,KAAK;IACZ,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAW,IAAI,EAAE,MAAM;CAInD;AAED,qBAAa,kBAAmB,SAAQ,gBAAgB;gBAC1C,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,iBAAkB,SAAQ,gBAAgB;gBACzC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAG/C;AAED,qBAAa,oBAAqB,SAAQ,gBAAgB;gBAC5C,OAAO,EAAE,MAAM;CAG5B;AAED,qBAAa,uBAAwB,SAAQ,gBAAgB;gBAC/C,OAAO,EAAE,MAAM;CAG5B;AA6ID,wBAAsB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,YAAY,CAAC,CAavF;AAWD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CAEpG;AAED,wBAAsB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAOvF;AA8FD,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAGlF;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAatG"}
@@ -0,0 +1,294 @@
1
+ import { bundledPriceDocument } from "./generated/bundled.js";
2
+ export const LIVE_PRICES_URL = "https://aicostbudget.github.io/ai-api-pricing-data/api/v1/prices.json";
3
+ const FETCH_TIMEOUT_MS = 10_000;
4
+ export class PricingDataError extends Error {
5
+ code;
6
+ constructor(message, code) {
7
+ super(message);
8
+ this.code = code;
9
+ this.name = new.target.name;
10
+ }
11
+ }
12
+ export class ModelNotFoundError extends PricingDataError {
13
+ constructor(modelId) {
14
+ super(`Unknown model: ${modelId}`, "MODEL_NOT_FOUND");
15
+ }
16
+ }
17
+ export class MissingPriceError extends PricingDataError {
18
+ constructor(modelId, component) {
19
+ super(`Cannot estimate ${modelId}: required ${component} price is missing.`, "MISSING_PRICE");
20
+ }
21
+ }
22
+ export class InvalidWorkloadError extends PricingDataError {
23
+ constructor(message) {
24
+ super(message, "INVALID_WORKLOAD");
25
+ }
26
+ }
27
+ export class UnsupportedPricingError extends PricingDataError {
28
+ constructor(message) {
29
+ super(message, "UNSUPPORTED_PRICING");
30
+ }
31
+ }
32
+ function asRecord(value) {
33
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
34
+ throw new PricingDataError("Pricing document contains a non-object record.", "INVALID_DATA");
35
+ }
36
+ return value;
37
+ }
38
+ function requiredString(value, field) {
39
+ if (typeof value !== "string" || value.length === 0) {
40
+ throw new PricingDataError(`Pricing document is missing ${field}.`, "INVALID_DATA");
41
+ }
42
+ return value;
43
+ }
44
+ function nullableString(value) {
45
+ return typeof value === "string" ? value : null;
46
+ }
47
+ function nullableNumber(value) {
48
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
49
+ }
50
+ function normalizePricing(value) {
51
+ const raw = asRecord(value);
52
+ if (raw.currency !== "USD") {
53
+ throw new PricingDataError("Only USD pricing is supported by this package.", "UNSUPPORTED_CURRENCY");
54
+ }
55
+ const unit = raw.unit === "1M tokens" ? "1M tokens" : null;
56
+ return {
57
+ currency: "USD",
58
+ unit,
59
+ input: nullableNumber(raw.input),
60
+ output: nullableNumber(raw.output),
61
+ cachedInput: nullableNumber(raw.cached_input),
62
+ cacheWrite: nullableNumber(raw.cache_write),
63
+ cacheWrite1h: nullableNumber(raw.cache_write_1h),
64
+ batchInput: nullableNumber(raw.batch_input),
65
+ batchCachedInput: nullableNumber(raw.batch_cached_input),
66
+ batchOutput: nullableNumber(raw.batch_output),
67
+ };
68
+ }
69
+ function normalizeTier(value) {
70
+ const raw = asRecord(value);
71
+ const comparison = requiredString(raw.threshold_comparison, "pricing_tiers[].threshold_comparison");
72
+ if (!["less_than", "less_than_or_equal", "greater_than", "greater_than_or_equal"].includes(comparison)) {
73
+ throw new PricingDataError(`Unsupported tier comparison: ${comparison}`, "INVALID_DATA");
74
+ }
75
+ if (raw.currency !== "USD" || raw.unit !== "1M tokens") {
76
+ throw new PricingDataError("Tier pricing must be USD per 1M tokens.", "INVALID_DATA");
77
+ }
78
+ const input = nullableNumber(raw.input);
79
+ const cachedInput = nullableNumber(raw.cached_input);
80
+ const output = nullableNumber(raw.output);
81
+ const threshold = nullableNumber(raw.prompt_token_threshold);
82
+ if (input === null || cachedInput === null || output === null || threshold === null) {
83
+ throw new PricingDataError("Tier pricing contains a missing numeric field.", "INVALID_DATA");
84
+ }
85
+ return {
86
+ id: requiredString(raw.id, "pricing_tiers[].id"),
87
+ processingMode: requiredString(raw.processing_mode, "pricing_tiers[].processing_mode"),
88
+ pricingStatus: requiredString(raw.pricing_status, "pricing_tiers[].pricing_status"),
89
+ calculationDefault: raw.calculation_default === true,
90
+ promptTokenThreshold: threshold,
91
+ thresholdComparison: comparison,
92
+ thresholdTokenBasis: requiredString(raw.threshold_token_basis, "pricing_tiers[].threshold_token_basis"),
93
+ cachedPromptTokensIncluded: raw.cached_prompt_tokens_included === true,
94
+ wholeRequestPricing: raw.whole_request_pricing === true,
95
+ currency: "USD",
96
+ unit: "1M tokens",
97
+ input,
98
+ cachedInput,
99
+ output,
100
+ };
101
+ }
102
+ function normalizeModel(value, source) {
103
+ const raw = asRecord(value);
104
+ return {
105
+ modelId: requiredString(raw.model_id, "models[].model_id"),
106
+ providerId: requiredString(raw.provider_id, "models[].provider_id"),
107
+ displayName: requiredString(raw.display_name, "models[].display_name"),
108
+ status: requiredString(raw.status, "models[].status"),
109
+ pricing: normalizePricing(raw.pricing),
110
+ pricingTiers: Array.isArray(raw.pricing_tiers) ? raw.pricing_tiers.map(normalizeTier) : [],
111
+ pricingComponents: Array.isArray(raw.pricing_components)
112
+ ? raw.pricing_components.map((component) => ({ ...asRecord(component) }))
113
+ : [],
114
+ officialSourceUrl: requiredString(raw.official_source_url, "models[].official_source_url"),
115
+ lastVerifiedAt: requiredString(raw.last_verified_at, "models[].last_verified_at"),
116
+ releasedAt: nullableString(raw.released_at),
117
+ effectiveFrom: nullableString(raw.effective_from),
118
+ notes: typeof raw.notes === "string" ? raw.notes : "",
119
+ source,
120
+ };
121
+ }
122
+ function normalizeDocument(value, source, fallbackReason) {
123
+ const raw = asRecord(value);
124
+ if (!Array.isArray(raw.models)) {
125
+ throw new PricingDataError("Pricing document is missing models[].", "INVALID_DATA");
126
+ }
127
+ return {
128
+ generatedAt: requiredString(raw.generated_at, "generated_at"),
129
+ lastVerifiedAt: requiredString(raw.last_verified_at, "last_verified_at"),
130
+ license: requiredString(raw.licenses?.data, "licenses.data"),
131
+ models: raw.models.map((model) => normalizeModel(model, source)),
132
+ source,
133
+ ...(fallbackReason ? { fallbackReason } : {}),
134
+ };
135
+ }
136
+ function errorMessage(error) {
137
+ return error instanceof Error ? error.message : String(error);
138
+ }
139
+ async function fetchLive(fetchImpl) {
140
+ const controller = new AbortController();
141
+ const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
142
+ try {
143
+ const response = await fetchImpl(LIVE_PRICES_URL, { signal: controller.signal });
144
+ if (!response.ok) {
145
+ throw new Error(`HTTP ${response.status}`);
146
+ }
147
+ return await response.json();
148
+ }
149
+ finally {
150
+ clearTimeout(timeout);
151
+ }
152
+ }
153
+ export async function loadPrices(options = {}) {
154
+ if ((options.source ?? "live") === "bundled") {
155
+ return normalizeDocument(bundledPriceDocument, "bundled");
156
+ }
157
+ try {
158
+ const fetchImpl = options.fetchImpl ?? globalThis.fetch;
159
+ if (!fetchImpl) {
160
+ throw new Error("global fetch is unavailable");
161
+ }
162
+ return normalizeDocument(await fetchLive(fetchImpl), "live");
163
+ }
164
+ catch (error) {
165
+ return normalizeDocument(bundledPriceDocument, "bundled", errorMessage(error));
166
+ }
167
+ }
168
+ function findModel(catalog, modelId) {
169
+ const normalized = modelId.trim().toLowerCase();
170
+ const model = catalog.models.find((candidate) => candidate.modelId.toLowerCase() === normalized);
171
+ if (!model) {
172
+ throw new ModelNotFoundError(modelId);
173
+ }
174
+ return model;
175
+ }
176
+ export async function getPrice(modelId, options = {}) {
177
+ return findModel(await loadPrices(options), modelId);
178
+ }
179
+ export async function listModels(options = {}) {
180
+ const catalog = await loadPrices(options);
181
+ const provider = options.provider?.trim().toLowerCase();
182
+ const status = options.status?.trim().toLowerCase();
183
+ return catalog.models.filter((model) => (!provider || model.providerId.toLowerCase() === provider) &&
184
+ (!status || model.status.toLowerCase() === status));
185
+ }
186
+ function assertTokenCount(name, value) {
187
+ if (!Number.isFinite(value) || value < 0 || !Number.isInteger(value)) {
188
+ throw new InvalidWorkloadError(`${name} must be a non-negative integer.`);
189
+ }
190
+ }
191
+ function thresholdMatches(tier, promptTokens) {
192
+ switch (tier.thresholdComparison) {
193
+ case "less_than": return promptTokens < tier.promptTokenThreshold;
194
+ case "less_than_or_equal": return promptTokens <= tier.promptTokenThreshold;
195
+ case "greater_than": return promptTokens > tier.promptTokenThreshold;
196
+ case "greater_than_or_equal": return promptTokens >= tier.promptTokenThreshold;
197
+ }
198
+ }
199
+ function selectTier(model, promptTokens, batch) {
200
+ const mode = batch ? "batch" : "standard";
201
+ const tiers = model.pricingTiers.filter((tier) => tier.pricingStatus === "current" && tier.processingMode === mode);
202
+ if (tiers.length === 0)
203
+ return null;
204
+ for (const tier of tiers) {
205
+ if (tier.thresholdTokenBasis !== "total_prompt_tokens" || !tier.wholeRequestPricing) {
206
+ throw new UnsupportedPricingError(`Cannot safely apply tier ${tier.id} for ${model.modelId}.`);
207
+ }
208
+ }
209
+ const matches = tiers.filter((tier) => !tier.calculationDefault && thresholdMatches(tier, promptTokens));
210
+ if (matches.length > 1) {
211
+ throw new UnsupportedPricingError(`Multiple pricing tiers match ${model.modelId}.`);
212
+ }
213
+ if (matches.length === 1)
214
+ return matches[0];
215
+ const defaults = tiers.filter((tier) => tier.calculationDefault);
216
+ if (defaults.length !== 1) {
217
+ throw new UnsupportedPricingError(`No unambiguous pricing tier matches ${model.modelId}.`);
218
+ }
219
+ return defaults[0];
220
+ }
221
+ function requiredRate(model, component, value, tokens) {
222
+ if (tokens === 0)
223
+ return value;
224
+ if (value === null)
225
+ throw new MissingPriceError(model.modelId, component);
226
+ return value;
227
+ }
228
+ function estimateFromModel(model, workload) {
229
+ const cached = workload.cachedInputTokens ?? 0;
230
+ const batch = workload.batch ?? false;
231
+ assertTokenCount("inputTokens", workload.inputTokens);
232
+ assertTokenCount("outputTokens", workload.outputTokens);
233
+ assertTokenCount("cachedInputTokens", cached);
234
+ if (cached > workload.inputTokens) {
235
+ throw new InvalidWorkloadError("cachedInputTokens cannot exceed inputTokens.");
236
+ }
237
+ const uncached = workload.inputTokens - cached;
238
+ const tier = selectTier(model, workload.inputTokens, batch);
239
+ if (!tier && model.pricing.unit !== "1M tokens") {
240
+ throw new UnsupportedPricingError(`${model.modelId} is not priced per 1M tokens.`);
241
+ }
242
+ const rawInputRate = tier?.input ?? (batch ? model.pricing.batchInput : model.pricing.input);
243
+ const rawCachedRate = tier?.cachedInput ?? (batch ? model.pricing.batchCachedInput : model.pricing.cachedInput);
244
+ const rawOutputRate = tier?.output ?? (batch ? model.pricing.batchOutput : model.pricing.output);
245
+ const inputRate = requiredRate(model, batch ? "batch input" : "input", rawInputRate, uncached);
246
+ const cachedRate = requiredRate(model, batch ? "batch cached input" : "cached input", rawCachedRate, cached);
247
+ const outputRate = requiredRate(model, batch ? "batch output" : "output", rawOutputRate, workload.outputTokens);
248
+ const inputCost = uncached * (inputRate ?? 0) / 1_000_000;
249
+ const cachedCost = cached * (cachedRate ?? 0) / 1_000_000;
250
+ const outputCost = workload.outputTokens * (outputRate ?? 0) / 1_000_000;
251
+ const pricesUsed = {
252
+ currency: "USD",
253
+ unit: "1M tokens",
254
+ input: inputRate,
255
+ cachedInput: cachedRate,
256
+ output: outputRate,
257
+ batch,
258
+ tierId: tier?.id ?? null,
259
+ };
260
+ const assumptions = [
261
+ "inputTokens includes cachedInputTokens; only the remainder is billed at the uncached input rate.",
262
+ "Catalog rates exclude taxes, negotiated discounts, credits, and provider-specific rounding.",
263
+ tier ? `Tier ${tier.id} prices the whole request using total prompt tokens.` : "The dataset compatibility/default token rates are used.",
264
+ ];
265
+ return {
266
+ modelId: model.modelId,
267
+ total: inputCost + cachedCost + outputCost,
268
+ breakdown: { input: inputCost, cachedInput: cachedCost, output: outputCost },
269
+ pricesUsed,
270
+ assumptions,
271
+ officialSourceUrl: model.officialSourceUrl,
272
+ lastVerifiedAt: model.lastVerifiedAt,
273
+ source: model.source,
274
+ };
275
+ }
276
+ export async function estimateCost(input) {
277
+ const catalog = await loadPrices({ source: input.source, fetchImpl: input.fetchImpl });
278
+ return estimateFromModel(findModel(catalog, input.modelId), input);
279
+ }
280
+ export async function compareModels(modelIds, workload) {
281
+ if (!Array.isArray(modelIds) || modelIds.length === 0) {
282
+ throw new InvalidWorkloadError("modelIds must contain at least one model.");
283
+ }
284
+ const catalog = await loadPrices({ source: workload.source, fetchImpl: workload.fetchImpl });
285
+ return modelIds.map((modelId) => {
286
+ const model = findModel(catalog, modelId);
287
+ return {
288
+ ...estimateFromModel(model, workload),
289
+ displayName: model.displayName,
290
+ providerId: model.providerId,
291
+ };
292
+ }).sort((left, right) => left.total - right.total || left.modelId.localeCompare(right.modelId));
293
+ }
294
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ export type DataSource = "live" | "bundled";
2
+ export type FetchLike = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
3
+ export interface Pricing {
4
+ currency: "USD";
5
+ unit: "1M tokens" | null;
6
+ input: number | null;
7
+ output: number | null;
8
+ cachedInput: number | null;
9
+ cacheWrite: number | null;
10
+ cacheWrite1h: number | null;
11
+ batchInput: number | null;
12
+ batchCachedInput: number | null;
13
+ batchOutput: number | null;
14
+ }
15
+ export interface PricingTier {
16
+ id: string;
17
+ processingMode: string;
18
+ pricingStatus: string;
19
+ calculationDefault: boolean;
20
+ promptTokenThreshold: number;
21
+ thresholdComparison: "less_than" | "less_than_or_equal" | "greater_than" | "greater_than_or_equal";
22
+ thresholdTokenBasis: string;
23
+ cachedPromptTokensIncluded: boolean;
24
+ wholeRequestPricing: boolean;
25
+ currency: "USD";
26
+ unit: "1M tokens";
27
+ input: number;
28
+ cachedInput: number;
29
+ output: number;
30
+ }
31
+ export interface PricingComponent {
32
+ id?: string;
33
+ component?: string;
34
+ amount?: number | string;
35
+ unit?: string;
36
+ currency?: string;
37
+ processingMode?: string;
38
+ pricingStatus?: string;
39
+ calculationDefault?: boolean;
40
+ [key: string]: unknown;
41
+ }
42
+ export interface ModelPrice {
43
+ modelId: string;
44
+ providerId: string;
45
+ displayName: string;
46
+ status: string;
47
+ pricing: Pricing;
48
+ pricingTiers: PricingTier[];
49
+ pricingComponents: PricingComponent[];
50
+ officialSourceUrl: string;
51
+ lastVerifiedAt: string;
52
+ releasedAt: string | null;
53
+ effectiveFrom: string | null;
54
+ notes: string;
55
+ source: DataSource;
56
+ }
57
+ export interface PriceCatalog {
58
+ generatedAt: string;
59
+ lastVerifiedAt: string;
60
+ license: string;
61
+ models: ModelPrice[];
62
+ source: DataSource;
63
+ fallbackReason?: string;
64
+ }
65
+ export interface LoadPricesOptions {
66
+ source?: DataSource;
67
+ fetchImpl?: FetchLike;
68
+ }
69
+ export interface ListModelsOptions extends LoadPricesOptions {
70
+ provider?: string;
71
+ status?: string;
72
+ }
73
+ export interface EstimateCostInput extends LoadPricesOptions {
74
+ modelId: string;
75
+ inputTokens: number;
76
+ outputTokens: number;
77
+ cachedInputTokens?: number;
78
+ batch?: boolean;
79
+ }
80
+ export interface Workload extends LoadPricesOptions {
81
+ inputTokens: number;
82
+ outputTokens: number;
83
+ cachedInputTokens?: number;
84
+ batch?: boolean;
85
+ }
86
+ export interface CostBreakdown {
87
+ input: number;
88
+ cachedInput: number;
89
+ output: number;
90
+ }
91
+ export interface PricesUsed {
92
+ currency: "USD";
93
+ unit: "1M tokens";
94
+ input: number | null;
95
+ cachedInput: number | null;
96
+ output: number | null;
97
+ batch: boolean;
98
+ tierId: string | null;
99
+ }
100
+ export interface CostEstimate {
101
+ modelId: string;
102
+ total: number;
103
+ breakdown: CostBreakdown;
104
+ pricesUsed: PricesUsed;
105
+ assumptions: string[];
106
+ officialSourceUrl: string;
107
+ lastVerifiedAt: string;
108
+ source: DataSource;
109
+ }
110
+ export interface ModelComparison extends CostEstimate {
111
+ displayName: string;
112
+ providerId: string;
113
+ }
114
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,52 @@
1
1
  {
2
2
  "name": "ai-api-pricing",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.1",
4
+ "description": "Source-linked AI API pricing data and deterministic cost estimates.",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/aicostbudget/ai-api-pricing-data/tree/main/packages/ai-api-pricing#readme",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/aicostbudget/ai-api-pricing-data.git",
10
+ "directory": "packages/ai-api-pricing"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/aicostbudget/ai-api-pricing-data/issues"
14
+ },
15
+ "keywords": [
16
+ "llm",
17
+ "llm-pricing",
18
+ "ai-api-pricing",
19
+ "token-cost",
20
+ "cost-estimation",
21
+ "openai",
22
+ "anthropic",
23
+ "gemini",
24
+ "deepseek",
25
+ "pricing-data"
26
+ ],
27
+ "type": "module",
28
+ "engines": {
29
+ "node": ">=18"
30
+ },
31
+ "files": [
32
+ "dist",
33
+ "README.md"
34
+ ],
35
+ "main": "./dist/cjs/index.js",
36
+ "module": "./dist/esm/index.js",
37
+ "types": "./dist/esm/index.d.ts",
38
+ "exports": {
39
+ ".": {
40
+ "types": "./dist/esm/index.d.ts",
41
+ "import": "./dist/esm/index.js",
42
+ "require": "./dist/cjs/index.js"
43
+ }
44
+ },
45
+ "sideEffects": false,
46
+ "scripts": {
47
+ "refresh-bundle": "node scripts/refresh-bundle.mjs",
48
+ "build": "tsc -p tsconfig.esm.json && tsc -p tsconfig.cjs.json && node scripts/write-cjs-package.mjs",
49
+ "test": "npm run build && node --test test/*.test.mjs",
50
+ "prepack": "npm run refresh-bundle && npm run build"
51
+ }
52
+ }