@revenium/openai 1.0.13 → 1.0.15

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 (240) hide show
  1. package/.env.example +10 -15
  2. package/CHANGELOG.md +65 -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 +21 -0
  22. package/dist/cjs/core/middleware/index.js.map +1 -0
  23. package/dist/cjs/core/middleware/interfaces.js +454 -0
  24. package/dist/cjs/core/middleware/interfaces.js.map +1 -0
  25. package/dist/cjs/core/middleware/revenium-client.js +152 -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 +21 -14
  32. package/dist/cjs/core/tracking/api-client.js.map +1 -1
  33. package/dist/cjs/core/tracking/index.js +5 -1
  34. package/dist/cjs/core/tracking/index.js.map +1 -1
  35. package/dist/cjs/core/tracking/payload-builder.js +143 -25
  36. package/dist/cjs/core/tracking/payload-builder.js.map +1 -1
  37. package/dist/cjs/core/tracking/usage-tracker.js +111 -18
  38. package/dist/cjs/core/tracking/usage-tracker.js.map +1 -1
  39. package/dist/cjs/index.js +39 -202
  40. package/dist/cjs/index.js.map +1 -1
  41. package/dist/cjs/types/index.js +0 -8
  42. package/dist/cjs/types/index.js.map +1 -1
  43. package/dist/cjs/types/openai-augmentation.js +0 -49
  44. package/dist/cjs/types/openai-augmentation.js.map +1 -1
  45. package/dist/cjs/utils/constants.js +17 -20
  46. package/dist/cjs/utils/constants.js.map +1 -1
  47. package/dist/cjs/utils/error-handler.js +18 -14
  48. package/dist/cjs/utils/error-handler.js.map +1 -1
  49. package/dist/cjs/utils/metadata-builder.js +17 -16
  50. package/dist/cjs/utils/metadata-builder.js.map +1 -1
  51. package/dist/cjs/utils/provider-detection.js +25 -28
  52. package/dist/cjs/utils/provider-detection.js.map +1 -1
  53. package/dist/cjs/utils/trace-fields.js +115 -0
  54. package/dist/cjs/utils/trace-fields.js.map +1 -0
  55. package/dist/esm/core/client/index.js +6 -0
  56. package/dist/esm/core/client/index.js.map +1 -0
  57. package/dist/esm/core/client/manager.js +102 -0
  58. package/dist/esm/core/client/manager.js.map +1 -0
  59. package/dist/esm/core/config/azure-config.js +6 -18
  60. package/dist/esm/core/config/azure-config.js.map +1 -1
  61. package/dist/esm/core/config/index.js +5 -4
  62. package/dist/esm/core/config/index.js.map +1 -1
  63. package/dist/esm/core/config/loader.js +33 -13
  64. package/dist/esm/core/config/loader.js.map +1 -1
  65. package/dist/esm/core/config/manager.js +13 -7
  66. package/dist/esm/core/config/manager.js.map +1 -1
  67. package/dist/esm/core/config/validator.js +3 -44
  68. package/dist/esm/core/config/validator.js.map +1 -1
  69. package/dist/esm/core/middleware/index.js +8 -0
  70. package/dist/esm/core/middleware/index.js.map +1 -0
  71. package/dist/esm/core/middleware/interfaces.js +442 -0
  72. package/dist/esm/core/middleware/interfaces.js.map +1 -0
  73. package/dist/esm/core/middleware/revenium-client.js +115 -0
  74. package/dist/esm/core/middleware/revenium-client.js.map +1 -0
  75. package/dist/esm/core/providers/detector.js +43 -22
  76. package/dist/esm/core/providers/detector.js.map +1 -1
  77. package/dist/esm/core/providers/index.js +2 -2
  78. package/dist/esm/core/providers/index.js.map +1 -1
  79. package/dist/esm/core/tracking/api-client.js +20 -13
  80. package/dist/esm/core/tracking/api-client.js.map +1 -1
  81. package/dist/esm/core/tracking/index.js +4 -4
  82. package/dist/esm/core/tracking/index.js.map +1 -1
  83. package/dist/esm/core/tracking/payload-builder.js +142 -26
  84. package/dist/esm/core/tracking/payload-builder.js.map +1 -1
  85. package/dist/esm/core/tracking/usage-tracker.js +78 -20
  86. package/dist/esm/core/tracking/usage-tracker.js.map +1 -1
  87. package/dist/esm/index.js +9 -177
  88. package/dist/esm/index.js.map +1 -1
  89. package/dist/esm/types/index.js +2 -10
  90. package/dist/esm/types/index.js.map +1 -1
  91. package/dist/esm/types/openai-augmentation.js +0 -49
  92. package/dist/esm/types/openai-augmentation.js.map +1 -1
  93. package/dist/esm/utils/constants.js +16 -19
  94. package/dist/esm/utils/constants.js.map +1 -1
  95. package/dist/esm/utils/error-handler.js +19 -15
  96. package/dist/esm/utils/error-handler.js.map +1 -1
  97. package/dist/esm/utils/metadata-builder.js +17 -16
  98. package/dist/esm/utils/metadata-builder.js.map +1 -1
  99. package/dist/esm/utils/provider-detection.js +26 -29
  100. package/dist/esm/utils/provider-detection.js.map +1 -1
  101. package/dist/esm/utils/trace-fields.js +100 -0
  102. package/dist/esm/utils/trace-fields.js.map +1 -0
  103. package/dist/types/core/client/index.d.ts +6 -0
  104. package/dist/types/core/client/index.d.ts.map +1 -0
  105. package/dist/types/core/client/manager.d.ts +32 -0
  106. package/dist/types/core/client/manager.d.ts.map +1 -0
  107. package/dist/types/core/config/azure-config.d.ts +2 -2
  108. package/dist/types/core/config/azure-config.d.ts.map +1 -1
  109. package/dist/types/core/config/index.d.ts +4 -4
  110. package/dist/types/core/config/index.d.ts.map +1 -1
  111. package/dist/types/core/config/loader.d.ts +3 -1
  112. package/dist/types/core/config/loader.d.ts.map +1 -1
  113. package/dist/types/core/config/manager.d.ts +1 -1
  114. package/dist/types/core/config/manager.d.ts.map +1 -1
  115. package/dist/types/core/config/validator.d.ts +1 -12
  116. package/dist/types/core/config/validator.d.ts.map +1 -1
  117. package/dist/types/core/middleware/index.d.ts +8 -0
  118. package/dist/types/core/middleware/index.d.ts.map +1 -0
  119. package/dist/types/core/middleware/interfaces.d.ts +104 -0
  120. package/dist/types/core/middleware/interfaces.d.ts.map +1 -0
  121. package/dist/types/core/middleware/revenium-client.d.ts +64 -0
  122. package/dist/types/core/middleware/revenium-client.d.ts.map +1 -0
  123. package/dist/types/core/providers/detector.d.ts +9 -2
  124. package/dist/types/core/providers/detector.d.ts.map +1 -1
  125. package/dist/types/core/providers/index.d.ts +2 -2
  126. package/dist/types/core/providers/index.d.ts.map +1 -1
  127. package/dist/types/core/tracking/api-client.d.ts +1 -1
  128. package/dist/types/core/tracking/api-client.d.ts.map +1 -1
  129. package/dist/types/core/tracking/index.d.ts +4 -4
  130. package/dist/types/core/tracking/index.d.ts.map +1 -1
  131. package/dist/types/core/tracking/payload-builder.d.ts +5 -3
  132. package/dist/types/core/tracking/payload-builder.d.ts.map +1 -1
  133. package/dist/types/core/tracking/usage-tracker.d.ts +4 -2
  134. package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -1
  135. package/dist/types/index.d.ts +11 -135
  136. package/dist/types/index.d.ts.map +1 -1
  137. package/dist/types/types/function-parameters.d.ts +91 -23
  138. package/dist/types/types/function-parameters.d.ts.map +1 -1
  139. package/dist/types/types/index.d.ts +53 -108
  140. package/dist/types/types/index.d.ts.map +1 -1
  141. package/dist/types/types/openai-augmentation.d.ts +4 -138
  142. package/dist/types/types/openai-augmentation.d.ts.map +1 -1
  143. package/dist/types/utils/constants.d.ts +7 -1
  144. package/dist/types/utils/constants.d.ts.map +1 -1
  145. package/dist/types/utils/error-handler.d.ts +2 -2
  146. package/dist/types/utils/error-handler.d.ts.map +1 -1
  147. package/dist/types/utils/metadata-builder.d.ts +2 -2
  148. package/dist/types/utils/metadata-builder.d.ts.map +1 -1
  149. package/dist/types/utils/provider-detection.d.ts +3 -3
  150. package/dist/types/utils/provider-detection.d.ts.map +1 -1
  151. package/dist/types/utils/trace-fields.d.ts +11 -0
  152. package/dist/types/utils/trace-fields.d.ts.map +1 -0
  153. package/examples/README.md +282 -198
  154. package/examples/azure/basic.ts +62 -0
  155. package/examples/azure/responses-basic.ts +45 -0
  156. package/examples/azure/responses-stream.ts +61 -0
  157. package/examples/azure/stream.ts +56 -0
  158. package/examples/getting_started.ts +31 -43
  159. package/examples/openai/basic.ts +45 -0
  160. package/examples/openai/metadata.ts +67 -0
  161. package/examples/openai/responses-basic.ts +44 -0
  162. package/examples/openai/responses-embed.ts +34 -0
  163. package/examples/openai/responses-streaming.ts +63 -0
  164. package/examples/openai/streaming.ts +59 -0
  165. package/package.json +23 -13
  166. package/dist/cjs/core/wrapper/index.js +0 -15
  167. package/dist/cjs/core/wrapper/index.js.map +0 -1
  168. package/dist/cjs/core/wrapper/instance-patcher.js +0 -202
  169. package/dist/cjs/core/wrapper/instance-patcher.js.map +0 -1
  170. package/dist/cjs/core/wrapper/request-handler.js +0 -317
  171. package/dist/cjs/core/wrapper/request-handler.js.map +0 -1
  172. package/dist/cjs/core/wrapper/stream-wrapper.js +0 -82
  173. package/dist/cjs/core/wrapper/stream-wrapper.js.map +0 -1
  174. package/dist/cjs/utils/azure-model-resolver.js +0 -211
  175. package/dist/cjs/utils/azure-model-resolver.js.map +0 -1
  176. package/dist/cjs/utils/request-handler-factory.js +0 -185
  177. package/dist/cjs/utils/request-handler-factory.js.map +0 -1
  178. package/dist/esm/core/wrapper/index.js +0 -9
  179. package/dist/esm/core/wrapper/index.js.map +0 -1
  180. package/dist/esm/core/wrapper/instance-patcher.js +0 -199
  181. package/dist/esm/core/wrapper/instance-patcher.js.map +0 -1
  182. package/dist/esm/core/wrapper/request-handler.js +0 -310
  183. package/dist/esm/core/wrapper/request-handler.js.map +0 -1
  184. package/dist/esm/core/wrapper/stream-wrapper.js +0 -79
  185. package/dist/esm/core/wrapper/stream-wrapper.js.map +0 -1
  186. package/dist/esm/utils/azure-model-resolver.js +0 -204
  187. package/dist/esm/utils/azure-model-resolver.js.map +0 -1
  188. package/dist/esm/utils/request-handler-factory.js +0 -146
  189. package/dist/esm/utils/request-handler-factory.js.map +0 -1
  190. package/dist/types/core/wrapper/index.d.ts +0 -8
  191. package/dist/types/core/wrapper/index.d.ts.map +0 -1
  192. package/dist/types/core/wrapper/instance-patcher.d.ts +0 -33
  193. package/dist/types/core/wrapper/instance-patcher.d.ts.map +0 -1
  194. package/dist/types/core/wrapper/request-handler.d.ts +0 -29
  195. package/dist/types/core/wrapper/request-handler.d.ts.map +0 -1
  196. package/dist/types/core/wrapper/stream-wrapper.d.ts +0 -13
  197. package/dist/types/core/wrapper/stream-wrapper.d.ts.map +0 -1
  198. package/dist/types/utils/azure-model-resolver.d.ts +0 -41
  199. package/dist/types/utils/azure-model-resolver.d.ts.map +0 -1
  200. package/dist/types/utils/request-handler-factory.d.ts +0 -81
  201. package/dist/types/utils/request-handler-factory.d.ts.map +0 -1
  202. package/examples/azure-basic.ts +0 -206
  203. package/examples/azure-responses-basic.ts +0 -233
  204. package/examples/azure-responses-streaming.ts +0 -255
  205. package/examples/azure-streaming.ts +0 -209
  206. package/examples/openai-basic.ts +0 -147
  207. package/examples/openai-function-calling.ts +0 -259
  208. package/examples/openai-responses-basic.ts +0 -212
  209. package/examples/openai-responses-streaming.ts +0 -232
  210. package/examples/openai-streaming.ts +0 -172
  211. package/examples/openai-vision.ts +0 -289
  212. package/src/core/config/azure-config.ts +0 -72
  213. package/src/core/config/index.ts +0 -23
  214. package/src/core/config/loader.ts +0 -66
  215. package/src/core/config/manager.ts +0 -95
  216. package/src/core/config/validator.ts +0 -89
  217. package/src/core/providers/detector.ts +0 -159
  218. package/src/core/providers/index.ts +0 -16
  219. package/src/core/tracking/api-client.ts +0 -78
  220. package/src/core/tracking/index.ts +0 -21
  221. package/src/core/tracking/payload-builder.ts +0 -137
  222. package/src/core/tracking/usage-tracker.ts +0 -189
  223. package/src/core/wrapper/index.ts +0 -9
  224. package/src/core/wrapper/instance-patcher.ts +0 -288
  225. package/src/core/wrapper/request-handler.ts +0 -423
  226. package/src/core/wrapper/stream-wrapper.ts +0 -100
  227. package/src/index.ts +0 -360
  228. package/src/types/function-parameters.ts +0 -251
  229. package/src/types/index.ts +0 -310
  230. package/src/types/openai-augmentation.ts +0 -232
  231. package/src/types/responses-api.ts +0 -308
  232. package/src/utils/azure-model-resolver.ts +0 -220
  233. package/src/utils/constants.ts +0 -21
  234. package/src/utils/error-handler.ts +0 -251
  235. package/src/utils/metadata-builder.ts +0 -228
  236. package/src/utils/provider-detection.ts +0 -257
  237. package/src/utils/request-handler-factory.ts +0 -285
  238. package/src/utils/stop-reason-mapper.ts +0 -78
  239. package/src/utils/type-guards.ts +0 -202
  240. package/src/utils/url-builder.ts +0 -68
