tokenmeter 0.9.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.
Files changed (159) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +346 -0
  3. package/dist/__tests__/context.test.d.ts +2 -0
  4. package/dist/__tests__/context.test.d.ts.map +1 -0
  5. package/dist/__tests__/context.test.js +94 -0
  6. package/dist/__tests__/context.test.js.map +1 -0
  7. package/dist/__tests__/elevenlabs.test.d.ts +2 -0
  8. package/dist/__tests__/elevenlabs.test.d.ts.map +1 -0
  9. package/dist/__tests__/elevenlabs.test.js +108 -0
  10. package/dist/__tests__/elevenlabs.test.js.map +1 -0
  11. package/dist/__tests__/fal.test.d.ts +2 -0
  12. package/dist/__tests__/fal.test.d.ts.map +1 -0
  13. package/dist/__tests__/fal.test.js +153 -0
  14. package/dist/__tests__/fal.test.js.map +1 -0
  15. package/dist/__tests__/pricing.test.d.ts +2 -0
  16. package/dist/__tests__/pricing.test.d.ts.map +1 -0
  17. package/dist/__tests__/pricing.test.js +76 -0
  18. package/dist/__tests__/pricing.test.js.map +1 -0
  19. package/dist/__tests__/recorder.test.d.ts +2 -0
  20. package/dist/__tests__/recorder.test.d.ts.map +1 -0
  21. package/dist/__tests__/recorder.test.js +133 -0
  22. package/dist/__tests__/recorder.test.js.map +1 -0
  23. package/dist/__tests__/storage.test.d.ts +2 -0
  24. package/dist/__tests__/storage.test.d.ts.map +1 -0
  25. package/dist/__tests__/storage.test.js +106 -0
  26. package/dist/__tests__/storage.test.js.map +1 -0
  27. package/dist/client/index.d.ts +8 -0
  28. package/dist/client/index.d.ts.map +1 -0
  29. package/dist/client/index.js +7 -0
  30. package/dist/client/index.js.map +1 -0
  31. package/dist/config.d.ts +92 -0
  32. package/dist/config.d.ts.map +1 -0
  33. package/dist/config.js +166 -0
  34. package/dist/config.js.map +1 -0
  35. package/dist/context.d.ts +80 -0
  36. package/dist/context.d.ts.map +1 -0
  37. package/dist/context.js +131 -0
  38. package/dist/context.js.map +1 -0
  39. package/dist/exporter/PostgresExporter.d.ts +82 -0
  40. package/dist/exporter/PostgresExporter.d.ts.map +1 -0
  41. package/dist/exporter/PostgresExporter.js +237 -0
  42. package/dist/exporter/PostgresExporter.js.map +1 -0
  43. package/dist/exporter/index.d.ts +8 -0
  44. package/dist/exporter/index.d.ts.map +1 -0
  45. package/dist/exporter/index.js +7 -0
  46. package/dist/exporter/index.js.map +1 -0
  47. package/dist/index.d.ts +31 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +37 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/instrumentation/proxy.d.ts +26 -0
  52. package/dist/instrumentation/proxy.d.ts.map +1 -0
  53. package/dist/instrumentation/proxy.js +337 -0
  54. package/dist/instrumentation/proxy.js.map +1 -0
  55. package/dist/instrumentation/strategies/index.d.ts +55 -0
  56. package/dist/instrumentation/strategies/index.d.ts.map +1 -0
  57. package/dist/instrumentation/strategies/index.js +429 -0
  58. package/dist/instrumentation/strategies/index.js.map +1 -0
  59. package/dist/integrations/express/index.d.ts +137 -0
  60. package/dist/integrations/express/index.d.ts.map +1 -0
  61. package/dist/integrations/express/index.js +186 -0
  62. package/dist/integrations/express/index.js.map +1 -0
  63. package/dist/integrations/inngest/index.d.ts +222 -0
  64. package/dist/integrations/inngest/index.d.ts.map +1 -0
  65. package/dist/integrations/inngest/index.js +223 -0
  66. package/dist/integrations/inngest/index.js.map +1 -0
  67. package/dist/integrations/langfuse/index.d.ts +170 -0
  68. package/dist/integrations/langfuse/index.d.ts.map +1 -0
  69. package/dist/integrations/langfuse/index.js +225 -0
  70. package/dist/integrations/langfuse/index.js.map +1 -0
  71. package/dist/integrations/next/index.d.ts +138 -0
  72. package/dist/integrations/next/index.d.ts.map +1 -0
  73. package/dist/integrations/next/index.js +170 -0
  74. package/dist/integrations/next/index.js.map +1 -0
  75. package/dist/integrations/nextjs/index.d.ts +198 -0
  76. package/dist/integrations/nextjs/index.d.ts.map +1 -0
  77. package/dist/integrations/nextjs/index.js +181 -0
  78. package/dist/integrations/nextjs/index.js.map +1 -0
  79. package/dist/integrations/vercel-ai/index.d.ts +288 -0
  80. package/dist/integrations/vercel-ai/index.d.ts.map +1 -0
  81. package/dist/integrations/vercel-ai/index.js +260 -0
  82. package/dist/integrations/vercel-ai/index.js.map +1 -0
  83. package/dist/logger.d.ts +58 -0
  84. package/dist/logger.d.ts.map +1 -0
  85. package/dist/logger.js +89 -0
  86. package/dist/logger.js.map +1 -0
  87. package/dist/pricing/catalog.d.ts +10 -0
  88. package/dist/pricing/catalog.d.ts.map +1 -0
  89. package/dist/pricing/catalog.js +297 -0
  90. package/dist/pricing/catalog.js.map +1 -0
  91. package/dist/pricing/index.d.ts +77 -0
  92. package/dist/pricing/index.d.ts.map +1 -0
  93. package/dist/pricing/index.js +251 -0
  94. package/dist/pricing/index.js.map +1 -0
  95. package/dist/pricing/manifest.d.ts +156 -0
  96. package/dist/pricing/manifest.d.ts.map +1 -0
  97. package/dist/pricing/manifest.js +381 -0
  98. package/dist/pricing/manifest.js.map +1 -0
  99. package/dist/pricing/manifest.json +12786 -0
  100. package/dist/pricing/providers/anthropic.json +253 -0
  101. package/dist/pricing/providers/bedrock.json +341 -0
  102. package/dist/pricing/providers/bfl.json +220 -0
  103. package/dist/pricing/providers/elevenlabs.json +142 -0
  104. package/dist/pricing/providers/fal.json +15866 -0
  105. package/dist/pricing/providers/google.json +346 -0
  106. package/dist/pricing/providers/openai.json +1035 -0
  107. package/dist/pricing/schema.d.ts +102 -0
  108. package/dist/pricing/schema.d.ts.map +1 -0
  109. package/dist/pricing/schema.js +56 -0
  110. package/dist/pricing/schema.js.map +1 -0
  111. package/dist/processor/TokenMeterProcessor.d.ts +55 -0
  112. package/dist/processor/TokenMeterProcessor.d.ts.map +1 -0
  113. package/dist/processor/TokenMeterProcessor.js +132 -0
  114. package/dist/processor/TokenMeterProcessor.js.map +1 -0
  115. package/dist/query/client.d.ts +61 -0
  116. package/dist/query/client.d.ts.map +1 -0
  117. package/dist/query/client.js +206 -0
  118. package/dist/query/client.js.map +1 -0
  119. package/dist/query/index.d.ts +8 -0
  120. package/dist/query/index.d.ts.map +1 -0
  121. package/dist/query/index.js +7 -0
  122. package/dist/query/index.js.map +1 -0
  123. package/dist/recorder.d.ts +74 -0
  124. package/dist/recorder.d.ts.map +1 -0
  125. package/dist/recorder.js +227 -0
  126. package/dist/recorder.js.map +1 -0
  127. package/dist/sdks/anthropic.d.ts +21 -0
  128. package/dist/sdks/anthropic.d.ts.map +1 -0
  129. package/dist/sdks/anthropic.js +258 -0
  130. package/dist/sdks/anthropic.js.map +1 -0
  131. package/dist/sdks/elevenlabs.d.ts +59 -0
  132. package/dist/sdks/elevenlabs.d.ts.map +1 -0
  133. package/dist/sdks/elevenlabs.js +192 -0
  134. package/dist/sdks/elevenlabs.js.map +1 -0
  135. package/dist/sdks/fal.d.ts +102 -0
  136. package/dist/sdks/fal.d.ts.map +1 -0
  137. package/dist/sdks/fal.js +306 -0
  138. package/dist/sdks/fal.js.map +1 -0
  139. package/dist/sdks/openai.d.ts +17 -0
  140. package/dist/sdks/openai.d.ts.map +1 -0
  141. package/dist/sdks/openai.js +191 -0
  142. package/dist/sdks/openai.js.map +1 -0
  143. package/dist/storage/interface.d.ts +15 -0
  144. package/dist/storage/interface.d.ts.map +1 -0
  145. package/dist/storage/interface.js +53 -0
  146. package/dist/storage/interface.js.map +1 -0
  147. package/dist/storage/prisma.d.ts +15 -0
  148. package/dist/storage/prisma.d.ts.map +1 -0
  149. package/dist/storage/prisma.js +135 -0
  150. package/dist/storage/prisma.js.map +1 -0
  151. package/dist/types.d.ts +206 -0
  152. package/dist/types.d.ts.map +1 -0
  153. package/dist/types.js +45 -0
  154. package/dist/types.js.map +1 -0
  155. package/dist/vercel-ai/index.d.ts +89 -0
  156. package/dist/vercel-ai/index.d.ts.map +1 -0
  157. package/dist/vercel-ai/index.js +298 -0
  158. package/dist/vercel-ai/index.js.map +1 -0
  159. package/package.json +119 -0
