@revenium/openai 1.0.13 → 1.0.14

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 (228) hide show
  1. package/.env.example +10 -15
  2. package/CHANGELOG.md +44 -11
  3. package/CODE_OF_CONDUCT.md +57 -0
  4. package/CONTRIBUTING.md +38 -0
  5. package/README.md +104 -216
  6. package/SECURITY.md +34 -0
  7. package/dist/cjs/core/client/index.js +14 -0
  8. package/dist/cjs/core/client/index.js.map +1 -0
  9. package/dist/cjs/core/client/manager.js +109 -0
  10. package/dist/cjs/core/client/manager.js.map +1 -0
  11. package/dist/cjs/core/config/azure-config.js +5 -17
  12. package/dist/cjs/core/config/azure-config.js.map +1 -1
  13. package/dist/cjs/core/config/index.js +2 -2
  14. package/dist/cjs/core/config/index.js.map +1 -1
  15. package/dist/cjs/core/config/loader.js +34 -14
  16. package/dist/cjs/core/config/loader.js.map +1 -1
  17. package/dist/cjs/core/config/manager.js +11 -5
  18. package/dist/cjs/core/config/manager.js.map +1 -1
  19. package/dist/cjs/core/config/validator.js +3 -45
  20. package/dist/cjs/core/config/validator.js.map +1 -1
  21. package/dist/cjs/core/middleware/index.js +17 -0
  22. package/dist/cjs/core/middleware/index.js.map +1 -0
  23. package/dist/cjs/core/middleware/interfaces.js +361 -0
  24. package/dist/cjs/core/middleware/interfaces.js.map +1 -0
  25. package/dist/cjs/core/middleware/revenium-client.js +142 -0
  26. package/dist/cjs/core/middleware/revenium-client.js.map +1 -0
  27. package/dist/cjs/core/providers/detector.js +45 -23
  28. package/dist/cjs/core/providers/detector.js.map +1 -1
  29. package/dist/cjs/core/providers/index.js +2 -1
  30. package/dist/cjs/core/providers/index.js.map +1 -1
  31. package/dist/cjs/core/tracking/api-client.js +14 -13
  32. package/dist/cjs/core/tracking/api-client.js.map +1 -1
  33. package/dist/cjs/core/tracking/payload-builder.js +15 -25
  34. package/dist/cjs/core/tracking/payload-builder.js.map +1 -1
  35. package/dist/cjs/core/tracking/usage-tracker.js +22 -18
  36. package/dist/cjs/core/tracking/usage-tracker.js.map +1 -1
  37. package/dist/cjs/index.js +26 -195
  38. package/dist/cjs/index.js.map +1 -1
  39. package/dist/cjs/types/index.js +0 -8
  40. package/dist/cjs/types/index.js.map +1 -1
  41. package/dist/cjs/types/openai-augmentation.js +0 -49
  42. package/dist/cjs/types/openai-augmentation.js.map +1 -1
  43. package/dist/cjs/utils/constants.js +17 -20
  44. package/dist/cjs/utils/constants.js.map +1 -1
  45. package/dist/cjs/utils/error-handler.js +18 -14
  46. package/dist/cjs/utils/error-handler.js.map +1 -1
  47. package/dist/cjs/utils/metadata-builder.js +17 -16
  48. package/dist/cjs/utils/metadata-builder.js.map +1 -1
  49. package/dist/cjs/utils/provider-detection.js +25 -28
  50. package/dist/cjs/utils/provider-detection.js.map +1 -1
  51. package/dist/esm/core/client/index.js +6 -0
  52. package/dist/esm/core/client/index.js.map +1 -0
  53. package/dist/esm/core/client/manager.js +102 -0
  54. package/dist/esm/core/client/manager.js.map +1 -0
  55. package/dist/esm/core/config/azure-config.js +6 -18
  56. package/dist/esm/core/config/azure-config.js.map +1 -1
  57. package/dist/esm/core/config/index.js +5 -4
  58. package/dist/esm/core/config/index.js.map +1 -1
  59. package/dist/esm/core/config/loader.js +33 -13
  60. package/dist/esm/core/config/loader.js.map +1 -1
  61. package/dist/esm/core/config/manager.js +13 -7
  62. package/dist/esm/core/config/manager.js.map +1 -1
  63. package/dist/esm/core/config/validator.js +3 -44
  64. package/dist/esm/core/config/validator.js.map +1 -1
  65. package/dist/esm/core/middleware/index.js +8 -0
  66. package/dist/esm/core/middleware/index.js.map +1 -0
  67. package/dist/esm/core/middleware/interfaces.js +353 -0
  68. package/dist/esm/core/middleware/interfaces.js.map +1 -0
  69. package/dist/esm/core/middleware/revenium-client.js +105 -0
  70. package/dist/esm/core/middleware/revenium-client.js.map +1 -0
  71. package/dist/esm/core/providers/detector.js +43 -22
  72. package/dist/esm/core/providers/detector.js.map +1 -1
  73. package/dist/esm/core/providers/index.js +2 -2
  74. package/dist/esm/core/providers/index.js.map +1 -1
  75. package/dist/esm/core/tracking/api-client.js +13 -12
  76. package/dist/esm/core/tracking/api-client.js.map +1 -1
  77. package/dist/esm/core/tracking/payload-builder.js +16 -26
  78. package/dist/esm/core/tracking/payload-builder.js.map +1 -1
  79. package/dist/esm/core/tracking/usage-tracker.js +24 -20
  80. package/dist/esm/core/tracking/usage-tracker.js.map +1 -1
  81. package/dist/esm/index.js +9 -177
  82. package/dist/esm/index.js.map +1 -1
  83. package/dist/esm/types/index.js +2 -10
  84. package/dist/esm/types/index.js.map +1 -1
  85. package/dist/esm/types/openai-augmentation.js +0 -49
  86. package/dist/esm/types/openai-augmentation.js.map +1 -1
  87. package/dist/esm/utils/constants.js +16 -19
  88. package/dist/esm/utils/constants.js.map +1 -1
  89. package/dist/esm/utils/error-handler.js +19 -15
  90. package/dist/esm/utils/error-handler.js.map +1 -1
  91. package/dist/esm/utils/metadata-builder.js +17 -16
  92. package/dist/esm/utils/metadata-builder.js.map +1 -1
  93. package/dist/esm/utils/provider-detection.js +26 -29
  94. package/dist/esm/utils/provider-detection.js.map +1 -1
  95. package/dist/types/core/client/index.d.ts +6 -0
  96. package/dist/types/core/client/index.d.ts.map +1 -0
  97. package/dist/types/core/client/manager.d.ts +32 -0
  98. package/dist/types/core/client/manager.d.ts.map +1 -0
  99. package/dist/types/core/config/azure-config.d.ts +2 -2
  100. package/dist/types/core/config/azure-config.d.ts.map +1 -1
  101. package/dist/types/core/config/index.d.ts +4 -4
  102. package/dist/types/core/config/index.d.ts.map +1 -1
  103. package/dist/types/core/config/loader.d.ts +3 -1
  104. package/dist/types/core/config/loader.d.ts.map +1 -1
  105. package/dist/types/core/config/manager.d.ts +1 -1
  106. package/dist/types/core/config/manager.d.ts.map +1 -1
  107. package/dist/types/core/config/validator.d.ts +1 -12
  108. package/dist/types/core/config/validator.d.ts.map +1 -1
  109. package/dist/types/core/middleware/index.d.ts +8 -0
  110. package/dist/types/core/middleware/index.d.ts.map +1 -0
  111. package/dist/types/core/middleware/interfaces.d.ts +74 -0
  112. package/dist/types/core/middleware/interfaces.d.ts.map +1 -0
  113. package/dist/types/core/middleware/revenium-client.d.ts +58 -0
  114. package/dist/types/core/middleware/revenium-client.d.ts.map +1 -0
  115. package/dist/types/core/providers/detector.d.ts +9 -2
  116. package/dist/types/core/providers/detector.d.ts.map +1 -1
  117. package/dist/types/core/providers/index.d.ts +2 -2
  118. package/dist/types/core/providers/index.d.ts.map +1 -1
  119. package/dist/types/core/tracking/api-client.d.ts +1 -1
  120. package/dist/types/core/tracking/api-client.d.ts.map +1 -1
  121. package/dist/types/core/tracking/payload-builder.d.ts +3 -3
  122. package/dist/types/core/tracking/payload-builder.d.ts.map +1 -1
  123. package/dist/types/core/tracking/usage-tracker.d.ts +2 -2
  124. package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -1
  125. package/dist/types/index.d.ts +11 -135
  126. package/dist/types/index.d.ts.map +1 -1
  127. package/dist/types/types/function-parameters.d.ts +2 -23
  128. package/dist/types/types/function-parameters.d.ts.map +1 -1
  129. package/dist/types/types/index.d.ts +11 -105
  130. package/dist/types/types/index.d.ts.map +1 -1
  131. package/dist/types/types/openai-augmentation.d.ts +4 -138
  132. package/dist/types/types/openai-augmentation.d.ts.map +1 -1
  133. package/dist/types/utils/constants.d.ts +7 -1
  134. package/dist/types/utils/constants.d.ts.map +1 -1
  135. package/dist/types/utils/error-handler.d.ts +2 -2
  136. package/dist/types/utils/error-handler.d.ts.map +1 -1
  137. package/dist/types/utils/metadata-builder.d.ts +2 -2
  138. package/dist/types/utils/metadata-builder.d.ts.map +1 -1
  139. package/dist/types/utils/provider-detection.d.ts +3 -3
  140. package/dist/types/utils/provider-detection.d.ts.map +1 -1
  141. package/examples/README.md +282 -198
  142. package/examples/azure/basic.ts +62 -0
  143. package/examples/azure/responses-basic.ts +45 -0
  144. package/examples/azure/responses-stream.ts +61 -0
  145. package/examples/azure/stream.ts +56 -0
  146. package/examples/getting_started.ts +31 -43
  147. package/examples/openai/basic.ts +45 -0
  148. package/examples/openai/metadata.ts +67 -0
  149. package/examples/openai/responses-basic.ts +44 -0
  150. package/examples/openai/responses-embed.ts +34 -0
  151. package/examples/openai/responses-streaming.ts +63 -0
  152. package/examples/openai/streaming.ts +59 -0
  153. package/package.json +20 -13
  154. package/dist/cjs/core/wrapper/index.js +0 -15
  155. package/dist/cjs/core/wrapper/index.js.map +0 -1
  156. package/dist/cjs/core/wrapper/instance-patcher.js +0 -202
  157. package/dist/cjs/core/wrapper/instance-patcher.js.map +0 -1
  158. package/dist/cjs/core/wrapper/request-handler.js +0 -317
  159. package/dist/cjs/core/wrapper/request-handler.js.map +0 -1
  160. package/dist/cjs/core/wrapper/stream-wrapper.js +0 -82
  161. package/dist/cjs/core/wrapper/stream-wrapper.js.map +0 -1
  162. package/dist/cjs/utils/azure-model-resolver.js +0 -211
  163. package/dist/cjs/utils/azure-model-resolver.js.map +0 -1
  164. package/dist/cjs/utils/request-handler-factory.js +0 -185
  165. package/dist/cjs/utils/request-handler-factory.js.map +0 -1
  166. package/dist/esm/core/wrapper/index.js +0 -9
  167. package/dist/esm/core/wrapper/index.js.map +0 -1
  168. package/dist/esm/core/wrapper/instance-patcher.js +0 -199
  169. package/dist/esm/core/wrapper/instance-patcher.js.map +0 -1
  170. package/dist/esm/core/wrapper/request-handler.js +0 -310
  171. package/dist/esm/core/wrapper/request-handler.js.map +0 -1
  172. package/dist/esm/core/wrapper/stream-wrapper.js +0 -79
  173. package/dist/esm/core/wrapper/stream-wrapper.js.map +0 -1
  174. package/dist/esm/utils/azure-model-resolver.js +0 -204
  175. package/dist/esm/utils/azure-model-resolver.js.map +0 -1
  176. package/dist/esm/utils/request-handler-factory.js +0 -146
  177. package/dist/esm/utils/request-handler-factory.js.map +0 -1
  178. package/dist/types/core/wrapper/index.d.ts +0 -8
  179. package/dist/types/core/wrapper/index.d.ts.map +0 -1
  180. package/dist/types/core/wrapper/instance-patcher.d.ts +0 -33
  181. package/dist/types/core/wrapper/instance-patcher.d.ts.map +0 -1
  182. package/dist/types/core/wrapper/request-handler.d.ts +0 -29
  183. package/dist/types/core/wrapper/request-handler.d.ts.map +0 -1
  184. package/dist/types/core/wrapper/stream-wrapper.d.ts +0 -13
  185. package/dist/types/core/wrapper/stream-wrapper.d.ts.map +0 -1
  186. package/dist/types/utils/azure-model-resolver.d.ts +0 -41
  187. package/dist/types/utils/azure-model-resolver.d.ts.map +0 -1
  188. package/dist/types/utils/request-handler-factory.d.ts +0 -81
  189. package/dist/types/utils/request-handler-factory.d.ts.map +0 -1
  190. package/examples/azure-basic.ts +0 -206
  191. package/examples/azure-responses-basic.ts +0 -233
  192. package/examples/azure-responses-streaming.ts +0 -255
  193. package/examples/azure-streaming.ts +0 -209
  194. package/examples/openai-basic.ts +0 -147
  195. package/examples/openai-function-calling.ts +0 -259
  196. package/examples/openai-responses-basic.ts +0 -212
  197. package/examples/openai-responses-streaming.ts +0 -232
  198. package/examples/openai-streaming.ts +0 -172
  199. package/examples/openai-vision.ts +0 -289
  200. package/src/core/config/azure-config.ts +0 -72
  201. package/src/core/config/index.ts +0 -23
  202. package/src/core/config/loader.ts +0 -66
  203. package/src/core/config/manager.ts +0 -95
  204. package/src/core/config/validator.ts +0 -89
  205. package/src/core/providers/detector.ts +0 -159
  206. package/src/core/providers/index.ts +0 -16
  207. package/src/core/tracking/api-client.ts +0 -78
  208. package/src/core/tracking/index.ts +0 -21
  209. package/src/core/tracking/payload-builder.ts +0 -137
  210. package/src/core/tracking/usage-tracker.ts +0 -189
  211. package/src/core/wrapper/index.ts +0 -9
  212. package/src/core/wrapper/instance-patcher.ts +0 -288
  213. package/src/core/wrapper/request-handler.ts +0 -423
  214. package/src/core/wrapper/stream-wrapper.ts +0 -100
  215. package/src/index.ts +0 -360
  216. package/src/types/function-parameters.ts +0 -251
  217. package/src/types/index.ts +0 -310
  218. package/src/types/openai-augmentation.ts +0 -232
  219. package/src/types/responses-api.ts +0 -308
  220. package/src/utils/azure-model-resolver.ts +0 -220
  221. package/src/utils/constants.ts +0 -21
  222. package/src/utils/error-handler.ts +0 -251
  223. package/src/utils/metadata-builder.ts +0 -228
  224. package/src/utils/provider-detection.ts +0 -257
  225. package/src/utils/request-handler-factory.ts +0 -285
  226. package/src/utils/stop-reason-mapper.ts +0 -78
  227. package/src/utils/type-guards.ts +0 -202
  228. package/src/utils/url-builder.ts +0 -68