@@ -6,16 +6,41 @@
6
6
  * Extracted from provider.ts for better organization.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.detectProviderFromConfig = detectProviderFromConfig;
9
10
  exports.detectProvider = detectProvider;
10
11
  exports.hasAzureConfig = hasAzureConfig;
11
12
  exports.validateAzureConfig = validateAzureConfig;
12
13
  exports.getProviderMetadata = getProviderMetadata;
13
- const index_js_1 = require("../../types/index.js");
14
+ const types_1 = require("../../types");
14
15
  const type_guards_js_1 = require("../../utils/type-guards.js");
15
16
  const provider_detection_js_1 = require("../../utils/provider-detection.js");
16
- const index_js_2 = require("../config/index.js");
17
+ const config_1 = require("../config");
17
18
  // Global logger
18
- const logger = (0, index_js_2.getLogger)();
19
+ const logger = (0, config_1.getLogger)();
20
+ /**
21
+ * Detect provider from configuration
22
+ *
23
+ * @param config - Configuration object
24
+ * @returns ProviderInfo with detection results
25
+ */
26
+ function detectProviderFromConfig(config) {
27
+ // Check if Azure credentials are configured
28
+ if (config.azure?.apiKey && config.azure?.endpoint) {
29
+ logger.debug("Azure OpenAI credentials detected, using Azure OpenAI");
30
+ return {
31
+ provider: types_1.Provider.AZURE_OPENAI,
32
+ isAzure: true,
33
+ azureConfig: config.azure,
34
+ };
35
+ }
36
+ // Default to OpenAI
37
+ logger.debug("No Azure configuration detected, using OpenAI native API");
38
+ return {
39
+ provider: types_1.Provider.OPENAI,
40
+ isAzure: false,
41
+ azureConfig: undefined,
42
+ };
43
+ }
19
44
  /**
20
45
  * Detect Azure OpenAI provider from client instance
21
46
  *
@@ -25,9 +50,9 @@ const logger = (0, index_js_2.getLogger)();
25
50
  function detectProvider(client) {
26
51
  // Validate client instance
27
52
  if (!(0, type_guards_js_1.isOpenAIClientInstance)(client)) {
28
- logger.warn('Invalid OpenAI client instance provided to detectProvider');
53
+ logger.warn("Invalid OpenAI client instance provided to detectProvider");
29
54
  return {
30
- provider: index_js_1.Provider.OPENAI,
55
+ provider: types_1.Provider.OPENAI,
31
56
  isAzure: false,
32
57
  azureConfig: undefined,
33
58
  };
@@ -38,30 +63,30 @@ function detectProvider(client) {
38
63
  // Validate the result
39
64
  const validation = (0, provider_detection_js_1.validateProviderInfo)(providerInfo);
40
65
  if (validation.warnings.length > 0) {
41
- logger.warn('Provider detection completed with warnings', {
66
+ logger.warn("Provider detection completed with warnings", {
42
67
  warnings: validation.warnings,
43
68
  });
44
69
  }
45
70
  // Log final result
46
71
  if (providerInfo.isAzure) {
47
- logger.info('Azure OpenAI provider detected', {
72
+ logger.info("Azure OpenAI provider detected", {
48
73
  provider: providerInfo.provider,
49
74
  hasAzureConfig: !!providerInfo.azureConfig,
50
- endpoint: providerInfo.azureConfig?.endpoint ? '[REDACTED]' : undefined,
75
+ endpoint: providerInfo.azureConfig?.endpoint ? "[REDACTED]" : undefined,
51
76
  });
52
77
  }
53
78
  else {
54
- logger.debug('Standard OpenAI provider detected');
79
+ logger.debug("Standard OpenAI provider detected");
55
80
  }
56
81
  return providerInfo;
57
82
  }
58
83
  catch (error) {
59
- logger.warn('Error during provider detection, defaulting to OpenAI', {
84
+ logger.warn("Error during provider detection, defaulting to OpenAI", {
60
85
  error: error instanceof Error ? error.message : String(error),
61
86
  });
62
87
  // Default to OpenAI on any error
63
88
  return {
64
- provider: index_js_1.Provider.OPENAI,
89
+ provider: types_1.Provider.OPENAI,
65
90
  isAzure: false,
66
91
  azureConfig: undefined,
67
92
  };
@@ -89,28 +114,25 @@ function validateAzureConfig(config) {
89
114
  const warnings = [];
90
115
  // Required fields for basic Azure OpenAI operation
91
116
  if (!config.endpoint) {
92
- missingFields.push('endpoint');
117
+ missingFields.push("endpoint");
93
118
  }
94
119
  if (!config.apiKey) {
95
- missingFields.push('apiKey');
120
+ missingFields.push("apiKey");
96
121
  }
97
122
  // Optional but recommended fields
98
- if (!config.deployment) {
99
- warnings.push('deployment name not specified - may need to be included in model parameter');
100
- }
101
123
  if (!config.apiVersion) {
102
- warnings.push('API version not specified - using default 2024-12-01-preview');
124
+ warnings.push("API version not specified - using default 2024-12-01-preview");
103
125
  }
104
126
  // Validate endpoint format
105
127
  if (config.endpoint) {
106
128
  try {
107
129
  new URL(config.endpoint);
108
- if (!config.endpoint.toLowerCase().includes('azure')) {
130
+ if (!config.endpoint.toLowerCase().includes("azure")) {
109
131
  warnings.push('endpoint does not contain "azure" - please verify this is an Azure OpenAI endpoint');
110
132
  }
111
133
  }
112
134
  catch (error) {
113
- missingFields.push('valid endpoint URL');
135
+ missingFields.push("valid endpoint URL");
114
136
  }
115
137
  }
116
138
  return {
@@ -128,13 +150,13 @@ function validateAzureConfig(config) {
128
150
  function getProviderMetadata(providerInfo) {
129
151
  if (providerInfo.isAzure) {
130
152
  return {
131
- provider: 'Azure',
132
- modelSource: 'AZURE_OPENAI',
153
+ provider: "Azure",
154
+ modelSource: "AZURE_OPENAI",
133
155
  };
134
156
  }
135
157
  return {
136
- provider: 'OpenAI',
137
- modelSource: 'OPENAI', // Provider name when calling directly per spec
158
+ provider: "OpenAI",
159
+ modelSource: "OPENAI", // Provider name when calling directly per spec
138
160
  };
139
161
  }
140
162
  //# sourceMappingURL=detector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../../src/core/providers/detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../../src/core/providers/detector.ts"],"names":[],"mappings":"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"}
@@ -6,10 +6,11 @@
6
6
  * separating concerns into focused sub-modules.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.gatherAzureConfig = exports.getProviderMetadata = exports.validateAzureConfig = exports.hasAzureConfig = exports.detectProvider = void 0;
9
+ exports.gatherAzureConfig = exports.getProviderMetadata = exports.validateAzureConfig = exports.hasAzureConfig = exports.detectProviderFromConfig = exports.detectProvider = void 0;
10
10
  // Re-export all provider functionality
11
11
  var detector_js_1 = require("./detector.js");
12
12
  Object.defineProperty(exports, "detectProvider", { enumerable: true, get: function () { return detector_js_1.detectProvider; } });
13
+ Object.defineProperty(exports, "detectProviderFromConfig", { enumerable: true, get: function () { return detector_js_1.detectProviderFromConfig; } });
13
14
  Object.defineProperty(exports, "hasAzureConfig", { enumerable: true, get: function () { return detector_js_1.hasAzureConfig; } });
14
15
  Object.defineProperty(exports, "validateAzureConfig", { enumerable: true, get: function () { return detector_js_1.validateAzureConfig; } });
15
16
  Object.defineProperty(exports, "getProviderMetadata", { enumerable: true, get: function () { return detector_js_1.getProviderMetadata; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/providers/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,uCAAuC;AACvC,6CAKuB;AAJrB,6GAAA,cAAc,OAAA;AACd,6GAAA,cAAc,OAAA;AACd,kHAAA,mBAAmB,OAAA;AACnB,kHAAA,mBAAmB,OAAA;AAGrB,6DAA8D;AAArD,oHAAA,iBAAiB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/providers/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,uCAAuC;AACvC,6CAMuB;AALrB,6GAAA,cAAc,OAAA;AACd,uHAAA,wBAAwB,OAAA;AACxB,6GAAA,cAAc,OAAA;AACd,kHAAA,mBAAmB,OAAA;AACnB,kHAAA,mBAAmB,OAAA;AAGrB,6DAA8D;AAArD,oHAAA,iBAAiB,OAAA"}
@@ -7,10 +7,11 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.sendToRevenium = sendToRevenium;
10
- const index_js_1 = require("../config/index.js");
10
+ const config_1 = require("../config");
11
11
  const url_builder_js_1 = require("../../utils/url-builder.js");
12
+ const constants_1 = require("../../utils/constants");
12
13
  // Global logger
13
- const logger = (0, index_js_1.getLogger)();
14
+ const logger = (0, config_1.getLogger)();
14
15
  /**
15
16
  * Send payload to Revenium API
16
17
  *
@@ -20,12 +21,18 @@ const logger = (0, index_js_1.getLogger)();
20
21
  * @param payload - The payload to send to Revenium
21
22
  */
