@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.
- package/.env.example +10 -15
- package/CHANGELOG.md +65 -11
- package/CODE_OF_CONDUCT.md +57 -0
- package/CONTRIBUTING.md +38 -0
- package/README.md +104 -216
- package/SECURITY.md +34 -0
- package/dist/cjs/core/client/index.js +14 -0
- package/dist/cjs/core/client/index.js.map +1 -0
- package/dist/cjs/core/client/manager.js +109 -0
- package/dist/cjs/core/client/manager.js.map +1 -0
- package/dist/cjs/core/config/azure-config.js +5 -17
- package/dist/cjs/core/config/azure-config.js.map +1 -1
- package/dist/cjs/core/config/index.js +2 -2
- package/dist/cjs/core/config/index.js.map +1 -1
- package/dist/cjs/core/config/loader.js +34 -14
- package/dist/cjs/core/config/loader.js.map +1 -1
- package/dist/cjs/core/config/manager.js +11 -5
- package/dist/cjs/core/config/manager.js.map +1 -1
- package/dist/cjs/core/config/validator.js +3 -45
- package/dist/cjs/core/config/validator.js.map +1 -1
- package/dist/cjs/core/middleware/index.js +21 -0
- package/dist/cjs/core/middleware/index.js.map +1 -0
- package/dist/cjs/core/middleware/interfaces.js +454 -0
- package/dist/cjs/core/middleware/interfaces.js.map +1 -0
- package/dist/cjs/core/middleware/revenium-client.js +152 -0
- package/dist/cjs/core/middleware/revenium-client.js.map +1 -0
- package/dist/cjs/core/providers/detector.js +45 -23
- package/dist/cjs/core/providers/detector.js.map +1 -1
- package/dist/cjs/core/providers/index.js +2 -1
- package/dist/cjs/core/providers/index.js.map +1 -1
- package/dist/cjs/core/tracking/api-client.js +21 -14
- package/dist/cjs/core/tracking/api-client.js.map +1 -1
- package/dist/cjs/core/tracking/index.js +5 -1
- package/dist/cjs/core/tracking/index.js.map +1 -1
- package/dist/cjs/core/tracking/payload-builder.js +143 -25
- package/dist/cjs/core/tracking/payload-builder.js.map +1 -1
- package/dist/cjs/core/tracking/usage-tracker.js +111 -18
- package/dist/cjs/core/tracking/usage-tracker.js.map +1 -1
- package/dist/cjs/index.js +39 -202
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/index.js +0 -8
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/openai-augmentation.js +0 -49
- package/dist/cjs/types/openai-augmentation.js.map +1 -1
- package/dist/cjs/utils/constants.js +17 -20
- package/dist/cjs/utils/constants.js.map +1 -1
- package/dist/cjs/utils/error-handler.js +18 -14
- package/dist/cjs/utils/error-handler.js.map +1 -1
- package/dist/cjs/utils/metadata-builder.js +17 -16
- package/dist/cjs/utils/metadata-builder.js.map +1 -1
- package/dist/cjs/utils/provider-detection.js +25 -28
- package/dist/cjs/utils/provider-detection.js.map +1 -1
- package/dist/cjs/utils/trace-fields.js +115 -0
- package/dist/cjs/utils/trace-fields.js.map +1 -0
- package/dist/esm/core/client/index.js +6 -0
- package/dist/esm/core/client/index.js.map +1 -0
- package/dist/esm/core/client/manager.js +102 -0
- package/dist/esm/core/client/manager.js.map +1 -0
- package/dist/esm/core/config/azure-config.js +6 -18
- package/dist/esm/core/config/azure-config.js.map +1 -1
- package/dist/esm/core/config/index.js +5 -4
- package/dist/esm/core/config/index.js.map +1 -1
- package/dist/esm/core/config/loader.js +33 -13
- package/dist/esm/core/config/loader.js.map +1 -1
- package/dist/esm/core/config/manager.js +13 -7
- package/dist/esm/core/config/manager.js.map +1 -1
- package/dist/esm/core/config/validator.js +3 -44
- package/dist/esm/core/config/validator.js.map +1 -1
- package/dist/esm/core/middleware/index.js +8 -0
- package/dist/esm/core/middleware/index.js.map +1 -0
- package/dist/esm/core/middleware/interfaces.js +442 -0
- package/dist/esm/core/middleware/interfaces.js.map +1 -0
- package/dist/esm/core/middleware/revenium-client.js +115 -0
- package/dist/esm/core/middleware/revenium-client.js.map +1 -0
- package/dist/esm/core/providers/detector.js +43 -22
- package/dist/esm/core/providers/detector.js.map +1 -1
- package/dist/esm/core/providers/index.js +2 -2
- package/dist/esm/core/providers/index.js.map +1 -1
- package/dist/esm/core/tracking/api-client.js +20 -13
- package/dist/esm/core/tracking/api-client.js.map +1 -1
- package/dist/esm/core/tracking/index.js +4 -4
- package/dist/esm/core/tracking/index.js.map +1 -1
- package/dist/esm/core/tracking/payload-builder.js +142 -26
- package/dist/esm/core/tracking/payload-builder.js.map +1 -1
- package/dist/esm/core/tracking/usage-tracker.js +78 -20
- package/dist/esm/core/tracking/usage-tracker.js.map +1 -1
- package/dist/esm/index.js +9 -177
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/index.js +2 -10
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/types/openai-augmentation.js +0 -49
- package/dist/esm/types/openai-augmentation.js.map +1 -1
- package/dist/esm/utils/constants.js +16 -19
- package/dist/esm/utils/constants.js.map +1 -1
- package/dist/esm/utils/error-handler.js +19 -15
- package/dist/esm/utils/error-handler.js.map +1 -1
- package/dist/esm/utils/metadata-builder.js +17 -16
- package/dist/esm/utils/metadata-builder.js.map +1 -1
- package/dist/esm/utils/provider-detection.js +26 -29
- package/dist/esm/utils/provider-detection.js.map +1 -1
- package/dist/esm/utils/trace-fields.js +100 -0
- package/dist/esm/utils/trace-fields.js.map +1 -0
- package/dist/types/core/client/index.d.ts +6 -0
- package/dist/types/core/client/index.d.ts.map +1 -0
- package/dist/types/core/client/manager.d.ts +32 -0
- package/dist/types/core/client/manager.d.ts.map +1 -0
- package/dist/types/core/config/azure-config.d.ts +2 -2
- package/dist/types/core/config/azure-config.d.ts.map +1 -1
- package/dist/types/core/config/index.d.ts +4 -4
- package/dist/types/core/config/index.d.ts.map +1 -1
- package/dist/types/core/config/loader.d.ts +3 -1
- package/dist/types/core/config/loader.d.ts.map +1 -1
- package/dist/types/core/config/manager.d.ts +1 -1
- package/dist/types/core/config/manager.d.ts.map +1 -1
- package/dist/types/core/config/validator.d.ts +1 -12
- package/dist/types/core/config/validator.d.ts.map +1 -1
- package/dist/types/core/middleware/index.d.ts +8 -0
- package/dist/types/core/middleware/index.d.ts.map +1 -0
- package/dist/types/core/middleware/interfaces.d.ts +104 -0
- package/dist/types/core/middleware/interfaces.d.ts.map +1 -0
- package/dist/types/core/middleware/revenium-client.d.ts +64 -0
- package/dist/types/core/middleware/revenium-client.d.ts.map +1 -0
- package/dist/types/core/providers/detector.d.ts +9 -2
- package/dist/types/core/providers/detector.d.ts.map +1 -1
- package/dist/types/core/providers/index.d.ts +2 -2
- package/dist/types/core/providers/index.d.ts.map +1 -1
- package/dist/types/core/tracking/api-client.d.ts +1 -1
- package/dist/types/core/tracking/api-client.d.ts.map +1 -1
- package/dist/types/core/tracking/index.d.ts +4 -4
- package/dist/types/core/tracking/index.d.ts.map +1 -1
- package/dist/types/core/tracking/payload-builder.d.ts +5 -3
- package/dist/types/core/tracking/payload-builder.d.ts.map +1 -1
- package/dist/types/core/tracking/usage-tracker.d.ts +4 -2
- package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -1
- package/dist/types/index.d.ts +11 -135
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types/function-parameters.d.ts +91 -23
- package/dist/types/types/function-parameters.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +53 -108
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/openai-augmentation.d.ts +4 -138
- package/dist/types/types/openai-augmentation.d.ts.map +1 -1
- package/dist/types/utils/constants.d.ts +7 -1
- package/dist/types/utils/constants.d.ts.map +1 -1
- package/dist/types/utils/error-handler.d.ts +2 -2
- package/dist/types/utils/error-handler.d.ts.map +1 -1
- package/dist/types/utils/metadata-builder.d.ts +2 -2
- package/dist/types/utils/metadata-builder.d.ts.map +1 -1
- package/dist/types/utils/provider-detection.d.ts +3 -3
- package/dist/types/utils/provider-detection.d.ts.map +1 -1
- package/dist/types/utils/trace-fields.d.ts +11 -0
- package/dist/types/utils/trace-fields.d.ts.map +1 -0
- package/examples/README.md +282 -198
- package/examples/azure/basic.ts +62 -0
- package/examples/azure/responses-basic.ts +45 -0
- package/examples/azure/responses-stream.ts +61 -0
- package/examples/azure/stream.ts +56 -0
- package/examples/getting_started.ts +31 -43
- package/examples/openai/basic.ts +45 -0
- package/examples/openai/metadata.ts +67 -0
- package/examples/openai/responses-basic.ts +44 -0
- package/examples/openai/responses-embed.ts +34 -0
- package/examples/openai/responses-streaming.ts +63 -0
- package/examples/openai/streaming.ts +59 -0
- package/package.json +23 -13
- package/dist/cjs/core/wrapper/index.js +0 -15
- package/dist/cjs/core/wrapper/index.js.map +0 -1
- package/dist/cjs/core/wrapper/instance-patcher.js +0 -202
- package/dist/cjs/core/wrapper/instance-patcher.js.map +0 -1
- package/dist/cjs/core/wrapper/request-handler.js +0 -317
- package/dist/cjs/core/wrapper/request-handler.js.map +0 -1
- package/dist/cjs/core/wrapper/stream-wrapper.js +0 -82
- package/dist/cjs/core/wrapper/stream-wrapper.js.map +0 -1
- package/dist/cjs/utils/azure-model-resolver.js +0 -211
- package/dist/cjs/utils/azure-model-resolver.js.map +0 -1
- package/dist/cjs/utils/request-handler-factory.js +0 -185
- package/dist/cjs/utils/request-handler-factory.js.map +0 -1
- package/dist/esm/core/wrapper/index.js +0 -9
- package/dist/esm/core/wrapper/index.js.map +0 -1
- package/dist/esm/core/wrapper/instance-patcher.js +0 -199
- package/dist/esm/core/wrapper/instance-patcher.js.map +0 -1
- package/dist/esm/core/wrapper/request-handler.js +0 -310
- package/dist/esm/core/wrapper/request-handler.js.map +0 -1
- package/dist/esm/core/wrapper/stream-wrapper.js +0 -79
- package/dist/esm/core/wrapper/stream-wrapper.js.map +0 -1
- package/dist/esm/utils/azure-model-resolver.js +0 -204
- package/dist/esm/utils/azure-model-resolver.js.map +0 -1
- package/dist/esm/utils/request-handler-factory.js +0 -146
- package/dist/esm/utils/request-handler-factory.js.map +0 -1
- package/dist/types/core/wrapper/index.d.ts +0 -8
- package/dist/types/core/wrapper/index.d.ts.map +0 -1
- package/dist/types/core/wrapper/instance-patcher.d.ts +0 -33
- package/dist/types/core/wrapper/instance-patcher.d.ts.map +0 -1
- package/dist/types/core/wrapper/request-handler.d.ts +0 -29
- package/dist/types/core/wrapper/request-handler.d.ts.map +0 -1
- package/dist/types/core/wrapper/stream-wrapper.d.ts +0 -13
- package/dist/types/core/wrapper/stream-wrapper.d.ts.map +0 -1
- package/dist/types/utils/azure-model-resolver.d.ts +0 -41
- package/dist/types/utils/azure-model-resolver.d.ts.map +0 -1
- package/dist/types/utils/request-handler-factory.d.ts +0 -81
- package/dist/types/utils/request-handler-factory.d.ts.map +0 -1
- package/examples/azure-basic.ts +0 -206
- package/examples/azure-responses-basic.ts +0 -233
- package/examples/azure-responses-streaming.ts +0 -255
- package/examples/azure-streaming.ts +0 -209
- package/examples/openai-basic.ts +0 -147
- package/examples/openai-function-calling.ts +0 -259
- package/examples/openai-responses-basic.ts +0 -212
- package/examples/openai-responses-streaming.ts +0 -232
- package/examples/openai-streaming.ts +0 -172
- package/examples/openai-vision.ts +0 -289
- package/src/core/config/azure-config.ts +0 -72
- package/src/core/config/index.ts +0 -23
- package/src/core/config/loader.ts +0 -66
- package/src/core/config/manager.ts +0 -95
- package/src/core/config/validator.ts +0 -89
- package/src/core/providers/detector.ts +0 -159
- package/src/core/providers/index.ts +0 -16
- package/src/core/tracking/api-client.ts +0 -78
- package/src/core/tracking/index.ts +0 -21
- package/src/core/tracking/payload-builder.ts +0 -137
- package/src/core/tracking/usage-tracker.ts +0 -189
- package/src/core/wrapper/index.ts +0 -9
- package/src/core/wrapper/instance-patcher.ts +0 -288
- package/src/core/wrapper/request-handler.ts +0 -423
- package/src/core/wrapper/stream-wrapper.ts +0 -100
- package/src/index.ts +0 -360
- package/src/types/function-parameters.ts +0 -251
- package/src/types/index.ts +0 -310
- package/src/types/openai-augmentation.ts +0 -232
- package/src/types/responses-api.ts +0 -308
- package/src/utils/azure-model-resolver.ts +0 -220
- package/src/utils/constants.ts +0 -21
- package/src/utils/error-handler.ts +0 -251
- package/src/utils/metadata-builder.ts +0 -228
- package/src/utils/provider-detection.ts +0 -257
- package/src/utils/request-handler-factory.ts +0 -285
- package/src/utils/stop-reason-mapper.ts +0 -78
- package/src/utils/type-guards.ts +0 -202
- package/src/utils/url-builder.ts +0 -68
|
@@ -5,28 +5,63 @@
|
|
|
5
5
|
* High-level tracking functions that combine payload building and API communication.
|
|
6
6
|
* Extracted from tracking.ts for better organization.
|
|
7
7
|
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
8
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
42
|
exports.sendReveniumMetrics = sendReveniumMetrics;
|
|
10
43
|
exports.sendReveniumEmbeddingsMetrics = sendReveniumEmbeddingsMetrics;
|
|
11
44
|
exports.trackUsageAsync = trackUsageAsync;
|
|
12
45
|
exports.trackEmbeddingsUsageAsync = trackEmbeddingsUsageAsync;
|
|
13
|
-
|
|
46
|
+
exports.trackImageUsageAsync = trackImageUsageAsync;
|
|
47
|
+
exports.trackAudioUsageAsync = trackAudioUsageAsync;
|
|
48
|
+
const config_1 = require("../config");
|
|
14
49
|
const api_client_js_1 = require("./api-client.js");
|
|
15
50
|
const payload_builder_js_1 = require("./payload-builder.js");
|
|
16
51
|
const error_handler_js_1 = require("../../utils/error-handler.js");
|
|
17
52
|
// Global logger
|
|
18
|
-
const logger = (0,
|
|
53
|
+
const logger = (0, config_1.getLogger)();
|
|
19
54
|
/**
|
|
20
55
|
* Chat completions tracking - now a thin wrapper with Azure support
|
|
21
56
|
*/
|
|
22
57
|
async function sendReveniumMetrics(response, request, startTime, duration, providerInfo) {
|
|
23
58
|
await (0, error_handler_js_1.safeAsyncOperation)(async () => {
|
|
24
|
-
const payload = (0, payload_builder_js_1.buildPayload)(
|
|
59
|
+
const payload = (0, payload_builder_js_1.buildPayload)("CHAT", response, request, startTime, duration, providerInfo);
|
|
25
60
|
await (0, api_client_js_1.sendToRevenium)(payload);
|
|
26
|
-
},
|
|
61
|
+
}, "Chat completion tracking", {
|
|
27
62
|
logError: true,
|
|
28
63
|
rethrow: false, // Don't rethrow to maintain fire-and-forget behavior
|
|
29
|
-
messagePrefix:
|
|
64
|
+
messagePrefix: "Chat completion tracking failed: ",
|
|
30
65
|
}, logger);
|
|
31
66
|
}
|
|
32
67
|
/**
|
|
@@ -34,12 +69,12 @@ async function sendReveniumMetrics(response, request, startTime, duration, provi
|
|
|
34
69
|
*/
|
|
35
70
|
async function sendReveniumEmbeddingsMetrics(response, request, startTime, duration, providerInfo) {
|
|
36
71
|
await (0, error_handler_js_1.safeAsyncOperation)(async () => {
|
|
37
|
-
const payload = (0, payload_builder_js_1.buildPayload)(
|
|
72
|
+
const payload = (0, payload_builder_js_1.buildPayload)("EMBED", response, request, startTime, duration, providerInfo);
|
|
38
73
|
await (0, api_client_js_1.sendToRevenium)(payload);
|
|
39
|
-
},
|
|
74
|
+
}, "Embeddings tracking", {
|
|
40
75
|
logError: true,
|
|
41
76
|
rethrow: false, // Don't rethrow to maintain fire-and-forget behavior
|
|
42
|
-
messagePrefix:
|
|
77
|
+
messagePrefix: "Embeddings tracking failed: ",
|
|
43
78
|
}, logger);
|
|
44
79
|
}
|
|
45
80
|
/**
|
|
@@ -53,8 +88,12 @@ function trackUsageAsync(trackingData) {
|
|
|
53
88
|
prompt_tokens: trackingData.promptTokens,
|
|
54
89
|
completion_tokens: trackingData.completionTokens,
|
|
55
90
|
total_tokens: trackingData.totalTokens,
|
|
56
|
-
...(trackingData.reasoningTokens && {
|
|
57
|
-
|
|
91
|
+
...(trackingData.reasoningTokens && {
|
|
92
|
+
reasoning_tokens: trackingData.reasoningTokens,
|
|
93
|
+
}),
|
|
94
|
+
...(trackingData.cachedTokens && {
|
|
95
|
+
cached_tokens: trackingData.cachedTokens,
|
|
96
|
+
}),
|
|
58
97
|
},
|
|
59
98
|
choices: [
|
|
60
99
|
{
|
|
@@ -71,15 +110,15 @@ function trackUsageAsync(trackingData) {
|
|
|
71
110
|
const startTime = Date.now() - trackingData.duration;
|
|
72
111
|
sendReveniumMetrics(mockResponse, mockRequest, startTime, trackingData.duration, trackingData.providerInfo)
|
|
73
112
|
.then(() => {
|
|
74
|
-
logger.debug(
|
|
113
|
+
logger.debug("Usage tracking completed successfully", {
|
|
75
114
|
requestId: trackingData.requestId,
|
|
76
115
|
model: trackingData.model,
|
|
77
116
|
totalTokens: trackingData.totalTokens,
|
|
78
117
|
isStreamed: trackingData.isStreamed,
|
|
79
118
|
});
|
|
80
119
|
})
|
|
81
|
-
.catch(error => {
|
|
82
|
-
logger.warn(
|
|
120
|
+
.catch((error) => {
|
|
121
|
+
logger.warn("Usage tracking failed", {
|
|
83
122
|
error: error instanceof Error ? error.message : String(error),
|
|
84
123
|
requestId: trackingData.requestId,
|
|
85
124
|
model: trackingData.model,
|
|
@@ -97,21 +136,75 @@ function trackEmbeddingsUsageAsync(trackingData) {
|
|
|
97
136
|
total_tokens: trackingData.totalTokens,
|
|
98
137
|
},
|
|
99
138
|
data: [], // Mock empty data array for type compliance
|
|
100
|
-
object:
|
|
139
|
+
object: "list",
|
|
101
140
|
};
|
|
102
141
|
const mockRequest = {
|
|
103
142
|
model: trackingData.model,
|
|
104
|
-
input:
|
|
143
|
+
input: "", // Mock empty input for type compliance
|
|
105
144
|
usageMetadata: trackingData.usageMetadata,
|
|
106
145
|
};
|
|
107
146
|
sendReveniumEmbeddingsMetrics(mockResponse, mockRequest, trackingData.requestStartTime, trackingData.duration, trackingData.providerInfo)
|
|
108
147
|
.then(() => {
|
|
109
|
-
logger.debug(
|
|
148
|
+
logger.debug("Embeddings tracking completed successfully", {
|
|
149
|
+
transactionId: trackingData.transactionId,
|
|
150
|
+
});
|
|
151
|
+
})
|
|
152
|
+
.catch((error) => {
|
|
153
|
+
logger.warn("Embeddings tracking failed", {
|
|
154
|
+
error: error instanceof Error ? error.message : String(error),
|
|
155
|
+
transactionId: trackingData.transactionId,
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
async function trackImageUsageAsync(operationSubtype, response, request, startTime, duration, config, providerInfo, metadata) {
|
|
160
|
+
const trackingData = {
|
|
161
|
+
transactionId: `image-${operationSubtype}-${Date.now()}`,
|
|
162
|
+
operationSubtype,
|
|
163
|
+
model: request.model || "dall-e-2",
|
|
164
|
+
startTime,
|
|
165
|
+
duration,
|
|
166
|
+
};
|
|
167
|
+
logger.debug("Starting image tracking", trackingData);
|
|
168
|
+
Promise.resolve()
|
|
169
|
+
.then(async () => {
|
|
170
|
+
const { buildImagePayload } = await Promise.resolve().then(() => __importStar(require("./payload-builder.js")));
|
|
171
|
+
const payload = buildImagePayload(operationSubtype, response, request, startTime, duration, providerInfo, metadata);
|
|
172
|
+
await (0, api_client_js_1.sendToRevenium)(payload);
|
|
173
|
+
})
|
|
174
|
+
.then(() => {
|
|
175
|
+
logger.debug("Image tracking completed successfully", {
|
|
176
|
+
transactionId: trackingData.transactionId,
|
|
177
|
+
});
|
|
178
|
+
})
|
|
179
|
+
.catch((error) => {
|
|
180
|
+
logger.warn("Image tracking failed", {
|
|
181
|
+
error: error instanceof Error ? error.message : String(error),
|
|
182
|
+
transactionId: trackingData.transactionId,
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
async function trackAudioUsageAsync(operationSubtype, response, request, startTime, duration, config, providerInfo, metadata) {
|
|
187
|
+
const trackingData = {
|
|
188
|
+
transactionId: `audio-${operationSubtype}-${Date.now()}`,
|
|
189
|
+
operationSubtype,
|
|
190
|
+
model: request.model || "whisper-1",
|
|
191
|
+
startTime,
|
|
192
|
+
duration,
|
|
193
|
+
};
|
|
194
|
+
logger.debug("Starting audio tracking", trackingData);
|
|
195
|
+
Promise.resolve()
|
|
196
|
+
.then(async () => {
|
|
197
|
+
const { buildAudioPayload } = await Promise.resolve().then(() => __importStar(require("./payload-builder.js")));
|
|
198
|
+
const payload = buildAudioPayload(operationSubtype, response, request, startTime, duration, providerInfo, metadata);
|
|
199
|
+
await (0, api_client_js_1.sendToRevenium)(payload);
|
|
200
|
+
})
|
|
201
|
+
.then(() => {
|
|
202
|
+
logger.debug("Audio tracking completed successfully", {
|
|
110
203
|
transactionId: trackingData.transactionId,
|
|
111
204
|
});
|
|
112
205
|
})
|
|
113
|
-
.catch(error => {
|
|
114
|
-
logger.warn(
|
|
206
|
+
.catch((error) => {
|
|
207
|
+
logger.warn("Audio tracking failed", {
|
|
115
208
|
error: error instanceof Error ? error.message : String(error),
|
|
116
209
|
transactionId: trackingData.transactionId,
|
|
117
210
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../../../src/core/tracking/usage-tracker.ts"],"names":[],"mappings":";AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../../../src/core/tracking/usage-tracker.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -3,214 +3,51 @@
|
|
|
3
3
|
* Revenium OpenAI Middleware for TypeScript
|
|
4
4
|
*
|
|
5
5
|
* This middleware tracks OpenAI usage and sends metrics to Revenium.
|
|
6
|
-
* Uses hybrid initialization: auto-initializes on import with graceful fallback to manual init.
|
|
7
|
-
*
|
|
8
|
-
* Environment Variables:
|
|
9
|
-
* REVENIUM_METERING_API_KEY=hak_your_api_key
|
|
10
|
-
* REVENIUM_METERING_BASE_URL=https://api.revenium.ai (optional)
|
|
11
|
-
* OPENAI_API_KEY=sk_your_openai_key
|
|
12
|
-
*
|
|
13
|
-
* Simple Usage (auto-initialization):
|
|
14
|
-
* import { patchOpenAIInstance } from '@revenium/openai';
|
|
15
|
-
* import OpenAI from 'openai';
|
|
16
|
-
*
|
|
17
|
-
* const openai = patchOpenAIInstance(new OpenAI());
|
|
18
|
-
* // Auto-initializes from environment variables
|
|
19
|
-
*
|
|
20
|
-
* Advanced Usage (explicit initialization):
|
|
21
|
-
* import { initializeReveniumFromEnv, patchOpenAIInstance } from '@revenium/openai';
|
|
22
|
-
* import OpenAI from 'openai';
|
|
23
|
-
*
|
|
24
|
-
* const result = initializeReveniumFromEnv();
|
|
25
|
-
* if (!result.success) {
|
|
26
|
-
* throw new Error(result.message);
|
|
27
|
-
* }
|
|
28
|
-
* const openai = patchOpenAIInstance(new OpenAI());
|
|
29
|
-
*
|
|
30
|
-
* const response = await openai.chat.completions.create({
|
|
31
|
-
* model: 'gpt-4',
|
|
32
|
-
* messages: [{ role: 'user', content: 'Hello!' }],
|
|
33
|
-
* usageMetadata: {
|
|
34
|
-
* subscriber: {
|
|
35
|
-
* id: 'user-123',
|
|
36
|
-
* email: 'user@my-org.com'
|
|
37
|
-
* },
|
|
38
|
-
* organizationId: 'my-org',
|
|
39
|
-
* productId: 'my-app'
|
|
40
|
-
* }
|
|
41
|
-
* });
|
|
42
6
|
*/
|
|
43
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
|
-
exports.
|
|
45
|
-
exports.initializeRevenium = initializeRevenium;
|
|
46
|
-
exports.configure = configure;
|
|
47
|
-
exports.initializeReveniumFromEnv = initializeReveniumFromEnv;
|
|
48
|
-
exports.isReveniumInitialized = isReveniumInitialized;
|
|
49
|
-
exports.getInitializationStatus = getInitializationStatus;
|
|
8
|
+
exports.getProviderMetadata = exports.validateAzureConfig = exports.hasAzureConfig = exports.detectProvider = exports.trackAudioUsageAsync = exports.trackImageUsageAsync = exports.trackEmbeddingsUsageAsync = exports.trackUsageAsync = exports.AudioSpeechInterface = exports.AudioTranslationsInterface = exports.AudioTranscriptionsInterface = exports.ImagesInterface = exports.StreamingWrapper = exports.ResponsesInterface = exports.EmbeddingsInterface = exports.CompletionsInterface = exports.ChatInterface = exports.ReveniumOpenAI = exports.Configure = exports.Reset = exports.IsInitialized = exports.GetClient = exports.Initialize = void 0;
|
|
50
9
|
// Import type augmentations to extend OpenAI types with usageMetadata
|
|
51
10
|
require("./types/openai-augmentation.js");
|
|
52
|
-
// Import from new modular structure
|
|
53
|
-
const index_js_1 = require("./core/config/index.js");
|
|
54
|
-
const index_js_2 = require("./core/wrapper/index.js");
|
|
55
|
-
// Track initialization state
|
|
56
|
-
let isInitialized = false;
|
|
57
|
-
let autoInitAttempted = false;
|
|
58
11
|
// Note: ExtendedChatCompletionCreateParams and ExtendedEmbeddingCreateParams are no longer exported
|
|
59
12
|
// as they have been replaced with seamless TypeScript module augmentation. The usageMetadata field
|
|
60
13
|
// is now natively available on OpenAI's types without requiring additional imports.
|
|
61
|
-
// Export tracking functions
|
|
62
|
-
var index_js_3 = require("./core/tracking/index.js");
|
|
63
|
-
Object.defineProperty(exports, "trackUsageAsync", { enumerable: true, get: function () { return index_js_3.trackUsageAsync; } });
|
|
64
|
-
Object.defineProperty(exports, "trackEmbeddingsUsageAsync", { enumerable: true, get: function () { return index_js_3.trackEmbeddingsUsageAsync; } });
|
|
65
|
-
// Export provider detection functions
|
|
66
|
-
var index_js_4 = require("./core/providers/index.js");
|
|
67
|
-
Object.defineProperty(exports, "detectProvider", { enumerable: true, get: function () { return index_js_4.detectProvider; } });
|
|
68
|
-
Object.defineProperty(exports, "hasAzureConfig", { enumerable: true, get: function () { return index_js_4.hasAzureConfig; } });
|
|
69
|
-
Object.defineProperty(exports, "validateAzureConfig", { enumerable: true, get: function () { return index_js_4.validateAzureConfig; } });
|
|
70
|
-
Object.defineProperty(exports, "getProviderMetadata", { enumerable: true, get: function () { return index_js_4.getProviderMetadata; } });
|
|
71
|
-
var index_js_5 = require("./core/wrapper/index.js");
|
|
72
|
-
Object.defineProperty(exports, "getProviderInfo", { enumerable: true, get: function () { return index_js_5.getProviderInfo; } });
|
|
73
|
-
// Export Azure model resolution functions
|
|
74
|
-
var azure_model_resolver_js_1 = require("./utils/azure-model-resolver.js");
|
|
75
|
-
Object.defineProperty(exports, "resolveAzureModelName", { enumerable: true, get: function () { return azure_model_resolver_js_1.resolveAzureModelName; } });
|
|
76
|
-
Object.defineProperty(exports, "clearModelNameCache", { enumerable: true, get: function () { return azure_model_resolver_js_1.clearModelNameCache; } });
|
|
77
|
-
Object.defineProperty(exports, "getModelNameCacheStats", { enumerable: true, get: function () { return azure_model_resolver_js_1.getModelNameCacheStats; } });
|
|
78
|
-
Object.defineProperty(exports, "batchResolveModelNames", { enumerable: true, get: function () { return azure_model_resolver_js_1.batchResolveModelNames; } });
|
|
79
|
-
Object.defineProperty(exports, "wouldTransformDeploymentName", { enumerable: true, get: function () { return azure_model_resolver_js_1.wouldTransformDeploymentName; } });
|
|
80
|
-
// Global logger
|
|
81
|
-
const logger = (0, index_js_1.getLogger)();
|
|
82
|
-
/**
|
|
83
|
-
* Initialize Revenium middleware with configuration
|
|
84
|
-
*/
|
|
85
|
-
function initializeRevenium(config) {
|
|
86
|
-
// Check if already initialized to prevent duplicate initialization
|
|
87
|
-
if (isInitialized) {
|
|
88
|
-
return {
|
|
89
|
-
success: true,
|
|
90
|
-
message: 'Revenium middleware already initialized',
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
try {
|
|
94
|
-
// Apply default base URL if not provided
|
|
95
|
-
const configWithDefaults = {
|
|
96
|
-
...config,
|
|
97
|
-
reveniumBaseUrl: config.reveniumBaseUrl || 'https://api.revenium.ai',
|
|
98
|
-
};
|
|
99
|
-
(0, index_js_1.validateConfig)(configWithDefaults);
|
|
100
|
-
(0, index_js_1.setConfig)(configWithDefaults);
|
|
101
|
-
// Mark as initialized
|
|
102
|
-
isInitialized = true;
|
|
103
|
-
// Patch OpenAI prototype methods
|
|
104
|
-
(0, index_js_2.patchOpenAI)();
|
|
105
|
-
return {
|
|
106
|
-
success: true,
|
|
107
|
-
message: 'Revenium middleware initialized successfully',
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
isInitialized = false;
|
|
112
|
-
return {
|
|
113
|
-
success: false,
|
|
114
|
-
message: error instanceof Error ? error.message : 'Unknown initialization error',
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Configure Revenium middleware manually
|
|
120
|
-
* Alias for initializeRevenium() with a more intuitive name
|
|
121
|
-
*
|
|
122
|
-
* @param config - Revenium configuration object
|
|
123
|
-
* @returns Initialization result with success status and message
|
|
124
|
-
*
|
|
125
|
-
* @example
|
|
126
|
-
* ```typescript
|
|
127
|
-
* import { configure } from '@revenium/openai';
|
|
128
|
-
*
|
|
129
|
-
* configure({
|
|
130
|
-
* reveniumApiKey: 'hak_your_api_key',
|
|
131
|
-
* reveniumBaseUrl: 'https://api.revenium.ai',
|
|
132
|
-
* });
|
|
133
|
-
* ```
|
|
134
|
-
*/
|
|
135
|
-
function configure(config) {
|
|
136
|
-
return initializeRevenium(config);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Initialize Revenium middleware from environment variables
|
|
140
|
-
*/
|
|
141
|
-
function initializeReveniumFromEnv() {
|
|
142
|
-
// Check if already initialized to prevent duplicate initialization
|
|
143
|
-
if (isInitialized) {
|
|
144
|
-
return {
|
|
145
|
-
success: true,
|
|
146
|
-
message: 'Revenium middleware already initialized',
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
const envSuccess = (0, index_js_1.initializeConfig)();
|
|
150
|
-
if (!envSuccess) {
|
|
151
|
-
isInitialized = false;
|
|
152
|
-
return {
|
|
153
|
-
success: false,
|
|
154
|
-
message: 'Failed to load configuration from environment variables. Check REVENIUM_METERING_API_KEY and REVENIUM_METERING_BASE_URL.',
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
// Mark as initialized
|
|
158
|
-
isInitialized = true;
|
|
159
|
-
// Patch OpenAI prototype methods
|
|
160
|
-
(0, index_js_2.patchOpenAI)();
|
|
161
|
-
return {
|
|
162
|
-
success: true,
|
|
163
|
-
message: 'Revenium middleware initialized from environment',
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Manually patch an OpenAI instance (for advanced use cases)
|
|
168
|
-
*/
|
|
169
|
-
var index_js_6 = require("./core/wrapper/index.js");
|
|
170
|
-
Object.defineProperty(exports, "patchOpenAIInstance", { enumerable: true, get: function () { return index_js_6.patchOpenAIInstance; } });
|
|
171
14
|
/**
|
|
172
|
-
*
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
function
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
function
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
*
|
|
204
|
-
*/
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
hasApiKey: !!config?.reveniumApiKey,
|
|
211
|
-
autoInitAttempted,
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
|
-
// Perform auto-initialization when module is imported
|
|
215
|
-
attemptAutoInitialization();
|
|
15
|
+
* Main API
|
|
16
|
+
*/
|
|
17
|
+
var client_1 = require("./core/client");
|
|
18
|
+
Object.defineProperty(exports, "Initialize", { enumerable: true, get: function () { return client_1.Initialize; } });
|
|
19
|
+
Object.defineProperty(exports, "GetClient", { enumerable: true, get: function () { return client_1.GetClient; } });
|
|
20
|
+
Object.defineProperty(exports, "IsInitialized", { enumerable: true, get: function () { return client_1.IsInitialized; } });
|
|
21
|
+
Object.defineProperty(exports, "Reset", { enumerable: true, get: function () { return client_1.Reset; } });
|
|
22
|
+
Object.defineProperty(exports, "Configure", { enumerable: true, get: function () { return client_1.Configure; } });
|
|
23
|
+
/**
|
|
24
|
+
* Middleware classes
|
|
25
|
+
*/
|
|
26
|
+
var middleware_1 = require("./core/middleware");
|
|
27
|
+
Object.defineProperty(exports, "ReveniumOpenAI", { enumerable: true, get: function () { return middleware_1.ReveniumOpenAI; } });
|
|
28
|
+
Object.defineProperty(exports, "ChatInterface", { enumerable: true, get: function () { return middleware_1.ChatInterface; } });
|
|
29
|
+
Object.defineProperty(exports, "CompletionsInterface", { enumerable: true, get: function () { return middleware_1.CompletionsInterface; } });
|
|
30
|
+
Object.defineProperty(exports, "EmbeddingsInterface", { enumerable: true, get: function () { return middleware_1.EmbeddingsInterface; } });
|
|
31
|
+
Object.defineProperty(exports, "ResponsesInterface", { enumerable: true, get: function () { return middleware_1.ResponsesInterface; } });
|
|
32
|
+
Object.defineProperty(exports, "StreamingWrapper", { enumerable: true, get: function () { return middleware_1.StreamingWrapper; } });
|
|
33
|
+
Object.defineProperty(exports, "ImagesInterface", { enumerable: true, get: function () { return middleware_1.ImagesInterface; } });
|
|
34
|
+
Object.defineProperty(exports, "AudioTranscriptionsInterface", { enumerable: true, get: function () { return middleware_1.AudioTranscriptionsInterface; } });
|
|
35
|
+
Object.defineProperty(exports, "AudioTranslationsInterface", { enumerable: true, get: function () { return middleware_1.AudioTranslationsInterface; } });
|
|
36
|
+
Object.defineProperty(exports, "AudioSpeechInterface", { enumerable: true, get: function () { return middleware_1.AudioSpeechInterface; } });
|
|
37
|
+
/**
|
|
38
|
+
* Tracking functions (for advanced use cases)
|
|
39
|
+
*/
|
|
40
|
+
var tracking_1 = require("./core/tracking");
|
|
41
|
+
Object.defineProperty(exports, "trackUsageAsync", { enumerable: true, get: function () { return tracking_1.trackUsageAsync; } });
|
|
42
|
+
Object.defineProperty(exports, "trackEmbeddingsUsageAsync", { enumerable: true, get: function () { return tracking_1.trackEmbeddingsUsageAsync; } });
|
|
43
|
+
Object.defineProperty(exports, "trackImageUsageAsync", { enumerable: true, get: function () { return tracking_1.trackImageUsageAsync; } });
|
|
44
|
+
Object.defineProperty(exports, "trackAudioUsageAsync", { enumerable: true, get: function () { return tracking_1.trackAudioUsageAsync; } });
|
|
45
|
+
/**
|
|
46
|
+
* Provider detection functions
|
|
47
|
+
*/
|
|
48
|
+
var providers_1 = require("./core/providers");
|
|
49
|
+
Object.defineProperty(exports, "detectProvider", { enumerable: true, get: function () { return providers_1.detectProvider; } });
|
|
50
|
+
Object.defineProperty(exports, "hasAzureConfig", { enumerable: true, get: function () { return providers_1.hasAzureConfig; } });
|
|
51
|
+
Object.defineProperty(exports, "validateAzureConfig", { enumerable: true, get: function () { return providers_1.validateAzureConfig; } });
|
|
52
|
+
Object.defineProperty(exports, "getProviderMetadata", { enumerable: true, get: function () { return providers_1.getProviderMetadata; } });
|
|
216
53
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,sEAAsE;AACtE,0CAAwC;AA8DxC,oGAAoG;AACpG,mGAAmG;AACnG,oFAAoF;AAEpF;;GAEG;AACH,wCAMuB;AALrB,oGAAA,UAAU,OAAA;AACV,mGAAA,SAAS,OAAA;AACT,uGAAA,aAAa,OAAA;AACb,+FAAA,KAAK,OAAA;AACL,mGAAA,SAAS,OAAA;AAGX;;GAEG;AACH,gDAW2B;AAVzB,4GAAA,cAAc,OAAA;AACd,2GAAA,aAAa,OAAA;AACb,kHAAA,oBAAoB,OAAA;AACpB,iHAAA,mBAAmB,OAAA;AACnB,gHAAA,kBAAkB,OAAA;AAClB,8GAAA,gBAAgB,OAAA;AAChB,6GAAA,eAAe,OAAA;AACf,0HAAA,4BAA4B,OAAA;AAC5B,wHAAA,0BAA0B,OAAA;AAC1B,kHAAA,oBAAoB,OAAA;AAGtB;;GAEG;AACH,4CAKyB;AAJvB,2GAAA,eAAe,OAAA;AACf,qHAAA,yBAAyB,OAAA;AACzB,gHAAA,oBAAoB,OAAA;AACpB,gHAAA,oBAAoB,OAAA;AAGtB;;GAEG;AACH,8CAK0B;AAJxB,2GAAA,cAAc,OAAA;AACd,2GAAA,cAAc,OAAA;AACd,gHAAA,mBAAmB,OAAA;AACnB,gHAAA,mBAAmB,OAAA"}
|
package/dist/cjs/types/index.js
CHANGED
|
@@ -30,14 +30,6 @@ __exportStar(require("./responses-api.js"), exports);
|
|
|
30
30
|
*
|
|
31
31
|
* Enumeration of AI providers supported by the Revenium middleware.
|
|
32
32
|
* Used for automatic detection, routing, and provider-specific handling.
|
|
33
|
-
*
|
|
34
|
-
* @public
|
|
35
|
-
* @example
|
|
36
|
-
* ```typescript
|
|
37
|
-
* if (providerInfo.provider === Provider.AZURE_OPENAI) {
|
|
38
|
-
* console.log('Using Azure OpenAI');
|
|
39
|
-
* }
|
|
40
|
-
* ```
|
|
41
33
|
*/
|
|
42
34
|
var Provider;
|
|
43
35
|
(function (Provider) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;AAEH,qCAAqC;AACrC,2DAAyC;AAEzC,gCAAgC;AAChC,qDAAmC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;AAEH,qCAAqC;AACrC,2DAAyC;AAEzC,gCAAgC;AAChC,qDAAmC;AAiFnC;;;;;GAKG;AACH,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,0BAA0B;IAC1B,6BAAiB,CAAA;IACjB,2BAA2B;IAC3B,yCAA6B,CAAA;AAC/B,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB"}
|
|
@@ -1,55 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* TypeScript module augmentation for OpenAI SDK
|
|
4
|
-
*
|
|
5
|
-
* This file extends OpenAI's existing types to include the usageMetadata field
|
|
6
|
-
* through TypeScript's declaration merging feature. This provides seamless
|
|
7
|
-
* integration with the OpenAI SDK, allowing developers to use usageMetadata
|
|
8
|
-
* directly in OpenAI API calls without type casting or additional imports.
|
|
9
|
-
*
|
|
10
|
-
* The augmentation covers all major OpenAI API endpoints including:
|
|
11
|
-
* - Chat completions (streaming and non-streaming)
|
|
12
|
-
* - Embeddings
|
|
13
|
-
* - Future API endpoints as they become available
|
|
14
|
-
*
|
|
15
|
-
* @fileoverview OpenAI SDK type augmentation for Revenium middleware
|
|
16
|
-
* @author Revenium
|
|
17
|
-
* @since 1.0.0
|
|
18
|
-
*
|
|
19
|
-
* @example Basic usage with chat completions
|
|
20
|
-
* ```typescript
|
|
21
|
-
* import '@revenium/openai';
|
|
22
|
-
* import OpenAI from 'openai';
|
|
23
|
-
*
|
|
24
|
-
* const openai = new OpenAI();
|
|
25
|
-
*
|
|
26
|
-
* const response = await openai.chat.completions.create({
|
|
27
|
-
* model: 'gpt-4o-mini',
|
|
28
|
-
* messages: [{ role: 'user', content: 'Hello!' }],
|
|
29
|
-
* usageMetadata: { // TypeScript recognizes this natively
|
|
30
|
-
* subscriber: {
|
|
31
|
-
* id: 'user-123',
|
|
32
|
-
* email: 'user@my-company.com'
|
|
33
|
-
* },
|
|
34
|
-
* organizationId: 'my-company',
|
|
35
|
-
* productId: 'chat-app',
|
|
36
|
-
* taskType: 'customer-support'
|
|
37
|
-
* }
|
|
38
|
-
* });
|
|
39
|
-
* ```
|
|
40
|
-
*
|
|
41
|
-
* @example Usage with embeddings
|
|
42
|
-
* ```typescript
|
|
43
|
-
* const embedding = await openai.embeddings.create({
|
|
44
|
-
* model: 'text-embedding-ada-002',
|
|
45
|
-
* input: 'Text to embed',
|
|
46
|
-
* usageMetadata: {
|
|
47
|
-
* subscriber: { id: 'user-456' },
|
|
48
|
-
* productId: 'search-engine',
|
|
49
|
-
* taskType: 'document-indexing'
|
|
50
|
-
* }
|
|
51
|
-
* });
|
|
52
|
-
* ```
|
|
53
4
|
*/
|
|
54
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
6
|
//# sourceMappingURL=openai-augmentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai-augmentation.js","sourceRoot":"","sources":["../../../src/types/openai-augmentation.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"openai-augmentation.js","sourceRoot":"","sources":["../../../src/types/openai-augmentation.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -1,24 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
'gpt-3.5-turbo',
|
|
12
|
-
'gpt-3.5-turbo-instruct',
|
|
13
|
-
'text-embedding-3-large',
|
|
14
|
-
'text-embedding-3-small',
|
|
15
|
-
'text-embedding-ada-002',
|
|
16
|
-
'dall-e-3',
|
|
17
|
-
'dall-e-2',
|
|
18
|
-
'whisper-1',
|
|
19
|
-
'tts-1',
|
|
20
|
-
'tts-1-hd'
|
|
3
|
+
exports.DEFAULT_REVENIUM_BASE_URL = exports.ERROR_MESSAGE_PATTERNS_TYPE_CONFIG = exports.MESSAGE_PATTERNS_TYPE_NETWORK = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Error message patterns for network-related errors
|
|
6
|
+
*/
|
|
7
|
+
exports.MESSAGE_PATTERNS_TYPE_NETWORK = [
|
|
8
|
+
"network",
|
|
9
|
+
"timeout",
|
|
10
|
+
"ECONNRESET",
|
|
21
11
|
];
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Error message patterns for configuration-related errors
|
|
14
|
+
*/
|
|
15
|
+
exports.ERROR_MESSAGE_PATTERNS_TYPE_CONFIG = [
|
|
16
|
+
"config",
|
|
17
|
+
"key",
|
|
18
|
+
"unauthorized",
|
|
19
|
+
];
|
|
20
|
+
exports.DEFAULT_REVENIUM_BASE_URL = "https://api.revenium.ai";
|
|
24
21
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,6BAA6B,GAAG;IAC3C,SAAS;IACT,SAAS;IACT,YAAY;CACb,CAAC;AAEF;;GAEG;AACU,QAAA,kCAAkC,GAAG;IAChD,QAAQ;IACR,KAAK;IACL,cAAc;CACf,CAAC;AAEW,QAAA,yBAAyB,GAAG,yBAAyB,CAAC"}
|