@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,134 @@
1
+ /**
2
+ * Provider Detection Module
3
+ *
4
+ * Handles detection of AI providers (OpenAI vs Azure OpenAI).
5
+ * Extracted from provider.ts for better organization.
6
+ */
7
+ import { Provider } from '../../types/index.js';
8
+ import { isOpenAIClientInstance } from '../../utils/type-guards.js';
9
+ import { createProviderInfo, validateProviderInfo } from '../../utils/provider-detection.js';
10
+ import { getLogger } from '../config/index.js';
11
+ // Global logger
12
+ const logger = getLogger();
13
+ /**
14
+ * Detect Azure OpenAI provider from client instance
15
+ *
16
+ * @param client - OpenAI or AzureOpenAI client instance
17
+ * @returns ProviderInfo with detection results
18
+ */
19
+ export function detectProvider(client) {
20
+ // Validate client instance
21
+ if (!isOpenAIClientInstance(client)) {
22
+ logger.warn('Invalid OpenAI client instance provided to detectProvider');
23
+ return {
24
+ provider: Provider.OPENAI,
25
+ isAzure: false,
26
+ azureConfig: undefined,
27
+ };
28
+ }
29
+ try {
30
+ // Use strategy pattern for clean provider detection
31
+ const providerInfo = createProviderInfo(client, logger);
32
+ // Validate the result
33
+ const validation = validateProviderInfo(providerInfo);
34
+ if (validation.warnings.length > 0) {
35
+ logger.warn('Provider detection completed with warnings', {
36
+ warnings: validation.warnings,
37
+ });
38
+ }
39
+ // Log final result
40
+ if (providerInfo.isAzure) {
41
+ logger.info('Azure OpenAI provider detected', {
42
+ provider: providerInfo.provider,
43
+ hasAzureConfig: !!providerInfo.azureConfig,
44
+ endpoint: providerInfo.azureConfig?.endpoint ? '[REDACTED]' : undefined,
45
+ });
46
+ }
47
+ else {
48
+ logger.debug('Standard OpenAI provider detected');
49
+ }
50
+ return providerInfo;
51
+ }
52
+ catch (error) {
53
+ logger.warn('Error during provider detection, defaulting to OpenAI', {
54
+ error: error instanceof Error ? error.message : String(error),
55
+ });
56
+ // Default to OpenAI on any error
57
+ return {
58
+ provider: Provider.OPENAI,
59
+ isAzure: false,
60
+ azureConfig: undefined,
61
+ };
62
+ }
63
+ }
64
+ /**
65
+ * Check if the current environment has Azure configuration
66
+ * This is a lightweight check for lazy loading decisions
67
+ *
68
+ * @returns boolean indicating if Azure config is present
69
+ */
70
+ export function hasAzureConfig() {
71
+ return !!(process.env.AZURE_OPENAI_ENDPOINT ||
72
+ process.env.AZURE_OPENAI_DEPLOYMENT ||
73
+ process.env.AZURE_OPENAI_API_KEY);
74
+ }
75
+ /**
76
+ * Validate Azure configuration completeness
77
+ *
78
+ * @param config - Azure configuration to validate
79
+ * @returns validation result with missing fields
80
+ */
81
+ export function validateAzureConfig(config) {
82
+ const missingFields = [];
83
+ const warnings = [];
84
+ // Required fields for basic Azure OpenAI operation
85
+ if (!config.endpoint) {
86
+ missingFields.push('endpoint');
87
+ }
88
+ if (!config.apiKey) {
89
+ missingFields.push('apiKey');
90
+ }
91
+ // Optional but recommended fields
92
+ if (!config.deployment) {
93
+ warnings.push('deployment name not specified - may need to be included in model parameter');
94
+ }
95
+ if (!config.apiVersion) {
96
+ warnings.push('API version not specified - using default 2024-12-01-preview');
97
+ }
98
+ // Validate endpoint format
99
+ if (config.endpoint) {
100
+ try {
101
+ new URL(config.endpoint);
102
+ if (!config.endpoint.toLowerCase().includes('azure')) {
103
+ warnings.push('endpoint does not contain "azure" - please verify this is an Azure OpenAI endpoint');
104
+ }
105
+ }
106
+ catch (error) {
107
+ missingFields.push('valid endpoint URL');
108
+ }
109
+ }
110
+ return {
111
+ isValid: missingFields.length === 0,
112
+ missingFields,
113
+ warnings,
114
+ };
115
+ }
116
+ /**
117
+ * Get provider metadata for Revenium payload
118
+ *
119
+ * @param providerInfo - Provider detection result
120
+ * @returns metadata object for Revenium
121
+ */
122
+ export function getProviderMetadata(providerInfo) {
123
+ if (providerInfo.isAzure) {
124
+ return {
125
+ provider: 'Azure',
126
+ modelSource: 'OPENAI',
127
+ };
128
+ }
129
+ return {
130
+ provider: 'OPENAI',
131
+ modelSource: 'OPENAI',
132
+ };
133
+ }
134
+ //# sourceMappingURL=detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../../src/core/providers/detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Providers module - Main exports
3
+ *
4
+ * This module provides a clean interface for provider detection and management,
5
+ * separating concerns into focused sub-modules.
6
+ */
7
+ // Re-export all provider functionality
8
+ export { detectProvider, hasAzureConfig, validateAzureConfig, getProviderMetadata, } from './detector.js';
9
+ export { gatherAzureConfig } from '../config/azure-config.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uCAAuC;AACvC,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Revenium API Client Module
3
+ *
4
+ * Handles HTTP communication with the Revenium API.
5
+ * Extracted from tracking.ts for single responsibility.
6
+ */
7
+ import { getConfig, getLogger } from '../config/index.js';
8
+ import { buildReveniumUrl } from '../../utils/url-builder.js';
9
+ // Global logger
10
+ const logger = getLogger();
11
+ /**
12
+ * Send payload to Revenium API
13
+ *
14
+ * This is the shared HTTP function that eliminates all duplication
15
+ * between chat completions and embeddings tracking.
16
+ *
17
+ * @param payload - The payload to send to Revenium
18
+ */
19
+ export async function sendToRevenium(payload) {
20
+ const config = getConfig();
21
+ if (!config)
22
+ return logger.warn('Revenium configuration not found, skipping tracking');
23
+ // Use the new URL builder utility instead of nested conditionals
24
+ const url = buildReveniumUrl(config.reveniumBaseUrl || 'https://api.revenium.io/meter', '/ai/completions');
25
+ logger.debug('Sending Revenium API request', {
26
+ url,
27
+ operationType: payload.operationType,
28
+ transactionId: payload.transactionId,
29
+ model: payload.model,
30
+ totalTokens: payload.totalTokenCount,
31
+ });
32
+ const response = await fetch(url, {
33
+ method: 'POST',
34
+ headers: {
35
+ 'Content-Type': 'application/json',
36
+ Accept: 'application/json',
37
+ 'x-api-key': config.reveniumApiKey,
38
+ },
39
+ body: JSON.stringify(payload),
40
+ });
41
+ logger.debug('Revenium API response', {
42
+ status: response.status,
43
+ statusText: response.statusText,
44
+ transactionId: payload.transactionId,
45
+ operationType: payload.operationType,
46
+ });
47
+ if (!response.ok) {
48
+ const responseText = await response.text();
49
+ logger.error('Revenium API error response', {
50
+ status: response.status,
51
+ statusText: response.statusText,
52
+ body: responseText,
53
+ transactionId: payload.transactionId,
54
+ operationType: payload.operationType,
55
+ });
56
+ throw new Error(`Revenium API error: ${response.status} ${response.statusText} - ${responseText}`);
57
+ }
58
+ const responseBody = await response.text();
59
+ logger.debug('Revenium tracking successful', {
60
+ transactionId: payload.transactionId,
61
+ operationType: payload.operationType,
62
+ response: responseBody,
63
+ });
64
+ }
65
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../../src/core/tracking/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,gBAAgB;AAChB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAE3B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAwB;IAC3D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAEvF,iEAAiE;IACjE,MAAM,GAAG,GAAG,gBAAgB,CAC1B,MAAM,CAAC,eAAe,IAAI,+BAA+B,EACzD,iBAAiB,CAClB,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;QAC3C,GAAG;QACH,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,eAAe;KACrC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;YAC1B,WAAW,EAAE,MAAM,CAAC,cAAc;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;QACpC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;YAC1C,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,IAAI,EAAE,YAAY;YAClB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,YAAY,EAAE,CAClF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;QAC3C,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,QAAQ,EAAE,YAAY;KACvB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Tracking module - Main exports
3
+ *
4
+ * This module provides a clean interface for usage tracking,
5
+ * separating concerns into focused sub-modules.
6
+ */
7
+ // Re-export all tracking functionality
8
+ export { sendToRevenium } from './api-client.js';
9
+ export { buildPayload } from './payload-builder.js';
10
+ export { sendReveniumMetrics, sendReveniumEmbeddingsMetrics, trackUsageAsync, trackEmbeddingsUsageAsync, } from './usage-tracker.js';
11
+ // Export utility functions
12
+ export { mapStopReason } from '../../utils/stop-reason-mapper.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/tracking/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uCAAuC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,eAAe,EACf,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Payload Builder Module
3
+ *
4
+ * Handles construction of Revenium API payloads.
5
+ * Extracted from tracking.ts for single responsibility.
6
+ */
7
+ import { randomUUID } from 'crypto';
8
+ import { getLogger } from '../config/index.js';
9
+ import { mapStopReason } from '../../utils/stop-reason-mapper.js';
10
+ import { buildMetadataFields } from '../../utils/metadata-builder.js';
11
+ import { resolveAzureModelName } from '../../utils/azure-model-resolver.js';
12
+ import { getProviderMetadata } from '../providers/index.js';
13
+ // Global logger
14
+ const logger = getLogger();
15
+ /**
16
+ * Build payload for Revenium API
17
+ *
18
+ * This shared payload builder eliminates payload duplication between
19
+ * chat completions and embeddings. Handles both CHAT and EMBED operation types.
20
+ *
21
+ * @param operationType - Type of operation (CHAT or EMBED)
22
+ * @param response - API response from OpenAI/Azure
23
+ * @param request - Original request parameters
24
+ * @param startTime - Request start timestamp
25
+ * @param duration - Request duration in milliseconds
26
+ * @param providerInfo - Provider information for Azure support
27
+ * @returns Constructed payload for Revenium API
28
+ */
29
+ export function buildPayload(operationType, response, request, startTime, duration, providerInfo) {
30
+ const now = new Date().toISOString();
31
+ const requestTime = new Date(startTime).toISOString();
32
+ const usage = response.usage;
33
+ // Resolve model name for Azure deployments
34
+ const originalModel = response.model;
35
+ const resolvedModel = providerInfo?.isAzure
36
+ ? resolveAzureModelName(originalModel)
37
+ : originalModel;
38
+ // Get provider metadata
39
+ const providerMetadata = providerInfo
40
+ ? getProviderMetadata(providerInfo)
41
+ : { provider: 'OPENAI', modelSource: 'OPENAI' };
42
+ if (providerInfo?.isAzure && resolvedModel !== originalModel) {
43
+ logger.debug('Azure model name resolved for pricing', {
44
+ deployment: originalModel,
45
+ resolved: resolvedModel,
46
+ provider: providerMetadata.provider,
47
+ });
48
+ }
49
+ // Build metadata fields using utility (eliminates repetitive spreading)
50
+ const metadataFields = buildMetadataFields(request.usageMetadata);
51
+ // Common fields for all operations
52
+ const commonPayload = {
53
+ costType: 'AI',
54
+ model: resolvedModel, // Use resolved model name for accurate pricing
55
+ responseTime: now,
56
+ requestDuration: duration,
57
+ provider: providerMetadata.provider,
58
+ modelSource: providerMetadata.modelSource,
59
+ requestTime,
60
+ completionStartTime: now,
61
+ // Common token counts
62
+ inputTokenCount: usage.prompt_tokens,
63
+ totalTokenCount: usage.total_tokens,
64
+ // Metadata fields (processed by utility)
65
+ ...metadataFields,
66
+ // Fixed middleware source identifier
67
+ middlewareSource: 'nodejs',
68
+ // Backend calculates costs
69
+ inputTokenCost: undefined,
70
+ outputTokenCost: undefined,
71
+ totalCost: undefined,
72
+ };
73
+ // Operation-specific fields
74
+ if (operationType !== 'CHAT') {
75
+ // For embeddings, we don't need the response cast since we use commonPayload
76
+ return {
77
+ ...commonPayload,
78
+ operationType: 'EMBED',
79
+ transactionId: `embed-${randomUUID()}`,
80
+ outputTokenCount: 0,
81
+ reasoningTokenCount: 0,
82
+ cacheCreationTokenCount: 0,
83
+ cacheReadTokenCount: 0,
84
+ stopReason: 'END',
85
+ isStreamed: false,
86
+ timeToFirstToken: 0,
87
+ };
88
+ }
89
+ const chatResponse = response;
90
+ const chatUsage = chatResponse.usage;
91
+ return {
92
+ ...commonPayload,
93
+ operationType: 'CHAT',
94
+ transactionId: chatResponse.id || `chat-${randomUUID()}`,
95
+ outputTokenCount: chatUsage.completion_tokens || 0,
96
+ reasoningTokenCount: chatUsage.reasoning_tokens || 0,
97
+ cacheCreationTokenCount: 0,
98
+ cacheReadTokenCount: chatUsage.cached_tokens || 0,
99
+ stopReason: mapStopReason(chatResponse.choices?.[0]?.finish_reason, logger),
100
+ isStreamed: Boolean(request.stream),
101
+ timeToFirstToken: request.stream ? 0 : duration,
102
+ };
103
+ }
104
+ //# sourceMappingURL=payload-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../src/core/tracking/payload-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Usage Tracker Module
3
+ *
4
+ * High-level tracking functions that combine payload building and API communication.
5
+ * Extracted from tracking.ts for better organization.
6
+ */
7
+ import { getLogger } from '../config/index.js';
8
+ import { sendToRevenium } from './api-client.js';
9
+ import { buildPayload } from './payload-builder.js';
10
+ import { safeAsyncOperation } from '../../utils/error-handler.js';
11
+ // Global logger
12
+ const logger = getLogger();
13
+ /**
14
+ * Chat completions tracking - now a thin wrapper with Azure support
15
+ */
16
+ export async function sendReveniumMetrics(response, request, startTime, duration, providerInfo) {
17
+ await safeAsyncOperation(async () => {
18
+ const payload = buildPayload('CHAT', response, request, startTime, duration, providerInfo);
19
+ await sendToRevenium(payload);
20
+ }, 'Chat completion tracking', {
21
+ logError: true,
22
+ rethrow: false, // Don't rethrow to maintain fire-and-forget behavior
23
+ messagePrefix: 'Chat completion tracking failed: ',
24
+ }, logger);
25
+ }
26
+ /**
27
+ * Embeddings tracking - now a thin wrapper with Azure support
28
+ */
29
+ export async function sendReveniumEmbeddingsMetrics(response, request, startTime, duration, providerInfo) {
30
+ await safeAsyncOperation(async () => {
31
+ const payload = buildPayload('EMBED', response, request, startTime, duration, providerInfo);
32
+ await sendToRevenium(payload);
33
+ }, 'Embeddings tracking', {
34
+ logError: true,
35
+ rethrow: false, // Don't rethrow to maintain fire-and-forget behavior
36
+ messagePrefix: 'Embeddings tracking failed: ',
37
+ }, logger);
38
+ }
39
+ /**
40
+ * Fire-and-forget wrapper for chat completions with Azure support
41
+ */
42
+ export function trackUsageAsync(trackingData) {
43
+ const mockResponse = {
44
+ id: trackingData.requestId,
45
+ model: trackingData.model,
46
+ usage: {
47
+ prompt_tokens: trackingData.promptTokens,
48
+ completion_tokens: trackingData.completionTokens,
49
+ total_tokens: trackingData.totalTokens,
50
+ ...(trackingData.reasoningTokens && { reasoning_tokens: trackingData.reasoningTokens }),
51
+ ...(trackingData.cachedTokens && { cached_tokens: trackingData.cachedTokens }),
52
+ },
53
+ choices: [
54
+ {
55
+ finish_reason: trackingData.finishReason,
56
+ },
57
+ ],
58
+ };
59
+ const mockRequest = {
60
+ model: trackingData.model,
61
+ messages: [], // Mock empty messages array for type compliance
62
+ usageMetadata: trackingData.usageMetadata,
63
+ stream: trackingData.isStreamed,
64
+ };
65
+ const startTime = Date.now() - trackingData.duration;
66
+ sendReveniumMetrics(mockResponse, mockRequest, startTime, trackingData.duration, trackingData.providerInfo)
67
+ .then(() => {
68
+ logger.debug('Usage tracking completed successfully', {
69
+ requestId: trackingData.requestId,
70
+ model: trackingData.model,
71
+ totalTokens: trackingData.totalTokens,
72
+ isStreamed: trackingData.isStreamed,
73
+ });
74
+ })
75
+ .catch(error => {
76
+ logger.warn('Usage tracking failed', {
77
+ error: error instanceof Error ? error.message : String(error),
78
+ requestId: trackingData.requestId,
79
+ model: trackingData.model,
80
+ });
81
+ });
82
+ }
83
+ /**
84
+ * Fire-and-forget wrapper for embeddings with Azure support
85
+ */
86
+ export function trackEmbeddingsUsageAsync(trackingData) {
87
+ const mockResponse = {
88
+ model: trackingData.model,
89
+ usage: {
90
+ prompt_tokens: trackingData.promptTokens,
91
+ total_tokens: trackingData.totalTokens,
92
+ },
93
+ data: [], // Mock empty data array for type compliance
94
+ object: 'list',
95
+ };
96
+ const mockRequest = {
97
+ model: trackingData.model,
98
+ input: '', // Mock empty input for type compliance
99
+ usageMetadata: trackingData.usageMetadata,
100
+ };
101
+ sendReveniumEmbeddingsMetrics(mockResponse, mockRequest, trackingData.requestStartTime, trackingData.duration, trackingData.providerInfo)
102
+ .then(() => {
103
+ logger.debug('Embeddings tracking completed successfully', {
104
+ transactionId: trackingData.transactionId,
105
+ });
106
+ })
107
+ .catch(error => {
108
+ logger.warn('Embeddings tracking failed', {
109
+ error: error instanceof Error ? error.message : String(error),
110
+ transactionId: trackingData.transactionId,
111
+ });
112
+ });
113
+ }
114
+ //# sourceMappingURL=usage-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../../../src/core/tracking/usage-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
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
@@ -0,0 +1 @@
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"}