@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
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Handles Azure-specific configuration logic.
|
|
5
5
|
* Extracted from provider.ts for better separation of concerns.
|
|
6
6
|
*/
|
|
7
|
-
import { getLogger } from
|
|
7
|
+
import { getLogger } from "./manager.js";
|
|
8
8
|
// Global logger
|
|
9
9
|
const logger = getLogger();
|
|
10
10
|
/**
|
|
@@ -18,41 +18,29 @@ export function gatherAzureConfig(client) {
|
|
|
18
18
|
try {
|
|
19
19
|
// Extract from client baseURL if available
|
|
20
20
|
if (client?.baseURL) {
|
|
21
|
-
const baseUrl = typeof client.baseURL ===
|
|
21
|
+
const baseUrl = typeof client.baseURL === "string"
|
|
22
|
+
? client.baseURL
|
|
23
|
+
: client.baseURL?.toString();
|
|
22
24
|
config.endpoint = baseUrl;
|
|
23
25
|
}
|
|
24
26
|
// Extract from environment variables
|
|
25
27
|
if (process.env.AZURE_OPENAI_ENDPOINT) {
|
|
26
28
|
config.endpoint = process.env.AZURE_OPENAI_ENDPOINT;
|
|
27
29
|
}
|
|
28
|
-
if (process.env.AZURE_OPENAI_DEPLOYMENT) {
|
|
29
|
-
config.deployment = process.env.AZURE_OPENAI_DEPLOYMENT;
|
|
30
|
-
}
|
|
31
30
|
if (process.env.AZURE_OPENAI_API_VERSION) {
|
|
32
31
|
config.apiVersion = process.env.AZURE_OPENAI_API_VERSION;
|
|
33
32
|
}
|
|
34
|
-
else {
|
|
35
|
-
// Default to preferred API version from Python learnings
|
|
36
|
-
config.apiVersion = '2024-12-01-preview';
|
|
37
|
-
}
|
|
38
33
|
if (process.env.AZURE_OPENAI_API_KEY) {
|
|
39
34
|
config.apiKey = process.env.AZURE_OPENAI_API_KEY;
|
|
40
35
|
}
|
|
41
|
-
|
|
42
|
-
config.tenantId = process.env.AZURE_OPENAI_TENANT_ID;
|
|
43
|
-
}
|
|
44
|
-
if (process.env.AZURE_OPENAI_RESOURCE_GROUP) {
|
|
45
|
-
config.resourceGroup = process.env.AZURE_OPENAI_RESOURCE_GROUP;
|
|
46
|
-
}
|
|
47
|
-
logger.debug('Azure configuration gathered', {
|
|
36
|
+
logger.debug("Azure configuration gathered", {
|
|
48
37
|
hasEndpoint: !!config.endpoint,
|
|
49
|
-
hasDeployment: !!config.deployment,
|
|
50
38
|
hasApiKey: !!config.apiKey,
|
|
51
39
|
apiVersion: config.apiVersion,
|
|
52
40
|
});
|
|
53
41
|
}
|
|
54
42
|
catch (error) {
|
|
55
|
-
logger.warn(
|
|
43
|
+
logger.warn("Error gathering Azure configuration", {
|
|
56
44
|
error: error instanceof Error ? error.message : String(error),
|
|
57
45
|
});
|
|
58
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azure-config.js","sourceRoot":"","sources":["../../../../src/core/config/azure-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,gBAAgB;AAChB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA4B;IAC5D,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,2CAA2C;QAC3C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GACX,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"azure-config.js","sourceRoot":"","sources":["../../../../src/core/config/azure-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,gBAAgB;AAChB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA4B;IAC5D,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,2CAA2C;QAC3C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GACX,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;gBAChC,CAAC,CAAC,MAAM,CAAC,OAAO;gBAChB,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC5B,CAAC;QAED,qCAAqC;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YACtC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACtD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;YACzC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAC3D,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACnD,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;YAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;YAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;YACjD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* separating concerns into focused sub-modules.
|
|
6
6
|
*/
|
|
7
7
|
// Re-export all configuration functionality
|
|
8
|
-
export { loadConfigFromEnv, loadAzureConfigFromEnv, hasAzureConfigInEnv } from
|
|
9
|
-
|
|
10
|
-
export {
|
|
8
|
+
export { loadConfigFromEnv, loadAzureConfigFromEnv, hasAzureConfigInEnv, } from "./loader.js";
|
|
9
|
+
// Note: validateAzureConfig is exported from src/core/providers/index.ts
|
|
10
|
+
export { validateConfig } from "./validator.js";
|
|
11
|
+
export { getConfig, setConfig, getLogger, setLogger, initializeConfig, defaultLogger, } from "./manager.js";
|
|
11
12
|
// Export Azure-specific configuration
|
|
12
|
-
export * from
|
|
13
|
+
export * from "./azure-config.js";
|
|
13
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,4CAA4C;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,4CAA4C;AAC5C,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,yEAAyE;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,sCAAsC;AACtC,cAAc,mBAAmB,CAAC"}
|
|
@@ -4,14 +4,40 @@
|
|
|
4
4
|
* Handles loading configuration from environment variables.
|
|
5
5
|
* Separated from validation and management for single responsibility.
|
|
6
6
|
*/
|
|
7
|
+
import { config as loadDotenv } from "dotenv";
|
|
8
|
+
import { existsSync } from "fs";
|
|
9
|
+
import { join } from "path";
|
|
10
|
+
import { DEFAULT_REVENIUM_BASE_URL } from "../../utils/constants.js";
|
|
7
11
|
/**
|
|
8
|
-
*
|
|
12
|
+
* Flag to track if .env files have been loaded
|
|
9
13
|
*/
|
|
10
|
-
|
|
14
|
+
let envFilesLoaded = false;
|
|
15
|
+
/**
|
|
16
|
+
* Load .env files automatically
|
|
17
|
+
* Tries to load .env.local and .env files from current and parent directories
|
|
18
|
+
*/
|
|
19
|
+
function loadEnvFiles() {
|
|
20
|
+
if (envFilesLoaded)
|
|
21
|
+
return;
|
|
22
|
+
const envFiles = [".env.local", ".env"];
|
|
23
|
+
const cwd = process.cwd();
|
|
24
|
+
const searchDirs = [cwd, join(cwd, "..")];
|
|
25
|
+
for (const dir of searchDirs) {
|
|
26
|
+
for (const envFile of envFiles) {
|
|
27
|
+
const envPath = join(dir, envFile);
|
|
28
|
+
if (existsSync(envPath)) {
|
|
29
|
+
loadDotenv({ path: envPath });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
envFilesLoaded = true;
|
|
34
|
+
}
|
|
11
35
|
/**
|
|
12
36
|
* Load configuration from environment variables
|
|
37
|
+
* Automatically loads .env files first
|
|
13
38
|
*/
|
|
14
39
|
export function loadConfigFromEnv() {
|
|
40
|
+
loadEnvFiles();
|
|
15
41
|
const reveniumApiKey = process.env.REVENIUM_METERING_API_KEY || process.env.REVENIUM_API_KEY;
|
|
16
42
|
const reveniumBaseUrl = process.env.REVENIUM_METERING_BASE_URL ||
|
|
17
43
|
process.env.REVENIUM_BASE_URL ||
|
|
@@ -27,32 +53,26 @@ export function loadConfigFromEnv() {
|
|
|
27
53
|
}
|
|
28
54
|
/**
|
|
29
55
|
* Load Azure configuration from environment variables
|
|
56
|
+
* Automatically loads .env files first
|
|
30
57
|
*/
|
|
31
58
|
export function loadAzureConfigFromEnv() {
|
|
59
|
+
loadEnvFiles();
|
|
32
60
|
const endpoint = process.env.AZURE_OPENAI_ENDPOINT;
|
|
33
|
-
const deployment = process.env.AZURE_OPENAI_DEPLOYMENT;
|
|
34
61
|
const apiVersion = process.env.AZURE_OPENAI_API_VERSION;
|
|
35
62
|
const apiKey = process.env.AZURE_OPENAI_API_KEY;
|
|
36
|
-
const tenantId = process.env.AZURE_OPENAI_TENANT_ID;
|
|
37
|
-
const resourceGroup = process.env.AZURE_OPENAI_RESOURCE_GROUP;
|
|
38
63
|
// Return null if no Azure config is present
|
|
39
|
-
if (!endpoint && !
|
|
64
|
+
if (!endpoint && !apiKey)
|
|
40
65
|
return null;
|
|
41
66
|
return {
|
|
42
67
|
endpoint,
|
|
43
|
-
|
|
44
|
-
apiVersion: apiVersion || '2024-12-01-preview', // Default from Python learnings
|
|
68
|
+
apiVersion,
|
|
45
69
|
apiKey,
|
|
46
|
-
tenantId,
|
|
47
|
-
resourceGroup,
|
|
48
70
|
};
|
|
49
71
|
}
|
|
50
72
|
/**
|
|
51
73
|
* Check if Azure configuration is available in environment
|
|
52
74
|
*/
|
|
53
75
|
export function hasAzureConfigInEnv() {
|
|
54
|
-
return !!(process.env.AZURE_OPENAI_ENDPOINT ||
|
|
55
|
-
process.env.AZURE_OPENAI_DEPLOYMENT ||
|
|
56
|
-
process.env.AZURE_OPENAI_API_KEY);
|
|
76
|
+
return !!(process.env.AZURE_OPENAI_ENDPOINT || process.env.AZURE_OPENAI_API_KEY);
|
|
57
77
|
}
|
|
58
78
|
//# sourceMappingURL=loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/core/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/core/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE;;GAEG;AACH,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B;;;GAGG;AACH,SAAS,YAAY;IACnB,IAAI,cAAc;QAAE,OAAO;IAE3B,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACnC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,YAAY,EAAE,CAAC;IAEf,MAAM,cAAc,GAClB,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACxE,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACtC,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,yBAAyB,CAAC;IAC5B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAEhD,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO;QACL,cAAc;QACd,eAAe;QACf,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,YAAY,EAAE,CAAC;IAEf,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACnD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAEhD,4CAA4C;IAC5C,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO;QACL,QAAQ;QACR,UAAU;QACV,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,CAAC,CACP,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CACtE,CAAC;AACJ,CAAC"}
|
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
* Handles global configuration state management and logging.
|
|
5
5
|
* Separated from loading and validation for single responsibility.
|
|
6
6
|
*/
|
|
7
|
-
import { loadConfigFromEnv, hasAzureConfigInEnv } from
|
|
8
|
-
import { validateConfig } from
|
|
7
|
+
import { loadConfigFromEnv, loadAzureConfigFromEnv, hasAzureConfigInEnv, } from "./loader.js";
|
|
8
|
+
import { validateConfig } from "./validator.js";
|
|
9
9
|
/**
|
|
10
10
|
* Default console logger implementation
|
|
11
11
|
*/
|
|
12
12
|
export const defaultLogger = {
|
|
13
13
|
debug: (message, ...args) => {
|
|
14
14
|
// Check both config.debug and environment variable
|
|
15
|
-
if (globalConfig?.debug || process.env.REVENIUM_DEBUG ===
|
|
15
|
+
if (globalConfig?.debug || process.env.REVENIUM_DEBUG === "true") {
|
|
16
16
|
console.debug(`[Revenium Debug] ${message}`, ...args);
|
|
17
17
|
}
|
|
18
18
|
},
|
|
@@ -43,7 +43,7 @@ export function getConfig() {
|
|
|
43
43
|
export function setConfig(config) {
|
|
44
44
|
validateConfig(config);
|
|
45
45
|
globalConfig = config;
|
|
46
|
-
globalLogger.debug(
|
|
46
|
+
globalLogger.debug("Revenium configuration updated", {
|
|
47
47
|
baseUrl: config.reveniumBaseUrl,
|
|
48
48
|
hasApiKey: !!config.reveniumApiKey,
|
|
49
49
|
hasOpenAIKey: !!config.openaiApiKey,
|
|
@@ -68,16 +68,22 @@ export function initializeConfig() {
|
|
|
68
68
|
const envConfig = loadConfigFromEnv();
|
|
69
69
|
if (envConfig) {
|
|
70
70
|
try {
|
|
71
|
+
// Load Azure configuration if available
|
|
72
|
+
const azureConfig = loadAzureConfigFromEnv();
|
|
73
|
+
if (azureConfig) {
|
|
74
|
+
envConfig.azure = azureConfig;
|
|
75
|
+
globalLogger.debug("Azure OpenAI configuration loaded from environment");
|
|
76
|
+
}
|
|
71
77
|
setConfig(envConfig);
|
|
72
|
-
globalLogger.debug(
|
|
78
|
+
globalLogger.debug("Revenium middleware initialized from environment variables");
|
|
73
79
|
// Log Azure config availability for debugging
|
|
74
80
|
if (hasAzureConfigInEnv()) {
|
|
75
|
-
globalLogger.debug(
|
|
81
|
+
globalLogger.debug("Azure OpenAI configuration detected in environment");
|
|
76
82
|
}
|
|
77
83
|
return true;
|
|
78
84
|
}
|
|
79
85
|
catch (error) {
|
|
80
|
-
globalLogger.error(
|
|
86
|
+
globalLogger.error("Failed to initialize Revenium configuration:", error);
|
|
81
87
|
return false;
|
|
82
88
|
}
|
|
83
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/core/config/manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/core/config/manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC7C,mDAAmD;QACnD,IAAI,YAAY,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC5C,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC5C,OAAO,CAAC,IAAI,CAAC,sBAAsB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC7C,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACxD,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,IAAI,YAAY,GAA0B,IAAI,CAAC;AAC/C,IAAI,YAAY,GAAW,aAAa,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAsB;IAC9C,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,YAAY,GAAG,MAAM,CAAC;IACtB,YAAY,CAAC,KAAK,CAAC,gCAAgC,EAAE;QACnD,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc;QAClC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY;KACpC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,YAAY,GAAG,MAAM,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,wCAAwC;YACxC,MAAM,WAAW,GAAG,sBAAsB,EAAE,CAAC;YAC7C,IAAI,WAAW,EAAE,CAAC;gBACf,SAAiB,CAAC,KAAK,GAAG,WAAW,CAAC;gBACvC,YAAY,CAAC,KAAK,CAChB,oDAAoD,CACrD,CAAC;YACJ,CAAC;YAED,SAAS,CAAC,SAAS,CAAC,CAAC;YACrB,YAAY,CAAC,KAAK,CAChB,4DAA4D,CAC7D,CAAC;YAEF,8CAA8C;YAC9C,IAAI,mBAAmB,EAAE,EAAE,CAAC;gBAC1B,YAAY,CAAC,KAAK,CAChB,oDAAoD,CACrD,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -9,13 +9,13 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export function validateConfig(config) {
|
|
11
11
|
if (!config.reveniumApiKey) {
|
|
12
|
-
throw new Error(
|
|
12
|
+
throw new Error("Revenium API key is required. Set REVENIUM_METERING_API_KEY environment variable or provide reveniumApiKey in config.");
|
|
13
13
|
}
|
|
14
|
-
if (!config.reveniumApiKey.startsWith(
|
|
14
|
+
if (!config.reveniumApiKey.startsWith("hak_")) {
|
|
15
15
|
throw new Error('Invalid Revenium API key format. Revenium API keys should start with "hak_"');
|
|
16
16
|
}
|
|
17
17
|
if (!config.reveniumBaseUrl) {
|
|
18
|
-
throw new Error(
|
|
18
|
+
throw new Error("Revenium base URL is missing. This should not happen as a default URL should be provided.");
|
|
19
19
|
}
|
|
20
20
|
// Validate URL format
|
|
21
21
|
try {
|
|
@@ -25,45 +25,4 @@ export function validateConfig(config) {
|
|
|
25
25
|
throw new Error(`Invalid Revenium base URL format: ${config.reveniumBaseUrl}`);
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Validate Azure configuration completeness
|
|
30
|
-
*
|
|
31
|
-
* @param config - Azure configuration to validate
|
|
32
|
-
* @returns validation result with missing fields
|
|
33
|
-
*/
|
|
34
|
-
export function validateAzureConfig(config) {
|
|
35
|
-
const missingFields = [];
|
|
36
|
-
const warnings = [];
|
|
37
|
-
// Required fields for basic Azure OpenAI operation
|
|
38
|
-
if (!config.endpoint) {
|
|
39
|
-
missingFields.push('endpoint');
|
|
40
|
-
}
|
|
41
|
-
if (!config.apiKey) {
|
|
42
|
-
missingFields.push('apiKey');
|
|
43
|
-
}
|
|
44
|
-
// Optional but recommended fields
|
|
45
|
-
if (!config.deployment) {
|
|
46
|
-
warnings.push('deployment name not specified - may need to be included in model parameter');
|
|
47
|
-
}
|
|
48
|
-
if (!config.apiVersion) {
|
|
49
|
-
warnings.push('API version not specified - using default 2024-12-01-preview');
|
|
50
|
-
}
|
|
51
|
-
// Validate endpoint format
|
|
52
|
-
if (config.endpoint) {
|
|
53
|
-
try {
|
|
54
|
-
new URL(config.endpoint);
|
|
55
|
-
if (!config.endpoint.toLowerCase().includes('azure')) {
|
|
56
|
-
warnings.push('endpoint does not contain "azure" - please verify this is an Azure OpenAI endpoint');
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
catch (error) {
|
|
60
|
-
missingFields.push('valid endpoint URL');
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return {
|
|
64
|
-
isValid: missingFields.length === 0,
|
|
65
|
-
missingFields,
|
|
66
|
-
warnings,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
28
|
//# sourceMappingURL=validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../src/core/config/validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,uHAAuH,CACxH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../src/core/config/validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB;IACnD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,uHAAuH,CACxH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,qCAAqC,MAAM,CAAC,eAAe,EAAE,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Middleware Module
|
|
3
|
+
*
|
|
4
|
+
* Exports all middleware components.
|
|
5
|
+
*/
|
|
6
|
+
export { ReveniumOpenAI } from "./revenium-client.js";
|
|
7
|
+
export { ChatInterface, CompletionsInterface, EmbeddingsInterface, ResponsesInterface, StreamingWrapper, ImagesInterface, AudioTranscriptionsInterface, AudioTranslationsInterface, AudioSpeechInterface, } from "./interfaces.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,4BAA4B,EAC5B,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC"}
|