22
23
  async function sendToRevenium(payload) {
23
- const config = (0, index_js_1.getConfig)();
24
+ const config = (0, config_1.getConfig)();
24
25
  if (!config)
25
- return logger.warn('Revenium configuration not found, skipping tracking');
26
- // Use the new URL builder utility instead of nested conditionals
27
- const url = (0, url_builder_js_1.buildReveniumUrl)(config.reveniumBaseUrl || 'https://api.revenium.ai', '/ai/completions');
28
- logger.debug('Sending Revenium API request', {
26
+ return logger.warn("Revenium configuration not found, skipping tracking");
27
+ let endpoint = "/ai/completions";
28
+ if (payload.operationType === "IMAGE") {
29
+ endpoint = "/ai/images";
30
+ }
31
+ else if (payload.operationType === "AUDIO") {
32
+ endpoint = "/ai/audio";
33
+ }
34
+ const url = (0, url_builder_js_1.buildReveniumUrl)(config.reveniumBaseUrl || constants_1.DEFAULT_REVENIUM_BASE_URL, endpoint);
35
+ logger.debug("Sending Revenium API request", {
29
36
  url,
30
37
  operationType: payload.operationType,
31
38
  transactionId: payload.transactionId,
@@ -33,15 +40,15 @@ async function sendToRevenium(payload) {
33
40
  totalTokens: payload.totalTokenCount,
34
41
  });
35
42
  const response = await fetch(url, {
36
- method: 'POST',
43
+ method: "POST",
37
44
  headers: {
38
- 'Content-Type': 'application/json',
39
- Accept: 'application/json',
40
- 'x-api-key': config.reveniumApiKey,
45
+ "Content-Type": "application/json",
46
+ Accept: "application/json",
47
+ "x-api-key": config.reveniumApiKey,
41
48
  },
42
49
  body: JSON.stringify(payload),
43
50
  });
44
- logger.debug('Revenium API response', {
51
+ logger.debug("Revenium API response", {
45
52
  status: response.status,
46
53
  statusText: response.statusText,
47
54
  transactionId: payload.transactionId,
@@ -49,7 +56,7 @@ async function sendToRevenium(payload) {
49
56
  });
50
57
  if (!response.ok) {
51
58
  const responseText = await response.text();
52
- logger.error('Revenium API error response', {
59
+ logger.error("Revenium API error response", {
53
60
  status: response.status,
54
61
  statusText: response.statusText,
55
62
  body: responseText,
@@ -59,7 +66,7 @@ async function sendToRevenium(payload) {
59
66
  throw new Error(`Revenium API error: ${response.status} ${response.statusText} - ${responseText}`);
60
67
  }
61
68
  const responseBody = await response.text();
62
- logger.debug('Revenium tracking successful', {
69
+ logger.debug("Revenium tracking successful", {
63
70
  transactionId: payload.transactionId,
64
71
  operationType: payload.operationType,
65
72
  response: responseBody,
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../../src/core/tracking/api-client.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAiBH,wCAuDC;AArED,iDAA0D;AAC1D,+DAA8D;AAE9D,gBAAgB;AAChB,MAAM,MAAM,GAAG,IAAA,oBAAS,GAAE,CAAC;AAE3B;;;;;;;GAOG;AACI,KAAK,UAAU,cAAc,CAAC,OAAwB;IAC3D,MAAM,MAAM,GAAG,IAAA,oBAAS,GAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAEvF,iEAAiE;IACjE,MAAM,GAAG,GAAG,IAAA,iCAAgB,EAC1B,MAAM,CAAC,eAAe,IAAI,yBAAyB,EACnD,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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../../src/core/tracking/api-client.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAkBH,wCA8DC;AA7ED,sCAAiD;AACjD,+DAA8D;AAC9D,qDAAkE;AAElE,gBAAgB;AAChB,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;AAE3B;;;;;;;GAOG;AACI,KAAK,UAAU,cAAc,CAAC,OAAwB;IAC3D,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QACT,OAAO,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAE5E,IAAI,QAAQ,GAAG,iBAAiB,CAAC;IACjC,IAAI,OAAO,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;QACtC,QAAQ,GAAG,YAAY,CAAC;IAC1B,CAAC;SAAM,IAAI,OAAO,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;QAC7C,QAAQ,GAAG,WAAW,CAAC;IACzB,CAAC;IAED,MAAM,GAAG,GAAG,IAAA,iCAAgB,EAC1B,MAAM,CAAC,eAAe,IAAI,qCAAyB,EACnD,QAAQ,CACT,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"}
@@ -6,17 +6,21 @@
6
6
  * separating concerns into focused sub-modules.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.mapStopReason = exports.trackEmbeddingsUsageAsync = exports.trackUsageAsync = exports.sendReveniumEmbeddingsMetrics = exports.sendReveniumMetrics = exports.buildPayload = exports.sendToRevenium = void 0;
9
+ exports.mapStopReason = exports.trackAudioUsageAsync = exports.trackImageUsageAsync = exports.trackEmbeddingsUsageAsync = exports.trackUsageAsync = exports.sendReveniumEmbeddingsMetrics = exports.sendReveniumMetrics = exports.buildAudioPayload = exports.buildImagePayload = exports.buildPayload = exports.sendToRevenium = void 0;
10
10
  // Re-export all tracking functionality
11
11
  var api_client_js_1 = require("./api-client.js");
12
12
  Object.defineProperty(exports, "sendToRevenium", { enumerable: true, get: function () { return api_client_js_1.sendToRevenium; } });
13
13
  var payload_builder_js_1 = require("./payload-builder.js");
14
14
  Object.defineProperty(exports, "buildPayload", { enumerable: true, get: function () { return payload_builder_js_1.buildPayload; } });
15
+ Object.defineProperty(exports, "buildImagePayload", { enumerable: true, get: function () { return payload_builder_js_1.buildImagePayload; } });
16
+ Object.defineProperty(exports, "buildAudioPayload", { enumerable: true, get: function () { return payload_builder_js_1.buildAudioPayload; } });
15
17
  var usage_tracker_js_1 = require("./usage-tracker.js");
16
18
  Object.defineProperty(exports, "sendReveniumMetrics", { enumerable: true, get: function () { return usage_tracker_js_1.sendReveniumMetrics; } });
17
19
  Object.defineProperty(exports, "sendReveniumEmbeddingsMetrics", { enumerable: true, get: function () { return usage_tracker_js_1.sendReveniumEmbeddingsMetrics; } });
18
20
  Object.defineProperty(exports, "trackUsageAsync", { enumerable: true, get: function () { return usage_tracker_js_1.trackUsageAsync; } });
19
21
  Object.defineProperty(exports, "trackEmbeddingsUsageAsync", { enumerable: true, get: function () { return usage_tracker_js_1.trackEmbeddingsUsageAsync; } });
22
+ Object.defineProperty(exports, "trackImageUsageAsync", { enumerable: true, get: function () { return usage_tracker_js_1.trackImageUsageAsync; } });
23
+ Object.defineProperty(exports, "trackAudioUsageAsync", { enumerable: true, get: function () { return usage_tracker_js_1.trackAudioUsageAsync; } });
20
24
  // Export utility functions
21
25
  var stop_reason_mapper_js_1 = require("../../utils/stop-reason-mapper.js");
22
26
  Object.defineProperty(exports, "mapStopReason", { enumerable: true, get: function () { return stop_reason_mapper_js_1.mapStopReason; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/tracking/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,uCAAuC;AACvC,iDAAiD;AAAxC,+GAAA,cAAc,OAAA;AAEvB,2DAAoD;AAA3C,kHAAA,YAAY,OAAA;AAErB,uDAK4B;AAJ1B,uHAAA,mBAAmB,OAAA;AACnB,iIAAA,6BAA6B,OAAA;AAC7B,mHAAA,eAAe,OAAA;AACf,6HAAA,yBAAyB,OAAA;AAG3B,2BAA2B;AAC3B,2EAAkE;AAAzD,sHAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/tracking/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,uCAAuC;AACvC,iDAAiD;AAAxC,+GAAA,cAAc,OAAA;AAEvB,2DAI8B;AAH5B,kHAAA,YAAY,OAAA;AACZ,uHAAA,iBAAiB,OAAA;AACjB,uHAAA,iBAAiB,OAAA;AAGnB,uDAO4B;AAN1B,uHAAA,mBAAmB,OAAA;AACnB,iIAAA,6BAA6B,OAAA;AAC7B,mHAAA,eAAe,OAAA;AACf,6HAAA,yBAAyB,OAAA;AACzB,wHAAA,oBAAoB,OAAA;AACpB,wHAAA,oBAAoB,OAAA;AAGtB,2BAA2B;AAC3B,2EAAkE;AAAzD,sHAAA,aAAa,OAAA"}
@@ -7,14 +7,15 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.buildPayload = buildPayload;
10
+ exports.buildImagePayload = buildImagePayload;
11
+ exports.buildAudioPayload = buildAudioPayload;
10
12
  const crypto_1 = require("crypto");
11
- const index_js_1 = require("../config/index.js");
13
+ const config_1 = require("../config");
12
14
  const stop_reason_mapper_js_1 = require("../../utils/stop-reason-mapper.js");
13
15
  const metadata_builder_js_1 = require("../../utils/metadata-builder.js");
14
- const azure_model_resolver_js_1 = require("../../utils/azure-model-resolver.js");
15
- const index_js_2 = require("../providers/index.js");
16
+ const providers_1 = require("../providers");
16
17
  // Global logger
17
- const logger = (0, index_js_1.getLogger)();
18
+ const logger = (0, config_1.getLogger)();
18
19
  /**
19
20
  * Build payload for Revenium API
20
21
  *
@@ -33,28 +34,19 @@ function buildPayload(operationType, response, request, startTime, duration, pro
33
34
  const now = new Date().toISOString();
34
35
  const requestTime = new Date(startTime).toISOString();
35
36
  const usage = response.usage;
36
- // Resolve model name for Azure deployments
37
- const originalModel = response.model;
38
- const resolvedModel = providerInfo?.isAzure
39
- ? (0, azure_model_resolver_js_1.resolveAzureModelName)(originalModel)
40
- : originalModel;
37
+ // For Azure, use the deployment name as-is
38
+ // The deployment name is what the user provided and should be sent to Revenium
39
+ const modelName = response.model;
41
40
  // Get provider metadata (fallback: OpenAI direct)
42
41
  const providerMetadata = providerInfo
43
- ? (0, index_js_2.getProviderMetadata)(providerInfo)
44
- : { provider: 'OpenAI', modelSource: 'OPENAI' };
45
- if (providerInfo?.isAzure && resolvedModel !== originalModel) {
46
- logger.debug('Azure model name resolved for pricing', {
47
- deployment: originalModel,
48
- resolved: resolvedModel,
49
- provider: providerMetadata.provider,
50
- });
51
- }
42
+ ? (0, providers_1.getProviderMetadata)(providerInfo)
43
+ : { provider: "OpenAI", modelSource: "OPENAI" };
52
44
  // Build metadata fields using utility (eliminates repetitive spreading)
53
45
  const metadataFields = (0, metadata_builder_js_1.buildMetadataFields)(request.usageMetadata);
54
46
  // Common fields for all operations
55
47
  const commonPayload = {
56
- costType: 'AI',
57
- model: resolvedModel, // Use resolved model name for accurate pricing
48
+ costType: "AI",
49
+ model: modelName, // Use model/deployment name as-is
58
50
  responseTime: now,
59
51
  requestDuration: duration,
60
52
  provider: providerMetadata.provider,
@@ -67,25 +59,25 @@ function buildPayload(operationType, response, request, startTime, duration, pro
67
59
  // Metadata fields (processed by utility)
68
60
  ...metadataFields,
69
61
  // Fixed middleware source identifier (spec format: revenium-{provider}-{language})
70
- middlewareSource: 'revenium-openai-node',
62
+ middlewareSource: "revenium-openai-node",
71
63
  // Backend calculates costs
72
64
  inputTokenCost: undefined,
73
65
  outputTokenCost: undefined,
74
66
  totalCost: undefined,
75
67
  };
76
68
  // Operation-specific fields
77
- if (operationType !== 'CHAT') {
69
+ if (operationType !== "CHAT") {
78
70
  // For embeddings, we don't need the response cast since we use commonPayload
79
71
  return {
80
72
  ...commonPayload,
81
- operationType: 'EMBED',
73
+ operationType: "EMBED",
82
74
  transactionId: `embed-${(0, crypto_1.randomUUID)()}`,
83
75
  outputTokenCount: 0,
84
76
  // Embeddings don't support reasoning or caching
85
77
  reasoningTokenCount: undefined,
86
78
  cacheCreationTokenCount: undefined,
87
79
  cacheReadTokenCount: undefined,
88
- stopReason: 'END',
80
+ stopReason: "END",
89
81
  isStreamed: false,
90
82
  timeToFirstToken: undefined, // Not applicable for embeddings
91
83
  };
@@ -94,7 +86,7 @@ function buildPayload(operationType, response, request, startTime, duration, pro
94
86
  const chatUsage = chatResponse.usage;
95
87
  return {
96
88
  ...commonPayload,
97
- operationType: 'CHAT',
89
+ operationType: "CHAT",
98
90
  transactionId: chatResponse.id || `chat-${(0, crypto_1.randomUUID)()}`,
99
91
  outputTokenCount: chatUsage.completion_tokens || 0,
100
92
  // Leave null for models without reasoning capabilities (API spec)
@@ -109,4 +101,130 @@ function buildPayload(operationType, response, request, startTime, duration, pro
109
101
  timeToFirstToken: undefined,
110
102
  };
111
103
  }
104
+ function buildImagePayload(operationSubtype, response, request, startTime, duration, providerInfo, usageMetadata) {
105
+ const now = new Date().toISOString();
106
+ const requestTime = new Date(startTime).toISOString();
107
+ const providerMetadata = providerInfo
108
+ ? (0, providers_1.getProviderMetadata)(providerInfo)
109
+ : { provider: "OpenAI", modelSource: "OPENAI" };
110
+ const metadataFields = (0, metadata_builder_js_1.buildMetadataFields)(usageMetadata);
111
+ const attributes = {
112
+ billing_unit: "per_image",
113
+ operationSubtype,
114
+ actual_image_count: response.data?.length || 0,
115
+ };
116
+ if (operationSubtype === "generation") {
117
+ attributes.requested_image_count = request.n || 1;
118
+ attributes.resolution = request.size || "1024x1024";
119
+ attributes.quality = request.quality;
120
+ attributes.style = request.style;
121
+ attributes.response_format = request.response_format || "url";
122
+ attributes.revised_prompt_provided =
123
+ response.data?.[0]?.revised_prompt !== undefined;
124
+ }
125
+ else if (operationSubtype === "edit") {
126
+ attributes.requested_image_count = request.n || 1;
127
+ attributes.resolution = request.size || "1024x1024";
128
+ attributes.response_format = request.response_format || "url";
129
+ attributes.has_mask = request.mask !== undefined;
130
+ }
131
+ else if (operationSubtype === "variation") {
132
+ attributes.requested_image_count = request.n || 1;
133
+ attributes.resolution = request.size || "1024x1024";
134
+ attributes.response_format = request.response_format || "url";
135
+ }
136
+ return {
137
+ transactionId: `image-${operationSubtype}-${(0, crypto_1.randomUUID)()}`,
138
+ operationType: "IMAGE",
139
+ costType: "AI",
140
+ model: request.model || "dall-e-2",
141
+ provider: providerMetadata.provider,
142
+ modelSource: providerMetadata.modelSource,
143
+ middlewareSource: "revenium-openai-node",
144
+ requestTime,
145
+ responseTime: now,
146
+ requestDuration: duration,
147
+ completionStartTime: now,
148
+ inputTokenCount: null,
149
+ outputTokenCount: null,
150
+ totalTokenCount: null,
151
+ reasoningTokenCount: undefined,
152
+ cacheCreationTokenCount: undefined,
153
+ cacheReadTokenCount: undefined,
154
+ stopReason: "END",
155
+ isStreamed: false,
156
+ timeToFirstToken: undefined,
157
+ inputTokenCost: undefined,
158
+ outputTokenCost: undefined,
159
+ totalCost: undefined,
160
+ ...metadataFields,
161
+ requestedImageCount: request.n || 1,
162
+ actualImageCount: response.data?.length || 0,
163
+ attributes,
164
+ };
165
+ }
166
+ function buildAudioPayload(operationSubtype, response, request, startTime, duration, providerInfo, usageMetadata) {
167
+ const now = new Date().toISOString();
168
+ const requestTime = new Date(startTime).toISOString();
169
+ const providerMetadata = providerInfo
170
+ ? (0, providers_1.getProviderMetadata)(providerInfo)
171
+ : { provider: "OpenAI", modelSource: "OPENAI" };
172
+ const metadataFields = (0, metadata_builder_js_1.buildMetadataFields)(usageMetadata);
173
+ const attributes = {
174
+ operationSubtype,
175
+ };
176
+ let durationSeconds;
177
+ let characterCount;
178
+ if (operationSubtype === "speech_synthesis") {
179
+ attributes.billing_unit = "per_character";
180
+ attributes.requested_character_count = request.input?.length || 0;
181
+ attributes.voice = request.voice;
182
+ attributes.speed = request.speed;
183
+ attributes.response_format = request.response_format || "mp3";
184
+ characterCount = request.input?.length || 0;
185
+ }
186
+ else {
187
+ attributes.billing_unit = "per_minute";
188
+ attributes.actual_duration_seconds = response.duration || 0;
189
+ attributes.language = request.language || response.language;
190
+ attributes.response_format = request.response_format || "json";
191
+ attributes.temperature = request.temperature;
192
+ durationSeconds = response.duration || 0;
193
+ if (operationSubtype === "translation") {
194
+ attributes.target_language = "en";
195
+ }
196
+ if (request.timestamp_granularities) {
197
+ attributes.timestamp_granularities = request.timestamp_granularities;
198
+ }
199
+ }
200
+ return {
201
+ transactionId: `audio-${operationSubtype}-${(0, crypto_1.randomUUID)()}`,
202
+ operationType: "AUDIO",
203
+ costType: "AI",
204
+ model: request.model || "whisper-1",
205
+ provider: providerMetadata.provider,
206
+ modelSource: providerMetadata.modelSource,
207
+ middlewareSource: "revenium-openai-node",
208
+ requestTime,
209
+ responseTime: now,
210
+ requestDuration: duration,
211
+ completionStartTime: now,
212
+ inputTokenCount: null,
213
+ outputTokenCount: null,
214
+ totalTokenCount: null,
215
+ reasoningTokenCount: undefined,
216
+ cacheCreationTokenCount: undefined,
217
+ cacheReadTokenCount: undefined,
218
+ stopReason: "END",
219
+ isStreamed: false,
220
+ timeToFirstToken: undefined,
221
+ inputTokenCost: undefined,
222
+ outputTokenCost: undefined,
223
+ totalCost: undefined,
224
+ ...metadataFields,
225
+ durationSeconds,
226
+ characterCount,
227
+ attributes,
228
+ };
229
+ }
112
230
  //# sourceMappingURL=payload-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../src/core/tracking/payload-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../src/core/tracking/payload-builder.ts"],"names":[],"mappings":"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"}