@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
|
@@ -4,12 +4,36 @@
|
|
|
4
4
|
* Handles detection of AI providers (OpenAI vs Azure OpenAI).
|
|
5
5
|
* Extracted from provider.ts for better organization.
|
|
6
6
|
*/
|
|
7
|
-
import { Provider } from
|
|
8
|
-
import { isOpenAIClientInstance } from
|
|
9
|
-
import { createProviderInfo, validateProviderInfo } from
|
|
10
|
-
import { getLogger } from
|
|
7
|
+
import { Provider } from "../../types";
|
|
8
|
+
import { isOpenAIClientInstance } from "../../utils/type-guards.js";
|
|
9
|
+
import { createProviderInfo, validateProviderInfo, } from "../../utils/provider-detection.js";
|
|
10
|
+
import { getLogger } from "../config";
|
|
11
11
|
// Global logger
|
|
12
12
|
const logger = getLogger();
|
|
13
|
+
/**
|
|
14
|
+
* Detect provider from configuration
|
|
15
|
+
*
|
|
16
|
+
* @param config - Configuration object
|
|
17
|
+
* @returns ProviderInfo with detection results
|
|
18
|
+
*/
|
|
19
|
+
export function detectProviderFromConfig(config) {
|
|
20
|
+
// Check if Azure credentials are configured
|
|
21
|
+
if (config.azure?.apiKey && config.azure?.endpoint) {
|
|
22
|
+
logger.debug("Azure OpenAI credentials detected, using Azure OpenAI");
|
|
23
|
+
return {
|
|
24
|
+
provider: Provider.AZURE_OPENAI,
|
|
25
|
+
isAzure: true,
|
|
26
|
+
azureConfig: config.azure,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// Default to OpenAI
|
|
30
|
+
logger.debug("No Azure configuration detected, using OpenAI native API");
|
|
31
|
+
return {
|
|
32
|
+
provider: Provider.OPENAI,
|
|
33
|
+
isAzure: false,
|
|
34
|
+
azureConfig: undefined,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
13
37
|
/**
|
|
14
38
|
* Detect Azure OpenAI provider from client instance
|
|
15
39
|
*
|
|
@@ -19,7 +43,7 @@ const logger = getLogger();
|
|
|
19
43
|
export function detectProvider(client) {
|
|
20
44
|
// Validate client instance
|
|
21
45
|
if (!isOpenAIClientInstance(client)) {
|
|
22
|
-
logger.warn(
|
|
46
|
+
logger.warn("Invalid OpenAI client instance provided to detectProvider");
|
|
23
47
|
return {
|
|
24
48
|
provider: Provider.OPENAI,
|
|
25
49
|
isAzure: false,
|
|
@@ -32,25 +56,25 @@ export function detectProvider(client) {
|
|
|
32
56
|
// Validate the result
|
|
33
57
|
const validation = validateProviderInfo(providerInfo);
|
|
34
58
|
if (validation.warnings.length > 0) {
|
|
35
|
-
logger.warn(
|
|
59
|
+
logger.warn("Provider detection completed with warnings", {
|
|
36
60
|
warnings: validation.warnings,
|
|
37
61
|
});
|
|
38
62
|
}
|
|
39
63
|
// Log final result
|
|
40
64
|
if (providerInfo.isAzure) {
|
|
41
|
-
logger.info(
|
|
65
|
+
logger.info("Azure OpenAI provider detected", {
|
|
42
66
|
provider: providerInfo.provider,
|
|
43
67
|
hasAzureConfig: !!providerInfo.azureConfig,
|
|
44
|
-
endpoint: providerInfo.azureConfig?.endpoint ?
|
|
68
|
+
endpoint: providerInfo.azureConfig?.endpoint ? "[REDACTED]" : undefined,
|
|
45
69
|
});
|
|
46
70
|
}
|
|
47
71
|
else {
|
|
48
|
-
logger.debug(
|
|
72
|
+
logger.debug("Standard OpenAI provider detected");
|
|
49
73
|
}
|
|
50
74
|
return providerInfo;
|
|
51
75
|
}
|
|
52
76
|
catch (error) {
|
|
53
|
-
logger.warn(
|
|
77
|
+
logger.warn("Error during provider detection, defaulting to OpenAI", {
|
|
54
78
|
error: error instanceof Error ? error.message : String(error),
|
|
55
79
|
});
|
|
56
80
|
// Default to OpenAI on any error
|
|
@@ -83,28 +107,25 @@ export function validateAzureConfig(config) {
|
|
|
83
107
|
const warnings = [];
|
|
84
108
|
// Required fields for basic Azure OpenAI operation
|
|
85
109
|
if (!config.endpoint) {
|
|
86
|
-
missingFields.push(
|
|
110
|
+
missingFields.push("endpoint");
|
|
87
111
|
}
|
|
88
112
|
if (!config.apiKey) {
|
|
89
|
-
missingFields.push(
|
|
113
|
+
missingFields.push("apiKey");
|
|
90
114
|
}
|
|
91
115
|
// Optional but recommended fields
|
|
92
|
-
if (!config.deployment) {
|
|
93
|
-
warnings.push('deployment name not specified - may need to be included in model parameter');
|
|
94
|
-
}
|
|
95
116
|
if (!config.apiVersion) {
|
|
96
|
-
warnings.push(
|
|
117
|
+
warnings.push("API version not specified - using default 2024-12-01-preview");
|
|
97
118
|
}
|
|
98
119
|
// Validate endpoint format
|
|
99
120
|
if (config.endpoint) {
|
|
100
121
|
try {
|
|
101
122
|
new URL(config.endpoint);
|
|
102
|
-
if (!config.endpoint.toLowerCase().includes(
|
|
123
|
+
if (!config.endpoint.toLowerCase().includes("azure")) {
|
|
103
124
|
warnings.push('endpoint does not contain "azure" - please verify this is an Azure OpenAI endpoint');
|
|
104
125
|
}
|
|
105
126
|
}
|
|
106
127
|
catch (error) {
|
|
107
|
-
missingFields.push(
|
|
128
|
+
missingFields.push("valid endpoint URL");
|
|
108
129
|
}
|
|
109
130
|
}
|
|
110
131
|
return {
|
|
@@ -122,13 +143,13 @@ export function validateAzureConfig(config) {
|
|
|
122
143
|
export function getProviderMetadata(providerInfo) {
|
|
123
144
|
if (providerInfo.isAzure) {
|
|
124
145
|
return {
|
|
125
|
-
provider:
|
|
126
|
-
modelSource:
|
|
146
|
+
provider: "Azure",
|
|
147
|
+
modelSource: "AZURE_OPENAI",
|
|
127
148
|
};
|
|
128
149
|
}
|
|
129
150
|
return {
|
|
130
|
-
provider:
|
|
131
|
-
modelSource:
|
|
151
|
+
provider: "OpenAI",
|
|
152
|
+
modelSource: "OPENAI", // Provider name when calling directly per spec
|
|
132
153
|
};
|
|
133
154
|
}
|
|
134
155
|
//# sourceMappingURL=detector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../../src/core/providers/detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../../src/core/providers/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
* separating concerns into focused sub-modules.
|
|
6
6
|
*/
|
|
7
7
|
// Re-export all provider functionality
|
|
8
|
-
export { detectProvider, hasAzureConfig, validateAzureConfig, getProviderMetadata, } from
|
|
9
|
-
export { gatherAzureConfig } from
|
|
8
|
+
export { detectProvider, detectProviderFromConfig, hasAzureConfig, validateAzureConfig, getProviderMetadata, } from "./detector.js";
|
|
9
|
+
export { gatherAzureConfig } from "../config/azure-config.js";
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uCAAuC;AACvC,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uCAAuC;AACvC,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
* Handles HTTP communication with the Revenium API.
|
|
5
5
|
* Extracted from tracking.ts for single responsibility.
|
|
6
6
|
*/
|
|
7
|
-
import { getConfig, getLogger } from
|
|
8
|
-
import { buildReveniumUrl } from
|
|
7
|
+
import { getConfig, getLogger } from "../config";
|
|
8
|
+
import { buildReveniumUrl } from "../../utils/url-builder.js";
|
|
9
|
+
import { DEFAULT_REVENIUM_BASE_URL } from "../../utils/constants";
|
|
9
10
|
// Global logger
|
|
10
11
|
const logger = getLogger();
|
|
11
12
|
/**
|
|
@@ -19,10 +20,10 @@ const logger = getLogger();
|
|
|
19
20
|
export async function sendToRevenium(payload) {
|
|
20
21
|
const config = getConfig();
|
|
21
22
|
if (!config)
|
|
22
|
-
return logger.warn(
|
|
23
|
+
return logger.warn("Revenium configuration not found, skipping tracking");
|
|
23
24
|
// Use the new URL builder utility instead of nested conditionals
|
|
24
|
-
const url = buildReveniumUrl(config.reveniumBaseUrl ||
|
|
25
|
-
logger.debug(
|
|
25
|
+
const url = buildReveniumUrl(config.reveniumBaseUrl || DEFAULT_REVENIUM_BASE_URL, "/ai/completions");
|
|
26
|
+
logger.debug("Sending Revenium API request", {
|
|
26
27
|
url,
|
|
27
28
|
operationType: payload.operationType,
|
|
28
29
|
transactionId: payload.transactionId,
|
|
@@ -30,15 +31,15 @@ export async function sendToRevenium(payload) {
|
|
|
30
31
|
totalTokens: payload.totalTokenCount,
|
|
31
32
|
});
|
|
32
33
|
const response = await fetch(url, {
|
|
33
|
-
method:
|
|
34
|
+
method: "POST",
|
|
34
35
|
headers: {
|
|
35
|
-
|
|
36
|
-
Accept:
|
|
37
|
-
|
|
36
|
+
"Content-Type": "application/json",
|
|
37
|
+
Accept: "application/json",
|
|
38
|
+
"x-api-key": config.reveniumApiKey,
|
|
38
39
|
},
|
|
39
40
|
body: JSON.stringify(payload),
|
|
40
41
|
});
|
|
41
|
-
logger.debug(
|
|
42
|
+
logger.debug("Revenium API response", {
|
|
42
43
|
status: response.status,
|
|
43
44
|
statusText: response.statusText,
|
|
44
45
|
transactionId: payload.transactionId,
|
|
@@ -46,7 +47,7 @@ export async function sendToRevenium(payload) {
|
|
|
46
47
|
});
|
|
47
48
|
if (!response.ok) {
|
|
48
49
|
const responseText = await response.text();
|
|
49
|
-
logger.error(
|
|
50
|
+
logger.error("Revenium API error response", {
|
|
50
51
|
status: response.status,
|
|
51
52
|
statusText: response.statusText,
|
|
52
53
|
body: responseText,
|
|
@@ -56,7 +57,7 @@ export async function sendToRevenium(payload) {
|
|
|
56
57
|
throw new Error(`Revenium API error: ${response.status} ${response.statusText} - ${responseText}`);
|
|
57
58
|
}
|
|
58
59
|
const responseBody = await response.text();
|
|
59
|
-
logger.debug(
|
|
60
|
+
logger.debug("Revenium tracking successful", {
|
|
60
61
|
transactionId: payload.transactionId,
|
|
61
62
|
operationType: payload.operationType,
|
|
62
63
|
response: responseBody,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../../src/core/tracking/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../../src/core/tracking/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,gBAAgB;AAChB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAE3B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAwB;IAC3D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QACT,OAAO,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAE5E,iEAAiE;IACjE,MAAM,GAAG,GAAG,gBAAgB,CAC1B,MAAM,CAAC,eAAe,IAAI,yBAAyB,EACnD,iBAAiB,CAClB,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;QAC3C,GAAG;QACH,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,eAAe;KACrC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;YAC1B,WAAW,EAAE,MAAM,CAAC,cAAc;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;QACpC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;YAC1C,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,IAAI,EAAE,YAAY;YAClB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,YAAY,EAAE,CAClF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;QAC3C,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,QAAQ,EAAE,YAAY;KACvB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -4,12 +4,11 @@
|
|
|
4
4
|
* Handles construction of Revenium API payloads.
|
|
5
5
|
* Extracted from tracking.ts for single responsibility.
|
|
6
6
|
*/
|
|
7
|
-
import { randomUUID } from
|
|
8
|
-
import { getLogger } from
|
|
9
|
-
import { mapStopReason } from
|
|
10
|
-
import { buildMetadataFields } from
|
|
11
|
-
import {
|
|
12
|
-
import { getProviderMetadata } from '../providers/index.js';
|
|
7
|
+
import { randomUUID } from "crypto";
|
|
8
|
+
import { getLogger } from "../config";
|
|
9
|
+
import { mapStopReason } from "../../utils/stop-reason-mapper.js";
|
|
10
|
+
import { buildMetadataFields } from "../../utils/metadata-builder.js";
|
|
11
|
+
import { getProviderMetadata } from "../providers";
|
|
13
12
|
// Global logger
|
|
14
13
|
const logger = getLogger();
|
|
15
14
|
/**
|
|
@@ -30,28 +29,19 @@ export function buildPayload(operationType, response, request, startTime, durati
|
|
|
30
29
|
const now = new Date().toISOString();
|
|
31
30
|
const requestTime = new Date(startTime).toISOString();
|
|
32
31
|
const usage = response.usage;
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
? resolveAzureModelName(originalModel)
|
|
37
|
-
: originalModel;
|
|
32
|
+
// For Azure, use the deployment name as-is
|
|
33
|
+
// The deployment name is what the user provided and should be sent to Revenium
|
|
34
|
+
const modelName = response.model;
|
|
38
35
|
// Get provider metadata (fallback: OpenAI direct)
|
|
39
36
|
const providerMetadata = providerInfo
|
|
40
37
|
? getProviderMetadata(providerInfo)
|
|
41
|
-
: { provider:
|
|
42
|
-
if (providerInfo?.isAzure && resolvedModel !== originalModel) {
|
|
43
|
-
logger.debug('Azure model name resolved for pricing', {
|
|
44
|
-
deployment: originalModel,
|
|
45
|
-
resolved: resolvedModel,
|
|
46
|
-
provider: providerMetadata.provider,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
38
|
+
: { provider: "OpenAI", modelSource: "OPENAI" };
|
|
49
39
|
// Build metadata fields using utility (eliminates repetitive spreading)
|
|
50
40
|
const metadataFields = buildMetadataFields(request.usageMetadata);
|
|
51
41
|
// Common fields for all operations
|
|
52
42
|
const commonPayload = {
|
|
53
|
-
costType:
|
|
54
|
-
model:
|
|
43
|
+
costType: "AI",
|
|
44
|
+
model: modelName, // Use model/deployment name as-is
|
|
55
45
|
responseTime: now,
|
|
56
46
|
requestDuration: duration,
|
|
57
47
|
provider: providerMetadata.provider,
|
|
@@ -64,25 +54,25 @@ export function buildPayload(operationType, response, request, startTime, durati
|
|
|
64
54
|
// Metadata fields (processed by utility)
|
|
65
55
|
...metadataFields,
|
|
66
56
|
// Fixed middleware source identifier (spec format: revenium-{provider}-{language})
|
|
67
|
-
middlewareSource:
|
|
57
|
+
middlewareSource: "revenium-openai-node",
|
|
68
58
|
// Backend calculates costs
|
|
69
59
|
inputTokenCost: undefined,
|
|
70
60
|
outputTokenCost: undefined,
|
|
71
61
|
totalCost: undefined,
|
|
72
62
|
};
|
|
73
63
|
// Operation-specific fields
|
|
74
|
-
if (operationType !==
|
|
64
|
+
if (operationType !== "CHAT") {
|
|
75
65
|
// For embeddings, we don't need the response cast since we use commonPayload
|
|
76
66
|
return {
|
|
77
67
|
...commonPayload,
|
|
78
|
-
operationType:
|
|
68
|
+
operationType: "EMBED",
|
|
79
69
|
transactionId: `embed-${randomUUID()}`,
|
|
80
70
|
outputTokenCount: 0,
|
|
81
71
|
// Embeddings don't support reasoning or caching
|
|
82
72
|
reasoningTokenCount: undefined,
|
|
83
73
|
cacheCreationTokenCount: undefined,
|
|
84
74
|
cacheReadTokenCount: undefined,
|
|
85
|
-
stopReason:
|
|
75
|
+
stopReason: "END",
|
|
86
76
|
isStreamed: false,
|
|
87
77
|
timeToFirstToken: undefined, // Not applicable for embeddings
|
|
88
78
|
};
|
|
@@ -91,7 +81,7 @@ export function buildPayload(operationType, response, request, startTime, durati
|
|
|
91
81
|
const chatUsage = chatResponse.usage;
|
|
92
82
|
return {
|
|
93
83
|
...commonPayload,
|
|
94
|
-
operationType:
|
|
84
|
+
operationType: "CHAT",
|
|
95
85
|
transactionId: chatResponse.id || `chat-${randomUUID()}`,
|
|
96
86
|
outputTokenCount: chatUsage.completion_tokens || 0,
|
|
97
87
|
// Leave null for models without reasoning capabilities (API spec)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../src/core/tracking/payload-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAQpC,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../src/core/tracking/payload-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAQpC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEnD,gBAAgB;AAChB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAE3B;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY,CAC1B,aAA+B,EAC/B,QAAsD,EACtD,OAAmD,EACnD,SAAiB,EACjB,QAAgB,EAChB,YAA2B;IAE3B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAE7B,2CAA2C;IAC3C,+EAA+E;IAC/E,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;IAEjC,kDAAkD;IAClD,MAAM,gBAAgB,GAAG,YAAY;QACnC,CAAC,CAAC,mBAAmB,CAAC,YAAY,CAAC;QACnC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAElD,wEAAwE;IACxE,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAElE,mCAAmC;IACnC,MAAM,aAAa,GAAG;QACpB,QAAQ,EAAE,IAAa;QACvB,KAAK,EAAE,SAAS,EAAE,kCAAkC;QACpD,YAAY,EAAE,GAAG;QACjB,eAAe,EAAE,QAAQ;QACzB,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;QACnC,WAAW,EAAE,gBAAgB,CAAC,WAAW;QACzC,WAAW;QACX,mBAAmB,EAAE,GAAG;QAExB,sBAAsB;QACtB,eAAe,EAAE,KAAK,CAAC,aAAa;QACpC,eAAe,EAAE,KAAK,CAAC,YAAY;QAEnC,yCAAyC;QACzC,GAAG,cAAc;QAEjB,mFAAmF;QACnF,gBAAgB,EAAE,sBAAsB;QAExC,2BAA2B;QAC3B,cAAc,EAAE,SAAS;QACzB,eAAe,EAAE,SAAS;QAC1B,SAAS,EAAE,SAAS;KACrB,CAAC;IAEF,4BAA4B;IAE5B,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;QAC7B,6EAA6E;QAC7E,OAAO;YACL,GAAG,aAAa;YAChB,aAAa,EAAE,OAAO;YACtB,aAAa,EAAE,SAAS,UAAU,EAAE,EAAE;YACtC,gBAAgB,EAAE,CAAC;YACnB,gDAAgD;YAChD,mBAAmB,EAAE,SAAS;YAC9B,uBAAuB,EAAE,SAAS;YAClC,mBAAmB,EAAE,SAAS;YAC9B,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;YACjB,gBAAgB,EAAE,SAAS,EAAE,gCAAgC;SAC9D,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,QAA8B,CAAC;IACpD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;IAErC,OAAO;QACL,GAAG,aAAa;QAChB,aAAa,EAAE,MAAM;QACrB,aAAa,EAAE,YAAY,CAAC,EAAE,IAAI,QAAQ,UAAU,EAAE,EAAE;QACxD,gBAAgB,EAAE,SAAS,CAAC,iBAAiB,IAAI,CAAC;QAClD,kEAAkE;QAClE,mBAAmB,EAAE,SAAS,CAAC,gBAAgB,IAAI,SAAS;QAC5D,8CAA8C;QAC9C,uBAAuB,EAAE,SAAS;QAClC,8CAA8C;QAC9C,mBAAmB,EAAE,SAAS,CAAC,aAAa,IAAI,SAAS;QACzD,UAAU,EAAE,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC;QAC3E,UAAU,EAAE,OAAO,CAAE,OAA6B,CAAC,MAAM,CAAC;QAC1D,4DAA4D;QAC5D,gBAAgB,EAAE,SAAS;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* High-level tracking functions that combine payload building and API communication.
|
|
5
5
|
* Extracted from tracking.ts for better organization.
|
|
6
6
|
*/
|
|
7
|
-
import { getLogger } from
|
|
8
|
-
import { sendToRevenium } from
|
|
9
|
-
import { buildPayload } from
|
|
10
|
-
import { safeAsyncOperation } from
|
|
7
|
+
import { getLogger } from "../config";
|
|
8
|
+
import { sendToRevenium } from "./api-client.js";
|
|
9
|
+
import { buildPayload } from "./payload-builder.js";
|
|
10
|
+
import { safeAsyncOperation } from "../../utils/error-handler.js";
|
|
11
11
|
// Global logger
|
|
12
12
|
const logger = getLogger();
|
|
13
13
|
/**
|
|
@@ -15,12 +15,12 @@ const logger = getLogger();
|
|
|
15
15
|
*/
|
|
16
16
|
export async function sendReveniumMetrics(response, request, startTime, duration, providerInfo) {
|
|
17
17
|
await safeAsyncOperation(async () => {
|
|
18
|
-
const payload = buildPayload(
|
|
18
|
+
const payload = buildPayload("CHAT", response, request, startTime, duration, providerInfo);
|
|
19
19
|
await sendToRevenium(payload);
|
|
20
|
-
},
|
|
20
|
+
}, "Chat completion tracking", {
|
|
21
21
|
logError: true,
|
|
22
22
|
rethrow: false, // Don't rethrow to maintain fire-and-forget behavior
|
|
23
|
-
messagePrefix:
|
|
23
|
+
messagePrefix: "Chat completion tracking failed: ",
|
|
24
24
|
}, logger);
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
@@ -28,12 +28,12 @@ export async function sendReveniumMetrics(response, request, startTime, duration
|
|
|
28
28
|
*/
|
|
29
29
|
export async function sendReveniumEmbeddingsMetrics(response, request, startTime, duration, providerInfo) {
|
|
30
30
|
await safeAsyncOperation(async () => {
|
|
31
|
-
const payload = buildPayload(
|
|
31
|
+
const payload = buildPayload("EMBED", response, request, startTime, duration, providerInfo);
|
|
32
32
|
await sendToRevenium(payload);
|
|
33
|
-
},
|
|
33
|
+
}, "Embeddings tracking", {
|
|
34
34
|
logError: true,
|
|
35
35
|
rethrow: false, // Don't rethrow to maintain fire-and-forget behavior
|
|
36
|
-
messagePrefix:
|
|
36
|
+
messagePrefix: "Embeddings tracking failed: ",
|
|
37
37
|
}, logger);
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
@@ -47,8 +47,12 @@ export function trackUsageAsync(trackingData) {
|
|
|
47
47
|
prompt_tokens: trackingData.promptTokens,
|
|
48
48
|
completion_tokens: trackingData.completionTokens,
|
|
49
49
|
total_tokens: trackingData.totalTokens,
|
|
50
|
-
...(trackingData.reasoningTokens && {
|
|
51
|
-
|
|
50
|
+
...(trackingData.reasoningTokens && {
|
|
51
|
+
reasoning_tokens: trackingData.reasoningTokens,
|
|
52
|
+
}),
|
|
53
|
+
...(trackingData.cachedTokens && {
|
|
54
|
+
cached_tokens: trackingData.cachedTokens,
|
|
55
|
+
}),
|
|
52
56
|
},
|
|
53
57
|
choices: [
|
|
54
58
|
{
|
|
@@ -65,15 +69,15 @@ export function trackUsageAsync(trackingData) {
|
|
|
65
69
|
const startTime = Date.now() - trackingData.duration;
|
|
66
70
|
sendReveniumMetrics(mockResponse, mockRequest, startTime, trackingData.duration, trackingData.providerInfo)
|
|
67
71
|
.then(() => {
|
|
68
|
-
logger.debug(
|
|
72
|
+
logger.debug("Usage tracking completed successfully", {
|
|
69
73
|
requestId: trackingData.requestId,
|
|
70
74
|
model: trackingData.model,
|
|
71
75
|
totalTokens: trackingData.totalTokens,
|
|
72
76
|
isStreamed: trackingData.isStreamed,
|
|
73
77
|
});
|
|
74
78
|
})
|
|
75
|
-
.catch(error => {
|
|
76
|
-
logger.warn(
|
|
79
|
+
.catch((error) => {
|
|
80
|
+
logger.warn("Usage tracking failed", {
|
|
77
81
|
error: error instanceof Error ? error.message : String(error),
|
|
78
82
|
requestId: trackingData.requestId,
|
|
79
83
|
model: trackingData.model,
|
|
@@ -91,21 +95,21 @@ export function trackEmbeddingsUsageAsync(trackingData) {
|
|
|
91
95
|
total_tokens: trackingData.totalTokens,
|
|
92
96
|
},
|
|
93
97
|
data: [], // Mock empty data array for type compliance
|
|
94
|
-
object:
|
|
98
|
+
object: "list",
|
|
95
99
|
};
|
|
96
100
|
const mockRequest = {
|
|
97
101
|
model: trackingData.model,
|
|
98
|
-
input:
|
|
102
|
+
input: "", // Mock empty input for type compliance
|
|
99
103
|
usageMetadata: trackingData.usageMetadata,
|
|
100
104
|
};
|
|
101
105
|
sendReveniumEmbeddingsMetrics(mockResponse, mockRequest, trackingData.requestStartTime, trackingData.duration, trackingData.providerInfo)
|
|
102
106
|
.then(() => {
|
|
103
|
-
logger.debug(
|
|
107
|
+
logger.debug("Embeddings tracking completed successfully", {
|
|
104
108
|
transactionId: trackingData.transactionId,
|
|
105
109
|
});
|
|
106
110
|
})
|
|
107
|
-
.catch(error => {
|
|
108
|
-
logger.warn(
|
|
111
|
+
.catch((error) => {
|
|
112
|
+
logger.warn("Embeddings tracking failed", {
|
|
109
113
|
error: error instanceof Error ? error.message : String(error),
|
|
110
114
|
transactionId: trackingData.transactionId,
|
|
111
115
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../../../src/core/tracking/usage-tracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../../../src/core/tracking/usage-tracker.ts"],"names":[],"mappings":"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"}
|