package/dist/logger.js ADDED
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Configurable Logger
3
+ *
4
+ * Provides a centralized logging mechanism that can be configured or disabled.
5
+ * By default, logging is disabled in production to avoid polluting stdout.
6
+ */
7
+ const LOG_LEVELS = {
8
+ debug: 0,
9
+ info: 1,
10
+ warn: 2,
11
+ error: 3,
12
+ none: 4,
13
+ };
14
+ // Global configuration - defaults to disabled
15
+ let config = {
16
+ level: "none",
17
+ };
18
+ /**
19
+ * Configure the tokenmeter logger.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * import { configureLogger } from 'tokenmeter';
24
+ *
25
+ * // Enable warning and error logs
26
+ * configureLogger({ level: 'warn' });
27
+ *
28
+ * // Use custom logger
29
+ * configureLogger({
30
+ * level: 'debug',
31
+ * custom: (level, message, ...args) => {
32
+ * myLogger[level](message, ...args);
33
+ * }
34
+ * });
35
+ * ```
36
+ */
37
+ export function configureLogger(newConfig) {
38
+ config = { ...config, ...newConfig };
39
+ }
40
+ /**
41
+ * Get the current logger configuration.
42
+ */
43
+ export function getLoggerConfig() {
44
+ return { ...config };
45
+ }
46
+ /**
47
+ * Reset logger to default configuration (disabled).
48
+ */
49
+ export function resetLogger() {
50
+ config = { level: "none" };
51
+ }
52
+ function shouldLog(level) {
53
+ return LOG_LEVELS[level] >= LOG_LEVELS[config.level];
54
+ }
55
+ function log(level, message, ...args) {
56
+ if (!shouldLog(level)) {
57
+ return;
58
+ }
59
+ const formattedMessage = `[tokenmeter] ${message}`;
60
+ if (config.custom) {
61
+ config.custom(level, formattedMessage, ...args);
62
+ return;
63
+ }
64
+ switch (level) {
65
+ case "debug":
66
+ console.debug(formattedMessage, ...args);
67
+ break;
68
+ case "info":
69
+ console.info(formattedMessage, ...args);
70
+ break;
71
+ case "warn":
72
+ console.warn(formattedMessage, ...args);
73
+ break;
74
+ case "error":
75
+ console.error(formattedMessage, ...args);
76
+ break;
77
+ }
78
+ }
79
+ /**
80
+ * Internal logger for tokenmeter.
81
+ * By default, all logging is disabled. Use configureLogger() to enable.
82
+ */
83
+ export const logger = {
84
+ debug: (message, ...args) => log("debug", message, ...args),
85
+ info: (message, ...args) => log("info", message, ...args),
86
+ warn: (message, ...args) => log("warn", message, ...args),
87
+ error: (message, ...args) => log("error", message, ...args),
88
+ };
89
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH,MAAM,UAAU,GAA6B;IAC3C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,8CAA8C;AAC9C,IAAI,MAAM,GAAiB;IACzB,KAAK,EAAE,MAAM;CACd,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,eAAe,CAAC,SAAgC;IAC9D,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,SAAS,CAAC,KAAe;IAChC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,GAAG,IAAe;IAC/D,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GAAG,gBAAgB,OAAO,EAAE,CAAC;IAEnD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,CAAC;YACzC,MAAM;QACR,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,CAAC;YACxC,MAAM;QACR,KAAK,MAAM;YACT,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,CAAC;YACxC,MAAM;QACR,KAAK,OAAO;YACV,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,CAAC;YACzC,MAAM;IACV,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC9E,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5E,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5E,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC/E,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { PricingConfig } from "../types.js";
2
+ /**
3
+ * Default pricing catalog for common models
4
+ * Prices are per 1K tokens in USD
5
+ *
6
+ * Last updated: December 2025
7
+ * Sources: Official provider pricing pages
8
+ */
9
+ export declare const defaultPricing: PricingConfig;
10
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/pricing/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,aA8S5B,CAAC"}
@@ -0,0 +1,297 @@
1
+ /**
2
+ * Default pricing catalog for common models
3
+ * Prices are per 1K tokens in USD
4
+ *
5
+ * Last updated: December 2025
6
+ * Sources: Official provider pricing pages
7
+ */
8
+ export const defaultPricing = {
9
+ // OpenAI Models
10
+ "openai/gpt-4o": {
11
+ input: 0.0025,
12
+ output: 0.01,
13
+ cachedInput: 0.00125,
14
+ },
15
+ "openai/gpt-4o-mini": {
16
+ input: 0.00015,
17
+ output: 0.0006,
18
+ cachedInput: 0.000075,
19
+ },
20
+ "openai/gpt-4-turbo": {
21
+ input: 0.01,
22
+ output: 0.03,
23
+ },
24
+ "openai/gpt-4": {
25
+ input: 0.03,
26
+ output: 0.06,
27
+ },
28
+ "openai/gpt-3.5-turbo": {
29
+ input: 0.0005,
30
+ output: 0.0015,
31
+ },
32
+ "openai/o1": {
33
+ input: 0.015,
34
+ output: 0.06,
35
+ cachedInput: 0.0075,
36
+ },
37
+ "openai/o1-mini": {
38
+ input: 0.003,
39
+ output: 0.012,
40
+ cachedInput: 0.0015,
41
+ },
42
+ "openai/o1-pro": {
43
+ input: 0.15,
44
+ output: 0.6,
45
+ },
46
+ // Anthropic Models
47
+ "anthropic/claude-3-5-sonnet-20241022": {
48
+ input: 0.003,
49
+ output: 0.015,
50
+ cachedInput: 0.0003,
51
+ },
52
+ "anthropic/claude-3-5-haiku-20241022": {
53
+ input: 0.001,
54
+ output: 0.005,
55
+ cachedInput: 0.0001,
56
+ },
57
+ "anthropic/claude-3-opus-20240229": {
58
+ input: 0.015,
59
+ output: 0.075,
60
+ cachedInput: 0.0015,
61
+ },
62
+ "anthropic/claude-3-sonnet-20240229": {
63
+ input: 0.003,
64
+ output: 0.015,
65
+ },
66
+ "anthropic/claude-3-haiku-20240307": {
67
+ input: 0.00025,
68
+ output: 0.00125,
69
+ },
70
+ // Shorthand aliases (without provider prefix)
71
+ "gpt-4o": {
72
+ input: 0.0025,
73
+ output: 0.01,
74
+ cachedInput: 0.00125,
75
+ },
76
+ "gpt-4o-mini": {
77
+ input: 0.00015,
78
+ output: 0.0006,
79
+ cachedInput: 0.000075,
80
+ },
81
+ "gpt-4-turbo": {
82
+ input: 0.01,
83
+ output: 0.03,
84
+ },
85
+ "gpt-4": {
86
+ input: 0.03,
87
+ output: 0.06,
88
+ },
89
+ "gpt-3.5-turbo": {
90
+ input: 0.0005,
91
+ output: 0.0015,
92
+ },
93
+ o1: {
94
+ input: 0.015,
95
+ output: 0.06,
96
+ cachedInput: 0.0075,
97
+ },
98
+ "o1-mini": {
99
+ input: 0.003,
100
+ output: 0.012,
101
+ cachedInput: 0.0015,
102
+ },
103
+ "o1-pro": {
104
+ input: 0.15,
105
+ output: 0.6,
106
+ },
107
+ "claude-3-5-sonnet-20241022": {
108
+ input: 0.003,
109
+ output: 0.015,
110
+ cachedInput: 0.0003,
111
+ },
112
+ "claude-3-5-haiku-20241022": {
113
+ input: 0.001,
114
+ output: 0.005,
115
+ cachedInput: 0.0001,
116
+ },
117
+ "claude-3-opus-20240229": {
118
+ input: 0.015,
119
+ output: 0.075,
120
+ cachedInput: 0.0015,
121
+ },
122
+ // ===========================================
123
+ // ElevenLabs Models (price per 1K characters)
124
+ // ===========================================
125
+ // Note: ElevenLabs uses character-based pricing
126
+ // 'input' = cost per 1K characters
127
+ // Official models: eleven_multilingual_v2, eleven_flash_v2_5, eleven_turbo_v2_5
128
+ "elevenlabs/eleven_multilingual_v2": {
129
+ input: 0.3, // High quality, 29 languages
130
+ output: 0,
131
+ },
132
+ "elevenlabs/eleven_flash_v2_5": {
133
+ input: 0.15, // Ultra-low latency, 50% cheaper, 32 languages
134
+ output: 0,
135
+ },
136
+ "elevenlabs/eleven_turbo_v2_5": {
137
+ input: 0.18, // Balanced quality/latency, 32 languages
138
+ output: 0,
139
+ },
140
+ "elevenlabs/eleven_turbo_v2": {
141
+ input: 0.18,
142
+ output: 0,
143
+ },
144
+ "elevenlabs/eleven_monolingual_v1": {
145
+ input: 0.3,
146
+ output: 0,
147
+ },
148
+ // Default fallback for ElevenLabs
149
+ "elevenlabs/default": {
150
+ input: 0.3,
151
+ output: 0,
152
+ },
153
+ // Shorthand aliases (modelId values used in SDK)
154
+ eleven_multilingual_v2: {
155
+ input: 0.3,
156
+ output: 0,
157
+ },
158
+ eleven_flash_v2_5: {
159
+ input: 0.15,
160
+ output: 0,
161
+ },
162
+ eleven_turbo_v2_5: {
163
+ input: 0.18,
164
+ output: 0,
165
+ },
166
+ eleven_turbo_v2: {
167
+ input: 0.18,
168
+ output: 0,
169
+ },
170
+ // ===========================================
171
+ // fal.ai Models
172
+ // ===========================================
173
+ // Image models: 'output' = cost per image (or per megapixel where noted)
174
+ // Video models: 'output' = cost per second of output
175
+ // Flux models (image generation)
176
+ "fal/flux-pro": {
177
+ input: 0,
178
+ output: 0.05, // $0.05 per megapixel (legacy, deprecated)
179
+ },
180
+ "fal/flux-pro/v1.1": {
181
+ input: 0,
182
+ output: 0.04, // Turbo version
183
+ },
184
+ "fal/flux-pro/v1.1-ultra": {
185
+ input: 0,
186
+ output: 0.06,
187
+ },
188
+ "fal/flux-pro/kontext": {
189
+ input: 0,
190
+ output: 0.04, // Image editing variant
191
+ },
192
+ "fal/flux-dev": {
193
+ input: 0,
194
+ output: 0.025,
195
+ },
196
+ "fal/flux-schnell": {
197
+ input: 0,
198
+ output: 0.003, // Fast/cheap model
199
+ },
200
+ "fal/flux-realism": {
201
+ input: 0,
202
+ output: 0.025,
203
+ },
204
+ "fal/flux-lora": {
205
+ input: 0,
206
+ output: 0.025,
207
+ },
208
+ // Stable Diffusion models
209
+ "fal/stable-diffusion-v3-medium": {
210
+ input: 0,
211
+ output: 0.035,
212
+ },
213
+ "fal/fast-sdxl": {
214
+ input: 0,
215
+ output: 0.01,
216
+ },
217
+ "fal/sdxl": {
218
+ input: 0,
219
+ output: 0.02,
220
+ },
221
+ // Recraft models
222
+ "fal/recraft-v3": {
223
+ input: 0,
224
+ output: 0.04,
225
+ },
226
+ // Ideogram
227
+ "fal/ideogram/v2": {
228
+ input: 0,
229
+ output: 0.08,
230
+ },
231
+ "fal/ideogram/v2-turbo": {
232
+ input: 0,
233
+ output: 0.05,
234
+ },
235
+ // ByteDance Seedream
236
+ "fal/bytedance/seedream/v4/text-to-image": {
237
+ input: 0,
238
+ output: 0.03, // $0.03 per image
239
+ },
240
+ // Nano Banana
241
+ "fal/nano-banana": {
242
+ input: 0,
243
+ output: 0.0398,
244
+ },
245
+ // Qwen image (per megapixel)
246
+ "fal/qwen-image": {
247
+ input: 0,
248
+ output: 0.02, // $0.02 per megapixel
249
+ },
250
+ // Video models (cost per second of output, unless noted)
251
+ "fal/wan-25-preview/text-to-video": {
252
+ input: 0,
253
+ output: 0.05, // $0.05 per second
254
+ },
255
+ "fal/kling-video/v2.5-turbo/pro/image-to-video": {
256
+ input: 0,
257
+ output: 0.07, // $0.07 per second
258
+ },
259
+ "fal/veo3/image-to-video": {
260
+ input: 0,
261
+ output: 0.4, // $0.40 per second
262
+ },
263
+ "fal/ovi/image-to-video": {
264
+ input: 0,
265
+ output: 0.2, // $0.20 per video (flat rate)
266
+ },
267
+ "fal/minimax/video-01": {
268
+ input: 0,
269
+ output: 0.3, // per second of video
270
+ },
271
+ "fal/minimax/video-01-live": {
272
+ input: 0,
273
+ output: 0.25,
274
+ },
275
+ "fal/kling-video/v1/standard/text-to-video": {
276
+ input: 0,
277
+ output: 0.1,
278
+ },
279
+ "fal/kling-video/v1.5/pro/text-to-video": {
280
+ input: 0,
281
+ output: 0.35,
282
+ },
283
+ "fal/luma-dream-machine": {
284
+ input: 0,
285
+ output: 0.2,
286
+ },
287
+ "fal/runway-gen3/turbo/image-to-video": {
288
+ input: 0,
289
+ output: 0.25,
290
+ },
291
+ // Audio/Speech models
292
+ "fal/whisper": {
293
+ input: 0.006, // per minute of audio
294
+ output: 0,
295
+ },
296
+ };
297
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/pricing/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Pricing Module
3
+ *
4
+ * Loads and provides access to standardized pricing data for all providers.
5
+ * Pricing files are JSON and can be contributed via PRs.
6
+ */
7
+ import type { ProviderPricing, ModelPricing as SchemaModelPricing, PricingEntry, BillingUnit, ResolvedPricing } from "./schema.js";
8
+ import { getCurrentPricing, getPricingAtDate, getDefaultUnitSize } from "./schema.js";
9
+ import type { PricingConfig } from "../types.js";
10
+ export type { ProviderPricing, SchemaModelPricing, PricingEntry, BillingUnit, ResolvedPricing, };
11
+ export { getCurrentPricing, getPricingAtDate, getDefaultUnitSize };
12
+ /**
13
+ * All provider pricing data
14
+ */
15
+ export declare const providers: Record<string, ProviderPricing>;
16
+ /**
17
+ * Default pricing in flat format (backward compatible)
18
+ */
19
+ export declare const defaultPricing: PricingConfig;
20
+ /**
21
+ * Merge custom pricing with defaults
22
+ */
23
+ export declare function mergePricing(base: PricingConfig, overrides: PricingConfig): PricingConfig;
24
+ /**
25
+ * Calculate cost for a model (backward compatible API)
26
+ *
27
+ * @param model - Model identifier
28
+ * @param inputTokens - Number of input tokens
29
+ * @param outputTokens - Number of output tokens
30
+ * @param pricing - Pricing configuration
31
+ * @param cachedInputTokens - Optional number of cached input tokens
32
+ * @returns Cost in USD
33
+ */
34
+ export declare function calculateCost(model: string, inputTokens: number, outputTokens: number, pricing: PricingConfig, cachedInputTokens?: number): number;
35
+ /**
36
+ * Clear the pricing lookup cache (useful for testing or dynamic updates)
37
+ */
38
+ export declare function clearPricingCache(): void;
39
+ /**
40
+ * Get pricing for a specific model (new API)
41
+ *
42
+ * @param modelId - Model identifier (e.g., "gpt-4o", "openai/gpt-4o", "claude-3.5-sonnet")
43
+ * @param date - Optional date to get historical pricing (defaults to current)
44
+ * @returns Resolved pricing or null if not found
45
+ */
46
+ export declare function getModelPricing(modelId: string, date?: Date): ResolvedPricing | null;
47
+ /**
48
+ * Calculate cost based on usage (new API with usage object)
49
+ *
50
+ * @param modelId - Model identifier
51
+ * @param usage - Usage data (tokens, characters, images, etc.)
52
+ * @param date - Optional date for historical pricing
53
+ * @returns Cost in USD or null if pricing not found
54
+ */
55
+ export declare function calculateCostFromUsage(modelId: string, usage: {
56
+ inputUnits?: number;
57
+ outputUnits?: number;
58
+ cachedInputUnits?: number;
59
+ cacheWriteUnits?: number;
60
+ }, date?: Date): number | null;
61
+ /**
62
+ * Get all models for a provider
63
+ */
64
+ export declare function getProviderModels(providerId: string): string[];
65
+ /**
66
+ * Get all supported providers
67
+ */
68
+ export declare function getSupportedProviders(): string[];
69
+ /**
70
+ * Check if a model is deprecated
71
+ */
72
+ export declare function isModelDeprecated(modelId: string): boolean;
73
+ /**
74
+ * Get replacement model for a deprecated model
75
+ */
76
+ export declare function getReplacementModel(modelId: string): string | null;
77
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pricing/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,IAAI,kBAAkB,EAClC,YAAY,EACZ,WAAW,EACX,eAAe,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAS/D,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,eAAe,GAChB,CAAC;AACF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAKrD,CAAC;AA4DF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,aAAqC,CAAC;AAEnE;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,aAAa,GACvB,aAAa,CAEf;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,aAAa,EACtB,iBAAiB,CAAC,EAAE,MAAM,GACzB,MAAM,CAsBR;AA4DD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,IAAI,GACV,eAAe,GAAG,IAAI,CA6BxB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE;IACL,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,EACD,IAAI,CAAC,EAAE,IAAI,GACV,MAAM,GAAG,IAAI,CA8Bf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAM9D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAI1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIlE"}