@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
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { getConfig } from "../core/config/index.js";
|
|
2
|
+
const DEFAULT_MAX_PROMPT_SIZE = 50000;
|
|
3
|
+
const CAPTURE_PROMPTS_DEFAULT = false;
|
|
4
|
+
export function getMaxPromptSize() {
|
|
5
|
+
const config = getConfig();
|
|
6
|
+
if (config?.maxPromptSize && config.maxPromptSize > 0) {
|
|
7
|
+
return config.maxPromptSize;
|
|
8
|
+
}
|
|
9
|
+
const envValue = process.env.REVENIUM_MAX_PROMPT_SIZE;
|
|
10
|
+
if (envValue) {
|
|
11
|
+
const parsed = parseInt(envValue, 10);
|
|
12
|
+
if (!isNaN(parsed) && parsed > 0) {
|
|
13
|
+
return parsed;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return DEFAULT_MAX_PROMPT_SIZE;
|
|
17
|
+
}
|
|
18
|
+
function contentBlocksToString(blocks) {
|
|
19
|
+
return blocks
|
|
20
|
+
.map((block) => {
|
|
21
|
+
if (block.type === "text" && block.text) {
|
|
22
|
+
return block.text;
|
|
23
|
+
}
|
|
24
|
+
if (block.type === "image_url") {
|
|
25
|
+
return "[IMAGE]";
|
|
26
|
+
}
|
|
27
|
+
return "";
|
|
28
|
+
})
|
|
29
|
+
.filter(Boolean)
|
|
30
|
+
.join("\n");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Sanitizes common credential patterns from text.
|
|
34
|
+
*
|
|
35
|
+
* Redacts the following credential types:
|
|
36
|
+
* - OpenAI keys: sk-*, sk-proj-*, sk-ant-* (20+ chars)
|
|
37
|
+
* - Perplexity keys: pplx-* (20+ chars)
|
|
38
|
+
* - AWS access keys: AKIA* (20 chars)
|
|
39
|
+
* - GitHub tokens: ghp_*, ghs_* (36+ chars)
|
|
40
|
+
* - JWT tokens: eyJ*.eyJ*.*
|
|
41
|
+
* - Bearer tokens
|
|
42
|
+
* - Generic API keys, tokens, passwords, secrets (8-20+ chars)
|
|
43
|
+
*
|
|
44
|
+
* LIMITATIONS:
|
|
45
|
+
* - Shorter credentials may pass through unsanitized
|
|
46
|
+
* - Length constraints balance security with false positive prevention
|
|
47
|
+
*/
|
|
48
|
+
export function sanitizeCredentials(text) {
|
|
49
|
+
const patterns = [
|
|
50
|
+
{
|
|
51
|
+
regex: /pplx-[a-zA-Z0-9_-]{20,}/g,
|
|
52
|
+
replacement: "pplx-***REDACTED***",
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
regex: /sk-proj-[a-zA-Z0-9_-]{48,}/g,
|
|
56
|
+
replacement: "sk-proj-***REDACTED***",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
regex: /sk-ant-[a-zA-Z0-9_-]{20,}/g,
|
|
60
|
+
replacement: "sk-ant-***REDACTED***",
|
|
61
|
+
},
|
|
62
|
+
{ regex: /sk-[a-zA-Z0-9_-]{20,}/g, replacement: "sk-***REDACTED***" },
|
|
63
|
+
{
|
|
64
|
+
regex: /AKIA[A-Z0-9]{16}/g,
|
|
65
|
+
replacement: "AKIA***REDACTED***",
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
regex: /ghp_[a-zA-Z0-9]{36,}/g,
|
|
69
|
+
replacement: "ghp_***REDACTED***",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
regex: /ghs_[a-zA-Z0-9]{36,}/g,
|
|
73
|
+
replacement: "ghs_***REDACTED***",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
regex: /eyJ[a-zA-Z0-9_-]+\.eyJ[a-zA-Z0-9_-]+\.[a-zA-Z0-9_-]+/g,
|
|
77
|
+
replacement: "***REDACTED_JWT***",
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
regex: /Bearer\s+[a-zA-Z0-9_\-.+\/=]+/gi,
|
|
81
|
+
replacement: "Bearer ***REDACTED***",
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
regex: /api[_-]?key["'\s:=]+[a-zA-Z0-9_\-.+\/=]{20,}/gi,
|
|
85
|
+
replacement: "api_key: ***REDACTED***",
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
regex: /token["'\s:=]+[a-zA-Z0-9_\-.+\/=]{20,}/gi,
|
|
89
|
+
replacement: "token: ***REDACTED***",
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
regex: /password["'\s:=]+["']?([^"'\s]{8,})["']?/gi,
|
|
93
|
+
replacement: "password: ***REDACTED***",
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
regex: /secret["'\s:=]+["']?([^"'\s]{8,})["']?/gi,
|
|
97
|
+
replacement: "secret: ***REDACTED***",
|
|
98
|
+
},
|
|
99
|
+
];
|
|
100
|
+
let sanitized = text;
|
|
101
|
+
for (const pattern of patterns) {
|
|
102
|
+
sanitized = sanitized.replace(pattern.regex, pattern.replacement);
|
|
103
|
+
}
|
|
104
|
+
return sanitized;
|
|
105
|
+
}
|
|
106
|
+
function truncateString(str, maxLength) {
|
|
107
|
+
if (!str || str.length === 0) {
|
|
108
|
+
return { value: "", truncated: false };
|
|
109
|
+
}
|
|
110
|
+
const sanitized = sanitizeCredentials(str);
|
|
111
|
+
if (sanitized.length <= maxLength) {
|
|
112
|
+
return { value: sanitized, truncated: false };
|
|
113
|
+
}
|
|
114
|
+
return { value: sanitized.substring(0, maxLength), truncated: true };
|
|
115
|
+
}
|
|
116
|
+
function hasValidMessages(params) {
|
|
117
|
+
return !!(params.messages && Array.isArray(params.messages));
|
|
118
|
+
}
|
|
119
|
+
function extractSystemPrompt(params) {
|
|
120
|
+
if (!hasValidMessages(params)) {
|
|
121
|
+
return "";
|
|
122
|
+
}
|
|
123
|
+
const systemMessages = params.messages
|
|
124
|
+
.filter((msg) => msg.role === "system")
|
|
125
|
+
.map((msg) => {
|
|
126
|
+
const content = msg.content;
|
|
127
|
+
if (typeof content === "string") {
|
|
128
|
+
return content;
|
|
129
|
+
}
|
|
130
|
+
if (Array.isArray(content)) {
|
|
131
|
+
return contentBlocksToString(content);
|
|
132
|
+
}
|
|
133
|
+
return "";
|
|
134
|
+
})
|
|
135
|
+
.filter(Boolean);
|
|
136
|
+
return systemMessages.join("\n\n");
|
|
137
|
+
}
|
|
138
|
+
function extractInputMessages(params) {
|
|
139
|
+
if (!hasValidMessages(params)) {
|
|
140
|
+
return "";
|
|
141
|
+
}
|
|
142
|
+
return params.messages
|
|
143
|
+
.filter((msg) => msg.role !== "system")
|
|
144
|
+
.map((message) => {
|
|
145
|
+
const role = message.role;
|
|
146
|
+
let content = "";
|
|
147
|
+
const msgContent = message.content;
|
|
148
|
+
if (typeof msgContent === "string") {
|
|
149
|
+
content = msgContent;
|
|
150
|
+
}
|
|
151
|
+
else if (Array.isArray(msgContent)) {
|
|
152
|
+
content = contentBlocksToString(msgContent);
|
|
153
|
+
}
|
|
154
|
+
return `[${role}]\n${content}`;
|
|
155
|
+
})
|
|
156
|
+
.join("\n\n");
|
|
157
|
+
}
|
|
158
|
+
function extractOutputResponse(response) {
|
|
159
|
+
if (!response.choices || response.choices.length === 0) {
|
|
160
|
+
return "";
|
|
161
|
+
}
|
|
162
|
+
const choice = response.choices[0];
|
|
163
|
+
const parts = [];
|
|
164
|
+
if (choice.message?.content) {
|
|
165
|
+
parts.push(choice.message.content);
|
|
166
|
+
}
|
|
167
|
+
if (choice.delta?.content) {
|
|
168
|
+
parts.push(choice.delta.content);
|
|
169
|
+
}
|
|
170
|
+
const message = choice.message;
|
|
171
|
+
if (message?.tool_calls && Array.isArray(message.tool_calls)) {
|
|
172
|
+
message.tool_calls.forEach((toolCall) => {
|
|
173
|
+
if (toolCall.function?.name) {
|
|
174
|
+
parts.push(`[TOOL_USE: ${toolCall.function.name}]`);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
if (message?.function_call?.name) {
|
|
179
|
+
parts.push(`[FUNCTION_CALL: ${message.function_call.name}]`);
|
|
180
|
+
}
|
|
181
|
+
return parts.join("\n");
|
|
182
|
+
}
|
|
183
|
+
export function shouldCapturePrompts(metadata) {
|
|
184
|
+
if (metadata?.capturePrompts !== undefined) {
|
|
185
|
+
return metadata.capturePrompts;
|
|
186
|
+
}
|
|
187
|
+
const config = getConfig();
|
|
188
|
+
if (config?.capturePrompts !== undefined) {
|
|
189
|
+
return config.capturePrompts;
|
|
190
|
+
}
|
|
191
|
+
const envValue = process.env.REVENIUM_CAPTURE_PROMPTS;
|
|
192
|
+
if (envValue !== undefined) {
|
|
193
|
+
return envValue.toLowerCase() === "true";
|
|
194
|
+
}
|
|
195
|
+
return CAPTURE_PROMPTS_DEFAULT;
|
|
196
|
+
}
|
|
197
|
+
export function extractPrompts(params, response, metadata) {
|
|
198
|
+
if (!shouldCapturePrompts(metadata)) {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
const maxSize = getMaxPromptSize();
|
|
202
|
+
let anyTruncated = false;
|
|
203
|
+
const systemPromptRaw = extractSystemPrompt(params);
|
|
204
|
+
const systemPromptResult = truncateString(systemPromptRaw, maxSize);
|
|
205
|
+
anyTruncated = anyTruncated || systemPromptResult.truncated;
|
|
206
|
+
const inputMessagesRaw = extractInputMessages(params);
|
|
207
|
+
const inputMessagesResult = truncateString(inputMessagesRaw, maxSize);
|
|
208
|
+
anyTruncated = anyTruncated || inputMessagesResult.truncated;
|
|
209
|
+
const outputResponseRaw = extractOutputResponse(response);
|
|
210
|
+
const outputResponseResult = truncateString(outputResponseRaw, maxSize);
|
|
211
|
+
anyTruncated = anyTruncated || outputResponseResult.truncated;
|
|
212
|
+
const hasAnyContent = systemPromptResult.value ||
|
|
213
|
+
inputMessagesResult.value ||
|
|
214
|
+
outputResponseResult.value;
|
|
215
|
+
if (!hasAnyContent) {
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
return {
|
|
219
|
+
systemPrompt: systemPromptResult.value || undefined,
|
|
220
|
+
inputMessages: inputMessagesResult.value || undefined,
|
|
221
|
+
outputResponse: outputResponseResult.value || undefined,
|
|
222
|
+
promptsTruncated: anyTruncated,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=prompt-extraction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-extraction.js","sourceRoot":"","sources":["../../../src/utils/prompt-extraction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../src/core/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../src/core/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AAwDzE;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,GAAG,IAAI,CA+BzD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,WAAW,GAAG,IAAI,CAc3D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAI7C"}
|
|
@@ -20,7 +20,10 @@ export declare class StreamingWrapper implements AsyncIterable<OpenAI.ChatComple
|
|
|
20
20
|
private firstTokenTime?;
|
|
21
21
|
private requestId;
|
|
22
22
|
private usage;
|
|
23
|
-
|
|
23
|
+
private messages;
|
|
24
|
+
private accumulatedContent;
|
|
25
|
+
constructor(stream: AsyncIterable<OpenAI.ChatCompletionChunk>, config: Config, providerInfo: ProviderInfo, model: string, messages: any[], metadata?: UsageMetadata);
|
|
26
|
+
private buildTrackingPayload;
|
|
24
27
|
[Symbol.asyncIterator](): AsyncIterator<OpenAI.ChatCompletionChunk>;
|
|
25
28
|
}
|
|
26
29
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/core/middleware/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQlE,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../../src/core/middleware/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,5 +7,6 @@
|
|
|
7
7
|
export { sendToRevenium } from "./api-client.js";
|
|
8
8
|
export { buildPayload, buildImagePayload, buildAudioPayload, } from "./payload-builder.js";
|
|
9
9
|
export { sendReveniumMetrics, sendReveniumEmbeddingsMetrics, trackUsageAsync, trackEmbeddingsUsageAsync, trackImageUsageAsync, trackAudioUsageAsync, } from "./usage-tracker.js";
|
|
10
|
+
export { printUsageSummary } from "./summary-printer.js";
|
|
10
11
|
export { mapStopReason } from "../../utils/stop-reason-mapper.js";
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/tracking/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,eAAe,EACf,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/tracking/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,eAAe,EACf,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC"}
|
|
@@ -20,7 +20,7 @@ import { OpenAIChatResponse, OpenAIEmbeddingResponse, OpenAIChatRequest, OpenAIE
|
|
|
20
20
|
* @param providerInfo - Provider information for Azure support
|
|
21
21
|
* @returns Constructed payload for Revenium API
|
|
22
22
|
*/
|
|
23
|
-
export declare function buildPayload(operationType: "CHAT" | "EMBED", response: OpenAIChatResponse | OpenAIEmbeddingResponse, request: OpenAIChatRequest | OpenAIEmbeddingRequest, startTime: number, duration: number, providerInfo?: ProviderInfo): ReveniumPayload
|
|
23
|
+
export declare function buildPayload(operationType: "CHAT" | "EMBED", response: OpenAIChatResponse | OpenAIEmbeddingResponse, request: OpenAIChatRequest | OpenAIEmbeddingRequest, startTime: number, duration: number, providerInfo?: ProviderInfo): Promise<ReveniumPayload>;
|
|
24
24
|
export declare function buildImagePayload(operationSubtype: "generation" | "edit" | "variation", response: any, request: any, startTime: number, duration: number, providerInfo?: ProviderInfo, usageMetadata?: any): ReveniumPayload;
|
|
25
25
|
export declare function buildAudioPayload(operationSubtype: "transcription" | "translation" | "speech_synthesis", response: any, request: any, startTime: number, duration: number, providerInfo?: ProviderInfo, usageMetadata?: any): ReveniumPayload;
|
|
26
26
|
//# sourceMappingURL=payload-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-builder.d.ts","sourceRoot":"","sources":["../../../../src/core/tracking/payload-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"payload-builder.d.ts","sourceRoot":"","sources":["../../../../src/core/tracking/payload-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,oCAAoC,CAAC;AAqB5C;;;;;;;;;;;;;GAaG;AACH,wBAAsB,YAAY,CAChC,aAAa,EAAE,MAAM,GAAG,OAAO,EAC/B,QAAQ,EAAE,kBAAkB,GAAG,uBAAuB,EACtD,OAAO,EAAE,iBAAiB,GAAG,sBAAsB,EACnD,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,eAAe,CAAC,CA2I1B;AAED,wBAAgB,iBAAiB,CAC/B,gBAAgB,EAAE,YAAY,GAAG,MAAM,GAAG,WAAW,EACrD,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,YAAY,EAC3B,aAAa,CAAC,EAAE,GAAG,GAClB,eAAe,CAgEjB;AAED,wBAAgB,iBAAiB,CAC/B,gBAAgB,EAAE,eAAe,GAAG,aAAa,GAAG,kBAAkB,EACtE,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,YAAY,EAC3B,aAAa,CAAC,EAAE,GAAG,GAClB,eAAe,CAsEjB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
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 { ReveniumPayload } from "../../types";
|
|
8
|
+
export declare function printUsageSummary(payload: ReveniumPayload): void;
|
|
9
|
+
//# sourceMappingURL=summary-printer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summary-printer.d.ts","sourceRoot":"","sources":["../../../../src/core/tracking/summary-printer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAiB,MAAM,aAAa,CAAC;AA4P7D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAyBhE"}
|
|
@@ -31,6 +31,8 @@ export declare function trackUsageAsync(trackingData: {
|
|
|
31
31
|
isStreamed?: boolean;
|
|
32
32
|
timeToFirstToken?: number;
|
|
33
33
|
providerInfo?: ProviderInfo;
|
|
34
|
+
messages?: any[];
|
|
35
|
+
responseContent?: string;
|
|
34
36
|
}): void;
|
|
35
37
|
/**
|
|
36
38
|
* Fire-and-forget wrapper for embeddings with Azure support
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../../../../src/core/tracking/usage-tracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"usage-tracker.d.ts","sourceRoot":"","sources":["../../../../src/core/tracking/usage-tracker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,oCAAoC,CAAC;AAU5C;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;GAEG;AACH,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,uBAAuB,EACjC,OAAO,EAAE,sBAAsB,EAC/B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,IAAI,CAwDP;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,GAAG,IAAI,CAmCP;AAED,wBAAsB,oBAAoB,CACxC,gBAAgB,EAAE,YAAY,GAAG,MAAM,GAAG,WAAW,EACrD,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,EACX,YAAY,EAAE,YAAY,EAC1B,QAAQ,CAAC,EAAE,aAAa,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED,wBAAsB,oBAAoB,CACxC,gBAAgB,EAAE,eAAe,GAAG,aAAa,GAAG,kBAAkB,EACtE,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,GAAG,EACX,YAAY,EAAE,YAAY,EAC1B,QAAQ,CAAC,EAAE,aAAa,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
|
|
@@ -56,6 +56,8 @@ export interface UsageMetadata {
|
|
|
56
56
|
responseQualityScore?: number;
|
|
57
57
|
/** Agent or model variant identifier for A/B testing and performance tracking */
|
|
58
58
|
agent?: string;
|
|
59
|
+
/** Per-call override for prompt capture (overrides environment variable and config) */
|
|
60
|
+
capturePrompts?: boolean;
|
|
59
61
|
}
|
|
60
62
|
/**
|
|
61
63
|
* Provider information for tracking API source
|
|
@@ -104,6 +106,12 @@ export interface AzureConfig {
|
|
|
104
106
|
/** Azure OpenAI API version */
|
|
105
107
|
apiVersion?: string;
|
|
106
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Summary output format options
|
|
111
|
+
* - 'human': Human-readable formatted output with emojis (default when enabled)
|
|
112
|
+
* - 'json': JSON formatted output for automation/parsing
|
|
113
|
+
*/
|
|
114
|
+
export type SummaryFormat = "human" | "json";
|
|
107
115
|
/**
|
|
108
116
|
* Revenium configuration interface
|
|
109
117
|
*
|
|
@@ -123,6 +131,19 @@ export interface ReveniumConfig {
|
|
|
123
131
|
azure?: AzureConfig;
|
|
124
132
|
/** OpenAI API key (optional, can be set via environment variable) */
|
|
125
133
|
openaiApiKey?: string;
|
|
134
|
+
/**
|
|
135
|
+
* Enable cost/metrics summary output to terminal after each API request.
|
|
136
|
+
* - true or 'human': Human-readable format with emojis
|
|
137
|
+
* - 'json': JSON format for automation
|
|
138
|
+
* - false: Disabled (default)
|
|
139
|
+
*/
|
|
140
|
+
printSummary?: boolean | SummaryFormat;
|
|
141
|
+
/** Revenium team ID for fetching cost metrics from the API. If not provided, the summary will still be printed but without cost information. */
|
|
142
|
+
teamId?: string;
|
|
143
|
+
/** Whether to capture and send prompts to Revenium API (default: false) */
|
|
144
|
+
capturePrompts?: boolean;
|
|
145
|
+
/** Maximum size in characters for captured prompts before truncation (default: 50000). Note: uses JavaScript string length (UTF-16 code units), not byte count. */
|
|
146
|
+
maxPromptSize?: number;
|
|
126
147
|
}
|
|
127
148
|
/**
|
|
128
149
|
* Alias for ReveniumConfig for internal use
|
|
@@ -188,6 +209,19 @@ export interface ReveniumPayload {
|
|
|
188
209
|
inputAudioTokenCount?: number;
|
|
189
210
|
outputAudioTokenCount?: number;
|
|
190
211
|
attributes?: Record<string, unknown>;
|
|
212
|
+
environment?: string;
|
|
213
|
+
operationSubtype?: string;
|
|
214
|
+
retryNumber?: number;
|
|
215
|
+
parentTransactionId?: string;
|
|
216
|
+
transactionName?: string;
|
|
217
|
+
region?: string;
|
|
218
|
+
credentialAlias?: string;
|
|
219
|
+
traceType?: string;
|
|
220
|
+
traceName?: string;
|
|
221
|
+
systemPrompt?: string;
|
|
222
|
+
inputMessages?: string;
|
|
223
|
+
outputResponse?: string;
|
|
224
|
+
promptsTruncated?: boolean;
|
|
191
225
|
}
|
|
192
226
|
export interface ImageAttributes {
|
|
193
227
|
billing_unit: "per_image";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,cAAc,0BAA0B,CAAC;AAGzC,cAAc,oBAAoB,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,gDAAgD;IAChD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yEAAyE;IACzE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { UsageMetadata } from "../types/index.js";
|
|
2
|
+
import { OpenAIChatRequest, OpenAIChatResponse } from "../types/function-parameters.js";
|
|
3
|
+
export declare function getMaxPromptSize(): number;
|
|
4
|
+
export interface PromptData {
|
|
5
|
+
systemPrompt?: string;
|
|
6
|
+
inputMessages?: string;
|
|
7
|
+
outputResponse?: string;
|
|
8
|
+
promptsTruncated: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Sanitizes common credential patterns from text.
|
|
12
|
+
*
|
|
13
|
+
* Redacts the following credential types:
|
|
14
|
+
* - OpenAI keys: sk-*, sk-proj-*, sk-ant-* (20+ chars)
|
|
15
|
+
* - Perplexity keys: pplx-* (20+ chars)
|
|
16
|
+
* - AWS access keys: AKIA* (20 chars)
|
|
17
|
+
* - GitHub tokens: ghp_*, ghs_* (36+ chars)
|
|
18
|
+
* - JWT tokens: eyJ*.eyJ*.*
|
|
19
|
+
* - Bearer tokens
|
|
20
|
+
* - Generic API keys, tokens, passwords, secrets (8-20+ chars)
|
|
21
|
+
*
|
|
22
|
+
* LIMITATIONS:
|
|
23
|
+
* - Shorter credentials may pass through unsanitized
|
|
24
|
+
* - Length constraints balance security with false positive prevention
|
|
25
|
+
*/
|
|
26
|
+
export declare function sanitizeCredentials(text: string): string;
|
|
27
|
+
export declare function shouldCapturePrompts(metadata?: UsageMetadata): boolean;
|
|
28
|
+
export declare function extractPrompts(params: OpenAIChatRequest, response: OpenAIChatResponse, metadata?: UsageMetadata): PromptData | null;
|
|
29
|
+
//# sourceMappingURL=prompt-extraction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-extraction.d.ts","sourceRoot":"","sources":["../../../src/utils/prompt-extraction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AAMzC,wBAAgB,gBAAgB,IAAI,MAAM,CAezC;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAwCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0DxD;AAmGD,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,aAAa,GAAG,OAAO,CAgBtE;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,iBAAiB,EACzB,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,CAAC,EAAE,aAAa,GACvB,UAAU,GAAG,IAAI,CAmCnB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
import { configure } from "../../src/index.js";
|
|
3
|
+
|
|
4
|
+
async function main() {
|
|
5
|
+
console.log("=== OpenAI Prompt Capture Example ===\n");
|
|
6
|
+
|
|
7
|
+
configure({
|
|
8
|
+
reveniumApiKey: process.env.REVENIUM_METERING_API_KEY || "test-key",
|
|
9
|
+
reveniumBaseUrl: process.env.REVENIUM_METERING_BASE_URL,
|
|
10
|
+
capturePrompts: true,
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const openai = new OpenAI({
|
|
14
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
console.log("Example 1: Prompt capture enabled via config");
|
|
18
|
+
console.log("Making request with prompt capture enabled...\n");
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
const response = await openai.chat.completions.create({
|
|
22
|
+
model: "gpt-4o-mini",
|
|
23
|
+
max_tokens: 100,
|
|
24
|
+
messages: [
|
|
25
|
+
{
|
|
26
|
+
role: "system",
|
|
27
|
+
content: "You are a helpful assistant that provides concise answers.",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
role: "user",
|
|
31
|
+
content: "What is the capital of France?",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
usageMetadata: {
|
|
35
|
+
organizationId: "org-prompt-capture-demo",
|
|
36
|
+
productId: "prod-openai-prompt-capture",
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
console.log("Response:", response.choices[0]?.message?.content);
|
|
41
|
+
console.log("\nPrompts captured and sent to Revenium API!");
|
|
42
|
+
} catch (error) {
|
|
43
|
+
console.error(
|
|
44
|
+
"Error:",
|
|
45
|
+
error instanceof Error ? error.message : String(error)
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
console.log("\n" + "=".repeat(50) + "\n");
|
|
50
|
+
console.log("Example 2: Prompt capture disabled via metadata override");
|
|
51
|
+
console.log("Making request with prompt capture disabled...\n");
|
|
52
|
+
|
|
53
|
+
try {
|
|
54
|
+
const response2 = await openai.chat.completions.create({
|
|
55
|
+
model: "gpt-4o-mini",
|
|
56
|
+
max_tokens: 100,
|
|
57
|
+
messages: [
|
|
58
|
+
{
|
|
59
|
+
role: "system",
|
|
60
|
+
content: "You are a helpful assistant.",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
role: "user",
|
|
64
|
+
content: "What is 2+2?",
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
usageMetadata: {
|
|
68
|
+
organizationId: "org-prompt-capture-demo",
|
|
69
|
+
productId: "prod-openai-prompt-capture",
|
|
70
|
+
capturePrompts: false,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
console.log("Response:", response2.choices[0]?.message?.content);
|
|
75
|
+
console.log("\nPrompts NOT captured (overridden via metadata)!");
|
|
76
|
+
} catch (error) {
|
|
77
|
+
console.error(
|
|
78
|
+
"Error:",
|
|
79
|
+
error instanceof Error ? error.message : String(error)
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
console.log("\n" + "=".repeat(50) + "\n");
|
|
84
|
+
console.log("Example 3: Prompt capture with environment variable");
|
|
85
|
+
console.log("Set REVENIUM_CAPTURE_PROMPTS=true in your .env file\n");
|
|
86
|
+
|
|
87
|
+
console.log("Prompt capture examples completed!");
|
|
88
|
+
console.log("\nConfiguration hierarchy:");
|
|
89
|
+
console.log("1. Per-call metadata (highest priority)");
|
|
90
|
+
console.log("2. Global config");
|
|
91
|
+
console.log("3. Environment variable REVENIUM_CAPTURE_PROMPTS");
|
|
92
|
+
console.log("4. Default: false (lowest priority)");
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
main().catch(console.error);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@revenium/openai",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Transparent TypeScript middleware for automatic Revenium usage tracking with OpenAI",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -25,6 +25,13 @@
|
|
|
25
25
|
"dev": "tsc --watch",
|
|
26
26
|
"clean": "node -e \"const fs = require('fs'); if (fs.existsSync('dist')) fs.rmSync('dist', {recursive: true, force: true})\"",
|
|
27
27
|
"prepublishOnly": "npm run clean && npm run build",
|
|
28
|
+
"test": "jest",
|
|
29
|
+
"test:unit": "jest --testPathPatterns=tests/unit",
|
|
30
|
+
"test:integration": "jest --testPathPatterns=tests/integration --passWithNoTests",
|
|
31
|
+
"test:performance": "jest --testPathPatterns=tests/performance --passWithNoTests",
|
|
32
|
+
"test:watch": "jest --watch",
|
|
33
|
+
"test:coverage": "jest --coverage",
|
|
34
|
+
"test:e2e": "jest --testPathPatterns=tests/integration/trace-fields.test.ts",
|
|
28
35
|
"example:getting-started": "npm run build && npx tsx examples/getting_started.ts",
|
|
29
36
|
"example:openai-basic": "npm run build && npx tsx examples/openai/basic.ts",
|
|
30
37
|
"example:openai-metadata": "npm run build && npx tsx examples/openai/metadata.ts",
|
|
@@ -59,9 +66,13 @@
|
|
|
59
66
|
"url": "https://github.com/revenium/revenium-middleware-openai-node/issues"
|
|
60
67
|
},
|
|
61
68
|
"devDependencies": {
|
|
69
|
+
"@jest/globals": "^30.2.0",
|
|
70
|
+
"@types/jest": "^30.0.0",
|
|
62
71
|
"@types/node": "^20.0.0",
|
|
63
72
|
"dotenv": "^16.5.0",
|
|
73
|
+
"jest": "^30.2.0",
|
|
64
74
|
"rimraf": "^6.0.1",
|
|
75
|
+
"ts-jest": "^29.4.6",
|
|
65
76
|
"ts-node": "^10.9.2",
|
|
66
77
|
"tsx": "^4.20.6",
|
|
67
78
|
"typescript": "^5.0.0"
|