@revenium/openai 1.0.12 → 1.0.14
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 +59 -0
- package/CODE_OF_CONDUCT.md +57 -0
- package/CONTRIBUTING.md +38 -0
- package/README.md +109 -515
- 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 +12 -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 +17 -0
- package/dist/cjs/core/middleware/index.js.map +1 -0
- package/dist/cjs/core/middleware/interfaces.js +361 -0
- package/dist/cjs/core/middleware/interfaces.js.map +1 -0
- package/dist/cjs/core/middleware/revenium-client.js +142 -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 +14 -13
- package/dist/cjs/core/tracking/api-client.js.map +1 -1
- package/dist/cjs/core/tracking/payload-builder.js +30 -35
- package/dist/cjs/core/tracking/payload-builder.js.map +1 -1
- package/dist/cjs/core/tracking/usage-tracker.js +22 -18
- package/dist/cjs/core/tracking/usage-tracker.js.map +1 -1
- package/dist/cjs/index.js +26 -174
- 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 +27 -19
- 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/stop-reason-mapper.js +4 -0
- package/dist/cjs/utils/stop-reason-mapper.js.map +1 -1
- package/dist/cjs/utils/url-builder.js +3 -3
- 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 +14 -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 +353 -0
- package/dist/esm/core/middleware/interfaces.js.map +1 -0
- package/dist/esm/core/middleware/revenium-client.js +105 -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 +13 -12
- package/dist/esm/core/tracking/api-client.js.map +1 -1
- package/dist/esm/core/tracking/payload-builder.js +31 -36
- package/dist/esm/core/tracking/payload-builder.js.map +1 -1
- package/dist/esm/core/tracking/usage-tracker.js +24 -20
- package/dist/esm/core/tracking/usage-tracker.js.map +1 -1
- package/dist/esm/index.js +9 -157
- 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 +27 -19
- 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/stop-reason-mapper.js +4 -0
- package/dist/esm/utils/stop-reason-mapper.js.map +1 -1
- package/dist/esm/utils/url-builder.js +3 -3
- 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 +74 -0
- package/dist/types/core/middleware/interfaces.d.ts.map +1 -0
- package/dist/types/core/middleware/revenium-client.d.ts +58 -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/payload-builder.d.ts +3 -3
- package/dist/types/core/tracking/payload-builder.d.ts.map +1 -1
- package/dist/types/core/tracking/usage-tracker.d.ts +2 -2
- package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -1
- package/dist/types/index.d.ts +11 -114
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types/function-parameters.d.ts +2 -23
- package/dist/types/types/function-parameters.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +17 -115
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/openai-augmentation.d.ts +4 -139
- 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 +4 -3
- 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/stop-reason-mapper.d.ts.map +1 -1
- package/dist/types/utils/url-builder.d.ts +3 -3
- package/examples/README.md +270 -224
- 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 +20 -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 -94
- 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 -132
- 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 -336
- package/src/types/function-parameters.ts +0 -251
- package/src/types/index.ts +0 -313
- package/src/types/openai-augmentation.ts +0 -233
- 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 -219
- 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 -74
- package/src/utils/type-guards.ts +0 -202
- package/src/utils/url-builder.ts +0 -68
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Middleware Interfaces
|
|
4
|
+
*
|
|
5
|
+
* Provides interfaces for OpenAI operations.
|
|
6
|
+
* Contains: ChatInterface, CompletionsInterface, EmbeddingsInterface, ResponsesInterface, StreamingWrapper
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ResponsesInterface = exports.EmbeddingsInterface = exports.ChatInterface = exports.CompletionsInterface = exports.StreamingWrapper = void 0;
|
|
10
|
+
const crypto_1 = require("crypto");
|
|
11
|
+
const config_1 = require("../config");
|
|
12
|
+
const tracking_1 = require("../tracking");
|
|
13
|
+
const logger = (0, config_1.getLogger)();
|
|
14
|
+
/**
|
|
15
|
+
* StreamingWrapper - wraps OpenAI stream and tracks tokens
|
|
16
|
+
*/
|
|
17
|
+
class StreamingWrapper {
|
|
18
|
+
constructor(stream, config, providerInfo, model, metadata) {
|
|
19
|
+
this.usage = {};
|
|
20
|
+
this.stream = stream;
|
|
21
|
+
this.config = config;
|
|
22
|
+
this.providerInfo = providerInfo;
|
|
23
|
+
this.model = model;
|
|
24
|
+
this.metadata = metadata;
|
|
25
|
+
this.startTime = Date.now();
|
|
26
|
+
this.requestId = (0, crypto_1.randomUUID)();
|
|
27
|
+
}
|
|
28
|
+
async *[Symbol.asyncIterator]() {
|
|
29
|
+
try {
|
|
30
|
+
for await (const chunk of this.stream) {
|
|
31
|
+
// Record time to first token
|
|
32
|
+
if (!this.firstTokenTime && chunk.choices[0]?.delta?.content) {
|
|
33
|
+
this.firstTokenTime = Date.now();
|
|
34
|
+
}
|
|
35
|
+
// Accumulate usage data
|
|
36
|
+
if (chunk.usage) {
|
|
37
|
+
this.usage = chunk.usage;
|
|
38
|
+
}
|
|
39
|
+
// Get request ID from chunk
|
|
40
|
+
if (chunk.id) {
|
|
41
|
+
this.requestId = chunk.id;
|
|
42
|
+
}
|
|
43
|
+
yield chunk;
|
|
44
|
+
}
|
|
45
|
+
// Stream completed - track usage
|
|
46
|
+
const duration = Date.now() - this.startTime;
|
|
47
|
+
const timeToFirstToken = this.firstTokenTime
|
|
48
|
+
? this.firstTokenTime - this.startTime
|
|
49
|
+
: undefined;
|
|
50
|
+
(0, tracking_1.trackUsageAsync)({
|
|
51
|
+
requestId: this.requestId,
|
|
52
|
+
model: this.model,
|
|
53
|
+
promptTokens: this.usage.prompt_tokens || 0,
|
|
54
|
+
completionTokens: this.usage.completion_tokens || 0,
|
|
55
|
+
totalTokens: this.usage.total_tokens || 0,
|
|
56
|
+
reasoningTokens: this.usage.completion_tokens_details?.reasoning_tokens,
|
|
57
|
+
cachedTokens: this.usage.prompt_tokens_details?.cached_tokens,
|
|
58
|
+
duration,
|
|
59
|
+
finishReason: null, // Will be in final chunk
|
|
60
|
+
usageMetadata: this.metadata,
|
|
61
|
+
isStreamed: true,
|
|
62
|
+
timeToFirstToken,
|
|
63
|
+
providerInfo: this.providerInfo,
|
|
64
|
+
});
|
|
65
|
+
logger.debug("Streaming completed", {
|
|
66
|
+
requestId: this.requestId,
|
|
67
|
+
model: this.model,
|
|
68
|
+
duration,
|
|
69
|
+
timeToFirstToken,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
const duration = Date.now() - this.startTime;
|
|
74
|
+
// Track error
|
|
75
|
+
(0, tracking_1.trackUsageAsync)({
|
|
76
|
+
requestId: this.requestId,
|
|
77
|
+
model: this.model,
|
|
78
|
+
promptTokens: this.usage.prompt_tokens || 0,
|
|
79
|
+
completionTokens: this.usage.completion_tokens || 0,
|
|
80
|
+
totalTokens: this.usage.total_tokens || 0,
|
|
81
|
+
duration,
|
|
82
|
+
finishReason: "error",
|
|
83
|
+
usageMetadata: this.metadata,
|
|
84
|
+
isStreamed: true,
|
|
85
|
+
providerInfo: this.providerInfo,
|
|
86
|
+
});
|
|
87
|
+
logger.error("Streaming error", {
|
|
88
|
+
error: error instanceof Error ? error.message : String(error),
|
|
89
|
+
requestId: this.requestId,
|
|
90
|
+
});
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
exports.StreamingWrapper = StreamingWrapper;
|
|
96
|
+
/**
|
|
97
|
+
* CompletionsInterface - handles chat completions
|
|
98
|
+
*/
|
|
99
|
+
class CompletionsInterface {
|
|
100
|
+
constructor(client, config, providerInfo) {
|
|
101
|
+
this.client = client;
|
|
102
|
+
this.config = config;
|
|
103
|
+
this.providerInfo = providerInfo;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Create a non-streaming chat completion
|
|
107
|
+
*/
|
|
108
|
+
async create(params, metadata) {
|
|
109
|
+
const startTime = Date.now();
|
|
110
|
+
const requestId = (0, crypto_1.randomUUID)();
|
|
111
|
+
logger.debug("Creating chat completion", { model: params.model });
|
|
112
|
+
try {
|
|
113
|
+
const response = await this.client.chat.completions.create(params);
|
|
114
|
+
const duration = Date.now() - startTime;
|
|
115
|
+
// Track usage
|
|
116
|
+
(0, tracking_1.trackUsageAsync)({
|
|
117
|
+
requestId: response.id || requestId,
|
|
118
|
+
model: response.model,
|
|
119
|
+
promptTokens: response.usage?.prompt_tokens || 0,
|
|
120
|
+
completionTokens: response.usage?.completion_tokens || 0,
|
|
121
|
+
totalTokens: response.usage?.total_tokens || 0,
|
|
122
|
+
reasoningTokens: response.usage?.completion_tokens_details?.reasoning_tokens,
|
|
123
|
+
cachedTokens: response.usage?.prompt_tokens_details?.cached_tokens,
|
|
124
|
+
duration,
|
|
125
|
+
finishReason: response.choices[0]?.finish_reason || null,
|
|
126
|
+
usageMetadata: metadata,
|
|
127
|
+
isStreamed: false,
|
|
128
|
+
providerInfo: this.providerInfo,
|
|
129
|
+
});
|
|
130
|
+
logger.debug("Chat completion created", {
|
|
131
|
+
requestId: response.id,
|
|
132
|
+
model: response.model,
|
|
133
|
+
duration,
|
|
134
|
+
});
|
|
135
|
+
return response;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
const duration = Date.now() - startTime;
|
|
139
|
+
// Track error
|
|
140
|
+
(0, tracking_1.trackUsageAsync)({
|
|
141
|
+
requestId,
|
|
142
|
+
model: params.model,
|
|
143
|
+
promptTokens: 0,
|
|
144
|
+
completionTokens: 0,
|
|
145
|
+
totalTokens: 0,
|
|
146
|
+
duration,
|
|
147
|
+
finishReason: "error",
|
|
148
|
+
usageMetadata: metadata,
|
|
149
|
+
isStreamed: false,
|
|
150
|
+
providerInfo: this.providerInfo,
|
|
151
|
+
});
|
|
152
|
+
logger.error("Chat completion failed", {
|
|
153
|
+
error: error instanceof Error ? error.message : String(error),
|
|
154
|
+
model: params.model,
|
|
155
|
+
duration,
|
|
156
|
+
});
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Create a streaming chat completion
|
|
162
|
+
*/
|
|
163
|
+
async createStreaming(params, metadata) {
|
|
164
|
+
logger.debug("Creating streaming completion", { model: params.model });
|
|
165
|
+
// Ensure stream_options includes usage data
|
|
166
|
+
const stream = await this.client.chat.completions.create({
|
|
167
|
+
...params,
|
|
168
|
+
stream: true,
|
|
169
|
+
stream_options: { include_usage: true },
|
|
170
|
+
});
|
|
171
|
+
return new StreamingWrapper(stream, this.config, this.providerInfo, params.model, metadata);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.CompletionsInterface = CompletionsInterface;
|
|
175
|
+
/**
|
|
176
|
+
* ChatInterface - provides access to completions
|
|
177
|
+
*/
|
|
178
|
+
class ChatInterface {
|
|
179
|
+
constructor(client, config, providerInfo) {
|
|
180
|
+
this.client = client;
|
|
181
|
+
this.config = config;
|
|
182
|
+
this.providerInfo = providerInfo;
|
|
183
|
+
}
|
|
184
|
+
completions() {
|
|
185
|
+
return new CompletionsInterface(this.client, this.config, this.providerInfo);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.ChatInterface = ChatInterface;
|
|
189
|
+
/**
|
|
190
|
+
* EmbeddingsInterface - handles embeddings
|
|
191
|
+
*/
|
|
192
|
+
class EmbeddingsInterface {
|
|
193
|
+
constructor(client, config, providerInfo) {
|
|
194
|
+
this.client = client;
|
|
195
|
+
this.config = config;
|
|
196
|
+
this.providerInfo = providerInfo;
|
|
197
|
+
}
|
|
198
|
+
async create(params, metadata) {
|
|
199
|
+
const startTime = Date.now();
|
|
200
|
+
const requestId = (0, crypto_1.randomUUID)();
|
|
201
|
+
logger.debug("Creating embeddings", { model: params.model });
|
|
202
|
+
try {
|
|
203
|
+
const response = await this.client.embeddings.create(params);
|
|
204
|
+
const duration = Date.now() - startTime;
|
|
205
|
+
// Track embeddings usage
|
|
206
|
+
(0, tracking_1.trackEmbeddingsUsageAsync)({
|
|
207
|
+
transactionId: requestId,
|
|
208
|
+
model: response.model,
|
|
209
|
+
promptTokens: response.usage.prompt_tokens,
|
|
210
|
+
totalTokens: response.usage.total_tokens,
|
|
211
|
+
duration,
|
|
212
|
+
usageMetadata: metadata,
|
|
213
|
+
requestStartTime: startTime,
|
|
214
|
+
providerInfo: this.providerInfo,
|
|
215
|
+
});
|
|
216
|
+
logger.debug("Embeddings created", {
|
|
217
|
+
requestId,
|
|
218
|
+
model: response.model,
|
|
219
|
+
duration,
|
|
220
|
+
});
|
|
221
|
+
return response;
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
const duration = Date.now() - startTime;
|
|
225
|
+
logger.error("Embeddings failed", {
|
|
226
|
+
error: error instanceof Error ? error.message : String(error),
|
|
227
|
+
model: params.model,
|
|
228
|
+
duration,
|
|
229
|
+
});
|
|
230
|
+
throw error;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
exports.EmbeddingsInterface = EmbeddingsInterface;
|
|
235
|
+
/**
|
|
236
|
+
* ResponsesInterface - handles Responses API (stateful API)
|
|
237
|
+
*/
|
|
238
|
+
class ResponsesInterface {
|
|
239
|
+
constructor(client, config, providerInfo) {
|
|
240
|
+
this.client = client;
|
|
241
|
+
this.config = config;
|
|
242
|
+
this.providerInfo = providerInfo;
|
|
243
|
+
}
|
|
244
|
+
async create(params, metadata) {
|
|
245
|
+
const startTime = Date.now();
|
|
246
|
+
const requestId = (0, crypto_1.randomUUID)();
|
|
247
|
+
logger.debug("Creating response (Responses API)", { model: params.model });
|
|
248
|
+
try {
|
|
249
|
+
// Type assertion for Responses API (not yet in official types)
|
|
250
|
+
const responsesAPI = this.client.responses;
|
|
251
|
+
if (!responsesAPI || !responsesAPI.create) {
|
|
252
|
+
throw new Error("Responses API not available in this OpenAI SDK version");
|
|
253
|
+
}
|
|
254
|
+
const response = await responsesAPI.create(params);
|
|
255
|
+
const duration = Date.now() - startTime;
|
|
256
|
+
// Track usage (Responses API has different usage structure)
|
|
257
|
+
const usage = response.usage;
|
|
258
|
+
if (usage) {
|
|
259
|
+
(0, tracking_1.trackUsageAsync)({
|
|
260
|
+
requestId: response.id || requestId,
|
|
261
|
+
model: response.model || params.model,
|
|
262
|
+
promptTokens: usage.input_tokens || 0,
|
|
263
|
+
completionTokens: usage.output_tokens || 0,
|
|
264
|
+
totalTokens: usage.total_tokens || 0,
|
|
265
|
+
reasoningTokens: usage.reasoning_tokens,
|
|
266
|
+
cachedTokens: usage.cached_tokens,
|
|
267
|
+
duration,
|
|
268
|
+
finishReason: response.finish_reason || "completed",
|
|
269
|
+
usageMetadata: metadata,
|
|
270
|
+
isStreamed: false,
|
|
271
|
+
providerInfo: this.providerInfo,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
logger.debug("Response created (Responses API)", {
|
|
275
|
+
requestId: response.id,
|
|
276
|
+
model: response.model,
|
|
277
|
+
duration,
|
|
278
|
+
});
|
|
279
|
+
return response;
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
const duration = Date.now() - startTime;
|
|
283
|
+
logger.error("Responses API failed", {
|
|
284
|
+
error: error instanceof Error ? error.message : String(error),
|
|
285
|
+
model: params.model,
|
|
286
|
+
duration,
|
|
287
|
+
});
|
|
288
|
+
throw error;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
async createStreaming(params, metadata) {
|
|
292
|
+
const startTime = Date.now();
|
|
293
|
+
const requestId = (0, crypto_1.randomUUID)();
|
|
294
|
+
logger.debug("Creating streaming response (Responses API)", {
|
|
295
|
+
model: params.model,
|
|
296
|
+
});
|
|
297
|
+
try {
|
|
298
|
+
// Type assertion for Responses API (not yet in official types)
|
|
299
|
+
const responsesAPI = this.client.responses;
|
|
300
|
+
if (!responsesAPI || !responsesAPI.create) {
|
|
301
|
+
throw new Error("Responses API not available in this OpenAI SDK version");
|
|
302
|
+
}
|
|
303
|
+
// Ensure stream is enabled
|
|
304
|
+
const streamParams = { ...params, stream: true };
|
|
305
|
+
const stream = await responsesAPI.create(streamParams);
|
|
306
|
+
// Wrap the stream to track usage
|
|
307
|
+
const self = this;
|
|
308
|
+
const wrappedStream = (async function* () {
|
|
309
|
+
let fullContent = "";
|
|
310
|
+
let finalResponse = null;
|
|
311
|
+
for await (const chunk of stream) {
|
|
312
|
+
// Accumulate content from text deltas
|
|
313
|
+
if (chunk.type === "response.output_text.delta" && chunk.delta) {
|
|
314
|
+
fullContent += chunk.delta;
|
|
315
|
+
}
|
|
316
|
+
// Capture final response with usage
|
|
317
|
+
if (chunk.type === "response.completed" && chunk.response) {
|
|
318
|
+
finalResponse = chunk.response;
|
|
319
|
+
}
|
|
320
|
+
yield chunk;
|
|
321
|
+
}
|
|
322
|
+
// Track final usage
|
|
323
|
+
const duration = Date.now() - startTime;
|
|
324
|
+
if (finalResponse?.usage) {
|
|
325
|
+
const usage = finalResponse.usage;
|
|
326
|
+
(0, tracking_1.trackUsageAsync)({
|
|
327
|
+
requestId: finalResponse.id || requestId,
|
|
328
|
+
model: finalResponse.model || params.model,
|
|
329
|
+
promptTokens: usage.input_tokens || 0,
|
|
330
|
+
completionTokens: usage.output_tokens || 0,
|
|
331
|
+
totalTokens: usage.total_tokens || 0,
|
|
332
|
+
reasoningTokens: usage.output_tokens_details?.reasoning_tokens,
|
|
333
|
+
cachedTokens: usage.input_tokens_details?.cached_tokens,
|
|
334
|
+
duration,
|
|
335
|
+
finishReason: finalResponse.status || "completed",
|
|
336
|
+
usageMetadata: metadata,
|
|
337
|
+
isStreamed: true,
|
|
338
|
+
providerInfo: self.providerInfo,
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
logger.debug("Streaming response completed (Responses API)", {
|
|
342
|
+
requestId,
|
|
343
|
+
model: params.model,
|
|
344
|
+
duration,
|
|
345
|
+
});
|
|
346
|
+
})();
|
|
347
|
+
return wrappedStream;
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
const duration = Date.now() - startTime;
|
|
351
|
+
logger.error("Responses API streaming failed", {
|
|
352
|
+
error: error instanceof Error ? error.message : String(error),
|
|
353
|
+
model: params.model,
|
|
354
|
+
duration,
|
|
355
|
+
});
|
|
356
|
+
throw error;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
exports.ResponsesInterface = ResponsesInterface;
|
|
361
|
+
//# sourceMappingURL=interfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/core/middleware/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Revenium OpenAI Client
|
|
4
|
+
*
|
|
5
|
+
* Main client class that wraps OpenAI/AzureOpenAI and provides tracking.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.ReveniumOpenAI = void 0;
|
|
42
|
+
const openai_1 = __importStar(require("openai"));
|
|
43
|
+
const types_1 = require("../../types");
|
|
44
|
+
const config_1 = require("../config");
|
|
45
|
+
const interfaces_js_1 = require("./interfaces.js");
|
|
46
|
+
const logger = (0, config_1.getLogger)();
|
|
47
|
+
/**
|
|
48
|
+
* ReveniumOpenAI - Main client class
|
|
49
|
+
*
|
|
50
|
+
* Provides API for OpenAI operations with automatic usage tracking.
|
|
51
|
+
*/
|
|
52
|
+
class ReveniumOpenAI {
|
|
53
|
+
constructor(config, provider) {
|
|
54
|
+
this.config = config;
|
|
55
|
+
// Create OpenAI or AzureOpenAI client based on provider
|
|
56
|
+
if (provider === types_1.Provider.AZURE_OPENAI) {
|
|
57
|
+
if (!config.azure) {
|
|
58
|
+
throw new Error("Azure configuration required for Azure OpenAI provider");
|
|
59
|
+
}
|
|
60
|
+
logger.debug("Creating AzureOpenAI client", {
|
|
61
|
+
endpoint: config.azure.endpoint,
|
|
62
|
+
apiVersion: config.azure.apiVersion,
|
|
63
|
+
});
|
|
64
|
+
this.client = new openai_1.AzureOpenAI({
|
|
65
|
+
apiKey: config.azure.apiKey,
|
|
66
|
+
endpoint: config.azure.endpoint,
|
|
67
|
+
apiVersion: config.azure.apiVersion,
|
|
68
|
+
});
|
|
69
|
+
this.providerInfo = {
|
|
70
|
+
provider: types_1.Provider.AZURE_OPENAI,
|
|
71
|
+
isAzure: true,
|
|
72
|
+
azureConfig: config.azure,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
logger.debug("Creating OpenAI client");
|
|
77
|
+
this.client = new openai_1.default({
|
|
78
|
+
apiKey: config.openaiApiKey,
|
|
79
|
+
});
|
|
80
|
+
this.providerInfo = {
|
|
81
|
+
provider: types_1.Provider.OPENAI,
|
|
82
|
+
isAzure: false,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
logger.info("Revenium OpenAI client created", {
|
|
86
|
+
provider: this.providerInfo.provider,
|
|
87
|
+
isAzure: this.providerInfo.isAzure,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get chat interface
|
|
92
|
+
*
|
|
93
|
+
* @returns ChatInterface for chat completions
|
|
94
|
+
*/
|
|
95
|
+
chat() {
|
|
96
|
+
return new interfaces_js_1.ChatInterface(this.client, this.config, this.providerInfo);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get embeddings interface
|
|
100
|
+
*
|
|
101
|
+
* @returns EmbeddingsInterface for embeddings
|
|
102
|
+
*/
|
|
103
|
+
embeddings() {
|
|
104
|
+
return new interfaces_js_1.EmbeddingsInterface(this.client, this.config, this.providerInfo);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get responses interface (Responses API)
|
|
108
|
+
*
|
|
109
|
+
* @returns ResponsesInterface for Responses API
|
|
110
|
+
*/
|
|
111
|
+
responses() {
|
|
112
|
+
return new interfaces_js_1.ResponsesInterface(this.client, this.config, this.providerInfo);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get the underlying OpenAI client
|
|
116
|
+
*
|
|
117
|
+
* For advanced use cases where direct access to OpenAI client is needed.
|
|
118
|
+
* Note: Direct usage bypasses Revenium tracking.
|
|
119
|
+
*
|
|
120
|
+
* @returns The underlying OpenAI or AzureOpenAI client
|
|
121
|
+
*/
|
|
122
|
+
getUnderlyingClient() {
|
|
123
|
+
return this.client;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get provider information
|
|
127
|
+
* @returns Provider information for this client
|
|
128
|
+
*/
|
|
129
|
+
getProviderInfo() {
|
|
130
|
+
return this.providerInfo;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get configuration
|
|
134
|
+
*
|
|
135
|
+
* @returns Configuration for this client
|
|
136
|
+
*/
|
|
137
|
+
getConfig() {
|
|
138
|
+
return this.config;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.ReveniumOpenAI = ReveniumOpenAI;
|
|
142
|
+
//# sourceMappingURL=revenium-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revenium-client.js","sourceRoot":"","sources":["../../../../src/core/middleware/revenium-client.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,iDAA6C;AAC7C,uCAA6D;AAC7D,sCAAsC;AACtC,mDAIyB;AAEzB,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;AAE3B;;;;GAIG;AACH,MAAa,cAAc;IAKzB,YAAY,MAAc,EAAE,QAAkB;QAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,wDAAwD;QACxD,IAAI,QAAQ,KAAK,gBAAQ,CAAC,YAAY,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CACb,wDAAwD,CACzD,CAAC;YACJ,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;gBAC1C,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;gBAC/B,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;aACpC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAW,CAAC;gBAC5B,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;gBAC3B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;gBAC/B,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU;aACpC,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,GAAG;gBAClB,QAAQ,EAAE,gBAAQ,CAAC,YAAY;gBAC/B,OAAO,EAAE,IAAI;gBACb,WAAW,EAAE,MAAM,CAAC,KAAK;aAC1B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAEvC,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAM,CAAC;gBACvB,MAAM,EAAE,MAAM,CAAC,YAAY;aAC5B,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,GAAG;gBAClB,QAAQ,EAAE,gBAAQ,CAAC,MAAM;gBACzB,OAAO,EAAE,KAAK;aACf,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;YAC5C,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ;YACpC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,OAAO,IAAI,6BAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACH,UAAU;QACR,OAAO,IAAI,mCAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9E,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,IAAI,kCAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7E,CAAC;IAED;;;;;;;OAOG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AA1GD,wCA0GC"}
|
|
@@ -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
|
|
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
|
|
17
|
+
const config_1 = require("../config");
|
|
17
18
|
// Global logger
|
|
18
|
-
const logger = (0,
|
|
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(
|
|
53
|
+
logger.warn("Invalid OpenAI client instance provided to detectProvider");
|
|
29
54
|
return {
|
|
30
|
-
provider:
|
|
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(
|
|
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(
|
|
72
|
+
logger.info("Azure OpenAI provider detected", {
|
|
48
73
|
provider: providerInfo.provider,
|
|
49
74
|
hasAzureConfig: !!providerInfo.azureConfig,
|
|
50
|
-
endpoint: providerInfo.azureConfig?.endpoint ?
|
|
75
|
+
endpoint: providerInfo.azureConfig?.endpoint ? "[REDACTED]" : undefined,
|
|
51
76
|
});
|
|
52
77
|
}
|
|
53
78
|
else {
|
|
54
|
-
logger.debug(
|
|
79
|
+
logger.debug("Standard OpenAI provider detected");
|
|
55
80
|
}
|
|
56
81
|
return providerInfo;
|
|
57
82
|
}
|
|
58
83
|
catch (error) {
|
|
59
|
-
logger.warn(
|
|
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:
|
|
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(
|
|
117
|
+
missingFields.push("endpoint");
|
|
93
118
|
}
|
|
94
119
|
if (!config.apiKey) {
|
|
95
|
-
missingFields.push(
|
|
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(
|
|
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(
|
|
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(
|
|
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:
|
|
132
|
-
modelSource:
|
|
153
|
+
provider: "Azure",
|
|
154
|
+
modelSource: "AZURE_OPENAI",
|
|
133
155
|
};
|
|
134
156
|
}
|
|
135
157
|
return {
|
|
136
|
-
provider:
|
|
137
|
-
modelSource:
|
|
158
|
+
provider: "OpenAI",
|
|
159
|
+
modelSource: "OPENAI", // Provider name when calling directly per spec
|
|
138
160
|
};
|
|
139
161
|
}
|
|
140
162
|
//# sourceMappingURL=detector.js.map
|