@revenium/openai 1.0.8

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 (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1095 -0
  3. package/dist/cjs/core/config/azure-config.js +64 -0
  4. package/dist/cjs/core/config/azure-config.js.map +1 -0
  5. package/dist/cjs/core/config/index.js +41 -0
  6. package/dist/cjs/core/config/index.js.map +1 -0
  7. package/dist/cjs/core/config/loader.js +63 -0
  8. package/dist/cjs/core/config/loader.js.map +1 -0
  9. package/dist/cjs/core/config/manager.js +93 -0
  10. package/dist/cjs/core/config/manager.js.map +1 -0
  11. package/dist/cjs/core/config/validator.js +73 -0
  12. package/dist/cjs/core/config/validator.js.map +1 -0
  13. package/dist/cjs/core/providers/detector.js +140 -0
  14. package/dist/cjs/core/providers/detector.js.map +1 -0
  15. package/dist/cjs/core/providers/index.js +18 -0
  16. package/dist/cjs/core/providers/index.js.map +1 -0
  17. package/dist/cjs/core/tracking/api-client.js +68 -0
  18. package/dist/cjs/core/tracking/api-client.js.map +1 -0
  19. package/dist/cjs/core/tracking/index.js +23 -0
  20. package/dist/cjs/core/tracking/index.js.map +1 -0
  21. package/dist/cjs/core/tracking/payload-builder.js +107 -0
  22. package/dist/cjs/core/tracking/payload-builder.js.map +1 -0
  23. package/dist/cjs/core/tracking/usage-tracker.js +120 -0
  24. package/dist/cjs/core/tracking/usage-tracker.js.map +1 -0
  25. package/dist/cjs/core/wrapper/index.js +15 -0
  26. package/dist/cjs/core/wrapper/index.js.map +1 -0
  27. package/dist/cjs/core/wrapper/instance-patcher.js +202 -0
  28. package/dist/cjs/core/wrapper/instance-patcher.js.map +1 -0
  29. package/dist/cjs/core/wrapper/request-handler.js +317 -0
  30. package/dist/cjs/core/wrapper/request-handler.js.map +1 -0
  31. package/dist/cjs/core/wrapper/stream-wrapper.js +82 -0
  32. package/dist/cjs/core/wrapper/stream-wrapper.js.map +1 -0
  33. package/dist/cjs/index.js +195 -0
  34. package/dist/cjs/index.js.map +1 -0
  35. package/dist/cjs/types/function-parameters.js +14 -0
  36. package/dist/cjs/types/function-parameters.js.map +1 -0
  37. package/dist/cjs/types/index.js +49 -0
  38. package/dist/cjs/types/index.js.map +1 -0
  39. package/dist/cjs/types/openai-augmentation.js +55 -0
  40. package/dist/cjs/types/openai-augmentation.js.map +1 -0
  41. package/dist/cjs/types/responses-api.js +30 -0
  42. package/dist/cjs/types/responses-api.js.map +1 -0
  43. package/dist/cjs/utils/azure-model-resolver.js +211 -0
  44. package/dist/cjs/utils/azure-model-resolver.js.map +1 -0
  45. package/dist/cjs/utils/constants.js +24 -0
  46. package/dist/cjs/utils/constants.js.map +1 -0
  47. package/dist/cjs/utils/error-handler.js +194 -0
  48. package/dist/cjs/utils/error-handler.js.map +1 -0
  49. package/dist/cjs/utils/metadata-builder.js +184 -0
  50. package/dist/cjs/utils/metadata-builder.js.map +1 -0
  51. package/dist/cjs/utils/provider-detection.js +212 -0
  52. package/dist/cjs/utils/provider-detection.js.map +1 -0
  53. package/dist/cjs/utils/request-handler-factory.js +185 -0
  54. package/dist/cjs/utils/request-handler-factory.js.map +1 -0
  55. package/dist/cjs/utils/stop-reason-mapper.js +70 -0
  56. package/dist/cjs/utils/stop-reason-mapper.js.map +1 -0
  57. package/dist/cjs/utils/type-guards.js +175 -0
  58. package/dist/cjs/utils/type-guards.js.map +1 -0
  59. package/dist/cjs/utils/url-builder.js +43 -0
  60. package/dist/cjs/utils/url-builder.js.map +1 -0
  61. package/dist/esm/core/config/azure-config.js +61 -0
  62. package/dist/esm/core/config/azure-config.js.map +1 -0
  63. package/dist/esm/core/config/index.js +13 -0
  64. package/dist/esm/core/config/index.js.map +1 -0
  65. package/dist/esm/core/config/loader.js +58 -0
  66. package/dist/esm/core/config/loader.js.map +1 -0
  67. package/dist/esm/core/config/manager.js +85 -0
  68. package/dist/esm/core/config/manager.js.map +1 -0
  69. package/dist/esm/core/config/validator.js +69 -0
  70. package/dist/esm/core/config/validator.js.map +1 -0
  71. package/dist/esm/core/providers/detector.js +134 -0
  72. package/dist/esm/core/providers/detector.js.map +1 -0
  73. package/dist/esm/core/providers/index.js +10 -0
  74. package/dist/esm/core/providers/index.js.map +1 -0
  75. package/dist/esm/core/tracking/api-client.js +65 -0
  76. package/dist/esm/core/tracking/api-client.js.map +1 -0
  77. package/dist/esm/core/tracking/index.js +13 -0
  78. package/dist/esm/core/tracking/index.js.map +1 -0
  79. package/dist/esm/core/tracking/payload-builder.js +104 -0
  80. package/dist/esm/core/tracking/payload-builder.js.map +1 -0
  81. package/dist/esm/core/tracking/usage-tracker.js +114 -0
  82. package/dist/esm/core/tracking/usage-tracker.js.map +1 -0
  83. package/dist/esm/core/wrapper/index.js +9 -0
  84. package/dist/esm/core/wrapper/index.js.map +1 -0
  85. package/dist/esm/core/wrapper/instance-patcher.js +199 -0
  86. package/dist/esm/core/wrapper/instance-patcher.js.map +1 -0
  87. package/dist/esm/core/wrapper/request-handler.js +310 -0
  88. package/dist/esm/core/wrapper/request-handler.js.map +1 -0
  89. package/dist/esm/core/wrapper/stream-wrapper.js +79 -0
  90. package/dist/esm/core/wrapper/stream-wrapper.js.map +1 -0
  91. package/dist/esm/index.js +175 -0
  92. package/dist/esm/index.js.map +1 -0
  93. package/dist/esm/types/function-parameters.js +13 -0
  94. package/dist/esm/types/function-parameters.js.map +1 -0
  95. package/dist/esm/types/index.js +32 -0
  96. package/dist/esm/types/index.js.map +1 -0
  97. package/dist/esm/types/openai-augmentation.js +54 -0
  98. package/dist/esm/types/openai-augmentation.js.map +1 -0
  99. package/dist/esm/types/responses-api.js +26 -0
  100. package/dist/esm/types/responses-api.js.map +1 -0
  101. package/dist/esm/utils/azure-model-resolver.js +204 -0
  102. package/dist/esm/utils/azure-model-resolver.js.map +1 -0
  103. package/dist/esm/utils/constants.js +21 -0
  104. package/dist/esm/utils/constants.js.map +1 -0
  105. package/dist/esm/utils/error-handler.js +182 -0
  106. package/dist/esm/utils/error-handler.js.map +1 -0
  107. package/dist/esm/utils/metadata-builder.js +176 -0
  108. package/dist/esm/utils/metadata-builder.js.map +1 -0
  109. package/dist/esm/utils/provider-detection.js +206 -0
  110. package/dist/esm/utils/provider-detection.js.map +1 -0
  111. package/dist/esm/utils/request-handler-factory.js +146 -0
  112. package/dist/esm/utils/request-handler-factory.js.map +1 -0
  113. package/dist/esm/utils/stop-reason-mapper.js +65 -0
  114. package/dist/esm/utils/stop-reason-mapper.js.map +1 -0
  115. package/dist/esm/utils/type-guards.js +158 -0
  116. package/dist/esm/utils/type-guards.js.map +1 -0
  117. package/dist/esm/utils/url-builder.js +39 -0
  118. package/dist/esm/utils/url-builder.js.map +1 -0
  119. package/dist/types/core/config/azure-config.d.ts +16 -0
  120. package/dist/types/core/config/azure-config.d.ts.map +1 -0
  121. package/dist/types/core/config/index.d.ts +11 -0
  122. package/dist/types/core/config/index.d.ts.map +1 -0
  123. package/dist/types/core/config/loader.d.ts +20 -0
  124. package/dist/types/core/config/loader.d.ts.map +1 -0
  125. package/dist/types/core/config/manager.d.ts +32 -0
  126. package/dist/types/core/config/manager.d.ts.map +1 -0
  127. package/dist/types/core/config/validator.d.ts +23 -0
  128. package/dist/types/core/config/validator.d.ts.map +1 -0
  129. package/dist/types/core/providers/detector.d.ts +44 -0
  130. package/dist/types/core/providers/detector.d.ts.map +1 -0
  131. package/dist/types/core/providers/index.d.ts +9 -0
  132. package/dist/types/core/providers/index.d.ts.map +1 -0
  133. package/dist/types/core/tracking/api-client.d.ts +17 -0
  134. package/dist/types/core/tracking/api-client.d.ts.map +1 -0
  135. package/dist/types/core/tracking/index.d.ts +11 -0
  136. package/dist/types/core/tracking/index.d.ts.map +1 -0
  137. package/dist/types/core/tracking/payload-builder.d.ts +24 -0
  138. package/dist/types/core/tracking/payload-builder.d.ts.map +1 -0
  139. package/dist/types/core/tracking/usage-tracker.d.ts +48 -0
  140. package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -0
  141. package/dist/types/core/wrapper/index.d.ts +8 -0
  142. package/dist/types/core/wrapper/index.d.ts.map +1 -0
  143. package/dist/types/core/wrapper/instance-patcher.d.ts +33 -0
  144. package/dist/types/core/wrapper/instance-patcher.d.ts.map +1 -0
  145. package/dist/types/core/wrapper/request-handler.d.ts +29 -0
  146. package/dist/types/core/wrapper/request-handler.d.ts.map +1 -0
  147. package/dist/types/core/wrapper/stream-wrapper.d.ts +13 -0
  148. package/dist/types/core/wrapper/stream-wrapper.d.ts.map +1 -0
  149. package/dist/types/index.d.ts +179 -0
  150. package/dist/types/index.d.ts.map +1 -0
  151. package/dist/types/types/function-parameters.d.ts +229 -0
  152. package/dist/types/types/function-parameters.d.ts.map +1 -0
  153. package/dist/types/types/index.d.ts +283 -0
  154. package/dist/types/types/index.d.ts.map +1 -0
  155. package/dist/types/types/openai-augmentation.d.ts +226 -0
  156. package/dist/types/types/openai-augmentation.d.ts.map +1 -0
  157. package/dist/types/types/responses-api.d.ts +247 -0
  158. package/dist/types/types/responses-api.d.ts.map +1 -0
  159. package/dist/types/utils/azure-model-resolver.d.ts +41 -0
  160. package/dist/types/utils/azure-model-resolver.d.ts.map +1 -0
  161. package/dist/types/utils/constants.d.ts +4 -0
  162. package/dist/types/utils/constants.d.ts.map +1 -0
  163. package/dist/types/utils/error-handler.d.ts +95 -0
  164. package/dist/types/utils/error-handler.d.ts.map +1 -0
  165. package/dist/types/utils/metadata-builder.d.ts +64 -0
  166. package/dist/types/utils/metadata-builder.d.ts.map +1 -0
  167. package/dist/types/utils/provider-detection.d.ts +51 -0
  168. package/dist/types/utils/provider-detection.d.ts.map +1 -0
  169. package/dist/types/utils/request-handler-factory.d.ts +81 -0
  170. package/dist/types/utils/request-handler-factory.d.ts.map +1 -0
  171. package/dist/types/utils/stop-reason-mapper.d.ts +29 -0
  172. package/dist/types/utils/stop-reason-mapper.d.ts.map +1 -0
  173. package/dist/types/utils/type-guards.d.ts +73 -0
  174. package/dist/types/utils/type-guards.d.ts.map +1 -0
  175. package/dist/types/utils/url-builder.d.ts +25 -0
  176. package/dist/types/utils/url-builder.d.ts.map +1 -0
  177. package/package.json +84 -0
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Revenium OpenAI Middleware for TypeScript
3
+ *
4
+ * This middleware tracks OpenAI usage and sends metrics to Revenium.
5
+ * Uses hybrid initialization: auto-initializes on import with graceful fallback to manual init.
6
+ *
7
+ * Environment Variables:
8
+ * REVENIUM_METERING_API_KEY=hak_your_api_key
9
+ * REVENIUM_METERING_BASE_URL=https://api.revenium.io/meter (optional)
10
+ * OPENAI_API_KEY=sk_your_openai_key
11
+ *
12
+ * Simple Usage (auto-initialization):
13
+ * import { patchOpenAIInstance } from 'revenium-middleware-openai-node';
14
+ * import OpenAI from 'openai';
15
+ *
16
+ * const openai = patchOpenAIInstance(new OpenAI());
17
+ * // Auto-initializes from environment variables
18
+ *
19
+ * Advanced Usage (explicit initialization):
20
+ * import { initializeReveniumFromEnv, patchOpenAIInstance } from 'revenium-middleware-openai-node';
21
+ * import OpenAI from 'openai';
22
+ *
23
+ * const result = initializeReveniumFromEnv();
24
+ * if (!result.success) {
25
+ * throw new Error(result.message);
26
+ * }
27
+ * const openai = patchOpenAIInstance(new OpenAI());
28
+ *
29
+ * const response = await openai.chat.completions.create({
30
+ * model: 'gpt-4',
31
+ * messages: [{ role: 'user', content: 'Hello!' }],
32
+ * usageMetadata: {
33
+ * subscriber: {
34
+ * id: 'user-123',
35
+ * email: 'user@my-org.com'
36
+ * },
37
+ * organizationId: 'my-org',
38
+ * productId: 'my-app'
39
+ * }
40
+ * });
41
+ */
42
+ // Import type augmentations to extend OpenAI types with usageMetadata
43
+ import './types/openai-augmentation.js';
44
+ // Import from new modular structure
45
+ import { setConfig, validateConfig, initializeConfig, getConfig, getLogger, } from './core/config/index.js';
46
+ import { patchOpenAI } from './core/wrapper/index.js';
47
+ // Track initialization state
48
+ let isInitialized = false;
49
+ let autoInitAttempted = false;
50
+ // Note: ExtendedChatCompletionCreateParams and ExtendedEmbeddingCreateParams are no longer exported
51
+ // as they have been replaced with seamless TypeScript module augmentation. The usageMetadata field
52
+ // is now natively available on OpenAI's types without requiring additional imports.
53
+ // Export tracking functions
54
+ export { trackUsageAsync, trackEmbeddingsUsageAsync } from './core/tracking/index.js';
55
+ // Export provider detection functions
56
+ export { detectProvider, hasAzureConfig, validateAzureConfig, getProviderMetadata, } from './core/providers/index.js';
57
+ export { getProviderInfo } from './core/wrapper/index.js';
58
+ // Export Azure model resolution functions
59
+ export { resolveAzureModelName, clearModelNameCache, getModelNameCacheStats, batchResolveModelNames, wouldTransformDeploymentName, } from './utils/azure-model-resolver.js';
60
+ // Global logger
61
+ const logger = getLogger();
62
+ /**
63
+ * Initialize Revenium middleware with configuration
64
+ */
65
+ export function initializeRevenium(config) {
66
+ // Check if already initialized to prevent duplicate initialization
67
+ if (isInitialized) {
68
+ return {
69
+ success: true,
70
+ message: 'Revenium middleware already initialized',
71
+ };
72
+ }
73
+ try {
74
+ // Apply default base URL if not provided
75
+ const configWithDefaults = {
76
+ ...config,
77
+ reveniumBaseUrl: config.reveniumBaseUrl || 'https://api.revenium.io/meter',
78
+ };
79
+ validateConfig(configWithDefaults);
80
+ setConfig(configWithDefaults);
81
+ // Mark as initialized
82
+ isInitialized = true;
83
+ // Patch OpenAI prototype methods
84
+ patchOpenAI();
85
+ return {
86
+ success: true,
87
+ message: 'Revenium middleware initialized successfully',
88
+ };
89
+ }
90
+ catch (error) {
91
+ isInitialized = false;
92
+ return {
93
+ success: false,
94
+ message: error instanceof Error ? error.message : 'Unknown initialization error',
95
+ };
96
+ }
97
+ }
98
+ /**
99
+ * Initialize Revenium middleware from environment variables
100
+ */
101
+ export function initializeReveniumFromEnv() {
102
+ // Check if already initialized to prevent duplicate initialization
103
+ if (isInitialized) {
104
+ return {
105
+ success: true,
106
+ message: 'Revenium middleware already initialized',
107
+ };
108
+ }
109
+ const envSuccess = initializeConfig();
110
+ if (!envSuccess) {
111
+ isInitialized = false;
112
+ return {
113
+ success: false,
114
+ message: 'Failed to load configuration from environment variables. Check REVENIUM_METERING_API_KEY and REVENIUM_METERING_BASE_URL.',
115
+ };
116
+ }
117
+ // Mark as initialized
118
+ isInitialized = true;
119
+ // Patch OpenAI prototype methods
120
+ patchOpenAI();
121
+ return {
122
+ success: true,
123
+ message: 'Revenium middleware initialized from environment',
124
+ };
125
+ }
126
+ /**
127
+ * Manually patch an OpenAI instance (for advanced use cases)
128
+ */
129
+ export { patchOpenAIInstance } from './core/wrapper/index.js';
130
+ /**
131
+ * Auto-initialization with graceful fallback
132
+ * Attempts to initialize from environment variables on module load.
133
+ * If it fails, logs a debug message but doesn't throw - allows manual configuration later.
134
+ */
135
+ function attemptAutoInitialization() {
136
+ if (autoInitAttempted || isInitialized)
137
+ return;
138
+ autoInitAttempted = true;
139
+ try {
140
+ const result = initializeReveniumFromEnv();
141
+ if (result.success) {
142
+ // Auto-init succeeded - log debug message
143
+ logger.debug('Revenium middleware auto-initialized from environment variables');
144
+ }
145
+ else {
146
+ // Auto-init failed - log debug message but don't throw
147
+ logger.debug('Auto-initialization failed, manual initialization required:', result.message);
148
+ }
149
+ }
150
+ catch (error) {
151
+ // Unexpected error during auto-init - log but don't throw
152
+ logger.debug('Auto-initialization encountered error:', error instanceof Error ? error.message : String(error));
153
+ }
154
+ }
155
+ /**
156
+ * Check if middleware has been initialized
157
+ */
158
+ export function isReveniumInitialized() {
159
+ return isInitialized;
160
+ }
161
+ /**
162
+ * Get detailed initialization status
163
+ */
164
+ export function getInitializationStatus() {
165
+ const config = getConfig();
166
+ return {
167
+ initialized: isInitialized,
168
+ hasConfig: !!config,
169
+ hasApiKey: !!config?.reveniumApiKey,
170
+ autoInitAttempted,
171
+ };
172
+ }
173
+ // Perform auto-initialization when module is imported
174
+ attemptAutoInitialization();
175
+ //# 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,13 @@
1
+ /**
2
+ * Function Parameter Types
3
+ *
4
+ * Comprehensive type definitions for function parameters throughout the middleware.
5
+ * These interfaces provide type safety by replacing 'any' types with proper,
6
+ * well-documented interfaces that match OpenAI API structures and internal requirements.
7
+ *
8
+ * @fileoverview Type-safe function parameter definitions
9
+ * @author Revenium
10
+ * @since 1.0.0
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=function-parameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function-parameters.js","sourceRoot":"","sources":["../../../src/types/function-parameters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Core Types Module
3
+ *
4
+ * Central type definitions for the Revenium OpenAI middleware.
5
+ * This module exports all core types used throughout the application.
6
+ */
7
+ // Re-export function parameter types
8
+ export * from './function-parameters.js';
9
+ // Re-export Responses API types
10
+ export * from './responses-api.js';
11
+ /**
12
+ * Supported AI providers
13
+ *
14
+ * Enumeration of AI providers supported by the Revenium middleware.
15
+ * Used for automatic detection, routing, and provider-specific handling.
16
+ *
17
+ * @public
18
+ * @example
19
+ * ```typescript
20
+ * if (providerInfo.provider === Provider.AZURE_OPENAI) {
21
+ * console.log('Using Azure OpenAI');
22
+ * }
23
+ * ```
24
+ */
25
+ export var Provider;
26
+ (function (Provider) {
27
+ /** Standard OpenAI API */
28
+ Provider["OPENAI"] = "OPENAI";
29
+ /** Azure OpenAI Service */
30
+ Provider["AZURE_OPENAI"] = "AZURE_OPENAI";
31
+ })(Provider || (Provider = {}));
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qCAAqC;AACrC,cAAc,0BAA0B,CAAC;AAEzC,gCAAgC;AAChC,cAAc,oBAAoB,CAAC;AA0InC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,0BAA0B;IAC1B,6BAAiB,CAAA;IACjB,2BAA2B;IAC3B,yCAA6B,CAAA;AAC/B,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * TypeScript module augmentation for OpenAI SDK
3
+ *
4
+ * This file extends OpenAI's existing types to include the usageMetadata field
5
+ * through TypeScript's declaration merging feature. This provides seamless
6
+ * integration with the OpenAI SDK, allowing developers to use usageMetadata
7
+ * directly in OpenAI API calls without type casting or additional imports.
8
+ *
9
+ * The augmentation covers all major OpenAI API endpoints including:
10
+ * - Chat completions (streaming and non-streaming)
11
+ * - Embeddings
12
+ * - Future API endpoints as they become available
13
+ *
14
+ * @fileoverview OpenAI SDK type augmentation for Revenium middleware
15
+ * @author Revenium
16
+ * @since 1.0.0
17
+ *
18
+ * @example Basic usage with chat completions
19
+ * ```typescript
20
+ * import 'revenium-middleware-openai-node';
21
+ * import OpenAI from 'openai';
22
+ *
23
+ * const openai = new OpenAI();
24
+ *
25
+ * const response = await openai.chat.completions.create({
26
+ * model: 'gpt-4o-mini',
27
+ * messages: [{ role: 'user', content: 'Hello!' }],
28
+ * usageMetadata: { // TypeScript recognizes this natively
29
+ * subscriber: {
30
+ * id: 'user-123',
31
+ * email: 'user@my-company.com'
32
+ * },
33
+ * organizationId: 'my-company',
34
+ * productId: 'chat-app',
35
+ * taskType: 'customer-support'
36
+ * }
37
+ * });
38
+ * ```
39
+ *
40
+ * @example Usage with embeddings
41
+ * ```typescript
42
+ * const embedding = await openai.embeddings.create({
43
+ * model: 'text-embedding-ada-002',
44
+ * input: 'Text to embed',
45
+ * usageMetadata: {
46
+ * subscriber: { id: 'user-456' },
47
+ * productId: 'search-engine',
48
+ * taskType: 'document-indexing'
49
+ * }
50
+ * });
51
+ * ```
52
+ */
53
+ export {};
54
+ //# sourceMappingURL=openai-augmentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-augmentation.js","sourceRoot":"","sources":["../../../src/types/openai-augmentation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Types for OpenAI Responses API support
3
+ *
4
+ * This module defines types for the new OpenAI Responses API that replaces
5
+ * the traditional Chat Completions API. The Responses API provides a unified
6
+ * interface for building agent-like applications with built-in tools and capabilities.
7
+ *
8
+ * Reference: https://platform.openai.com/docs/guides/migrate-to-responses
9
+ */
10
+ /**
11
+ * Type guard to check if a request is for Responses API
12
+ */
13
+ export function isResponsesRequest(params) {
14
+ return typeof params === 'object' && params !== null && 'input' in params && 'model' in params;
15
+ }
16
+ /**
17
+ * Type guard to check if a response is from Responses API
18
+ */
19
+ export function isResponsesResponse(response) {
20
+ return (typeof response === 'object' &&
21
+ response !== null &&
22
+ 'id' in response &&
23
+ 'model' in response &&
24
+ ('output' in response || 'usage' in response));
25
+ }
26
+ //# sourceMappingURL=responses-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses-api.js","sourceRoot":"","sources":["../../../src/types/responses-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwOH;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe;IAChD,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,MAAM,CAAC;AACjG,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAiB;IACnD,OAAO,CACL,OAAO,QAAQ,KAAK,QAAQ;QAC5B,QAAQ,KAAK,IAAI;QACjB,IAAI,IAAI,QAAQ;QAChB,OAAO,IAAI,QAAQ;QACnB,CAAC,QAAQ,IAAI,QAAQ,IAAI,OAAO,IAAI,QAAQ,CAAC,CAC9C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,204 @@
1
+ import { getLogger } from '../core/config/index.js';
2
+ import { knownModels } from './constants.js';
3
+ /**
4
+ * Azure Model Name Resolution Module
5
+ *
6
+ * This module maps Azure deployment names to LiteLLM-compatible model names for accurate pricing.
7
+ * Based on learnings from the Python implementation, it uses heuristic pattern matching
8
+ * with fallback strategies to ensure reliable model name resolution.
9
+ *
10
+ * Key patterns observed in real Azure deployments:
11
+ * - "gpt-4o-2024-11-20" → "gpt-4o"
12
+ * - "text-embedding-3-large" → "text-embedding-3-large" (exact match)
13
+ * - "o4-mini" → "gpt-4o-mini"
14
+ * - "gpt4o-prod" → "gpt-4o"
15
+ * - "gpt-35-turbo-dev" → "gpt-3.5-turbo"
16
+ */
17
+ /**
18
+ * In-memory cache for resolved model names
19
+ * Using Map for thread-safe operations in Node.js
20
+ */
21
+ const modelNameCache = new Map();
22
+ /**
23
+ * Cache for failed resolution attempts to avoid repeated warnings
24
+ */
25
+ const failedResolutionCache = new Set();
26
+ // Global logger
27
+ const logger = getLogger();
28
+ /**
29
+ * Resolve Azure deployment name to LiteLLM-compatible model name
30
+ *
31
+ * @param deploymentName - Azure deployment name
32
+ * @param useCache - Whether to use cached results (default: true)
33
+ * @returns LiteLLM-compatible model name
34
+ */
35
+ export function resolveAzureModelName(deploymentName, useCache = true) {
36
+ if (!deploymentName) {
37
+ logger.warn('Empty deployment name provided to model resolver');
38
+ return deploymentName;
39
+ }
40
+ // Check cache first
41
+ if (useCache && modelNameCache.has(deploymentName)) {
42
+ const cachedResult = modelNameCache.get(deploymentName);
43
+ logger.debug('Model name resolved from cache', {
44
+ deployment: deploymentName,
45
+ resolved: cachedResult,
46
+ });
47
+ return cachedResult;
48
+ }
49
+ try {
50
+ const resolved = resolveModelNameHeuristic(deploymentName);
51
+ // Cache the result
52
+ if (useCache) {
53
+ modelNameCache.set(deploymentName, resolved);
54
+ }
55
+ // Log successful resolution
56
+ if (resolved !== deploymentName) {
57
+ logger.debug('Model name resolved via heuristics', {
58
+ deployment: deploymentName,
59
+ resolved,
60
+ });
61
+ }
62
+ return resolved;
63
+ }
64
+ catch (error) {
65
+ logger.error('Error during model name resolution', {
66
+ deployment: deploymentName,
67
+ error: error instanceof Error ? error.message : String(error),
68
+ });
69
+ // Fallback to deployment name
70
+ return deploymentName;
71
+ }
72
+ }
73
+ /**
74
+ * Heuristic pattern matching for Azure deployment names
75
+ * Based on real-world patterns observed in the Python implementation
76
+ *
77
+ * @param deploymentName - Azure deployment name
78
+ * @returns LiteLLM-compatible model name
79
+ */
80
+ function resolveModelNameHeuristic(deploymentName) {
81
+ const nameLower = deploymentName.toLowerCase();
82
+ // GPT-4o family - handle both "gpt-4o" and "o4" patterns
83
+ if (/gpt-?4o/.test(nameLower) || /o4/.test(nameLower)) {
84
+ if (/mini/.test(nameLower))
85
+ return 'gpt-4o-mini';
86
+ return 'gpt-4o';
87
+ }
88
+ // GPT-4 family (non-omni)
89
+ if (/gpt-?4(?!o)/.test(nameLower)) {
90
+ if (/turbo/.test(nameLower))
91
+ return 'gpt-4-turbo';
92
+ if (/vision/.test(nameLower) || /v/.test(nameLower))
93
+ return 'gpt-4-vision-preview';
94
+ return 'gpt-4';
95
+ }
96
+ // GPT-3.5 family
97
+ if (/gpt-?3\.?5/.test(nameLower) || /35-turbo/.test(nameLower) || /gpt-35/.test(nameLower)) {
98
+ if (/instruct/.test(nameLower))
99
+ return 'gpt-3.5-turbo-instruct';
100
+ return 'gpt-3.5-turbo';
101
+ }
102
+ // Embedding models - exact matches work well
103
+ if (/embed/.test(nameLower)) {
104
+ if (/text-embedding-3-large/.test(nameLower))
105
+ return 'text-embedding-3-large';
106
+ if (/text-embedding-3-small/.test(nameLower))
107
+ return 'text-embedding-3-small';
108
+ if (/text-embedding-ada-002/.test(nameLower) || /ada-002/.test(nameLower))
109
+ return 'text-embedding-ada-002';
110
+ if (/3-large/.test(nameLower))
111
+ return 'text-embedding-3-large';
112
+ if (/3-small/.test(nameLower))
113
+ return 'text-embedding-3-small';
114
+ }
115
+ // Ada-002 pattern (can appear without "embed" in deployment name)
116
+ if (/ada-002/.test(nameLower))
117
+ return 'text-embedding-ada-002';
118
+ // DALL-E models
119
+ if (/dall-?e/.test(nameLower)) {
120
+ if (/3/.test(nameLower))
121
+ return 'dall-e-3';
122
+ if (/2/.test(nameLower))
123
+ return 'dall-e-2';
124
+ }
125
+ // Whisper models
126
+ if (/whisper/.test(nameLower))
127
+ return 'whisper-1';
128
+ // TTS models
129
+ if (/tts/.test(nameLower)) {
130
+ if (/hd/.test(nameLower))
131
+ return 'tts-1-hd';
132
+ return 'tts-1';
133
+ }
134
+ if (knownModels.includes(nameLower))
135
+ return nameLower;
136
+ // No heuristic match found - log warning and use deployment name
137
+ if (!failedResolutionCache.has(deploymentName)) {
138
+ logger.warn(`⚠️ No heuristic match for Azure deployment: ${deploymentName}. Using deployment name for pricing. Consider adding pattern to azure-model-resolver.ts`);
139
+ failedResolutionCache.add(deploymentName);
140
+ }
141
+ return deploymentName;
142
+ }
143
+ /**
144
+ * Clear the model name cache
145
+ * Useful for testing or when deployment configurations change
146
+ */
147
+ export function clearModelNameCache() {
148
+ modelNameCache.clear();
149
+ failedResolutionCache.clear();
150
+ getLogger().debug('Model name cache cleared');
151
+ }
152
+ /**
153
+ * Get cache statistics for monitoring
154
+ */
155
+ export function getModelNameCacheStats() {
156
+ return {
157
+ cacheSize: modelNameCache.size,
158
+ failedResolutionCount: failedResolutionCache.size,
159
+ cacheEntries: Array.from(modelNameCache.entries()).map(([deployment, resolved]) => ({
160
+ deployment,
161
+ resolved,
162
+ })),
163
+ };
164
+ }
165
+ /**
166
+ * Batch resolve multiple deployment names
167
+ * Useful for pre-warming cache or bulk operations
168
+ *
169
+ * @param deploymentNames - Array of deployment names to resolve
170
+ * @returns Map of deployment name to resolved model name
171
+ */
172
+ export function batchResolveModelNames(deploymentNames) {
173
+ const results = new Map();
174
+ logger.debug('Batch resolving model names', {
175
+ count: deploymentNames.length,
176
+ deployments: deploymentNames,
177
+ });
178
+ for (const deployment of deploymentNames) {
179
+ try {
180
+ const resolved = resolveAzureModelName(deployment);
181
+ results.set(deployment, resolved);
182
+ }
183
+ catch (error) {
184
+ logger.error('Error in batch resolution', {
185
+ deployment,
186
+ error: error instanceof Error ? error.message : String(error),
187
+ });
188
+ results.set(deployment, deployment); // Fallback to original name
189
+ }
190
+ }
191
+ return results;
192
+ }
193
+ /**
194
+ * Check if a deployment name would be resolved to a different model name
195
+ * Useful for validation and testing
196
+ *
197
+ * @param deploymentName - Azure deployment name
198
+ * @returns true if the deployment name would be transformed
199
+ */
200
+ export function wouldTransformDeploymentName(deploymentName) {
201
+ const resolved = resolveAzureModelName(deploymentName, false); // Don't use cache for this check
202
+ return resolved !== deploymentName;
203
+ }
204
+ //# sourceMappingURL=azure-model-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-model-resolver.js","sourceRoot":"","sources":["../../../src/utils/azure-model-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ // Direct match check for known LiteLLM model names
2
+ export const knownModels = [
3
+ 'gpt-4o',
4
+ 'gpt-4o-mini',
5
+ 'gpt-4',
6
+ 'gpt-4-turbo',
7
+ 'gpt-4-vision-preview',
8
+ 'gpt-3.5-turbo',
9
+ 'gpt-3.5-turbo-instruct',
10
+ 'text-embedding-3-large',
11
+ 'text-embedding-3-small',
12
+ 'text-embedding-ada-002',
13
+ 'dall-e-3',
14
+ 'dall-e-2',
15
+ 'whisper-1',
16
+ 'tts-1',
17
+ 'tts-1-hd'
18
+ ];
19
+ export const MESSAGE_PATTERNS_TYPE_NETWORK = ["network", "timeout", "ECONNRESET"];
20
+ export const ERROR_MESSAGE_PATTERNS_TYPE_CONFIG = ["config", "key", "unauthorized"];
21
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,MAAM,CAAC,MAAM,WAAW,GAAG;IAC3B,QAAQ;IACR,aAAa;IACb,OAAO;IACP,aAAa;IACb,sBAAsB;IACtB,eAAe;IACf,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;IACxB,wBAAwB;IACxB,UAAU;IACV,UAAU;IACV,WAAW;IACX,OAAO;IACP,UAAU;CACT,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAClF,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC"}