@revenium/openai 1.0.13 → 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 +44 -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 +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 +15 -25
- 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 -195
- 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/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 +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 +16 -26
- 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 -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/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 -135
- 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 +11 -105
- 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/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 +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 -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
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Request Handler Module
|
|
3
|
-
*
|
|
4
|
-
* Handles different types of OpenAI requests (streaming, non-streaming, embeddings).
|
|
5
|
-
* Extracted from wrapper.ts for better organization.
|
|
6
|
-
*/
|
|
7
|
-
import { randomUUID } from 'crypto';
|
|
8
|
-
import { isOpenAIChatResponse, isOpenAIEmbeddingResponse, hasValidUsage, } from '../../utils/type-guards.js';
|
|
9
|
-
import { safeAsyncOperation, NetworkError, classifyError } from '../../utils/error-handler.js';
|
|
10
|
-
import { createLoggingContext } from '../../utils/metadata-builder.js';
|
|
11
|
-
import { trackUsageAsync, trackEmbeddingsUsageAsync } from '../tracking/index.js';
|
|
12
|
-
import { getLogger } from '../config/index.js';
|
|
13
|
-
import { instanceProviders } from './instance-patcher.js';
|
|
14
|
-
import { createTrackingStreamWrapper } from './stream-wrapper.js';
|
|
15
|
-
// Global logger
|
|
16
|
-
const logger = getLogger();
|
|
17
|
-
/**
|
|
18
|
-
* Handle non-streaming OpenAI requests
|
|
19
|
-
*/
|
|
20
|
-
export async function handleNonStreamingRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance) {
|
|
21
|
-
const loggingContext = createLoggingContext(usageMetadata);
|
|
22
|
-
const result = await safeAsyncOperation(async () => {
|
|
23
|
-
// Call the original OpenAI method (cast params back to original type since usageMetadata is removed)
|
|
24
|
-
const response = await originalCreate(params, options);
|
|
25
|
-
// Validate response structure
|
|
26
|
-
if (!hasValidUsage(response)) {
|
|
27
|
-
logger.warn('Invalid response structure from OpenAI API', {
|
|
28
|
-
...loggingContext,
|
|
29
|
-
response,
|
|
30
|
-
});
|
|
31
|
-
return response;
|
|
32
|
-
}
|
|
33
|
-
// Calculate duration
|
|
34
|
-
const duration = Date.now() - requestStartTime;
|
|
35
|
-
// Get provider info for this instance
|
|
36
|
-
const providerInfo = instanceProviders.get(instance);
|
|
37
|
-
// Track usage for chat completions
|
|
38
|
-
if (isOpenAIChatResponse(response)) {
|
|
39
|
-
trackUsageAsync({
|
|
40
|
-
requestId: response.id,
|
|
41
|
-
model: response.model,
|
|
42
|
-
promptTokens: response.usage.prompt_tokens,
|
|
43
|
-
completionTokens: response.usage.completion_tokens || 0,
|
|
44
|
-
totalTokens: response.usage.total_tokens,
|
|
45
|
-
reasoningTokens: response.usage.reasoning_tokens,
|
|
46
|
-
cachedTokens: response.usage.cached_tokens,
|
|
47
|
-
duration,
|
|
48
|
-
finishReason: response.choices?.[0]?.finish_reason || null,
|
|
49
|
-
usageMetadata,
|
|
50
|
-
isStreamed: false,
|
|
51
|
-
providerInfo,
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
logger.debug('Chat completion request completed', {
|
|
55
|
-
...loggingContext,
|
|
56
|
-
model: response.model,
|
|
57
|
-
duration,
|
|
58
|
-
totalTokens: response.usage.total_tokens,
|
|
59
|
-
});
|
|
60
|
-
return response;
|
|
61
|
-
}, 'Non-streaming OpenAI request', {
|
|
62
|
-
logError: true,
|
|
63
|
-
rethrow: true,
|
|
64
|
-
messagePrefix: 'Chat completion request failed: ',
|
|
65
|
-
transformError: error => {
|
|
66
|
-
const classified = classifyError(error);
|
|
67
|
-
if (classified.type === 'network') {
|
|
68
|
-
return new NetworkError(classified.message, {
|
|
69
|
-
...loggingContext,
|
|
70
|
-
duration: Date.now() - requestStartTime,
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
return error instanceof Error ? error : new Error(String(error));
|
|
74
|
-
},
|
|
75
|
-
}, logger);
|
|
76
|
-
if (!result)
|
|
77
|
-
throw new Error('OpenAI request failed without specific error');
|
|
78
|
-
return result;
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Handle streaming OpenAI requests
|
|
82
|
-
*/
|
|
83
|
-
export async function handleStreamingRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance) {
|
|
84
|
-
try {
|
|
85
|
-
// Ensure stream_options includes usage data for token tracking
|
|
86
|
-
const enhancedParams = {
|
|
87
|
-
...params,
|
|
88
|
-
stream_options: {
|
|
89
|
-
include_usage: true,
|
|
90
|
-
...(params.stream_options || {}),
|
|
91
|
-
},
|
|
92
|
-
};
|
|
93
|
-
logger.debug('Enhanced streaming params with usage tracking', {
|
|
94
|
-
originalStreamOptions: params.stream_options,
|
|
95
|
-
enhancedStreamOptions: enhancedParams.stream_options,
|
|
96
|
-
});
|
|
97
|
-
// Call the original OpenAI method to get the stream (cast params back to original type since usageMetadata is removed)
|
|
98
|
-
const originalStream = await originalCreate(enhancedParams, options);
|
|
99
|
-
logger.debug('Chat completion streaming request initiated', {
|
|
100
|
-
model: params.model,
|
|
101
|
-
});
|
|
102
|
-
// Return a wrapped stream that tracks usage when complete
|
|
103
|
-
return createTrackingStreamWrapper(originalStream, usageMetadata, requestStartTime, instance);
|
|
104
|
-
}
|
|
105
|
-
catch (error) {
|
|
106
|
-
const duration = Date.now() - requestStartTime;
|
|
107
|
-
logger.error('Chat completion streaming request failed', {
|
|
108
|
-
error: error instanceof Error ? error.message : String(error),
|
|
109
|
-
duration,
|
|
110
|
-
});
|
|
111
|
-
// Re-throw the error to maintain original behavior
|
|
112
|
-
throw error;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Handle embeddings requests
|
|
117
|
-
*/
|
|
118
|
-
export async function handleEmbeddingsRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance) {
|
|
119
|
-
try {
|
|
120
|
-
// Call the original OpenAI method (cast params back to original type since usageMetadata is removed)
|
|
121
|
-
const response = await originalCreate(params, options);
|
|
122
|
-
// Validate response structure
|
|
123
|
-
if (!isOpenAIEmbeddingResponse(response)) {
|
|
124
|
-
logger.warn('Invalid embeddings response structure from OpenAI API', { response });
|
|
125
|
-
return response;
|
|
126
|
-
}
|
|
127
|
-
// Calculate duration
|
|
128
|
-
const duration = Date.now() - requestStartTime;
|
|
129
|
-
// Get provider info for this instance
|
|
130
|
-
const providerInfo = instanceProviders.get(instance);
|
|
131
|
-
// Track embeddings usage
|
|
132
|
-
trackEmbeddingsUsageAsync({
|
|
133
|
-
transactionId: `embed-${randomUUID()}`,
|
|
134
|
-
model: response.model,
|
|
135
|
-
promptTokens: response.usage.prompt_tokens,
|
|
136
|
-
totalTokens: response.usage.total_tokens,
|
|
137
|
-
duration,
|
|
138
|
-
usageMetadata,
|
|
139
|
-
requestStartTime,
|
|
140
|
-
providerInfo,
|
|
141
|
-
});
|
|
142
|
-
logger.debug('Embeddings request completed', {
|
|
143
|
-
model: response.model,
|
|
144
|
-
duration,
|
|
145
|
-
totalTokens: response.usage.total_tokens,
|
|
146
|
-
});
|
|
147
|
-
return response;
|
|
148
|
-
}
|
|
149
|
-
catch (error) {
|
|
150
|
-
const duration = Date.now() - requestStartTime;
|
|
151
|
-
logger.error('Embeddings request failed', {
|
|
152
|
-
error: error instanceof Error ? error.message : String(error),
|
|
153
|
-
duration,
|
|
154
|
-
});
|
|
155
|
-
// Re-throw the error to maintain original behavior
|
|
156
|
-
throw error;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Handle non-streaming OpenAI Responses API requests
|
|
161
|
-
*/
|
|
162
|
-
export async function handleResponsesNonStreamingRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance) {
|
|
163
|
-
const loggingContext = createLoggingContext(usageMetadata);
|
|
164
|
-
const result = await safeAsyncOperation(async () => {
|
|
165
|
-
// Call the original OpenAI method (cast params back to original type since usageMetadata is removed)
|
|
166
|
-
const response = await originalCreate(params, options);
|
|
167
|
-
// Validate response structure
|
|
168
|
-
if (!response || typeof response !== 'object') {
|
|
169
|
-
throw new Error('Invalid response from OpenAI Responses API');
|
|
170
|
-
}
|
|
171
|
-
const duration = Date.now() - requestStartTime;
|
|
172
|
-
// Extract usage information (Responses API may have different structure)
|
|
173
|
-
const usage = response.usage;
|
|
174
|
-
if (usage) {
|
|
175
|
-
// Track usage asynchronously using similar pattern to chat completions
|
|
176
|
-
trackUsageAsync({
|
|
177
|
-
requestId: response.id || randomUUID(),
|
|
178
|
-
model: response.model || params.model,
|
|
179
|
-
promptTokens: usage.input_tokens || 0,
|
|
180
|
-
completionTokens: usage.output_tokens || 0,
|
|
181
|
-
totalTokens: usage.total_tokens || 0,
|
|
182
|
-
reasoningTokens: usage.reasoning_tokens,
|
|
183
|
-
cachedTokens: usage.cached_tokens,
|
|
184
|
-
duration,
|
|
185
|
-
finishReason: response.finish_reason || 'completed',
|
|
186
|
-
usageMetadata,
|
|
187
|
-
isStreamed: false,
|
|
188
|
-
providerInfo: instanceProviders.get(instance),
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
logger.debug('Responses API request completed', {
|
|
192
|
-
...loggingContext,
|
|
193
|
-
model: response.model,
|
|
194
|
-
duration,
|
|
195
|
-
totalTokens: usage?.total_tokens,
|
|
196
|
-
});
|
|
197
|
-
return response;
|
|
198
|
-
}, 'Non-streaming OpenAI Responses API request', {
|
|
199
|
-
logError: true,
|
|
200
|
-
rethrow: true,
|
|
201
|
-
messagePrefix: 'Responses API request failed: ',
|
|
202
|
-
transformError: error => {
|
|
203
|
-
const classified = classifyError(error);
|
|
204
|
-
if (classified.type === 'network') {
|
|
205
|
-
return new NetworkError(classified.message, {
|
|
206
|
-
...loggingContext,
|
|
207
|
-
duration: Date.now() - requestStartTime,
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
return error instanceof Error ? error : new Error(String(error));
|
|
211
|
-
},
|
|
212
|
-
}, logger);
|
|
213
|
-
if (!result)
|
|
214
|
-
throw new Error('OpenAI Responses API request failed without specific error');
|
|
215
|
-
return result;
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Handle streaming OpenAI Responses API requests
|
|
219
|
-
*/
|
|
220
|
-
export async function handleResponsesStreamingRequest(originalCreate, params, options, usageMetadata, requestStartTime, instance) {
|
|
221
|
-
try {
|
|
222
|
-
// Call the original OpenAI method to get the stream (cast params back to original type since usageMetadata is removed)
|
|
223
|
-
const originalStream = await originalCreate(params, options);
|
|
224
|
-
logger.debug('Responses API streaming request initiated', {
|
|
225
|
-
model: params.model,
|
|
226
|
-
});
|
|
227
|
-
// Return a wrapped stream that tracks usage when complete
|
|
228
|
-
// We'll use a similar pattern to chat completions but adapted for Responses API
|
|
229
|
-
return createResponsesTrackingStreamWrapper(originalStream, usageMetadata, requestStartTime, instance);
|
|
230
|
-
}
|
|
231
|
-
catch (error) {
|
|
232
|
-
const duration = Date.now() - requestStartTime;
|
|
233
|
-
logger.error('Responses API streaming request failed', {
|
|
234
|
-
error: error instanceof Error ? error.message : String(error),
|
|
235
|
-
duration,
|
|
236
|
-
});
|
|
237
|
-
// Re-throw the error to maintain original behavior
|
|
238
|
-
throw error;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Create a tracking stream wrapper for Responses API
|
|
243
|
-
* Similar to createTrackingStreamWrapper but adapted for Responses API structure
|
|
244
|
-
*/
|
|
245
|
-
async function* createResponsesTrackingStreamWrapper(originalStream, usageMetadata, requestStartTime, instance) {
|
|
246
|
-
let firstChunkTime;
|
|
247
|
-
let finalUsage = null;
|
|
248
|
-
let model = '';
|
|
249
|
-
let requestId = '';
|
|
250
|
-
let finishReason = null;
|
|
251
|
-
try {
|
|
252
|
-
for await (const chunk of originalStream) {
|
|
253
|
-
// Record time to first token
|
|
254
|
-
if (!firstChunkTime) {
|
|
255
|
-
firstChunkTime = Date.now();
|
|
256
|
-
}
|
|
257
|
-
// Extract information from chunk (Responses API structure may differ)
|
|
258
|
-
if (chunk && typeof chunk === 'object') {
|
|
259
|
-
const chunkObj = chunk;
|
|
260
|
-
// Extract model and ID from chunk
|
|
261
|
-
if (chunkObj.model)
|
|
262
|
-
model = chunkObj.model;
|
|
263
|
-
if (chunkObj.id)
|
|
264
|
-
requestId = chunkObj.id;
|
|
265
|
-
// Check for final usage information
|
|
266
|
-
if (chunkObj.usage) {
|
|
267
|
-
finalUsage = chunkObj.usage;
|
|
268
|
-
}
|
|
269
|
-
// Check for finish reason
|
|
270
|
-
if (chunkObj.finish_reason) {
|
|
271
|
-
finishReason = chunkObj.finish_reason;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
yield chunk;
|
|
275
|
-
}
|
|
276
|
-
// Track usage after stream completes
|
|
277
|
-
if (finalUsage) {
|
|
278
|
-
const duration = Date.now() - requestStartTime;
|
|
279
|
-
const timeToFirstToken = firstChunkTime ? firstChunkTime - requestStartTime : undefined;
|
|
280
|
-
trackUsageAsync({
|
|
281
|
-
requestId: requestId || randomUUID(),
|
|
282
|
-
model: model,
|
|
283
|
-
promptTokens: finalUsage.input_tokens || 0,
|
|
284
|
-
completionTokens: finalUsage.output_tokens || 0,
|
|
285
|
-
totalTokens: finalUsage.total_tokens || 0,
|
|
286
|
-
reasoningTokens: finalUsage.reasoning_tokens,
|
|
287
|
-
cachedTokens: finalUsage.cached_tokens,
|
|
288
|
-
duration,
|
|
289
|
-
finishReason: finishReason || 'completed',
|
|
290
|
-
usageMetadata,
|
|
291
|
-
isStreamed: true,
|
|
292
|
-
timeToFirstToken,
|
|
293
|
-
providerInfo: instanceProviders.get(instance),
|
|
294
|
-
});
|
|
295
|
-
logger.debug('Responses API streaming completed', {
|
|
296
|
-
model,
|
|
297
|
-
duration,
|
|
298
|
-
timeToFirstToken,
|
|
299
|
-
totalTokens: finalUsage.total_tokens,
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
catch (error) {
|
|
304
|
-
logger.error('Error in Responses API stream wrapper', {
|
|
305
|
-
error: error instanceof Error ? error.message : String(error),
|
|
306
|
-
});
|
|
307
|
-
throw error;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
//# sourceMappingURL=request-handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request-handler.js","sourceRoot":"","sources":["../../../../src/core/wrapper/request-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stream Wrapper Module
|
|
3
|
-
*
|
|
4
|
-
* Handles wrapping of streaming responses for usage tracking.
|
|
5
|
-
* Extracted from wrapper.ts for better organization.
|
|
6
|
-
*/
|
|
7
|
-
import { isStreamChunk } from '../../utils/type-guards.js';
|
|
8
|
-
import { trackUsageAsync } from '../tracking/index.js';
|
|
9
|
-
import { getLogger } from '../config/index.js';
|
|
10
|
-
import { instanceProviders } from './instance-patcher.js';
|
|
11
|
-
// Global logger
|
|
12
|
-
const logger = getLogger();
|
|
13
|
-
/**
|
|
14
|
-
* Create a simple stream wrapper that tracks usage when complete
|
|
15
|
-
*/
|
|
16
|
-
export function createTrackingStreamWrapper(originalStream, usageMetadata, requestStartTime, instance) {
|
|
17
|
-
// For streaming, we need to collect the final response data
|
|
18
|
-
let accumulatedResponse = null;
|
|
19
|
-
// Create async iterator
|
|
20
|
-
const wrappedIterator = {
|
|
21
|
-
async *[Symbol.asyncIterator]() {
|
|
22
|
-
try {
|
|
23
|
-
for await (const chunk of originalStream) {
|
|
24
|
-
// Validate and accumulate response data for tracking
|
|
25
|
-
if (isStreamChunk(chunk)) {
|
|
26
|
-
if (!accumulatedResponse) {
|
|
27
|
-
accumulatedResponse = {
|
|
28
|
-
id: chunk.id,
|
|
29
|
-
model: chunk.model,
|
|
30
|
-
usage: { prompt_tokens: 0, completion_tokens: 0, total_tokens: 0 },
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
// Update usage if available in chunk
|
|
34
|
-
if (chunk.usage) {
|
|
35
|
-
accumulatedResponse.usage = chunk.usage;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
// Forward the chunk to the client
|
|
39
|
-
yield chunk;
|
|
40
|
-
}
|
|
41
|
-
// Stream completed - track usage
|
|
42
|
-
if (accumulatedResponse && accumulatedResponse.usage) {
|
|
43
|
-
const duration = Date.now() - requestStartTime;
|
|
44
|
-
// Get provider info for this instance
|
|
45
|
-
const providerInfo = instanceProviders.get(instance);
|
|
46
|
-
// Safely access extended usage fields
|
|
47
|
-
const usage = accumulatedResponse.usage;
|
|
48
|
-
trackUsageAsync({
|
|
49
|
-
requestId: accumulatedResponse.id,
|
|
50
|
-
model: accumulatedResponse.model,
|
|
51
|
-
promptTokens: usage.prompt_tokens,
|
|
52
|
-
completionTokens: usage.completion_tokens || 0,
|
|
53
|
-
totalTokens: usage.total_tokens,
|
|
54
|
-
reasoningTokens: usage.reasoning_tokens,
|
|
55
|
-
cachedTokens: usage.cached_tokens,
|
|
56
|
-
duration,
|
|
57
|
-
finishReason: null, // Will be determined from final chunk
|
|
58
|
-
usageMetadata,
|
|
59
|
-
isStreamed: true,
|
|
60
|
-
providerInfo,
|
|
61
|
-
});
|
|
62
|
-
logger.debug('Chat completion streaming completed', {
|
|
63
|
-
model: accumulatedResponse.model,
|
|
64
|
-
duration,
|
|
65
|
-
totalTokens: accumulatedResponse.usage.total_tokens,
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
logger.error('Chat completion streaming error', {
|
|
71
|
-
error: error instanceof Error ? error.message : String(error),
|
|
72
|
-
});
|
|
73
|
-
throw error;
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
return wrappedIterator;
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=stream-wrapper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream-wrapper.js","sourceRoot":"","sources":["../../../../src/core/wrapper/stream-wrapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { getLogger } from '../core/config/index.js';
|
|
2
|
-
import { knownModels } from './constants.js';
|
|
3
|
-
/**
|
|
4
|
-
* Azure Model Name Resolution Module
|
|
5
|
-
*
|
|
6
|
-
* This module maps Azure deployment names to LiteLLM-compatible model names for accurate pricing.
|
|
7
|
-
* Based on learnings from the Python implementation, it uses heuristic pattern matching
|
|
8
|
-
* with fallback strategies to ensure reliable model name resolution.
|
|
9
|
-
*
|
|
10
|
-
* Key patterns observed in real Azure deployments:
|
|
11
|
-
* - "gpt-4o-2024-11-20" → "gpt-4o"
|
|
12
|
-
* - "text-embedding-3-large" → "text-embedding-3-large" (exact match)
|
|
13
|
-
* - "o4-mini" → "gpt-4o-mini"
|
|
14
|
-
* - "gpt4o-prod" → "gpt-4o"
|
|
15
|
-
* - "gpt-35-turbo-dev" → "gpt-3.5-turbo"
|
|
16
|
-
*/
|
|
17
|
-
/**
|
|
18
|
-
* In-memory cache for resolved model names
|
|
19
|
-
* Using Map for thread-safe operations in Node.js
|
|
20
|
-
*/
|
|
21
|
-
const modelNameCache = new Map();
|
|
22
|
-
/**
|
|
23
|
-
* Cache for failed resolution attempts to avoid repeated warnings
|
|
24
|
-
*/
|
|
25
|
-
const failedResolutionCache = new Set();
|
|
26
|
-
// Global logger
|
|
27
|
-
const logger = getLogger();
|
|
28
|
-
/**
|
|
29
|
-
* Resolve Azure deployment name to LiteLLM-compatible model name
|
|
30
|
-
*
|
|
31
|
-
* @param deploymentName - Azure deployment name
|
|
32
|
-
* @param useCache - Whether to use cached results (default: true)
|
|
33
|
-
* @returns LiteLLM-compatible model name
|
|
34
|
-
*/
|
|
35
|
-
export function resolveAzureModelName(deploymentName, useCache = true) {
|
|
36
|
-
if (!deploymentName) {
|
|
37
|
-
logger.warn('Empty deployment name provided to model resolver');
|
|
38
|
-
return deploymentName;
|
|
39
|
-
}
|
|
40
|
-
// Check cache first
|
|
41
|
-
if (useCache && modelNameCache.has(deploymentName)) {
|
|
42
|
-
const cachedResult = modelNameCache.get(deploymentName);
|
|
43
|
-
logger.debug('Model name resolved from cache', {
|
|
44
|
-
deployment: deploymentName,
|
|
45
|
-
resolved: cachedResult,
|
|
46
|
-
});
|
|
47
|
-
return cachedResult;
|
|
48
|
-
}
|
|
49
|
-
try {
|
|
50
|
-
const resolved = resolveModelNameHeuristic(deploymentName);
|
|
51
|
-
// Cache the result
|
|
52
|
-
if (useCache) {
|
|
53
|
-
modelNameCache.set(deploymentName, resolved);
|
|
54
|
-
}
|
|
55
|
-
// Log successful resolution
|
|
56
|
-
if (resolved !== deploymentName) {
|
|
57
|
-
logger.debug('Model name resolved via heuristics', {
|
|
58
|
-
deployment: deploymentName,
|
|
59
|
-
resolved,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
return resolved;
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
logger.error('Error during model name resolution', {
|
|
66
|
-
deployment: deploymentName,
|
|
67
|
-
error: error instanceof Error ? error.message : String(error),
|
|
68
|
-
});
|
|
69
|
-
// Fallback to deployment name
|
|
70
|
-
return deploymentName;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Heuristic pattern matching for Azure deployment names
|
|
75
|
-
* Based on real-world patterns observed in the Python implementation
|
|
76
|
-
*
|
|
77
|
-
* @param deploymentName - Azure deployment name
|
|
78
|
-
* @returns LiteLLM-compatible model name
|
|
79
|
-
*/
|
|
80
|
-
function resolveModelNameHeuristic(deploymentName) {
|
|
81
|
-
const nameLower = deploymentName.toLowerCase();
|
|
82
|
-
// GPT-4o family - handle both "gpt-4o" and "o4" patterns
|
|
83
|
-
if (/gpt-?4o/.test(nameLower) || /o4/.test(nameLower)) {
|
|
84
|
-
if (/mini/.test(nameLower))
|
|
85
|
-
return 'gpt-4o-mini';
|
|
86
|
-
return 'gpt-4o';
|
|
87
|
-
}
|
|
88
|
-
// GPT-4 family (non-omni)
|
|
89
|
-
if (/gpt-?4(?!o)/.test(nameLower)) {
|
|
90
|
-
if (/turbo/.test(nameLower))
|
|
91
|
-
return 'gpt-4-turbo';
|
|
92
|
-
if (/vision/.test(nameLower) || /v/.test(nameLower))
|
|
93
|
-
return 'gpt-4-vision-preview';
|
|
94
|
-
return 'gpt-4';
|
|
95
|
-
}
|
|
96
|
-
// GPT-3.5 family
|
|
97
|
-
if (/gpt-?3\.?5/.test(nameLower) || /35-turbo/.test(nameLower) || /gpt-35/.test(nameLower)) {
|
|
98
|
-
if (/instruct/.test(nameLower))
|
|
99
|
-
return 'gpt-3.5-turbo-instruct';
|
|
100
|
-
return 'gpt-3.5-turbo';
|
|
101
|
-
}
|
|
102
|
-
// Embedding models - exact matches work well
|
|
103
|
-
if (/embed/.test(nameLower)) {
|
|
104
|
-
if (/text-embedding-3-large/.test(nameLower))
|
|
105
|
-
return 'text-embedding-3-large';
|
|
106
|
-
if (/text-embedding-3-small/.test(nameLower))
|
|
107
|
-
return 'text-embedding-3-small';
|
|
108
|
-
if (/text-embedding-ada-002/.test(nameLower) || /ada-002/.test(nameLower))
|
|
109
|
-
return 'text-embedding-ada-002';
|
|
110
|
-
if (/3-large/.test(nameLower))
|
|
111
|
-
return 'text-embedding-3-large';
|
|
112
|
-
if (/3-small/.test(nameLower))
|
|
113
|
-
return 'text-embedding-3-small';
|
|
114
|
-
}
|
|
115
|
-
// Ada-002 pattern (can appear without "embed" in deployment name)
|
|
116
|
-
if (/ada-002/.test(nameLower))
|
|
117
|
-
return 'text-embedding-ada-002';
|
|
118
|
-
// DALL-E models
|
|
119
|
-
if (/dall-?e/.test(nameLower)) {
|
|
120
|
-
if (/3/.test(nameLower))
|
|
121
|
-
return 'dall-e-3';
|
|
122
|
-
if (/2/.test(nameLower))
|
|
123
|
-
return 'dall-e-2';
|
|
124
|
-
}
|
|
125
|
-
// Whisper models
|
|
126
|
-
if (/whisper/.test(nameLower))
|
|
127
|
-
return 'whisper-1';
|
|
128
|
-
// TTS models
|
|
129
|
-
if (/tts/.test(nameLower)) {
|
|
130
|
-
if (/hd/.test(nameLower))
|
|
131
|
-
return 'tts-1-hd';
|
|
132
|
-
return 'tts-1';
|
|
133
|
-
}
|
|
134
|
-
if (knownModels.includes(nameLower))
|
|
135
|
-
return nameLower;
|
|
136
|
-
// No heuristic match found - log warning and use deployment name
|
|
137
|
-
if (!failedResolutionCache.has(deploymentName)) {
|
|
138
|
-
logger.warn(`⚠️ No heuristic match for Azure deployment: ${deploymentName}. Using deployment name for pricing. Consider adding pattern to azure-model-resolver.ts`);
|
|
139
|
-
failedResolutionCache.add(deploymentName);
|
|
140
|
-
}
|
|
141
|
-
return deploymentName;
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Clear the model name cache
|
|
145
|
-
* Useful for testing or when deployment configurations change
|
|
146
|
-
*/
|
|
147
|
-
export function clearModelNameCache() {
|
|
148
|
-
modelNameCache.clear();
|
|
149
|
-
failedResolutionCache.clear();
|
|
150
|
-
getLogger().debug('Model name cache cleared');
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Get cache statistics for monitoring
|
|
154
|
-
*/
|
|
155
|
-
export function getModelNameCacheStats() {
|
|
156
|
-
return {
|
|
157
|
-
cacheSize: modelNameCache.size,
|
|
158
|
-
failedResolutionCount: failedResolutionCache.size,
|
|
159
|
-
cacheEntries: Array.from(modelNameCache.entries()).map(([deployment, resolved]) => ({
|
|
160
|
-
deployment,
|
|
161
|
-
resolved,
|
|
162
|
-
})),
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Batch resolve multiple deployment names
|
|
167
|
-
* Useful for pre-warming cache or bulk operations
|
|
168
|
-
*
|
|
169
|
-
* @param deploymentNames - Array of deployment names to resolve
|
|
170
|
-
* @returns Map of deployment name to resolved model name
|
|
171
|
-
*/
|
|
172
|
-
export function batchResolveModelNames(deploymentNames) {
|
|
173
|
-
const results = new Map();
|
|
174
|
-
logger.debug('Batch resolving model names', {
|
|
175
|
-
count: deploymentNames.length,
|
|
176
|
-
deployments: deploymentNames,
|
|
177
|
-
});
|
|
178
|
-
for (const deployment of deploymentNames) {
|
|
179
|
-
try {
|
|
180
|
-
const resolved = resolveAzureModelName(deployment);
|
|
181
|
-
results.set(deployment, resolved);
|
|
182
|
-
}
|
|
183
|
-
catch (error) {
|
|
184
|
-
logger.error('Error in batch resolution', {
|
|
185
|
-
deployment,
|
|
186
|
-
error: error instanceof Error ? error.message : String(error),
|
|
187
|
-
});
|
|
188
|
-
results.set(deployment, deployment); // Fallback to original name
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
return results;
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Check if a deployment name would be resolved to a different model name
|
|
195
|
-
* Useful for validation and testing
|
|
196
|
-
*
|
|
197
|
-
* @param deploymentName - Azure deployment name
|
|
198
|
-
* @returns true if the deployment name would be transformed
|
|
199
|
-
*/
|
|
200
|
-
export function wouldTransformDeploymentName(deploymentName) {
|
|
201
|
-
const resolved = resolveAzureModelName(deploymentName, false); // Don't use cache for this check
|
|
202
|
-
return resolved !== deploymentName;
|
|
203
|
-
}
|
|
204
|
-
//# sourceMappingURL=azure-model-resolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"azure-model-resolver.js","sourceRoot":"","sources":["../../../src/utils/azure-model-resolver.ts"],"names":[],"mappings":"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"}
|