@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
@@ -1,310 +0,0 @@
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
-
8
- // Re-export function parameter types
9
- export * from './function-parameters.js';
10
-
11
- // Re-export Responses API types
12
- export * from './responses-api.js';
13
-
14
- /**
15
- * Credential information for subscriber authentication
16
- *
17
- * Represents authentication credentials that can be attached to subscriber information
18
- * for enhanced security and tracking capabilities.
19
- *
20
- * @public
21
- * @example
22
- * ```typescript
23
- * const credential: Credential = {
24
- * name: 'api_token',
25
- * value: 'user_token_abc123'
26
- * };
27
- * ```
28
- */
29
- export interface Credential {
30
- /** The name/type of the credential (e.g., 'api_token', 'session_id') */
31
- name: string;
32
- /** The credential value (should be handled securely) */
33
- value: string;
34
- }
35
-
36
- /**
37
- * Subscriber information for Revenium API
38
- *
39
- * Represents end-user information for tracking and billing purposes.
40
- * All fields are optional to provide maximum flexibility in implementation.
41
- *
42
- * @public
43
- * @example
44
- * ```typescript
45
- * const subscriber: Subscriber = {
46
- * id: 'user-12345',
47
- * email: 'john.doe@company.com',
48
- * credential: {
49
- * name: 'session_token',
50
- * value: 'abc123xyz'
51
- * }
52
- * };
53
- * ```
54
- */
55
- export interface Subscriber {
56
- /** Unique identifier for the subscriber/user */
57
- id?: string;
58
- /** Email address of the subscriber */
59
- email?: string;
60
- /** Optional authentication credential for the subscriber */
61
- credential?: Credential;
62
- }
63
-
64
- /**
65
- * Usage metadata interface for tracking additional context
66
- *
67
- * Comprehensive metadata structure that enables detailed tracking of AI API usage
68
- * for analytics, billing, and business intelligence purposes. All fields are optional
69
- * to provide maximum flexibility while maintaining consistency across language implementations.
70
- *
71
- * @public
72
- * @example
73
- * ```typescript
74
- * const metadata: UsageMetadata = {
75
- * subscriber: {
76
- * id: 'user-123',
77
- * email: 'user@company.com'
78
- * },
79
- * organizationId: 'org-456',
80
- * productId: 'chat-assistant',
81
- * taskType: 'customer-support',
82
- * traceId: 'trace-789',
83
- * responseQualityScore: 0.95, // 0.0-1.0 scale per API spec
84
- * agent: 'support-bot-v2'
85
- * };
86
- * ```
87
- */
88
- export interface UsageMetadata {
89
- /** User identification information (nested structure for detailed tracking) */
90
- subscriber?: Subscriber;
91
-
92
- /** Organization or company identifier for multi-tenant applications */
93
- organizationId?: string;
94
- /** Product or application identifier for usage segmentation */
95
- productId?: string;
96
- /** Subscription identifier for billing and plan management */
97
- subscriptionId?: string;
98
-
99
- /** Task type classification (e.g., 'chat', 'summarization', 'translation') */
100
- taskType?: string;
101
- /** Distributed tracing identifier for request tracking across services */
102
- traceId?: string;
103
-
104
- /** Quality score for response evaluation (0.0-1.0 scale per API spec) */
105
- responseQualityScore?: number;
106
-
107
- /** Agent or model variant identifier for A/B testing and performance tracking */
108
- agent?: string;
109
- }
110
-
111
- /**
112
- * Provider information for tracking API source
113
- *
114
- * Detailed information about the detected AI provider, including configuration
115
- * details and Azure-specific settings when applicable. Used internally for
116
- * provider-specific handling and metrics collection.
117
- *
118
- * @public
119
- * @example
120
- * ```typescript
121
- * const providerInfo: ProviderInfo = {
122
- * provider: Provider.AZURE_OPENAI,
123
- * isAzure: true,
124
- * endpoint: 'https://my-resource.openai.azure.com',
125
- * apiVersion: '2024-02-01',
126
- * deployment: 'gpt-4-turbo'
127
- * };
128
- * ```
129
- */
130
- export interface ProviderInfo {
131
- /** The detected AI provider type */
132
- provider: Provider;
133
- /** Whether this is an Azure OpenAI instance */
134
- isAzure: boolean;
135
- /** API endpoint URL (for Azure OpenAI) */
136
- endpoint?: string;
137
- /** API version (for Azure OpenAI) */
138
- apiVersion?: string;
139
- /** Deployment name (for Azure OpenAI) */
140
- deployment?: string;
141
- /** Complete Azure configuration when available */
142
- azureConfig?: AzureConfig;
143
- }
144
-
145
- /**
146
- * Supported AI providers
147
- *
148
- * Enumeration of AI providers supported by the Revenium middleware.
149
- * Used for automatic detection, routing, and provider-specific handling.
150
- *
151
- * @public
152
- * @example
153
- * ```typescript
154
- * if (providerInfo.provider === Provider.AZURE_OPENAI) {
155
- * console.log('Using Azure OpenAI');
156
- * }
157
- * ```
158
- */
159
- export enum Provider {
160
- /** Standard OpenAI API */
161
- OPENAI = 'OPENAI',
162
- /** Azure OpenAI Service */
163
- AZURE_OPENAI = 'AZURE_OPENAI',
164
- }
165
-
166
- /**
167
- * Azure OpenAI configuration
168
- *
169
- * Configuration interface for Azure OpenAI Service integration.
170
- * Provides all necessary settings for connecting to Azure OpenAI endpoints
171
- * with proper authentication and resource identification.
172
- *
173
- * @public
174
- * @example
175
- * ```typescript
176
- * const azureConfig: AzureConfig = {
177
- * endpoint: 'https://my-resource.openai.azure.com',
178
- * apiKey: process.env.AZURE_OPENAI_API_KEY,
179
- * apiVersion: '2024-02-01',
180
- * deployment: 'gpt-4-turbo',
181
- * tenantId: 'your-tenant-id'
182
- * };
183
- * ```
184
- */
185
- export interface AzureConfig {
186
- /** Azure OpenAI endpoint URL */
187
- endpoint?: string;
188
- /** Azure OpenAI API key */
189
- apiKey?: string;
190
- /** Azure OpenAI API version */
191
- apiVersion?: string;
192
- /** Azure OpenAI deployment name */
193
- deployment?: string;
194
- /** Azure tenant ID for authentication */
195
- tenantId?: string;
196
- /** Azure resource group name */
197
- resourceGroup?: string;
198
- }
199
-
200
- /**
201
- * Revenium configuration interface
202
- *
203
- * Main configuration interface for initializing the Revenium middleware.
204
- * Defines all required and optional settings for connecting to Revenium's
205
- * metering API and configuring middleware behavior.
206
- *
207
- * @public
208
- * @example
209
- * ```typescript
210
- * const config: ReveniumConfig = {
211
- * reveniumApiKey: 'hak_your_revenium_api_key',
212
- * reveniumBaseUrl: 'https://api.revenium.ai',
213
- * debug: true,
214
- * openaiApiKey: process.env.OPENAI_API_KEY
215
- * };
216
- * ```
217
- */
218
- export interface ReveniumConfig {
219
- /** Revenium API key for authentication (required) */
220
- reveniumApiKey: string;
221
- /** Revenium API base URL (optional, defaults to https://api.revenium.ai) */
222
- reveniumBaseUrl?: string;
223
- /** Enable debug logging (optional, defaults to false) */
224
- debug?: boolean;
225
- /** Azure OpenAI configuration (optional, for Azure OpenAI usage) */
226
- azure?: AzureConfig;
227
- /** OpenAI API key (optional, can be set via environment variable) */
228
- openaiApiKey?: string;
229
- }
230
-
231
- /**
232
- * Logger interface for consistent logging
233
- *
234
- * Standardized logging interface that allows custom logger integration
235
- * while maintaining consistent log levels and metadata support throughout
236
- * the middleware. Supports both structured and string metadata.
237
- *
238
- * @public
239
- * @example
240
- * ```typescript
241
- * const customLogger: Logger = {
242
- * debug: (msg, meta) => console.debug(`[DEBUG] ${msg}`, meta),
243
- * info: (msg, meta) => console.info(`[INFO] ${msg}`, meta),
244
- * warn: (msg, meta) => console.warn(`[WARN] ${msg}`, meta),
245
- * error: (msg, meta) => console.error(`[ERROR] ${msg}`, meta)
246
- * };
247
- * ```
248
- */
249
- export interface Logger {
250
- /** Log debug-level messages with optional metadata */
251
- debug(message: string, meta?: Record<string, unknown> | string): void;
252
- /** Log info-level messages with optional metadata */
253
- info(message: string, meta?: Record<string, unknown> | string): void;
254
- /** Log warning-level messages with optional metadata */
255
- warn(message: string, meta?: Record<string, unknown> | string): void;
256
- /** Log error-level messages with optional metadata */
257
- error(message: string, meta?: Record<string, unknown> | string | unknown): void;
258
- }
259
-
260
- /**
261
- * Revenium API payload structure
262
- */
263
- export interface ReveniumPayload {
264
- // Core identification
265
- transactionId: string;
266
- operationType: 'CHAT' | 'GENERATE' | 'EMBED' | 'CLASSIFY' | 'SUMMARIZE' | 'TRANSLATE' | 'OTHER';
267
- costType: 'AI';
268
-
269
- // Model and provider info
270
- model: string;
271
- provider: string;
272
- modelSource?: string;
273
- middlewareSource: string;
274
-
275
- // Timing information
276
- requestTime: string;
277
- responseTime: string;
278
- requestDuration: number;
279
- completionStartTime: string;
280
-
281
- // Token counts
282
- inputTokenCount: number;
283
- outputTokenCount: number;
284
- totalTokenCount: number;
285
- // API Spec: https://revenium.readme.io/reference/meter_ai_completion
286
- // "Leave null for models without reasoning capabilities" - NOT in required fields
287
- reasoningTokenCount: number | undefined;
288
- cacheCreationTokenCount: number | undefined; // Undefined when provider doesn't report
289
- cacheReadTokenCount: number | undefined; // Undefined when provider doesn't report
290
-
291
- // Chat-specific fields
292
- stopReason: string;
293
- isStreamed: boolean;
294
- timeToFirstToken?: number | undefined; // Undefined when not tracking TTFB
295
-
296
- // Cost information (calculated by backend)
297
- inputTokenCost?: number;
298
- outputTokenCost?: number;
299
- totalCost?: number;
300
-
301
- // Metadata fields (optional)
302
- traceId?: string;
303
- taskType?: string;
304
- agent?: string;
305
- organizationId?: string;
306
- productId?: string;
307
- subscriber?: Subscriber;
308
- subscriptionId?: string;
309
- responseQualityScore?: number;
310
- }
@@ -1,232 +0,0 @@
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/openai';
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
-
54
- import { UsageMetadata } from './index.js';
55
-
56
- // Export something to make this a module (required for TypeScript compilation)
57
- export {};
58
-
59
- /**
60
- * OpenAI Chat Completions API augmentation
61
- *
62
- * Extends the OpenAI chat completions interfaces to include usageMetadata
63
- * for all completion types (base, streaming, and non-streaming).
64
- */
65
- declare module 'openai/resources/chat/completions/completions' {
66
- interface ChatCompletionCreateParamsBase {
67
- /**
68
- * Optional metadata for enhanced tracking and analytics.
69
- *
70
- * Provides rich context for business analytics, user tracking, and billing purposes.
71
- * All fields are optional to maintain backward compatibility and provide maximum flexibility.
72
- *
73
- * This metadata is automatically captured by the Revenium middleware and sent to
74
- * the Revenium API for detailed usage analytics and billing calculations.
75
- *
76
- * @since 1.0.0
77
- * @example Basic user tracking
78
- * ```typescript
79
- * usageMetadata: {
80
- * subscriber: {
81
- * id: 'user-123',
82
- * email: 'user@my-company.com'
83
- * },
84
- * organizationId: 'my-company',
85
- * productId: 'support-app'
86
- * }
87
- * ```
88
- *
89
- * @example Advanced tracking with quality metrics
90
- * ```typescript
91
- * usageMetadata: {
92
- * subscriber: { id: 'user-456' },
93
- * organizationId: 'enterprise-corp',
94
- * productId: 'ai-assistant',
95
- * taskType: 'customer-support',
96
- * traceId: 'session-abc-123',
97
- * responseQualityScore: 0.95,
98
- * agent: 'support-bot-v2'
99
- * }
100
- * ```
101
- */
102
- usageMetadata?: UsageMetadata;
103
- }
104
-
105
- interface ChatCompletionCreateParamsNonStreaming {
106
- /**
107
- * Optional metadata for enhanced tracking and analytics.
108
- *
109
- * Provides rich context for business analytics, user tracking, and billing purposes.
110
- * Specifically for non-streaming chat completions where the full response is returned at once.
111
- *
112
- * @see {@link UsageMetadata} for detailed field descriptions
113
- */
114
- usageMetadata?: UsageMetadata;
115
- }
116
-
117
- interface ChatCompletionCreateParamsStreaming {
118
- /**
119
- * Optional metadata for enhanced tracking and analytics.
120
- *
121
- * Provides rich context for business analytics, user tracking, and billing purposes.
122
- * Specifically for streaming chat completions where the response is delivered incrementally.
123
- *
124
- * @see {@link UsageMetadata} for detailed field descriptions
125
- */
126
- usageMetadata?: UsageMetadata;
127
- }
128
- }
129
-
130
- /**
131
- * OpenAI Embeddings API augmentation
132
- *
133
- * Extends the OpenAI embeddings interface to include usageMetadata
134
- * for comprehensive tracking of embedding generation requests.
135
- */
136
- declare module 'openai/resources/embeddings' {
137
- interface EmbeddingCreateParams {
138
- /**
139
- * Optional metadata for enhanced tracking and analytics.
140
- *
141
- * Provides rich context for business analytics, user tracking, and billing purposes
142
- * specifically for embedding generation requests. Particularly useful for tracking
143
- * vector database operations, search functionality, and document processing workflows.
144
- *
145
- * All fields are optional to maintain backward compatibility and provide maximum flexibility.
146
- *
147
- * @since 1.0.0
148
- * @example Document indexing workflow
149
- * ```typescript
150
- * usageMetadata: {
151
- * subscriber: {
152
- * id: 'user-123',
153
- * email: 'user@my-company.com'
154
- * },
155
- * organizationId: 'my-company',
156
- * productId: 'vector-search',
157
- * taskType: 'document-indexing'
158
- * }
159
- * ```
160
- *
161
- * @example Semantic search application
162
- * ```typescript
163
- * usageMetadata: {
164
- * subscriber: { id: 'user-456' },
165
- * organizationId: 'enterprise-corp',
166
- * productId: 'knowledge-base',
167
- * taskType: 'semantic-search',
168
- * traceId: 'search-session-789'
169
- * }
170
- * ```
171
- *
172
- * @see {@link UsageMetadata} for detailed field descriptions
173
- */
174
- usageMetadata?: UsageMetadata;
175
- }
176
- }
177
-
178
- /**
179
- * OpenAI Responses API augmentation
180
- *
181
- * Extends the new Responses API to support usageMetadata for comprehensive tracking.
182
- * The Responses API is OpenAI's new unified interface for agent-like applications.
183
- */
184
- declare module 'openai' {
185
- namespace Responses {
186
- interface ResponseCreateParams {
187
- /**
188
- * Custom usage metadata for Revenium tracking
189
- *
190
- * Enables comprehensive tracking and analytics for Responses API calls.
191
- * All fields are optional and can be customized based on your application needs.
192
- *
193
- * @example Basic Responses API usage with metadata
194
- * ```typescript
195
- * const response = await openai.responses.create({
196
- * model: 'gpt-4.1',
197
- * input: 'Analyze this data and provide insights',
198
- * usageMetadata: {
199
- * subscriber: {
200
- * id: 'analyst-123',
201
- * email: 'analyst@company.com'
202
- * },
203
- * organizationId: 'data-corp',
204
- * productId: 'analytics-platform',
205
- * taskType: 'data-analysis',
206
- * agent: 'responses-api-v1'
207
- * }
208
- * });
209
- * ```
210
- *
211
- * @example Streaming Responses API with metadata
212
- * ```typescript
213
- * const stream = await openai.responses.create({
214
- * model: 'gpt-4.1',
215
- * input: [
216
- * { role: 'user', content: 'Generate a detailed report' }
217
- * ],
218
- * stream: true,
219
- * usageMetadata: {
220
- * subscriber: { id: 'user-456' },
221
- * taskType: 'report-generation',
222
- * traceId: 'session-789'
223
- * }
224
- * });
225
- * ```
226
- *
227
- * @see {@link UsageMetadata} for detailed field descriptions
228
- */
229
- usageMetadata?: UsageMetadata;
230
- }
231
- }
232
- }