@revenium/openai 1.0.12 → 1.0.13
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 +8 -8
- package/CHANGELOG.md +26 -0
- package/README.md +57 -351
- package/dist/cjs/core/config/loader.js +1 -1
- package/dist/cjs/core/config/manager.js +2 -1
- package/dist/cjs/core/config/manager.js.map +1 -1
- package/dist/cjs/core/providers/detector.js +3 -3
- package/dist/cjs/core/providers/detector.js.map +1 -1
- package/dist/cjs/core/tracking/api-client.js +1 -1
- package/dist/cjs/core/tracking/payload-builder.js +17 -12
- package/dist/cjs/core/tracking/payload-builder.js.map +1 -1
- package/dist/cjs/index.js +23 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/utils/metadata-builder.js +12 -5
- package/dist/cjs/utils/metadata-builder.js.map +1 -1
- package/dist/cjs/utils/stop-reason-mapper.js +4 -0
- package/dist/cjs/utils/stop-reason-mapper.js.map +1 -1
- package/dist/cjs/utils/url-builder.js +3 -3
- package/dist/esm/core/config/loader.js +1 -1
- package/dist/esm/core/config/manager.js +2 -1
- package/dist/esm/core/config/manager.js.map +1 -1
- package/dist/esm/core/providers/detector.js +3 -3
- package/dist/esm/core/providers/detector.js.map +1 -1
- package/dist/esm/core/tracking/api-client.js +1 -1
- package/dist/esm/core/tracking/payload-builder.js +17 -12
- package/dist/esm/core/tracking/payload-builder.js.map +1 -1
- package/dist/esm/index.js +22 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/metadata-builder.js +12 -5
- package/dist/esm/utils/metadata-builder.js.map +1 -1
- package/dist/esm/utils/stop-reason-mapper.js +4 -0
- package/dist/esm/utils/stop-reason-mapper.js.map +1 -1
- package/dist/esm/utils/url-builder.js +3 -3
- package/dist/types/core/config/manager.d.ts.map +1 -1
- package/dist/types/core/tracking/payload-builder.d.ts.map +1 -1
- package/dist/types/index.d.ts +23 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +9 -13
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/types/openai-augmentation.d.ts +1 -2
- package/dist/types/types/openai-augmentation.d.ts.map +1 -1
- package/dist/types/utils/metadata-builder.d.ts +2 -1
- package/dist/types/utils/metadata-builder.d.ts.map +1 -1
- package/dist/types/utils/stop-reason-mapper.d.ts.map +1 -1
- package/dist/types/utils/url-builder.d.ts +3 -3
- package/examples/README.md +3 -41
- package/examples/azure-basic.ts +1 -1
- package/examples/azure-responses-basic.ts +3 -3
- package/examples/azure-responses-streaming.ts +3 -3
- package/examples/azure-streaming.ts +2 -2
- package/examples/getting_started.ts +1 -1
- package/examples/openai-basic.ts +2 -2
- package/examples/openai-function-calling.ts +2 -2
- package/examples/openai-responses-basic.ts +2 -2
- package/examples/openai-responses-streaming.ts +2 -2
- package/examples/openai-streaming.ts +1 -1
- package/examples/openai-vision.ts +2 -2
- package/package.json +1 -1
- package/src/core/config/loader.ts +1 -1
- package/src/core/config/manager.ts +2 -1
- package/src/core/providers/detector.ts +3 -3
- package/src/core/tracking/api-client.ts +1 -1
- package/src/core/tracking/payload-builder.ts +17 -12
- package/src/index.ts +27 -3
- package/src/types/index.ts +11 -14
- package/src/types/openai-augmentation.ts +1 -2
- package/src/utils/metadata-builder.ts +16 -7
- package/src/utils/stop-reason-mapper.ts +4 -0
- package/src/utils/url-builder.ts +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../../src/core/providers/detector.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../../src/core/providers/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ async function sendToRevenium(payload) {
|
|
|
24
24
|
if (!config)
|
|
25
25
|
return logger.warn('Revenium configuration not found, skipping tracking');
|
|
26
26
|
// Use the new URL builder utility instead of nested conditionals
|
|
27
|
-
const url = (0, url_builder_js_1.buildReveniumUrl)(config.reveniumBaseUrl || 'https://api.revenium.
|
|
27
|
+
const url = (0, url_builder_js_1.buildReveniumUrl)(config.reveniumBaseUrl || 'https://api.revenium.ai', '/ai/completions');
|
|
28
28
|
logger.debug('Sending Revenium API request', {
|
|
29
29
|
url,
|
|
30
30
|
operationType: payload.operationType,
|
|
@@ -38,10 +38,10 @@ function buildPayload(operationType, response, request, startTime, duration, pro
|
|
|
38
38
|
const resolvedModel = providerInfo?.isAzure
|
|
39
39
|
? (0, azure_model_resolver_js_1.resolveAzureModelName)(originalModel)
|
|
40
40
|
: originalModel;
|
|
41
|
-
// Get provider metadata
|
|
41
|
+
// Get provider metadata (fallback: OpenAI direct)
|
|
42
42
|
const providerMetadata = providerInfo
|
|
43
43
|
? (0, index_js_2.getProviderMetadata)(providerInfo)
|
|
44
|
-
: { provider: '
|
|
44
|
+
: { provider: 'OpenAI', modelSource: 'OPENAI' };
|
|
45
45
|
if (providerInfo?.isAzure && resolvedModel !== originalModel) {
|
|
46
46
|
logger.debug('Azure model name resolved for pricing', {
|
|
47
47
|
deployment: originalModel,
|
|
@@ -66,8 +66,8 @@ function buildPayload(operationType, response, request, startTime, duration, pro
|
|
|
66
66
|
totalTokenCount: usage.total_tokens,
|
|
67
67
|
// Metadata fields (processed by utility)
|
|
68
68
|
...metadataFields,
|
|
69
|
-
// Fixed middleware source identifier
|
|
70
|
-
middlewareSource: '
|
|
69
|
+
// Fixed middleware source identifier (spec format: revenium-{provider}-{language})
|
|
70
|
+
middlewareSource: 'revenium-openai-node',
|
|
71
71
|
// Backend calculates costs
|
|
72
72
|
inputTokenCost: undefined,
|
|
73
73
|
outputTokenCost: undefined,
|
|
@@ -81,12 +81,13 @@ function buildPayload(operationType, response, request, startTime, duration, pro
|
|
|
81
81
|
operationType: 'EMBED',
|
|
82
82
|
transactionId: `embed-${(0, crypto_1.randomUUID)()}`,
|
|
83
83
|
outputTokenCount: 0,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
// Embeddings don't support reasoning or caching
|
|
85
|
+
reasoningTokenCount: undefined,
|
|
86
|
+
cacheCreationTokenCount: undefined,
|
|
87
|
+
cacheReadTokenCount: undefined,
|
|
87
88
|
stopReason: 'END',
|
|
88
89
|
isStreamed: false,
|
|
89
|
-
timeToFirstToken:
|
|
90
|
+
timeToFirstToken: undefined, // Not applicable for embeddings
|
|
90
91
|
};
|
|
91
92
|
}
|
|
92
93
|
const chatResponse = response;
|
|
@@ -96,12 +97,16 @@ function buildPayload(operationType, response, request, startTime, duration, pro
|
|
|
96
97
|
operationType: 'CHAT',
|
|
97
98
|
transactionId: chatResponse.id || `chat-${(0, crypto_1.randomUUID)()}`,
|
|
98
99
|
outputTokenCount: chatUsage.completion_tokens || 0,
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
// Leave null for models without reasoning capabilities (API spec)
|
|
101
|
+
reasoningTokenCount: chatUsage.reasoning_tokens ?? undefined,
|
|
102
|
+
// OpenAI doesn't report cache creation tokens
|
|
103
|
+
cacheCreationTokenCount: undefined,
|
|
104
|
+
// Only include if provider reports cache hits
|
|
105
|
+
cacheReadTokenCount: chatUsage.cached_tokens ?? undefined,
|
|
102
106
|
stopReason: (0, stop_reason_mapper_js_1.mapStopReason)(chatResponse.choices?.[0]?.finish_reason, logger),
|
|
103
107
|
isStreamed: Boolean(request.stream),
|
|
104
|
-
|
|
108
|
+
// TODO: Implement real TTFB tracking for streaming requests
|
|
109
|
+
timeToFirstToken: undefined,
|
|
105
110
|
};
|
|
106
111
|
}
|
|
107
112
|
//# sourceMappingURL=payload-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../src/core/tracking/payload-builder.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAiCH,
|
|
1
|
+
{"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../src/core/tracking/payload-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Environment Variables:
|
|
9
9
|
* REVENIUM_METERING_API_KEY=hak_your_api_key
|
|
10
|
-
* REVENIUM_METERING_BASE_URL=https://api.revenium.
|
|
10
|
+
* REVENIUM_METERING_BASE_URL=https://api.revenium.ai (optional)
|
|
11
11
|
* OPENAI_API_KEY=sk_your_openai_key
|
|
12
12
|
*
|
|
13
13
|
* Simple Usage (auto-initialization):
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
44
44
|
exports.patchOpenAIInstance = exports.wouldTransformDeploymentName = exports.batchResolveModelNames = exports.getModelNameCacheStats = exports.clearModelNameCache = exports.resolveAzureModelName = exports.getProviderInfo = exports.getProviderMetadata = exports.validateAzureConfig = exports.hasAzureConfig = exports.detectProvider = exports.trackEmbeddingsUsageAsync = exports.trackUsageAsync = void 0;
|
|
45
45
|
exports.initializeRevenium = initializeRevenium;
|
|
46
|
+
exports.configure = configure;
|
|
46
47
|
exports.initializeReveniumFromEnv = initializeReveniumFromEnv;
|
|
47
48
|
exports.isReveniumInitialized = isReveniumInitialized;
|
|
48
49
|
exports.getInitializationStatus = getInitializationStatus;
|
|
@@ -93,7 +94,7 @@ function initializeRevenium(config) {
|
|
|
93
94
|
// Apply default base URL if not provided
|
|
94
95
|
const configWithDefaults = {
|
|
95
96
|
...config,
|
|
96
|
-
reveniumBaseUrl: config.reveniumBaseUrl || 'https://api.revenium.
|
|
97
|
+
reveniumBaseUrl: config.reveniumBaseUrl || 'https://api.revenium.ai',
|
|
97
98
|
};
|
|
98
99
|
(0, index_js_1.validateConfig)(configWithDefaults);
|
|
99
100
|
(0, index_js_1.setConfig)(configWithDefaults);
|
|
@@ -114,6 +115,26 @@ function initializeRevenium(config) {
|
|
|
114
115
|
};
|
|
115
116
|
}
|
|
116
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Configure Revenium middleware manually
|
|
120
|
+
* Alias for initializeRevenium() with a more intuitive name
|
|
121
|
+
*
|
|
122
|
+
* @param config - Revenium configuration object
|
|
123
|
+
* @returns Initialization result with success status and message
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* import { configure } from '@revenium/openai';
|
|
128
|
+
*
|
|
129
|
+
* configure({
|
|
130
|
+
* reveniumApiKey: 'hak_your_api_key',
|
|
131
|
+
* reveniumBaseUrl: 'https://api.revenium.ai',
|
|
132
|
+
* });
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
function configure(config) {
|
|
136
|
+
return initializeRevenium(config);
|
|
137
|
+
}
|
|
117
138
|
/**
|
|
118
139
|
* Initialize Revenium middleware from environment variables
|
|
119
140
|
*/
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;;;AA8JH,gDAuCC;AAKD,8DAiCC;AAqCD,sDAEC;AAKD,0DAaC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;AAEH,qCAAqC;AACrC,2DAAyC;AAEzC,gCAAgC;AAChC,qDAAmC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;AAEH,qCAAqC;AACrC,2DAAyC;AAEzC,gCAAgC;AAChC,qDAAmC;AAqInC;;;;;;;;;;;;;GAaG;AACH,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,0BAA0B;IAC1B,6BAAiB,CAAA;IACjB,2BAA2B;IAC3B,yCAA6B,CAAA;AAC/B,CAAC,EALW,QAAQ,wBAAR,QAAQ,QAKnB"}
|
|
@@ -28,7 +28,7 @@ const METADATA_FIELD_MAP = [
|
|
|
28
28
|
{
|
|
29
29
|
source: 'responseQualityScore',
|
|
30
30
|
transform: (value) => {
|
|
31
|
-
// Ensure quality score is between 0 and 1
|
|
31
|
+
// Ensure quality score is between 0.0 and 1.0 (API spec requirement)
|
|
32
32
|
if (typeof value === 'number')
|
|
33
33
|
return Math.max(0, Math.min(1, value));
|
|
34
34
|
return value;
|
|
@@ -89,8 +89,10 @@ function validateMetadata(usageMetadata, requiredFields = []) {
|
|
|
89
89
|
// Check for common issues
|
|
90
90
|
if (usageMetadata.responseQualityScore) {
|
|
91
91
|
const score = usageMetadata.responseQualityScore;
|
|
92
|
+
// API Spec: https://revenium.readme.io/reference/meter_ai_completion (responseQualityScore)
|
|
93
|
+
// "typically on a 0.0-1.0 scale"
|
|
92
94
|
if (typeof score !== 'number' || score < 0 || score > 1) {
|
|
93
|
-
warnings.push('responseQualityScore should be a number between 0 and 1');
|
|
95
|
+
warnings.push('responseQualityScore should be a number between 0.0 and 1.0');
|
|
94
96
|
}
|
|
95
97
|
}
|
|
96
98
|
if (usageMetadata.subscriber?.email && !usageMetadata.subscriber.email.includes('@')) {
|
|
@@ -133,18 +135,22 @@ function extractMetadata(params) {
|
|
|
133
135
|
}
|
|
134
136
|
/**
|
|
135
137
|
* Create a metadata context for consistent logging
|
|
138
|
+
* Uses sanitization to protect PII (emails are masked)
|
|
136
139
|
*
|
|
137
140
|
* @param usageMetadata - Source metadata
|
|
138
|
-
* @returns Logging context object
|
|
141
|
+
* @returns Logging context object with sanitized PII
|
|
139
142
|
*/
|
|
140
143
|
function createLoggingContext(usageMetadata) {
|
|
141
144
|
if (!usageMetadata)
|
|
142
145
|
return {};
|
|
146
|
+
// Use sanitizer to protect PII in logs
|
|
147
|
+
const sanitized = sanitizeMetadataForLogging(usageMetadata);
|
|
148
|
+
const sanitizedSubscriber = sanitized.subscriber;
|
|
143
149
|
return {
|
|
144
150
|
traceId: usageMetadata.traceId,
|
|
145
151
|
taskType: usageMetadata.taskType,
|
|
146
152
|
subscriberId: usageMetadata.subscriber?.id,
|
|
147
|
-
subscriberEmail:
|
|
153
|
+
subscriberEmail: sanitizedSubscriber?.email, // ← Now masked: us***@example.com
|
|
148
154
|
organizationId: usageMetadata.organizationId,
|
|
149
155
|
productId: usageMetadata.productId,
|
|
150
156
|
agent: usageMetadata.agent,
|
|
@@ -169,7 +175,8 @@ function sanitizeMetadataForLogging(usageMetadata) {
|
|
|
169
175
|
sanitizedSubscriber.id = subscriber.id;
|
|
170
176
|
}
|
|
171
177
|
if (subscriber.email) {
|
|
172
|
-
|
|
178
|
+
// Mask email: handles single-char emails (a@x.com → a***@x.com)
|
|
179
|
+
sanitizedSubscriber.email = subscriber.email.replace(/(.{1,2}).*(@.*)/, '$1***$2');
|
|
173
180
|
}
|
|
174
181
|
if (subscriber.credential) {
|
|
175
182
|
sanitizedSubscriber.credential = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-builder.js","sourceRoot":"","sources":["../../../src/utils/metadata-builder.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAmDH,kDAoBC;AASD,
|
|
1
|
+
{"version":3,"file":"metadata-builder.js","sourceRoot":"","sources":["../../../src/utils/metadata-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,8 +22,12 @@ const STOP_REASON_MAP = {
|
|
|
22
22
|
timeout: 'TIMEOUT',
|
|
23
23
|
length: 'TOKEN_LIMIT',
|
|
24
24
|
max_tokens: 'TOKEN_LIMIT',
|
|
25
|
+
cost_limit: 'COST_LIMIT',
|
|
26
|
+
completion_limit: 'COMPLETION_LIMIT',
|
|
25
27
|
content_filter: 'ERROR',
|
|
26
28
|
error: 'ERROR',
|
|
29
|
+
cancelled: 'CANCELLED',
|
|
30
|
+
canceled: 'CANCELLED', // Handle both spellings
|
|
27
31
|
// Anthropic stop reasons (for consistency across middleware)
|
|
28
32
|
end_turn: 'END',
|
|
29
33
|
stop_sequence: 'END_SEQUENCE',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop-reason-mapper.js","sourceRoot":"","sources":["../../../src/utils/stop-reason-mapper.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"stop-reason-mapper.js","sourceRoot":"","sources":["../../../src/utils/stop-reason-mapper.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AA0CH,sCAeC;AAKD,0DAEC;AAKD,sDAEC;AArED;;;GAGG;AACH,MAAM,eAAe,GAA2B;IAC9C,mCAAmC;IACnC,IAAI,EAAE,KAAK;IACX,aAAa,EAAE,cAAc;IAC7B,UAAU,EAAE,cAAc;IAC1B,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,aAAa;IACrB,UAAU,EAAE,aAAa;IACzB,UAAU,EAAE,YAAY;IACxB,gBAAgB,EAAE,kBAAkB;IACpC,cAAc,EAAE,OAAO;IACvB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,WAAW,EAAG,wBAAwB;IAEhD,6DAA6D;IAC7D,QAAQ,EAAE,KAAK;IACf,aAAa,EAAE,cAAc;IAC7B,QAAQ,EAAE,cAAc;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAElC;;;;;;;;;GASG;AACH,SAAgB,aAAa,CAC3B,kBAA6C,EAC7C,MAA4D;IAE5D,IAAI,CAAC,kBAAkB;QAAE,OAAO,mBAAmB,CAAC;IACpD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,WAAW,EAAE,CAAC;IAC1D,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAEvD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,mEAAmE;QACnE,MAAM,EAAE,IAAI,CAAC,wBAAwB,kBAAkB,gBAAgB,mBAAmB,EAAE,CAAC,CAAC;QAC9F,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB;IACrC,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,MAAc;IAClD,OAAO,MAAM,CAAC,WAAW,EAAE,IAAI,eAAe,CAAC;AACjD,CAAC"}
|
|
@@ -18,9 +18,9 @@ exports.isValidUrl = isValidUrl;
|
|
|
18
18
|
* - If URL has neither → append /meter/v2 and endpoint
|
|
19
19
|
*
|
|
20
20
|
* Examples:
|
|
21
|
-
* - 'https://api.revenium.
|
|
22
|
-
* - 'https://api.revenium.
|
|
23
|
-
* - 'https://api.revenium.
|
|
21
|
+
* - 'https://api.revenium.ai' + '/ai/completions' → 'https://api.revenium.ai/meter/v2/ai/completions'
|
|
22
|
+
* - 'https://api.revenium.ai/meter' + '/ai/completions' → 'https://api.revenium.ai/meter/v2/ai/completions'
|
|
23
|
+
* - 'https://api.revenium.ai/meter/v2' + '/ai/completions' → 'https://api.revenium.ai/meter/v2/ai/completions'
|
|
24
24
|
*
|
|
25
25
|
* @param baseUrl - The base URL from configuration (may include /meter or /meter/v2)
|
|
26
26
|
* @param endpoint - The API endpoint to append (e.g., '/ai/completions')
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
/**
|
|
8
8
|
* Default Revenium base URL for consistency with other middleware
|
|
9
9
|
*/
|
|
10
|
-
const DEFAULT_REVENIUM_BASE_URL = 'https://api.revenium.
|
|
10
|
+
const DEFAULT_REVENIUM_BASE_URL = 'https://api.revenium.ai';
|
|
11
11
|
/**
|
|
12
12
|
* Load configuration from environment variables
|
|
13
13
|
*/
|
|
@@ -11,7 +11,8 @@ import { validateConfig } from './validator.js';
|
|
|
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 === 'true') {
|
|
15
16
|
console.debug(`[Revenium Debug] ${message}`, ...args);
|
|
16
17
|
}
|
|
17
18
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/core/config/manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACrE,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,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/core/config/manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACrE,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,SAAS,CAAC,SAAS,CAAC,CAAC;YACrB,YAAY,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAEjF,8CAA8C;YAC9C,IAAI,mBAAmB,EAAE,EAAE,CAAC;gBAC1B,YAAY,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAC3E,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"}
|
|
@@ -123,12 +123,12 @@ export function getProviderMetadata(providerInfo) {
|
|
|
123
123
|
if (providerInfo.isAzure) {
|
|
124
124
|
return {
|
|
125
125
|
provider: 'Azure',
|
|
126
|
-
modelSource: '
|
|
126
|
+
modelSource: 'AZURE_OPENAI',
|
|
127
127
|
};
|
|
128
128
|
}
|
|
129
129
|
return {
|
|
130
|
-
provider: '
|
|
131
|
-
modelSource: 'OPENAI',
|
|
130
|
+
provider: 'OpenAI',
|
|
131
|
+
modelSource: 'OPENAI', // Provider name when calling directly per spec
|
|
132
132
|
};
|
|
133
133
|
}
|
|
134
134
|
//# sourceMappingURL=detector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../../src/core/providers/detector.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../../src/core/providers/detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAA6B,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,gBAAgB;AAChB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAA4B;IACzD,2BAA2B;IAC3B,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,SAAS;SACvB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,oDAAoD;QACpD,MAAM,YAAY,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAExD,sBAAsB;QACtB,MAAM,UAAU,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,4CAA4C,EAAE;gBACxD,QAAQ,EAAE,UAAU,CAAC,QAAQ;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,mBAAmB;QACnB,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;gBAC5C,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,cAAc,EAAE,CAAC,CAAC,YAAY,CAAC,WAAW;gBAC1C,QAAQ,EAAE,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;aACxE,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,uDAAuD,EAAE;YACnE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QAEH,iCAAiC;QACjC,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,SAAS;SACvB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,CAAC,CACP,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACjC,OAAO,CAAC,GAAG,CAAC,uBAAuB;QACnC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CACjC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IAKrD,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,mDAAmD;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAChF,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrD,QAAQ,CAAC,IAAI,CACX,oFAAoF,CACrF,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC;QACnC,aAAa;QACb,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,YAA0B;IAI5D,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO;YACL,QAAQ,EAAE,OAAO;YACjB,WAAW,EAAE,cAAc;SAC5B,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,QAAQ,EAAG,+CAA+C;KACxE,CAAC;AACJ,CAAC"}
|
|
@@ -21,7 +21,7 @@ export async function sendToRevenium(payload) {
|
|
|
21
21
|
if (!config)
|
|
22
22
|
return logger.warn('Revenium configuration not found, skipping tracking');
|
|
23
23
|
// Use the new URL builder utility instead of nested conditionals
|
|
24
|
-
const url = buildReveniumUrl(config.reveniumBaseUrl || 'https://api.revenium.
|
|
24
|
+
const url = buildReveniumUrl(config.reveniumBaseUrl || 'https://api.revenium.ai', '/ai/completions');
|
|
25
25
|
logger.debug('Sending Revenium API request', {
|
|
26
26
|
url,
|
|
27
27
|
operationType: payload.operationType,
|
|
@@ -35,10 +35,10 @@ export function buildPayload(operationType, response, request, startTime, durati
|
|
|
35
35
|
const resolvedModel = providerInfo?.isAzure
|
|
36
36
|
? resolveAzureModelName(originalModel)
|
|
37
37
|
: originalModel;
|
|
38
|
-
// Get provider metadata
|
|
38
|
+
// Get provider metadata (fallback: OpenAI direct)
|
|
39
39
|
const providerMetadata = providerInfo
|
|
40
40
|
? getProviderMetadata(providerInfo)
|
|
41
|
-
: { provider: '
|
|
41
|
+
: { provider: 'OpenAI', modelSource: 'OPENAI' };
|
|
42
42
|
if (providerInfo?.isAzure && resolvedModel !== originalModel) {
|
|
43
43
|
logger.debug('Azure model name resolved for pricing', {
|
|
44
44
|
deployment: originalModel,
|
|
@@ -63,8 +63,8 @@ export function buildPayload(operationType, response, request, startTime, durati
|
|
|
63
63
|
totalTokenCount: usage.total_tokens,
|
|
64
64
|
// Metadata fields (processed by utility)
|
|
65
65
|
...metadataFields,
|
|
66
|
-
// Fixed middleware source identifier
|
|
67
|
-
middlewareSource: '
|
|
66
|
+
// Fixed middleware source identifier (spec format: revenium-{provider}-{language})
|
|
67
|
+
middlewareSource: 'revenium-openai-node',
|
|
68
68
|
// Backend calculates costs
|
|
69
69
|
inputTokenCost: undefined,
|
|
70
70
|
outputTokenCost: undefined,
|
|
@@ -78,12 +78,13 @@ export function buildPayload(operationType, response, request, startTime, durati
|
|
|
78
78
|
operationType: 'EMBED',
|
|
79
79
|
transactionId: `embed-${randomUUID()}`,
|
|
80
80
|
outputTokenCount: 0,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
// Embeddings don't support reasoning or caching
|
|
82
|
+
reasoningTokenCount: undefined,
|
|
83
|
+
cacheCreationTokenCount: undefined,
|
|
84
|
+
cacheReadTokenCount: undefined,
|
|
84
85
|
stopReason: 'END',
|
|
85
86
|
isStreamed: false,
|
|
86
|
-
timeToFirstToken:
|
|
87
|
+
timeToFirstToken: undefined, // Not applicable for embeddings
|
|
87
88
|
};
|
|
88
89
|
}
|
|
89
90
|
const chatResponse = response;
|
|
@@ -93,12 +94,16 @@ export function buildPayload(operationType, response, request, startTime, durati
|
|
|
93
94
|
operationType: 'CHAT',
|
|
94
95
|
transactionId: chatResponse.id || `chat-${randomUUID()}`,
|
|
95
96
|
outputTokenCount: chatUsage.completion_tokens || 0,
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
// Leave null for models without reasoning capabilities (API spec)
|
|
98
|
+
reasoningTokenCount: chatUsage.reasoning_tokens ?? undefined,
|
|
99
|
+
// OpenAI doesn't report cache creation tokens
|
|
100
|
+
cacheCreationTokenCount: undefined,
|
|
101
|
+
// Only include if provider reports cache hits
|
|
102
|
+
cacheReadTokenCount: chatUsage.cached_tokens ?? undefined,
|
|
99
103
|
stopReason: mapStopReason(chatResponse.choices?.[0]?.finish_reason, logger),
|
|
100
104
|
isStreamed: Boolean(request.stream),
|
|
101
|
-
|
|
105
|
+
// TODO: Implement real TTFB tracking for streaming requests
|
|
106
|
+
timeToFirstToken: undefined,
|
|
102
107
|
};
|
|
103
108
|
}
|
|
104
109
|
//# sourceMappingURL=payload-builder.js.map
|
|
@@ -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,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,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,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;IACrC,MAAM,aAAa,GAAG,YAAY,EAAE,OAAO;QACzC,CAAC,CAAC,qBAAqB,CAAC,aAAa,CAAC;QACtC,CAAC,CAAC,aAAa,CAAC;IAElB,
|
|
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,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,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,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;IACrC,MAAM,aAAa,GAAG,YAAY,EAAE,OAAO;QACzC,CAAC,CAAC,qBAAqB,CAAC,aAAa,CAAC;QACtC,CAAC,CAAC,aAAa,CAAC;IAElB,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,IAAI,YAAY,EAAE,OAAO,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE;YACpD,UAAU,EAAE,aAAa;YACzB,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;SACpC,CAAC,CAAC;IACL,CAAC;IAED,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,aAAa,EAAE,+CAA+C;QACrE,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,EAAG,gCAAgC;SAC/D,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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Environment Variables:
|
|
8
8
|
* REVENIUM_METERING_API_KEY=hak_your_api_key
|
|
9
|
-
* REVENIUM_METERING_BASE_URL=https://api.revenium.
|
|
9
|
+
* REVENIUM_METERING_BASE_URL=https://api.revenium.ai (optional)
|
|
10
10
|
* OPENAI_API_KEY=sk_your_openai_key
|
|
11
11
|
*
|
|
12
12
|
* Simple Usage (auto-initialization):
|
|
@@ -74,7 +74,7 @@ export function initializeRevenium(config) {
|
|
|
74
74
|
// Apply default base URL if not provided
|
|
75
75
|
const configWithDefaults = {
|
|
76
76
|
...config,
|
|
77
|
-
reveniumBaseUrl: config.reveniumBaseUrl || 'https://api.revenium.
|
|
77
|
+
reveniumBaseUrl: config.reveniumBaseUrl || 'https://api.revenium.ai',
|
|
78
78
|
};
|
|
79
79
|
validateConfig(configWithDefaults);
|
|
80
80
|
setConfig(configWithDefaults);
|
|
@@ -95,6 +95,26 @@ export function initializeRevenium(config) {
|
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Configure Revenium middleware manually
|
|
100
|
+
* Alias for initializeRevenium() with a more intuitive name
|
|
101
|
+
*
|
|
102
|
+
* @param config - Revenium configuration object
|
|
103
|
+
* @returns Initialization result with success status and message
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* import { configure } from '@revenium/openai';
|
|
108
|
+
*
|
|
109
|
+
* configure({
|
|
110
|
+
* reveniumApiKey: 'hak_your_api_key',
|
|
111
|
+
* reveniumBaseUrl: 'https://api.revenium.ai',
|
|
112
|
+
* });
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export function configure(config) {
|
|
116
|
+
return initializeRevenium(config);
|
|
117
|
+
}
|
|
98
118
|
/**
|
|
99
119
|
* Initialize Revenium middleware from environment variables
|
|
100
120
|
*/
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qCAAqC;AACrC,cAAc,0BAA0B,CAAC;AAEzC,gCAAgC;AAChC,cAAc,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qCAAqC;AACrC,cAAc,0BAA0B,CAAC;AAEzC,gCAAgC;AAChC,cAAc,oBAAoB,CAAC;AAqInC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,0BAA0B;IAC1B,6BAAiB,CAAA;IACjB,2BAA2B;IAC3B,yCAA6B,CAAA;AAC/B,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB"}
|
|
@@ -20,7 +20,7 @@ const METADATA_FIELD_MAP = [
|
|
|
20
20
|
{
|
|
21
21
|
source: 'responseQualityScore',
|
|
22
22
|
transform: (value) => {
|
|
23
|
-
// Ensure quality score is between 0 and 1
|
|
23
|
+
// Ensure quality score is between 0.0 and 1.0 (API spec requirement)
|
|
24
24
|
if (typeof value === 'number')
|
|
25
25
|
return Math.max(0, Math.min(1, value));
|
|
26
26
|
return value;
|
|
@@ -81,8 +81,10 @@ export function validateMetadata(usageMetadata, requiredFields = []) {
|
|
|
81
81
|
// Check for common issues
|
|
82
82
|
if (usageMetadata.responseQualityScore) {
|
|
83
83
|
const score = usageMetadata.responseQualityScore;
|
|
84
|
+
// API Spec: https://revenium.readme.io/reference/meter_ai_completion (responseQualityScore)
|
|
85
|
+
// "typically on a 0.0-1.0 scale"
|
|
84
86
|
if (typeof score !== 'number' || score < 0 || score > 1) {
|
|
85
|
-
warnings.push('responseQualityScore should be a number between 0 and 1');
|
|
87
|
+
warnings.push('responseQualityScore should be a number between 0.0 and 1.0');
|
|
86
88
|
}
|
|
87
89
|
}
|
|
88
90
|
if (usageMetadata.subscriber?.email && !usageMetadata.subscriber.email.includes('@')) {
|
|
@@ -125,18 +127,22 @@ export function extractMetadata(params) {
|
|
|
125
127
|
}
|
|
126
128
|
/**
|
|
127
129
|
* Create a metadata context for consistent logging
|
|
130
|
+
* Uses sanitization to protect PII (emails are masked)
|
|
128
131
|
*
|
|
129
132
|
* @param usageMetadata - Source metadata
|
|
130
|
-
* @returns Logging context object
|
|
133
|
+
* @returns Logging context object with sanitized PII
|
|
131
134
|
*/
|
|
132
135
|
export function createLoggingContext(usageMetadata) {
|
|
133
136
|
if (!usageMetadata)
|
|
134
137
|
return {};
|
|
138
|
+
// Use sanitizer to protect PII in logs
|
|
139
|
+
const sanitized = sanitizeMetadataForLogging(usageMetadata);
|
|
140
|
+
const sanitizedSubscriber = sanitized.subscriber;
|
|
135
141
|
return {
|
|
136
142
|
traceId: usageMetadata.traceId,
|
|
137
143
|
taskType: usageMetadata.taskType,
|
|
138
144
|
subscriberId: usageMetadata.subscriber?.id,
|
|
139
|
-
subscriberEmail:
|
|
145
|
+
subscriberEmail: sanitizedSubscriber?.email, // ← Now masked: us***@example.com
|
|
140
146
|
organizationId: usageMetadata.organizationId,
|
|
141
147
|
productId: usageMetadata.productId,
|
|
142
148
|
agent: usageMetadata.agent,
|
|
@@ -161,7 +167,8 @@ export function sanitizeMetadataForLogging(usageMetadata) {
|
|
|
161
167
|
sanitizedSubscriber.id = subscriber.id;
|
|
162
168
|
}
|
|
163
169
|
if (subscriber.email) {
|
|
164
|
-
|
|
170
|
+
// Mask email: handles single-char emails (a@x.com → a***@x.com)
|
|
171
|
+
sanitizedSubscriber.email = subscriber.email.replace(/(.{1,2}).*(@.*)/, '$1***$2');
|
|
165
172
|
}
|
|
166
173
|
if (subscriber.credential) {
|
|
167
174
|
sanitizedSubscriber.credential = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-builder.js","sourceRoot":"","sources":["../../../src/utils/metadata-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH;;;;GAIG;AACH,MAAM,kBAAkB,GAA0B;IAChD,EAAE,MAAM,EAAE,SAAS,EAAE;IACrB,EAAE,MAAM,EAAE,UAAU,EAAE;IACtB,EAAE,MAAM,EAAE,OAAO,EAAE;IACnB,EAAE,MAAM,EAAE,gBAAgB,EAAE;IAC5B,EAAE,MAAM,EAAE,WAAW,EAAE;IACvB,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,iDAAiD;IAC3E,EAAE,MAAM,EAAE,gBAAgB,EAAE;IAC5B;QACE,MAAM,EAAE,sBAAsB;QAC9B,SAAS,EAAE,CAAC,KAAc,EAAE,EAAE;YAC5B,
|
|
1
|
+
{"version":3,"file":"metadata-builder.js","sourceRoot":"","sources":["../../../src/utils/metadata-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,8 +17,12 @@ const STOP_REASON_MAP = {
|
|
|
17
17
|
timeout: 'TIMEOUT',
|
|
18
18
|
length: 'TOKEN_LIMIT',
|
|
19
19
|
max_tokens: 'TOKEN_LIMIT',
|
|
20
|
+
cost_limit: 'COST_LIMIT',
|
|
21
|
+
completion_limit: 'COMPLETION_LIMIT',
|
|
20
22
|
content_filter: 'ERROR',
|
|
21
23
|
error: 'ERROR',
|
|
24
|
+
cancelled: 'CANCELLED',
|
|
25
|
+
canceled: 'CANCELLED', // Handle both spellings
|
|
22
26
|
// Anthropic stop reasons (for consistency across middleware)
|
|
23
27
|
end_turn: 'END',
|
|
24
28
|
stop_sequence: 'END_SEQUENCE',
|