@revenium/openai 1.0.15 → 1.1.0
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 +28 -8
- package/CHANGELOG.md +19 -0
- package/README.md +173 -0
- package/dist/cjs/core/config/loader.js +27 -1
- package/dist/cjs/core/config/loader.js.map +1 -1
- package/dist/cjs/core/middleware/interfaces.js +70 -32
- package/dist/cjs/core/middleware/interfaces.js.map +1 -1
- package/dist/cjs/core/tracking/index.js +3 -1
- package/dist/cjs/core/tracking/index.js.map +1 -1
- package/dist/cjs/core/tracking/payload-builder.js +54 -4
- package/dist/cjs/core/tracking/payload-builder.js.map +1 -1
- package/dist/cjs/core/tracking/summary-printer.js +196 -0
- package/dist/cjs/core/tracking/summary-printer.js.map +1 -0
- package/dist/cjs/core/tracking/usage-tracker.js +39 -7
- package/dist/cjs/core/tracking/usage-tracker.js.map +1 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/utils/prompt-extraction.js +231 -0
- package/dist/cjs/utils/prompt-extraction.js.map +1 -0
- package/dist/esm/core/config/loader.js +27 -1
- package/dist/esm/core/config/loader.js.map +1 -1
- package/dist/esm/core/middleware/interfaces.js +70 -32
- package/dist/esm/core/middleware/interfaces.js.map +1 -1
- package/dist/esm/core/tracking/index.js +1 -0
- package/dist/esm/core/tracking/index.js.map +1 -1
- package/dist/esm/core/tracking/payload-builder.js +54 -4
- package/dist/esm/core/tracking/payload-builder.js.map +1 -1
- package/dist/esm/core/tracking/summary-printer.js +193 -0
- package/dist/esm/core/tracking/summary-printer.js.map +1 -0
- package/dist/esm/core/tracking/usage-tracker.js +39 -7
- package/dist/esm/core/tracking/usage-tracker.js.map +1 -1
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/prompt-extraction.js +225 -0
- package/dist/esm/utils/prompt-extraction.js.map +1 -0
- package/dist/types/core/config/loader.d.ts.map +1 -1
- package/dist/types/core/middleware/interfaces.d.ts +4 -1
- package/dist/types/core/middleware/interfaces.d.ts.map +1 -1
- package/dist/types/core/tracking/index.d.ts +1 -0
- package/dist/types/core/tracking/index.d.ts.map +1 -1
- package/dist/types/core/tracking/payload-builder.d.ts +1 -1
- package/dist/types/core/tracking/payload-builder.d.ts.map +1 -1
- package/dist/types/core/tracking/summary-printer.d.ts +9 -0
- package/dist/types/core/tracking/summary-printer.d.ts.map +1 -0
- package/dist/types/core/tracking/usage-tracker.d.ts +2 -0
- package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -1
- package/dist/types/types/index.d.ts +34 -0
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utils/prompt-extraction.d.ts +29 -0
- package/dist/types/utils/prompt-extraction.d.ts.map +1 -0
- package/examples/openai/prompt-capture.ts +95 -0
- package/package.json +12 -1
|
@@ -9,6 +9,8 @@ import { getLogger } from "../config";
|
|
|
9
9
|
import { mapStopReason } from "../../utils/stop-reason-mapper.js";
|
|
10
10
|
import { buildMetadataFields } from "../../utils/metadata-builder.js";
|
|
11
11
|
import { getProviderMetadata } from "../providers";
|
|
12
|
+
import { getEnvironment, getRegion, getCredentialAlias, getTraceType, getTraceName, getParentTransactionId, getTransactionName, getRetryNumber, detectOperationSubtype, } from "../../utils/trace-fields.js";
|
|
13
|
+
import { extractPrompts } from "../../utils/prompt-extraction.js";
|
|
12
14
|
// Global logger
|
|
13
15
|
const logger = getLogger();
|
|
14
16
|
/**
|
|
@@ -25,10 +27,13 @@ const logger = getLogger();
|
|
|
25
27
|
* @param providerInfo - Provider information for Azure support
|
|
26
28
|
* @returns Constructed payload for Revenium API
|
|
27
29
|
*/
|
|
28
|
-
export function buildPayload(operationType, response, request, startTime, duration, providerInfo) {
|
|
30
|
+
export async function buildPayload(operationType, response, request, startTime, duration, providerInfo) {
|
|
29
31
|
const now = new Date().toISOString();
|
|
30
32
|
const requestTime = new Date(startTime).toISOString();
|
|
31
33
|
const usage = response.usage;
|
|
34
|
+
if (!usage) {
|
|
35
|
+
throw new Error("Response usage data is missing");
|
|
36
|
+
}
|
|
32
37
|
// For Azure, use the deployment name as-is
|
|
33
38
|
// The deployment name is what the user provided and should be sent to Revenium
|
|
34
39
|
const modelName = response.model;
|
|
@@ -36,8 +41,16 @@ export function buildPayload(operationType, response, request, startTime, durati
|
|
|
36
41
|
const providerMetadata = providerInfo
|
|
37
42
|
? getProviderMetadata(providerInfo)
|
|
38
43
|
: { provider: "OpenAI", modelSource: "OPENAI" };
|
|
39
|
-
// Build metadata fields using utility (eliminates repetitive spreading)
|
|
40
44
|
const metadataFields = buildMetadataFields(request.usageMetadata);
|
|
45
|
+
const environment = getEnvironment();
|
|
46
|
+
const region = await getRegion();
|
|
47
|
+
const credentialAlias = getCredentialAlias();
|
|
48
|
+
const traceType = getTraceType();
|
|
49
|
+
const traceName = getTraceName();
|
|
50
|
+
const parentTransactionId = getParentTransactionId();
|
|
51
|
+
const transactionName = getTransactionName();
|
|
52
|
+
const retryNumber = getRetryNumber();
|
|
53
|
+
const operationSubtype = detectOperationSubtype(request);
|
|
41
54
|
// Common fields for all operations
|
|
42
55
|
const commonPayload = {
|
|
43
56
|
costType: "AI",
|
|
@@ -51,8 +64,16 @@ export function buildPayload(operationType, response, request, startTime, durati
|
|
|
51
64
|
// Common token counts
|
|
52
65
|
inputTokenCount: usage.prompt_tokens,
|
|
53
66
|
totalTokenCount: usage.total_tokens,
|
|
54
|
-
// Metadata fields (processed by utility)
|
|
55
67
|
...metadataFields,
|
|
68
|
+
environment: environment || undefined,
|
|
69
|
+
region: region || undefined,
|
|
70
|
+
credentialAlias: credentialAlias || undefined,
|
|
71
|
+
traceType: traceType || undefined,
|
|
72
|
+
traceName: traceName || undefined,
|
|
73
|
+
parentTransactionId: parentTransactionId || undefined,
|
|
74
|
+
transactionName: transactionName || undefined,
|
|
75
|
+
retryNumber: retryNumber !== undefined ? retryNumber : undefined,
|
|
76
|
+
operationSubtype: operationSubtype || undefined,
|
|
56
77
|
// Fixed middleware source identifier (spec format: revenium-{provider}-{language})
|
|
57
78
|
middlewareSource: "revenium-openai-node",
|
|
58
79
|
// Backend calculates costs
|
|
@@ -79,6 +100,28 @@ export function buildPayload(operationType, response, request, startTime, durati
|
|
|
79
100
|
}
|
|
80
101
|
const chatResponse = response;
|
|
81
102
|
const chatUsage = chatResponse.usage;
|
|
103
|
+
const chatRequest = request;
|
|
104
|
+
const attributes = {};
|
|
105
|
+
if (chatRequest.response_format) {
|
|
106
|
+
if (typeof chatRequest.response_format === "object" &&
|
|
107
|
+
chatRequest.response_format !== null) {
|
|
108
|
+
const formatType = chatRequest.response_format.type;
|
|
109
|
+
if (formatType) {
|
|
110
|
+
attributes.response_format_type = formatType;
|
|
111
|
+
if (formatType === "json_schema") {
|
|
112
|
+
const schemaName = chatRequest.response_format.json_schema
|
|
113
|
+
?.name;
|
|
114
|
+
if (schemaName) {
|
|
115
|
+
attributes.response_format_schema_name = schemaName;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
attributes.response_format = chatRequest.response_format;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const promptData = extractPrompts(chatRequest, chatResponse, chatRequest.usageMetadata);
|
|
82
125
|
return {
|
|
83
126
|
...commonPayload,
|
|
84
127
|
operationType: "CHAT",
|
|
@@ -91,9 +134,16 @@ export function buildPayload(operationType, response, request, startTime, durati
|
|
|
91
134
|
// Only include if provider reports cache hits
|
|
92
135
|
cacheReadTokenCount: chatUsage.cached_tokens ?? undefined,
|
|
93
136
|
stopReason: mapStopReason(chatResponse.choices?.[0]?.finish_reason, logger),
|
|
94
|
-
isStreamed: Boolean(
|
|
137
|
+
isStreamed: Boolean(chatRequest.stream),
|
|
95
138
|
// TODO: Implement real TTFB tracking for streaming requests
|
|
96
139
|
timeToFirstToken: undefined,
|
|
140
|
+
...(Object.keys(attributes).length > 0 && { attributes }),
|
|
141
|
+
...(promptData && {
|
|
142
|
+
systemPrompt: promptData.systemPrompt,
|
|
143
|
+
inputMessages: promptData.inputMessages,
|
|
144
|
+
outputResponse: promptData.outputResponse,
|
|
145
|
+
promptsTruncated: promptData.promptsTruncated,
|
|
146
|
+
}),
|
|
97
147
|
};
|
|
98
148
|
}
|
|
99
149
|
export function buildImagePayload(operationSubtype, response, request, startTime, duration, providerInfo, usageMetadata) {
|
|
@@ -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,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;
|
|
1
|
+
{"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../src/core/tracking/payload-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Summary Printer Module
|
|
3
|
+
*
|
|
4
|
+
* Provides terminal output for cost/metrics summary after API requests.
|
|
5
|
+
* Fetches cost data from Revenium's traces API and formats for console display.
|
|
6
|
+
*/
|
|
7
|
+
import { getConfig, getLogger } from "../config";
|
|
8
|
+
import { DEFAULT_REVENIUM_BASE_URL } from "../../utils/constants.js";
|
|
9
|
+
const logger = getLogger();
|
|
10
|
+
function delayWithUnref(ms) {
|
|
11
|
+
return new Promise((resolve) => {
|
|
12
|
+
const timer = setTimeout(resolve, ms);
|
|
13
|
+
if (typeof timer.unref === "function") {
|
|
14
|
+
timer.unref();
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Fetch metrics from Revenium completions API
|
|
20
|
+
*
|
|
21
|
+
* @param transactionId - The transaction ID to query
|
|
22
|
+
* @param maxRetries - Maximum number of retry attempts
|
|
23
|
+
* @param retryDelay - Milliseconds to wait between retries
|
|
24
|
+
* @returns Completion metrics or null if unavailable
|
|
25
|
+
*/
|
|
26
|
+
async function fetchCompletionMetrics(transactionId, maxRetries = 3, retryDelay = 2000) {
|
|
27
|
+
const config = getConfig();
|
|
28
|
+
if (!config) {
|
|
29
|
+
logger.debug("No config available for summary printing");
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
if (!config.teamId) {
|
|
33
|
+
logger.debug("Team ID not configured, skipping cost retrieval for summary");
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
const baseUrl = (config.reveniumBaseUrl || DEFAULT_REVENIUM_BASE_URL).replace(/\/+$/, "");
|
|
37
|
+
// Note: profitstream API uses a different path structure than the metering API,
|
|
38
|
+
// so we don't use buildReveniumUrl here (which adds /meter/v2 prefix)
|
|
39
|
+
const url = `${baseUrl}/profitstream/v2/api/sources/metrics/ai/completions`;
|
|
40
|
+
const urlWithParams = `${url}?teamId=${encodeURIComponent(config.teamId)}&transactionId=${encodeURIComponent(transactionId)}`;
|
|
41
|
+
logger.debug("Fetching completion metrics", { url: urlWithParams });
|
|
42
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
43
|
+
try {
|
|
44
|
+
const response = await fetch(urlWithParams, {
|
|
45
|
+
method: "GET",
|
|
46
|
+
headers: {
|
|
47
|
+
Accept: "application/json",
|
|
48
|
+
"x-api-key": config.reveniumApiKey,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
// Drain the response body to prevent resource leaks (matches cleanup pattern in sendToRevenium)
|
|
53
|
+
try {
|
|
54
|
+
await response.text();
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Ignore errors when draining the body
|
|
58
|
+
}
|
|
59
|
+
logger.debug(`Completions metrics API returned ${response.status}`, {
|
|
60
|
+
attempt: attempt + 1,
|
|
61
|
+
});
|
|
62
|
+
if (attempt < maxRetries - 1) {
|
|
63
|
+
await delayWithUnref(retryDelay);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const data = (await response.json());
|
|
69
|
+
const completions = data._embedded?.aICompletionMetricResourceList;
|
|
70
|
+
if (completions && completions.length > 0) {
|
|
71
|
+
return completions[0];
|
|
72
|
+
}
|
|
73
|
+
if (attempt < maxRetries - 1) {
|
|
74
|
+
logger.debug(`Waiting for metrics to aggregate (attempt ${attempt + 1}/${maxRetries})...`);
|
|
75
|
+
await delayWithUnref(retryDelay);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
logger.debug("Failed to fetch trace metrics", {
|
|
80
|
+
error: error instanceof Error ? error.message : String(error),
|
|
81
|
+
attempt: attempt + 1,
|
|
82
|
+
});
|
|
83
|
+
if (attempt < maxRetries - 1) {
|
|
84
|
+
await delayWithUnref(retryDelay);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
function isSummaryFormat(value) {
|
|
91
|
+
return value === "human" || value === "json";
|
|
92
|
+
}
|
|
93
|
+
function formatAndPrintJsonSummary(payload, metrics) {
|
|
94
|
+
const config = getConfig();
|
|
95
|
+
const summary = {
|
|
96
|
+
model: payload.model,
|
|
97
|
+
provider: payload.provider,
|
|
98
|
+
durationSeconds: payload.requestDuration / 1000,
|
|
99
|
+
inputTokenCount: payload.inputTokenCount,
|
|
100
|
+
outputTokenCount: payload.outputTokenCount,
|
|
101
|
+
totalTokenCount: payload.totalTokenCount,
|
|
102
|
+
cost: typeof metrics?.totalCost === "number" ? metrics.totalCost : null,
|
|
103
|
+
};
|
|
104
|
+
if (summary.cost === null) {
|
|
105
|
+
summary.costStatus = config?.teamId ? "pending" : "unavailable";
|
|
106
|
+
}
|
|
107
|
+
if (payload.traceId) {
|
|
108
|
+
summary.traceId = payload.traceId;
|
|
109
|
+
}
|
|
110
|
+
console.log(JSON.stringify(summary));
|
|
111
|
+
}
|
|
112
|
+
function formatAndPrintHumanSummary(payload, metrics) {
|
|
113
|
+
console.log("\n" + "=".repeat(60));
|
|
114
|
+
console.log("📊 REVENIUM USAGE SUMMARY");
|
|
115
|
+
console.log("=".repeat(60));
|
|
116
|
+
console.log(`🤖 Model: ${payload.model}`);
|
|
117
|
+
console.log(`🏢 Provider: ${payload.provider}`);
|
|
118
|
+
console.log(`⏱️ Duration: ${(payload.requestDuration / 1000).toFixed(2)}s`);
|
|
119
|
+
console.log("\n💬 Token Usage:");
|
|
120
|
+
console.log(` 📥 Input Tokens: ${(payload.inputTokenCount ?? 0).toLocaleString()}`);
|
|
121
|
+
console.log(` 📤 Output Tokens: ${(payload.outputTokenCount ?? 0).toLocaleString()}`);
|
|
122
|
+
console.log(` 📊 Total Tokens: ${(payload.totalTokenCount ?? 0).toLocaleString()}`);
|
|
123
|
+
if (typeof metrics?.totalCost === "number") {
|
|
124
|
+
console.log(`\n💰 Cost: $${metrics.totalCost.toFixed(6)}`);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
const config = getConfig();
|
|
128
|
+
if (!config?.teamId) {
|
|
129
|
+
console.log(`\n💰 Cost: Set REVENIUM_TEAM_ID in .env to see pricing`);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
console.log(`\n💰 Cost: (pending aggregation)`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (payload.traceId) {
|
|
136
|
+
console.log(`\n🔖 Trace ID: ${payload.traceId}`);
|
|
137
|
+
}
|
|
138
|
+
console.log("=".repeat(60) + "\n");
|
|
139
|
+
}
|
|
140
|
+
function formatAndPrintSummary(payload, metrics, format) {
|
|
141
|
+
if (format === "json") {
|
|
142
|
+
formatAndPrintJsonSummary(payload, metrics);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
formatAndPrintHumanSummary(payload, metrics);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function safeFormatAndPrintSummary(payload, metrics, format) {
|
|
149
|
+
try {
|
|
150
|
+
formatAndPrintSummary(payload, metrics, format);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
logger.debug("Failed to format and print summary", {
|
|
154
|
+
error: error instanceof Error ? error.message : String(error),
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function getSummaryFormat(value) {
|
|
159
|
+
if (!value)
|
|
160
|
+
return null;
|
|
161
|
+
if (value === true)
|
|
162
|
+
return "human";
|
|
163
|
+
if (isSummaryFormat(value)) {
|
|
164
|
+
return value;
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
export function printUsageSummary(payload) {
|
|
169
|
+
const config = getConfig();
|
|
170
|
+
const format = getSummaryFormat(config?.printSummary);
|
|
171
|
+
if (!format) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
if (config?.teamId && payload.transactionId) {
|
|
175
|
+
fetchCompletionMetrics(payload.transactionId)
|
|
176
|
+
.then((metrics) => {
|
|
177
|
+
safeFormatAndPrintSummary(payload, metrics, format);
|
|
178
|
+
})
|
|
179
|
+
.catch((error) => {
|
|
180
|
+
logger.debug("Failed to print usage summary with metrics", {
|
|
181
|
+
error: error instanceof Error ? error.message : String(error),
|
|
182
|
+
});
|
|
183
|
+
safeFormatAndPrintSummary(payload, null, format);
|
|
184
|
+
})
|
|
185
|
+
.catch(() => {
|
|
186
|
+
// Final safety catch to prevent unhandled rejections
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
safeFormatAndPrintSummary(payload, null, format);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=summary-printer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary-printer.js","sourceRoot":"","sources":["../../../../src/core/tracking/summary-printer.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { getLogger } from "../config";
|
|
|
8
8
|
import { sendToRevenium } from "./api-client.js";
|
|
9
9
|
import { buildPayload } from "./payload-builder.js";
|
|
10
10
|
import { safeAsyncOperation } from "../../utils/error-handler.js";
|
|
11
|
+
import { printUsageSummary } from "./summary-printer.js";
|
|
11
12
|
// Global logger
|
|
12
13
|
const logger = getLogger();
|
|
13
14
|
/**
|
|
@@ -15,8 +16,15 @@ const logger = getLogger();
|
|
|
15
16
|
*/
|
|
16
17
|
export async function sendReveniumMetrics(response, request, startTime, duration, providerInfo) {
|
|
17
18
|
await safeAsyncOperation(async () => {
|
|
18
|
-
const payload = buildPayload("CHAT", response, request, startTime, duration, providerInfo);
|
|
19
|
-
|
|
19
|
+
const payload = await buildPayload("CHAT", response, request, startTime, duration, providerInfo);
|
|
20
|
+
try {
|
|
21
|
+
await sendToRevenium(payload);
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
// Print summary regardless of whether sendToRevenium succeeded or failed
|
|
25
|
+
// This ensures local visibility even when tracking delivery fails
|
|
26
|
+
printUsageSummary(payload);
|
|
27
|
+
}
|
|
20
28
|
}, "Chat completion tracking", {
|
|
21
29
|
logError: true,
|
|
22
30
|
rethrow: false, // Don't rethrow to maintain fire-and-forget behavior
|
|
@@ -28,8 +36,15 @@ export async function sendReveniumMetrics(response, request, startTime, duration
|
|
|
28
36
|
*/
|
|
29
37
|
export async function sendReveniumEmbeddingsMetrics(response, request, startTime, duration, providerInfo) {
|
|
30
38
|
await safeAsyncOperation(async () => {
|
|
31
|
-
const payload = buildPayload("EMBED", response, request, startTime, duration, providerInfo);
|
|
32
|
-
|
|
39
|
+
const payload = await buildPayload("EMBED", response, request, startTime, duration, providerInfo);
|
|
40
|
+
try {
|
|
41
|
+
await sendToRevenium(payload);
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
// Print summary regardless of whether sendToRevenium succeeded or failed
|
|
45
|
+
// This ensures local visibility even when tracking delivery fails
|
|
46
|
+
printUsageSummary(payload);
|
|
47
|
+
}
|
|
33
48
|
}, "Embeddings tracking", {
|
|
34
49
|
logError: true,
|
|
35
50
|
rethrow: false, // Don't rethrow to maintain fire-and-forget behavior
|
|
@@ -57,12 +72,15 @@ export function trackUsageAsync(trackingData) {
|
|
|
57
72
|
choices: [
|
|
58
73
|
{
|
|
59
74
|
finish_reason: trackingData.finishReason,
|
|
75
|
+
...(trackingData.responseContent && {
|
|
76
|
+
message: { content: trackingData.responseContent, role: "assistant" },
|
|
77
|
+
}),
|
|
60
78
|
},
|
|
61
79
|
],
|
|
62
80
|
};
|
|
63
81
|
const mockRequest = {
|
|
64
82
|
model: trackingData.model,
|
|
65
|
-
messages: [],
|
|
83
|
+
messages: trackingData.messages || [],
|
|
66
84
|
usageMetadata: trackingData.usageMetadata,
|
|
67
85
|
stream: trackingData.isStreamed,
|
|
68
86
|
};
|
|
@@ -128,7 +146,14 @@ export async function trackImageUsageAsync(operationSubtype, response, request,
|
|
|
128
146
|
.then(async () => {
|
|
129
147
|
const { buildImagePayload } = await import("./payload-builder.js");
|
|
130
148
|
const payload = buildImagePayload(operationSubtype, response, request, startTime, duration, providerInfo, metadata);
|
|
131
|
-
|
|
149
|
+
try {
|
|
150
|
+
await sendToRevenium(payload);
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
// Print summary regardless of whether sendToRevenium succeeded or failed
|
|
154
|
+
// This ensures local visibility even when tracking delivery fails
|
|
155
|
+
printUsageSummary(payload);
|
|
156
|
+
}
|
|
132
157
|
})
|
|
133
158
|
.then(() => {
|
|
134
159
|
logger.debug("Image tracking completed successfully", {
|
|
@@ -155,7 +180,14 @@ export async function trackAudioUsageAsync(operationSubtype, response, request,
|
|
|
155
180
|
.then(async () => {
|
|
156
181
|
const { buildAudioPayload } = await import("./payload-builder.js");
|
|
157
182
|
const payload = buildAudioPayload(operationSubtype, response, request, startTime, duration, providerInfo, metadata);
|
|
158
|
-
|
|
183
|
+
try {
|
|
184
|
+
await sendToRevenium(payload);
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
// Print summary regardless of whether sendToRevenium succeeded or failed
|
|
188
|
+
// This ensures local visibility even when tracking delivery fails
|
|
189
|
+
printUsageSummary(payload);
|
|
190
|
+
}
|
|
159
191
|
})
|
|
160
192
|
.then(() => {
|
|
161
193
|
logger.debug("Audio tracking completed successfully", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../../../src/core/tracking/usage-tracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../../../src/core/tracking/usage-tracker.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;AAoFnC;;;;;GAKG;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"}
|