@@ -1,211 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveAzureModelName = resolveAzureModelName;
4
- exports.clearModelNameCache = clearModelNameCache;
5
- exports.getModelNameCacheStats = getModelNameCacheStats;
6
- exports.batchResolveModelNames = batchResolveModelNames;
7
- exports.wouldTransformDeploymentName = wouldTransformDeploymentName;
8
- const index_js_1 = require("../core/config/index.js");
9
- const constants_js_1 = require("./constants.js");
10
- /**
11
- * Azure Model Name Resolution Module
12
- *
13
- * This module maps Azure deployment names to LiteLLM-compatible model names for accurate pricing.
14
- * Based on learnings from the Python implementation, it uses heuristic pattern matching
15
- * with fallback strategies to ensure reliable model name resolution.
16
- *
17
- * Key patterns observed in real Azure deployments:
18
- * - "gpt-4o-2024-11-20" → "gpt-4o"
19
- * - "text-embedding-3-large" → "text-embedding-3-large" (exact match)
20
- * - "o4-mini" → "gpt-4o-mini"
21
- * - "gpt4o-prod" → "gpt-4o"
22
- * - "gpt-35-turbo-dev" → "gpt-3.5-turbo"
23
- */
24
- /**
25
- * In-memory cache for resolved model names
26
- * Using Map for thread-safe operations in Node.js
27
- */
28
- const modelNameCache = new Map();
29
- /**
30
- * Cache for failed resolution attempts to avoid repeated warnings
31
- */
32
- const failedResolutionCache = new Set();
33
- // Global logger
34
- const logger = (0, index_js_1.getLogger)();
35
- /**
36
- * Resolve Azure deployment name to LiteLLM-compatible model name
37
- *
38
- * @param deploymentName - Azure deployment name
39
- * @param useCache - Whether to use cached results (default: true)
40
- * @returns LiteLLM-compatible model name
41
- */
42
- function resolveAzureModelName(deploymentName, useCache = true) {
43
- if (!deploymentName) {
44
- logger.warn('Empty deployment name provided to model resolver');
45
- return deploymentName;
46
- }
47
- // Check cache first
48
- if (useCache && modelNameCache.has(deploymentName)) {
49
- const cachedResult = modelNameCache.get(deploymentName);
50
- logger.debug('Model name resolved from cache', {
51
- deployment: deploymentName,
52
- resolved: cachedResult,
53
- });
54
- return cachedResult;
55
- }
56
- try {
57
- const resolved = resolveModelNameHeuristic(deploymentName);
58
- // Cache the result
59
- if (useCache) {
60
- modelNameCache.set(deploymentName, resolved);
61
- }
62
- // Log successful resolution
63
- if (resolved !== deploymentName) {
64
- logger.debug('Model name resolved via heuristics', {
65
- deployment: deploymentName,
66
- resolved,
67
- });
68
- }
69
- return resolved;
70
- }
71
- catch (error) {
72
- logger.error('Error during model name resolution', {
73
- deployment: deploymentName,
74
- error: error instanceof Error ? error.message : String(error),
75
- });
76
- // Fallback to deployment name
77
- return deploymentName;
78
- }
79
- }
80
- /**
81
- * Heuristic pattern matching for Azure deployment names
82
- * Based on real-world patterns observed in the Python implementation
83
- *
84
- * @param deploymentName - Azure deployment name
85
- * @returns LiteLLM-compatible model name
86
- */
87
- function resolveModelNameHeuristic(deploymentName) {
88
- const nameLower = deploymentName.toLowerCase();
89
- // GPT-4o family - handle both "gpt-4o" and "o4" patterns
90
- if (/gpt-?4o/.test(nameLower) || /o4/.test(nameLower)) {
91
- if (/mini/.test(nameLower))
92
- return 'gpt-4o-mini';
93
- return 'gpt-4o';
94
- }
95
- // GPT-4 family (non-omni)
96
- if (/gpt-?4(?!o)/.test(nameLower)) {
97
- if (/turbo/.test(nameLower))
98
- return 'gpt-4-turbo';
99
- if (/vision/.test(nameLower) || /v/.test(nameLower))
100
- return 'gpt-4-vision-preview';
101
- return 'gpt-4';
102
- }
103
- // GPT-3.5 family
104
- if (/gpt-?3\.?5/.test(nameLower) || /35-turbo/.test(nameLower) || /gpt-35/.test(nameLower)) {
105
- if (/instruct/.test(nameLower))
106
- return 'gpt-3.5-turbo-instruct';
107
- return 'gpt-3.5-turbo';
108
- }
109
- // Embedding models - exact matches work well
110
- if (/embed/.test(nameLower)) {
111
- if (/text-embedding-3-large/.test(nameLower))
112
- return 'text-embedding-3-large';
113
- if (/text-embedding-3-small/.test(nameLower))
114
- return 'text-embedding-3-small';
115
- if (/text-embedding-ada-002/.test(nameLower) || /ada-002/.test(nameLower))
116
- return 'text-embedding-ada-002';
117
- if (/3-large/.test(nameLower))
118
- return 'text-embedding-3-large';
119
- if (/3-small/.test(nameLower))
120
- return 'text-embedding-3-small';
121
- }
122
- // Ada-002 pattern (can appear without "embed" in deployment name)
123
- if (/ada-002/.test(nameLower))
124
- return 'text-embedding-ada-002';
125
- // DALL-E models
126
- if (/dall-?e/.test(nameLower)) {
127
- if (/3/.test(nameLower))
128
- return 'dall-e-3';
129
- if (/2/.test(nameLower))
130
- return 'dall-e-2';
131
- }
132
- // Whisper models
133
- if (/whisper/.test(nameLower))
134
- return 'whisper-1';
135
- // TTS models
136
- if (/tts/.test(nameLower)) {
137
- if (/hd/.test(nameLower))
138
- return 'tts-1-hd';
139
- return 'tts-1';
140
- }
141
- if (constants_js_1.knownModels.includes(nameLower))
142
- return nameLower;
143
- // No heuristic match found - log warning and use deployment name
144
- if (!failedResolutionCache.has(deploymentName)) {
145
- logger.warn(`⚠️ No heuristic match for Azure deployment: ${deploymentName}. Using deployment name for pricing. Consider adding pattern to azure-model-resolver.ts`);
146
- failedResolutionCache.add(deploymentName);
147
- }
148
- return deploymentName;
149
- }
150
- /**
151
- * Clear the model name cache
152
- * Useful for testing or when deployment configurations change
153
- */
154
- function clearModelNameCache() {
155
- modelNameCache.clear();
156
- failedResolutionCache.clear();
157
- (0, index_js_1.getLogger)().debug('Model name cache cleared');
158
- }
159
- /**
160
- * Get cache statistics for monitoring
161
- */
162
- function getModelNameCacheStats() {
163
- return {
164
- cacheSize: modelNameCache.size,
165
- failedResolutionCount: failedResolutionCache.size,
166
- cacheEntries: Array.from(modelNameCache.entries()).map(([deployment, resolved]) => ({
167
- deployment,
168
- resolved,
169
- })),
170
- };
171
- }
172
- /**
173
- * Batch resolve multiple deployment names
174
- * Useful for pre-warming cache or bulk operations
175
- *
176
- * @param deploymentNames - Array of deployment names to resolve
177
- * @returns Map of deployment name to resolved model name
178
- */
179
- function batchResolveModelNames(deploymentNames) {
180
- const results = new Map();
181
- logger.debug('Batch resolving model names', {
182
- count: deploymentNames.length,
183
- deployments: deploymentNames,
184
- });
185
- for (const deployment of deploymentNames) {
186
- try {
187
- const resolved = resolveAzureModelName(deployment);
188
- results.set(deployment, resolved);
189
- }
190
- catch (error) {
191
- logger.error('Error in batch resolution', {
192
- deployment,
193
- error: error instanceof Error ? error.message : String(error),
194
- });
195
- results.set(deployment, deployment); // Fallback to original name
196
- }
197
- }
198
- return results;
199
- }
200
- /**
201
- * Check if a deployment name would be resolved to a different model name
202
- * Useful for validation and testing
203
- *
204
- * @param deploymentName - Azure deployment name
205
- * @returns true if the deployment name would be transformed
206
- */
207
- function wouldTransformDeploymentName(deploymentName) {
208
- const resolved = resolveAzureModelName(deploymentName, false); // Don't use cache for this check
209
- return resolved !== deploymentName;
210
- }
211
- //# sourceMappingURL=azure-model-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"azure-model-resolver.js","sourceRoot":"","sources":["../../../src/utils/azure-model-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,185 +0,0 @@
1
- "use strict";
2
- /**
3
- * Request Handler Factory
4
- *
5
- * Eliminates dynamic require() calls and provides a clean factory pattern
6
- * for creating request handlers with proper dependency injection.
7
- */
8
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
- if (k2 === undefined) k2 = k;
10
- var desc = Object.getOwnPropertyDescriptor(m, k);
11
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
- desc = { enumerable: true, get: function() { return m[k]; } };
13
- }
14
- Object.defineProperty(o, k2, desc);
15
- }) : (function(o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- o[k2] = m[k];
18
- }));
19
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
- Object.defineProperty(o, "default", { enumerable: true, value: v });
21
- }) : function(o, v) {
22
- o["default"] = v;
23
- });
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.requestHandlerFactory = exports.RequestHandlerFactory = void 0;
43
- exports.initializeRequestHandlerFactory = initializeRequestHandlerFactory;
44
- exports.ensureFactoryInitialized = ensureFactoryInitialized;
45
- /**
46
- * Request handler factory class
47
- *
48
- * This eliminates the need for dynamic require() calls and provides
49
- * a clean dependency injection pattern.
50
- */
51
- class RequestHandlerFactory {
52
- constructor() {
53
- this.dependencies = null;
54
- }
55
- /**
56
- * Initialize the factory with dependencies
57
- */
58
- initialize(dependencies) {
59
- this.dependencies = dependencies;
60
- }
61
- /**
62
- * Get streaming request handler
63
- */
64
- getStreamingHandler() {
65
- if (!this.dependencies) {
66
- throw new Error('RequestHandlerFactory not initialized. Call initialize() first.');
67
- }
68
- return this.dependencies.handleStreamingRequest;
69
- }
70
- /**
71
- * Get non-streaming request handler
72
- */
73
- getNonStreamingHandler() {
74
- if (!this.dependencies) {
75
- throw new Error('RequestHandlerFactory not initialized. Call initialize() first.');
76
- }
77
- return this.dependencies.handleNonStreamingRequest;
78
- }
79
- /**
80
- * Get embeddings request handler
81
- */
82
- getEmbeddingsHandler() {
83
- if (!this.dependencies) {
84
- throw new Error('RequestHandlerFactory not initialized. Call initialize() first.');
85
- }
86
- return this.dependencies.handleEmbeddingsRequest;
87
- }
88
- /**
89
- * Route chat request to appropriate handler
90
- */
91
- routeChatRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance) {
92
- if (!this.dependencies) {
93
- throw new Error('RequestHandlerFactory not initialized. Call initialize() first.');
94
- }
95
- // Pass clean params (without usageMetadata) to handlers
96
- // The handlers will receive usageMetadata separately
97
- if (params.stream) {
98
- return this.dependencies.handleStreamingRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance);
99
- }
100
- else {
101
- return this.dependencies.handleNonStreamingRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance);
102
- }
103
- }
104
- /**
105
- * Route embeddings request to appropriate handler
106
- */
107
- routeEmbeddingsRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance) {
108
- if (!this.dependencies) {
109
- throw new Error('RequestHandlerFactory not initialized. Call initialize() first.');
110
- }
111
- // Pass clean params (without usageMetadata) to handler
112
- // The handler will receive usageMetadata separately
113
- return this.dependencies.handleEmbeddingsRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance);
114
- }
115
- /**
116
- * Route responses request to appropriate handler (new OpenAI Responses API)
117
- */
118
- routeResponsesRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance) {
119
- if (!this.dependencies) {
120
- throw new Error('RequestHandlerFactory not initialized. Call initialize() first.');
121
- }
122
- // Route to appropriate handler based on streaming
123
- if (params.stream) {
124
- return this.dependencies.handleResponsesStreamingRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance);
125
- }
126
- else {
127
- return this.dependencies.handleResponsesNonStreamingRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance);
128
- }
129
- }
130
- /**
131
- * Check if factory is initialized
132
- */
133
- isInitialized() {
134
- return this.dependencies !== null;
135
- }
136
- }
137
- exports.RequestHandlerFactory = RequestHandlerFactory;
138
- /**
139
- * Global factory instance
140
- */
141
- exports.requestHandlerFactory = new RequestHandlerFactory();
142
- /**
143
- * Initialize the global factory (called once during module setup)
144
- * Uses dynamic import to avoid circular dependencies
145
- */
146
- async function initializeRequestHandlerFactory() {
147
- // Use dynamic import instead of require for better TypeScript support
148
- const handlerModule = await Promise.resolve().then(() => __importStar(require('../core/wrapper/request-handler.js')));
149
- exports.requestHandlerFactory.initialize({
150
- handleStreamingRequest: handlerModule.handleStreamingRequest,
151
- handleNonStreamingRequest: handlerModule.handleNonStreamingRequest,
152
- handleEmbeddingsRequest: handlerModule.handleEmbeddingsRequest,
153
- handleResponsesStreamingRequest: handlerModule.handleResponsesStreamingRequest,
154
- handleResponsesNonStreamingRequest: handlerModule.handleResponsesNonStreamingRequest,
155
- });
156
- }
157
- // Promise cache to prevent race conditions during initialization
158
- let initializationPromise = null;
159
- /**
160
- * Utility function to ensure factory is initialized
161
- */
162
- async function ensureFactoryInitialized() {
163
- if (!exports.requestHandlerFactory.isInitialized()) {
164
- if (!initializationPromise) {
165
- initializationPromise = initializeRequestHandlerFactoryAsync();
166
- }
167
- await initializationPromise;
168
- }
169
- }
170
- /**
171
- * Async initialization for ES Module compatibility
172
- * Uses dynamic import for ES Module compatibility
173
- */
174
- async function initializeRequestHandlerFactoryAsync() {
175
- // Use dynamic import for ES Module compatibility
176
- const handlerModule = await Promise.resolve().then(() => __importStar(require('../core/wrapper/request-handler.js')));
177
- exports.requestHandlerFactory.initialize({
178
- handleStreamingRequest: handlerModule.handleStreamingRequest,
179
- handleNonStreamingRequest: handlerModule.handleNonStreamingRequest,
180
- handleEmbeddingsRequest: handlerModule.handleEmbeddingsRequest,
181
- handleResponsesStreamingRequest: handlerModule.handleResponsesStreamingRequest,
182
- handleResponsesNonStreamingRequest: handlerModule.handleResponsesNonStreamingRequest,
183
- });
184
- }
185
- //# sourceMappingURL=request-handler-factory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-handler-factory.js","sourceRoot":"","sources":["../../../src/utils/request-handler-factory.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4OH,0EAWC;AAQD,4DAOC;AA/LD;;;;;GAKG;AACH,MAAa,qBAAqB;IAAlC;QACU,iBAAY,GAAsC,IAAI,CAAC;IAmJjE,CAAC;IAjJC;;OAEG;IACH,UAAU,CAAC,YAAwC;QACjD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,sBAAsB;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,gBAAgB,CACd,cAAsC,EACtC,MAAgD,EAChD,OAAyC,EACzC,aAAwC,EACxC,gBAAwB,EACxB,QAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QAED,wDAAwD;QACxD,qDAAqD;QACrD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAC7C,cAAc,EACd,MAAM,EACN,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,QAAQ,CACT,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAChD,cAAc,EACd,MAAM,EACN,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,sBAAsB,CACpB,cAAsC,EACtC,MAAqD,EACrD,OAAyC,EACzC,aAAwC,EACxC,gBAAwB,EACxB,QAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QAED,uDAAuD;QACvD,oDAAoD;QACpD,OAAO,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAC9C,cAAc,EACd,MAAM,EACN,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,qBAAqB,CACnB,cAA+C,EAC/C,MAAqD,EACrD,OAAyC,EACzC,aAAwC,EACxC,gBAAwB,EACxB,QAA8B;QAE9B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QAED,kDAAkD;QAClD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,YAAY,CAAC,+BAA+B,CACtD,cAAc,EACd,MAAM,EACN,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,QAAQ,CACT,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,YAAY,CAAC,kCAAkC,CACzD,cAAc,EACd,MAAM,EACN,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,QAAQ,CACT,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC;IACpC,CAAC;CACF;AApJD,sDAoJC;AAED;;GAEG;AACU,QAAA,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAC;AAEjE;;;GAGG;AACI,KAAK,UAAU,+BAA+B;IACnD,sEAAsE;IACtE,MAAM,aAAa,GAAG,wDAAa,oCAAoC,GAAC,CAAC;IAEzE,6BAAqB,CAAC,UAAU,CAAC;QAC/B,sBAAsB,EAAE,aAAa,CAAC,sBAAsB;QAC5D,yBAAyB,EAAE,aAAa,CAAC,yBAAyB;QAClE,uBAAuB,EAAE,aAAa,CAAC,uBAAuB;QAC9D,+BAA+B,EAAE,aAAa,CAAC,+BAA+B;QAC9E,kCAAkC,EAAE,aAAa,CAAC,kCAAkC;KACrF,CAAC,CAAC;AACL,CAAC;AAED,iEAAiE;AACjE,IAAI,qBAAqB,GAAyB,IAAI,CAAC;AAEvD;;GAEG;AACI,KAAK,UAAU,wBAAwB;IAC5C,IAAI,CAAC,6BAAqB,CAAC,aAAa,EAAE,EAAE,CAAC;QAC3C,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,qBAAqB,GAAG,oCAAoC,EAAE,CAAC;QACjE,CAAC;QACD,MAAM,qBAAqB,CAAC;IAC9B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,oCAAoC;IACjD,iDAAiD;IACjD,MAAM,aAAa,GAAG,wDAAa,oCAAoC,GAAC,CAAC;IAEzE,6BAAqB,CAAC,UAAU,CAAC;QAC/B,sBAAsB,EAAE,aAAa,CAAC,sBAAsB;QAC5D,yBAAyB,EAAE,aAAa,CAAC,yBAAyB;QAClE,uBAAuB,EAAE,aAAa,CAAC,uBAAuB;QAC9D,+BAA+B,EAAE,aAAa,CAAC,+BAA+B;QAC9E,kCAAkC,EAAE,aAAa,CAAC,kCAAkC;KACrF,CAAC,CAAC;AACL,CAAC"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Wrapper module - Main exports
3
- *
4
- * This module provides a clean interface for OpenAI client wrapping,
5
- * separating concerns into focused sub-modules.
6
- */
7
- // Re-export all wrapper functionality
8
- export { patchOpenAI, patchOpenAIInstance, getProviderInfo } from './instance-patcher.js';
9
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/wrapper/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sCAAsC;AACtC,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,199 +0,0 @@
1
- /**
2
- * Instance Patcher Module
3
- *
4
- * Handles patching of OpenAI client instances.
5
- * Extracted from wrapper.ts for better organization.
6
- */
7
- import { isOpenAIClientInstance } from '../../utils/type-guards.js';
8
- import { extractMetadata, createLoggingContext } from '../../utils/metadata-builder.js';
9
- import { requestHandlerFactory, ensureFactoryInitialized, } from '../../utils/request-handler-factory.js';
10
- import { getLogger, getConfig } from '../config/index.js';
11
- import { detectProvider } from '../providers/index.js';
12
- // Import the type augmentations to ensure they're available
13
- import '../../types/openai-augmentation.js';
14
- /**
15
- * Set to track patched instances
16
- */
17
- const patchedInstances = new WeakSet();
18
- /**
19
- * WeakMap to store provider information for each client instance
20
- */
21
- const instanceProviders = new WeakMap();
22
- // Global logger
23
- const logger = getLogger();
24
- /**
25
- * Get provider information for a client instance
26
- */
27
- export function getProviderInfo(instance) {
28
- return instanceProviders.get(instance);
29
- }
30
- /**
31
- * Simple approach: Only patch instances when users create them
32
- * No global patching, no dummy keys - just clean instance patching
33
- */
34
- export function patchOpenAI() {
35
- logger.info('Revenium OpenAI middleware loaded and ready');
36
- logger.debug('Use patchOpenAIInstance() to patch specific OpenAI instances');
37
- }
38
- /**
39
- * Manually patch an existing OpenAI instance
40
- * This is the main function users should call
41
- */
42
- export function patchOpenAIInstance(instance) {
43
- // Check if middleware is initialized
44
- const config = getConfig();
45
- if (!config) {
46
- logger.warn('Revenium middleware not initialized.');
47
- logger.warn('Auto-initialization may have failed. Try calling initializeReveniumFromEnv() explicitly.');
48
- logger.warn('Check that REVENIUM_METERING_API_KEY environment variable is set.');
49
- logger.warn('OpenAI instance will be patched but tracking may not work without proper configuration.');
50
- }
51
- else {
52
- logger.debug('Revenium middleware is properly configured');
53
- }
54
- if (patchedInstances.has(instance)) {
55
- logger.debug('OpenAI instance already patched, skipping');
56
- return instance;
57
- }
58
- patchInstance(instance);
59
- logger.debug('OpenAI instance patched successfully');
60
- return instance;
61
- }
62
- /**
63
- * Patch an individual OpenAI instance
64
- */
65
- function patchInstance(instance) {
66
- try {
67
- // Validate instance
68
- if (!isOpenAIClientInstance(instance)) {
69
- logger.error('Invalid OpenAI client instance provided to patchInstance');
70
- return;
71
- }
72
- // Detect provider type for this instance
73
- const providerInfo = detectProvider(instance);
74
- instanceProviders.set(instance, providerInfo);
75
- logger.debug('Provider detection completed for instance', {
76
- provider: providerInfo.provider,
77
- isAzure: providerInfo.isAzure,
78
- hasAzureConfig: !!providerInfo.azureConfig,
79
- });
80
- // Patch chat completions
81
- patchChatCompletions(instance);
82
- // Patch embeddings
83
- patchEmbeddings(instance);
84
- // Patch responses API (new OpenAI Responses API)
85
- patchResponses(instance);
86
- // Mark as patched
87
- patchedInstances.add(instance);
88
- }
89
- catch (error) {
90
- logger.error('Failed to patch OpenAI instance', {
91
- error: error instanceof Error ? error.message : String(error),
92
- });
93
- }
94
- }
95
- /**
96
- * Patch chat completions endpoint
97
- */
98
- function patchChatCompletions(instance) {
99
- if (!instance.chat || !instance.chat.completions || !instance.chat.completions.create) {
100
- return logger.warn('OpenAI instance missing chat.completions.create, skipping chat patch');
101
- }
102
- // Store the original create method
103
- const originalCreate = instance.chat.completions.create.bind(instance.chat.completions);
104
- // Replace the create method with our wrapped version
105
- instance.chat.completions.create = async function (params, options) {
106
- // Extract metadata using utility
107
- const { metadata, cleanParams } = extractMetadata(params);
108
- const typedParams = params;
109
- logger.debug('OpenAI chat.completions.create intercepted', {
110
- ...createLoggingContext(metadata),
111
- model: typedParams.model,
112
- stream: !!typedParams.stream,
113
- });
114
- // Record request start time
115
- const requestStartTime = Date.now();
116
- // Ensure factory is initialized and route request
117
- try {
118
- await ensureFactoryInitialized();
119
- }
120
- catch (error) {
121
- logger.error('Failed to initialize request handler factory', { error });
122
- throw new Error('Middleware initialization failed - cannot process request');
123
- }
124
- return requestHandlerFactory.routeChatRequest(originalCreate, cleanParams, options, metadata, requestStartTime, instance);
125
- };
126
- }
127
- /**
128
- * Patch embeddings endpoint
129
- */
130
- function patchEmbeddings(instance) {
131
- if (!instance.embeddings || !instance.embeddings.create) {
132
- return logger.warn('OpenAI instance missing embeddings.create, skipping embeddings patch');
133
- }
134
- // Store the original embeddings create method
135
- const originalEmbeddingsCreate = instance.embeddings.create.bind(instance.embeddings);
136
- // Replace the embeddings create method with our wrapped version
137
- instance.embeddings.create = async function (params, options) {
138
- // Extract metadata using utility
139
- const { metadata, cleanParams } = extractMetadata(params);
140
- const typedParams = params;
141
- logger.debug('OpenAI embeddings.create intercepted', {
142
- ...createLoggingContext(metadata),
143
- model: typedParams.model,
144
- inputType: typeof typedParams.input,
145
- });
146
- // Record request start time
147
- const requestStartTime = Date.now();
148
- // Ensure factory is initialized and route request
149
- try {
150
- await ensureFactoryInitialized();
151
- }
152
- catch (error) {
153
- logger.error('Failed to initialize request handler factory', { error });
154
- throw new Error('Middleware initialization failed - cannot process request');
155
- }
156
- return requestHandlerFactory.routeEmbeddingsRequest(originalEmbeddingsCreate, cleanParams, options, metadata, requestStartTime, instance);
157
- };
158
- }
159
- /**
160
- * Patch responses endpoint (new OpenAI Responses API)
161
- */
162
- function patchResponses(instance) {
163
- // Type assertion for new Responses API (not yet in OpenAI types)
164
- const responsesAPI = instance;
165
- // Check if the instance has the responses API (it's a newer feature)
166
- if (!responsesAPI.responses || !responsesAPI.responses.create) {
167
- logger.debug('OpenAI instance missing responses.create, skipping responses patch (this is normal for older SDK versions)');
168
- return;
169
- }
170
- // Store the original responses create method
171
- const originalResponsesCreate = responsesAPI.responses.create.bind(responsesAPI.responses);
172
- // Replace the responses create method with our wrapped version
173
- responsesAPI.responses.create = async function (params, options) {
174
- // Extract metadata using utility (similar to chat completions)
175
- const { metadata, cleanParams } = extractMetadata(params);
176
- logger.debug('OpenAI responses.create intercepted', {
177
- ...createLoggingContext(metadata),
178
- model: params.model,
179
- stream: !!params.stream,
180
- inputType: typeof params.input,
181
- });
182
- // Record request start time
183
- const requestStartTime = Date.now();
184
- // Ensure factory is initialized and route request
185
- try {
186
- await ensureFactoryInitialized();
187
- }
188
- catch (error) {
189
- logger.error('Failed to initialize request handler factory', { error });
190
- throw new Error('Middleware initialization failed - cannot process request');
191
- }
192
- return requestHandlerFactory.routeResponsesRequest(originalResponsesCreate, cleanParams, options, metadata, requestStartTime, instance);
193
- };
194
- }
195
- /**
196
- * Export instance providers for request handlers
197
- */
198
- export { instanceProviders };
199
- //# sourceMappingURL=instance-patcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instance-patcher.js","sourceRoot":"","sources":["../../../../src/core/wrapper/instance-patcher.ts"],"names":[],"mappings":"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"}