@frugalco/frugal-sdk-node 0.2.0 → 0.4.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/README.md +21 -10
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +130 -4
- package/dist/config.js.map +1 -1
- package/dist/duplicate-filter.d.ts +46 -0
- package/dist/duplicate-filter.d.ts.map +1 -0
- package/dist/duplicate-filter.js +168 -0
- package/dist/duplicate-filter.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/instrument.d.ts +36 -1
- package/dist/instrument.d.ts.map +1 -1
- package/dist/instrument.js +242 -22
- package/dist/instrument.js.map +1 -1
- package/dist/otel.d.ts +2 -0
- package/dist/otel.d.ts.map +1 -1
- package/dist/otel.js +17 -2
- package/dist/otel.js.map +1 -1
- package/dist/prompt-analyzer.d.ts +12 -1
- package/dist/prompt-analyzer.d.ts.map +1 -1
- package/dist/prompt-analyzer.js +185 -14
- package/dist/prompt-analyzer.js.map +1 -1
- package/dist/providers.d.ts +87 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +128 -0
- package/dist/providers.js.map +1 -0
- package/dist/semconv.d.ts +12 -0
- package/dist/semconv.d.ts.map +1 -1
- package/dist/semconv.js +31 -0
- package/dist/semconv.js.map +1 -1
- package/dist/streams.d.ts.map +1 -1
- package/dist/streams.js +15 -2
- package/dist/streams.js.map +1 -1
- package/dist/track.d.ts +32 -4
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +2 -1
- package/dist/track.js.map +1 -1
- package/dist/wrappers/anthropic.d.ts.map +1 -1
- package/dist/wrappers/anthropic.js +9 -1
- package/dist/wrappers/anthropic.js.map +1 -1
- package/dist/wrappers/batch.d.ts +11 -0
- package/dist/wrappers/batch.d.ts.map +1 -0
- package/dist/wrappers/batch.js +338 -0
- package/dist/wrappers/batch.js.map +1 -0
- package/dist/wrappers/openai.d.ts.map +1 -1
- package/dist/wrappers/openai.js +37 -30
- package/dist/wrappers/openai.js.map +1 -1
- package/dist/wrappers/patching.d.ts +10 -0
- package/dist/wrappers/patching.d.ts.map +1 -0
- package/dist/wrappers/patching.js +38 -0
- package/dist/wrappers/patching.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-analyzer.d.ts","sourceRoot":"","sources":["../src/prompt-analyzer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prompt-analyzer.d.ts","sourceRoot":"","sources":["../src/prompt-analyzer.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,wEAAwE;IACxE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc,CActE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAWpE;AA2JD,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAGnE;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa,CAQtD;AA0HD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,IAAI,CA8Bf;AA6BD,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,MAAmB,GACzB,OAAO,CAYT"}
|
package/dist/prompt-analyzer.js
CHANGED
|
@@ -11,8 +11,8 @@ export function analyzeRequest(payload) {
|
|
|
11
11
|
userHash: safe(() => hashUserBlock(payload), null),
|
|
12
12
|
toolsHash: safe(() => hashJSON(payload.tools), null),
|
|
13
13
|
schemaHash: safe(() => hashJSON(payload.responseFormat), null),
|
|
14
|
-
historyDepth: safe(() => historyDepth(payload), null),
|
|
15
14
|
fewShotCount: safe(() => fewShotCount(payload), null),
|
|
15
|
+
fewShotTokens: safe(() => fewShotTokens(payload), null),
|
|
16
16
|
noiseRatio: safe(() => noiseRatio(payload), null),
|
|
17
17
|
structuredOutputHint: safe(() => structuredOutputHint(payload), false),
|
|
18
18
|
};
|
|
@@ -49,14 +49,98 @@ function hashJSON(value) {
|
|
|
49
49
|
return sha256(canonicalize(value));
|
|
50
50
|
}
|
|
51
51
|
function canonicalize(value) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
const parts = [];
|
|
53
|
+
streamCanonical(value, (chunk) => parts.push(chunk));
|
|
54
|
+
return parts.join("");
|
|
55
|
+
}
|
|
56
|
+
// Canonical-JSON serialization pushed through a sink chunk by chunk, so the
|
|
57
|
+
// signature path can hash incrementally under a byte budget instead of
|
|
58
|
+
// materializing one giant string. Normalized to JSON wire semantics: an
|
|
59
|
+
// explicitly-undefined property serializes identically to an omitted one, so
|
|
60
|
+
// SDK-built objects with optional undefined props can't evade duplicate
|
|
61
|
+
// detection. Binary content (TypedArray / ArrayBuffer — e.g. Bedrock Converse
|
|
62
|
+
// images) contributes only its byteLength, never its bytes: hashing megabytes
|
|
63
|
+
// of image data per call buys no duplicate signal worth its CPU cost, and the
|
|
64
|
+
// generic object branch would sort one key per byte.
|
|
65
|
+
//
|
|
66
|
+
// This walk runs on 100% of chat calls, so every input dimension is bounded,
|
|
67
|
+
// not just the total output (the sink's byte budget checks a chunk only after
|
|
68
|
+
// it exists):
|
|
69
|
+
// - String leaves are capped at MAX_STRING_LEAF_CHARS before stringification.
|
|
70
|
+
// Base64 images arrive as plain strings (OpenAI `image_url.url`, Anthropic
|
|
71
|
+
// `source.data`) — stringifying a multi-MB data URL whole would allocate a
|
|
72
|
+
// same-sized escaped copy per call. The leaf contributes its head plus its
|
|
73
|
+
// total length, so strings identical through the cap but of different
|
|
74
|
+
// lengths still differ; same-length strings differing only past the cap
|
|
75
|
+
// collide — the same trade-off as the binary byteLength branch.
|
|
76
|
+
// - Recursion is depth-capped (everything below MAX_CANONICAL_DEPTH collapses
|
|
77
|
+
// to one marker) — the byte budget bounds breadth but not depth, and a
|
|
78
|
+
// pathologically nested payload would exhaust the JS stack first.
|
|
79
|
+
// - Ancestor cycles emit a marker instead of recursing forever. The guard is
|
|
80
|
+
// path-scoped (added on entry, removed on exit), so a shared sub-object
|
|
81
|
+
// appearing twice (a DAG) still serializes both times.
|
|
82
|
+
const MAX_STRING_LEAF_CHARS = 8 * 1024;
|
|
83
|
+
const MAX_CANONICAL_DEPTH = 64;
|
|
84
|
+
function streamCanonical(value, sink) {
|
|
85
|
+
walkCanonical(value, sink, 0, new WeakSet());
|
|
86
|
+
}
|
|
87
|
+
function walkCanonical(value, sink, depth, ancestors) {
|
|
88
|
+
if (typeof value === "string" && value.length > MAX_STRING_LEAF_CHARS) {
|
|
89
|
+
sink(JSON.stringify(`${value.slice(0, MAX_STRING_LEAF_CHARS)}<str:${value.length}>`));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (value === null || typeof value !== "object") {
|
|
93
|
+
// JSON.stringify yields undefined for undefined/function/symbol — all
|
|
94
|
+
// serialize as null on the wire.
|
|
95
|
+
sink(JSON.stringify(value) ?? "null");
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (ArrayBuffer.isView(value)) {
|
|
99
|
+
sink(`"<binary:${value.byteLength}>"`);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (value instanceof ArrayBuffer) {
|
|
103
|
+
sink(`"<binary:${value.byteLength}>"`);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
if (depth >= MAX_CANONICAL_DEPTH) {
|
|
107
|
+
sink('"<maxdepth>"');
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (ancestors.has(value)) {
|
|
111
|
+
sink('"<cycle>"');
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
ancestors.add(value);
|
|
115
|
+
try {
|
|
116
|
+
if (Array.isArray(value)) {
|
|
117
|
+
sink("[");
|
|
118
|
+
for (let i = 0; i < value.length; i++) {
|
|
119
|
+
if (i > 0)
|
|
120
|
+
sink(",");
|
|
121
|
+
walkCanonical(value[i], sink, depth + 1, ancestors);
|
|
122
|
+
}
|
|
123
|
+
sink("]");
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
const obj = value;
|
|
127
|
+
const keys = Object.keys(obj)
|
|
128
|
+
.filter((k) => obj[k] !== undefined)
|
|
129
|
+
.sort();
|
|
130
|
+
sink("{");
|
|
131
|
+
for (let i = 0; i < keys.length; i++) {
|
|
132
|
+
if (i > 0)
|
|
133
|
+
sink(",");
|
|
134
|
+
sink(JSON.stringify(keys[i]) + ":");
|
|
135
|
+
walkCanonical(obj[keys[i]], sink, depth + 1, ancestors);
|
|
136
|
+
}
|
|
137
|
+
sink("}");
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
// finally, not post-loop: the budget sink aborts the walk by throwing, and
|
|
141
|
+
// the ancestor set must unwind with the stack either way.
|
|
142
|
+
ancestors.delete(value);
|
|
56
143
|
}
|
|
57
|
-
const keys = Object.keys(value).sort();
|
|
58
|
-
const parts = keys.map((k) => JSON.stringify(k) + ":" + canonicalize(value[k]));
|
|
59
|
-
return "{" + parts.join(",") + "}";
|
|
60
144
|
}
|
|
61
145
|
function hashSystemBlock(payload) {
|
|
62
146
|
const blocks = [];
|
|
@@ -88,12 +172,27 @@ function hashUserBlock(payload) {
|
|
|
88
172
|
return hashJSON(blocks);
|
|
89
173
|
}
|
|
90
174
|
// --- structural counts -----------------------------------------------------
|
|
91
|
-
function historyDepth(payload) {
|
|
175
|
+
export function historyDepth(payload) {
|
|
92
176
|
if (!Array.isArray(payload.messages))
|
|
93
177
|
return null;
|
|
94
178
|
return payload.messages.length;
|
|
95
179
|
}
|
|
96
|
-
function
|
|
180
|
+
export function historyBucket(n) {
|
|
181
|
+
if (n <= 0)
|
|
182
|
+
return "0";
|
|
183
|
+
if (n <= 2)
|
|
184
|
+
return "1-2";
|
|
185
|
+
if (n <= 5)
|
|
186
|
+
return "3-5";
|
|
187
|
+
if (n <= 10)
|
|
188
|
+
return "6-10";
|
|
189
|
+
if (n <= 20)
|
|
190
|
+
return "11-20";
|
|
191
|
+
if (n <= 50)
|
|
192
|
+
return "21-50";
|
|
193
|
+
return "51+";
|
|
194
|
+
}
|
|
195
|
+
function fewShotSpan(payload) {
|
|
97
196
|
if (!Array.isArray(payload.messages))
|
|
98
197
|
return null;
|
|
99
198
|
const msgs = payload.messages.filter((m) => m !== null && typeof m === "object");
|
|
@@ -113,20 +212,51 @@ function fewShotCount(payload) {
|
|
|
113
212
|
if (Array.isArray(m.tool_calls) && m.tool_calls.length > 0)
|
|
114
213
|
return null;
|
|
115
214
|
}
|
|
116
|
-
//
|
|
117
|
-
|
|
215
|
+
// Collect consecutive (user, assistant) pairs preceding the final user.
|
|
216
|
+
const exampleMessages = [];
|
|
118
217
|
let j = i;
|
|
119
218
|
const lastIdx = msgs.length - 1; // final user
|
|
120
219
|
while (j + 1 < lastIdx) {
|
|
121
220
|
if (msgs[j].role === "user" && msgs[j + 1].role === "assistant") {
|
|
122
|
-
|
|
221
|
+
exampleMessages.push(msgs[j], msgs[j + 1]);
|
|
123
222
|
j += 2;
|
|
124
223
|
}
|
|
125
224
|
else {
|
|
126
225
|
break;
|
|
127
226
|
}
|
|
128
227
|
}
|
|
129
|
-
return pairs;
|
|
228
|
+
return { pairs: exampleMessages.length / 2, exampleMessages };
|
|
229
|
+
}
|
|
230
|
+
function fewShotCount(payload) {
|
|
231
|
+
const span = fewShotSpan(payload);
|
|
232
|
+
return span === null ? null : span.pairs;
|
|
233
|
+
}
|
|
234
|
+
function fewShotTokens(payload) {
|
|
235
|
+
const span = fewShotSpan(payload);
|
|
236
|
+
if (span === null)
|
|
237
|
+
return null;
|
|
238
|
+
return estimateTokens(messagesText(span.exampleMessages));
|
|
239
|
+
}
|
|
240
|
+
function estimateTokens(text) {
|
|
241
|
+
return Math.ceil(text.length / 4);
|
|
242
|
+
}
|
|
243
|
+
function messagesText(messages) {
|
|
244
|
+
const parts = [];
|
|
245
|
+
for (const m of messages) {
|
|
246
|
+
const content = m.content;
|
|
247
|
+
if (typeof content === "string")
|
|
248
|
+
parts.push(content);
|
|
249
|
+
else if (Array.isArray(content)) {
|
|
250
|
+
for (const c of content) {
|
|
251
|
+
if (!c || typeof c !== "object")
|
|
252
|
+
continue;
|
|
253
|
+
const text = c.text;
|
|
254
|
+
if (typeof text === "string")
|
|
255
|
+
parts.push(text);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return parts.join("\n");
|
|
130
260
|
}
|
|
131
261
|
// --- noise ratio -----------------------------------------------------------
|
|
132
262
|
const HTML_TAG_REGEX = /<[^>]+>/g;
|
|
@@ -170,6 +300,47 @@ function collectText(payload) {
|
|
|
170
300
|
}
|
|
171
301
|
return parts.join("\n");
|
|
172
302
|
}
|
|
303
|
+
// The signature runs on 100% of chat calls, synchronously on the caller's hot
|
|
304
|
+
// path, so its cost must stay bounded regardless of payload size. Hashing is
|
|
305
|
+
// incremental (no giant intermediate string) and capped: past
|
|
306
|
+
// SIGNATURE_MAX_CHARS canonical characters, traversal stops and a truncation
|
|
307
|
+
// marker plus the message count is folded in instead. Multi-MB payloads
|
|
308
|
+
// identical in their first 256K canonical chars therefore collide — an
|
|
309
|
+
// accepted trade-off; the alternative is serializing megabytes per call.
|
|
310
|
+
const SIGNATURE_MAX_CHARS = 256 * 1024;
|
|
311
|
+
const TRUNCATED = Symbol("frugal.signature.truncated");
|
|
312
|
+
export function requestSignature(payload, model, callSiteId) {
|
|
313
|
+
if (!Array.isArray(payload.messages))
|
|
314
|
+
return null;
|
|
315
|
+
const hash = createHash("sha256");
|
|
316
|
+
let remaining = SIGNATURE_MAX_CHARS;
|
|
317
|
+
const sink = (chunk) => {
|
|
318
|
+
remaining -= chunk.length;
|
|
319
|
+
if (remaining < 0)
|
|
320
|
+
throw TRUNCATED;
|
|
321
|
+
hash.update(chunk);
|
|
322
|
+
};
|
|
323
|
+
try {
|
|
324
|
+
streamCanonical({
|
|
325
|
+
site: callSiteId,
|
|
326
|
+
model,
|
|
327
|
+
system: payload.system ?? null,
|
|
328
|
+
messages: payload.messages,
|
|
329
|
+
tools: payload.tools ?? null,
|
|
330
|
+
responseFormat: payload.responseFormat ?? null,
|
|
331
|
+
maxTokens: payload.maxTokens ?? null,
|
|
332
|
+
...(payload.previousResponseId
|
|
333
|
+
? { previousResponseId: payload.previousResponseId }
|
|
334
|
+
: {}),
|
|
335
|
+
}, sink);
|
|
336
|
+
}
|
|
337
|
+
catch (err) {
|
|
338
|
+
if (err !== TRUNCATED)
|
|
339
|
+
throw err;
|
|
340
|
+
hash.update(`|truncated|messages:${payload.messages.length}`);
|
|
341
|
+
}
|
|
342
|
+
return hash.digest("hex");
|
|
343
|
+
}
|
|
173
344
|
// --- structured output hint ------------------------------------------------
|
|
174
345
|
const STRUCTURED_HINT_REGEXES = [
|
|
175
346
|
/format\s+as\s+JSON/i,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-analyzer.js","sourceRoot":"","sources":["../src/prompt-analyzer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"prompt-analyzer.js","sourceRoot":"","sources":["../src/prompt-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { OP_OTHER } from "./semconv.js";
|
|
2
|
+
export interface ProviderEntry {
|
|
3
|
+
/** Legacy `gen_ai.system` value — kept for back-compat. */
|
|
4
|
+
system: string;
|
|
5
|
+
/** New `gen_ai.provider.name` value — current OTel spelling. */
|
|
6
|
+
providerName: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const PROVIDERS: readonly [{
|
|
9
|
+
readonly system: "openai";
|
|
10
|
+
readonly providerName: "openai";
|
|
11
|
+
}, {
|
|
12
|
+
readonly system: "anthropic";
|
|
13
|
+
readonly providerName: "anthropic";
|
|
14
|
+
}, {
|
|
15
|
+
readonly system: "aws.bedrock";
|
|
16
|
+
readonly providerName: "aws.bedrock";
|
|
17
|
+
}, {
|
|
18
|
+
readonly system: "vertex_ai";
|
|
19
|
+
readonly providerName: "gcp.vertex_ai";
|
|
20
|
+
}, {
|
|
21
|
+
readonly system: "az.ai.openai";
|
|
22
|
+
readonly providerName: "azure.ai.openai";
|
|
23
|
+
}, {
|
|
24
|
+
readonly system: "cohere";
|
|
25
|
+
readonly providerName: "cohere";
|
|
26
|
+
}, {
|
|
27
|
+
readonly system: "mistral_ai";
|
|
28
|
+
readonly providerName: "mistral_ai";
|
|
29
|
+
}, {
|
|
30
|
+
readonly system: "deepseek";
|
|
31
|
+
readonly providerName: "deepseek";
|
|
32
|
+
}, {
|
|
33
|
+
readonly system: "groq";
|
|
34
|
+
readonly providerName: "groq";
|
|
35
|
+
}, {
|
|
36
|
+
readonly system: "perplexity";
|
|
37
|
+
readonly providerName: "perplexity";
|
|
38
|
+
}, {
|
|
39
|
+
readonly system: "x_ai";
|
|
40
|
+
readonly providerName: "x_ai";
|
|
41
|
+
}, {
|
|
42
|
+
readonly system: "ibm.watsonx.ai";
|
|
43
|
+
readonly providerName: "ibm.watsonx.ai";
|
|
44
|
+
}, {
|
|
45
|
+
readonly system: "gcp.gemini";
|
|
46
|
+
readonly providerName: "gcp.gemini";
|
|
47
|
+
}];
|
|
48
|
+
/**
|
|
49
|
+
* Accepted provider values (legacy `gen_ai.system` spelling). Derived from
|
|
50
|
+
* PROVIDERS so the autocomplete vocabulary can never drift from the runtime
|
|
51
|
+
* registry — add a provider in one place. The public API fields are typed
|
|
52
|
+
* `GenAiSystem | (string & {})` so this gives autocomplete and catches obvious
|
|
53
|
+
* typos, while still permitting a free-form custom string. Includes BOTH spellings
|
|
54
|
+
* (legacy `system` and new `providerName`) since `normalizeProvider` accepts either.
|
|
55
|
+
*/
|
|
56
|
+
export type GenAiSystem = (typeof PROVIDERS)[number]["system"] | (typeof PROVIDERS)[number]["providerName"] | "custom";
|
|
57
|
+
declare const OPERATIONS: readonly ["chat", "text_completion", "embeddings", "generate_content", "execute_tool", "create_agent", "invoke_agent"];
|
|
58
|
+
/**
|
|
59
|
+
* Accepted `gen_ai.operation.name` values. Derived from OPERATIONS so the
|
|
60
|
+
* autocomplete vocabulary can't drift from what the runtime accepts (mirrors
|
|
61
|
+
* GenAiSystem ← PROVIDERS). Plus the `other` sentinel that unknown operations
|
|
62
|
+
* coerce to (passes through without a warning).
|
|
63
|
+
*/
|
|
64
|
+
export type GenAiOperation = (typeof OPERATIONS)[number] | typeof OP_OTHER;
|
|
65
|
+
export declare function warnInvalidOnce(key: string, message: string): void;
|
|
66
|
+
/** Test-only — clear the bounded invalid-value warning state. */
|
|
67
|
+
export declare function resetProviderWarningsForTests(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Resolve a caller-supplied provider string to its canonical
|
|
70
|
+
* `{ system, providerName }` pair. Accepts either spelling (legacy
|
|
71
|
+
* `gen_ai.system` or new `gen_ai.provider.name`). A value the customer has
|
|
72
|
+
* registered via `customProviders` passes through verbatim (system ==
|
|
73
|
+
* providerName). Any other unknown value is coerced to the `custom` sentinel and
|
|
74
|
+
* reported (bounded warn-once). `undefined` resolves to `custom` silently (the
|
|
75
|
+
* intended default). Never throws.
|
|
76
|
+
*/
|
|
77
|
+
export declare function normalizeProvider(input?: string, customProviders?: readonly string[]): ProviderEntry;
|
|
78
|
+
/**
|
|
79
|
+
* Resolve a caller-supplied operation string. Unknown values are coerced to the
|
|
80
|
+
* `other` sentinel — NOT `chat` — so a typo lands in a distinguishable bucket
|
|
81
|
+
* instead of inflating the real chat series, and reported (bounded warn-once).
|
|
82
|
+
* `undefined` resolves to `chat` (the default); an explicit `other` passes
|
|
83
|
+
* through silently. Never throws.
|
|
84
|
+
*/
|
|
85
|
+
export declare function normalizeOperation(input?: string): string;
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAW,QAAQ,EAAiB,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;CACtB;AAMD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcuB,CAAC;AAE9C;;;;;;;GAOG;AACH,MAAM,MAAM,WAAW,GACnB,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,GACpC,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,GAC1C,QAAQ,CAAC;AAKb,QAAA,MAAM,UAAU,wHAQN,CAAC;AAEX;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,QAAQ,CAAC;AA0B3E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAclE;AAED,iEAAiE;AACjE,wBAAgB,6BAA6B,IAAI,IAAI,CAGpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,CAAC,EAAE,MAAM,EACd,eAAe,GAAE,SAAS,MAAM,EAAO,GACtC,aAAa,CAcf;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAUzD"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// Canonical provider registry + sentinel normalization.
|
|
2
|
+
//
|
|
3
|
+
// `gen_ai.system` is the OpenTelemetry GenAI semantic-convention attribute that
|
|
4
|
+
// identifies the provider/platform a model runs on. OTel has since renamed it to
|
|
5
|
+
// `gen_ai.provider.name`, with a few new value spellings (e.g. `vertex_ai` →
|
|
6
|
+
// `gcp.vertex_ai`). We dual-emit both attributes: the legacy `gen_ai.system`
|
|
7
|
+
// value (unchanged for the providers we already supported, so existing queries
|
|
8
|
+
// and historical series keep matching) plus the new `gen_ai.provider.name`
|
|
9
|
+
// value. Consumers migrate to the new attribute at their own pace; the old one
|
|
10
|
+
// is dropped afterward.
|
|
11
|
+
//
|
|
12
|
+
// Any value outside the well-known set is a bug (a typo like `amazon-bedrock`
|
|
13
|
+
// silently produces a series no query ever matches). Such values are coerced to
|
|
14
|
+
// the `custom` sentinel — a wrong label never reaches metrics — and surfaced
|
|
15
|
+
// once via the debug channel so the mistake is visible. Everything here is pure
|
|
16
|
+
// and never throws: the SDK is safe by construction.
|
|
17
|
+
import { emitLog } from "./debug.js";
|
|
18
|
+
import { OP_CHAT, OP_OTHER, SYSTEM_CUSTOM } from "./semconv.js";
|
|
19
|
+
// Single source of truth. `system` preserves the spelling Frugal already emitted
|
|
20
|
+
// for the providers it historically supported (so existing dashboards/history
|
|
21
|
+
// keep matching); `providerName` is the current OTel spelling. For providers we
|
|
22
|
+
// never emitted before, both columns are the same OTel-standard string.
|
|
23
|
+
export const PROVIDERS = [
|
|
24
|
+
{ system: "openai", providerName: "openai" },
|
|
25
|
+
{ system: "anthropic", providerName: "anthropic" },
|
|
26
|
+
{ system: "aws.bedrock", providerName: "aws.bedrock" },
|
|
27
|
+
{ system: "vertex_ai", providerName: "gcp.vertex_ai" },
|
|
28
|
+
{ system: "az.ai.openai", providerName: "azure.ai.openai" },
|
|
29
|
+
{ system: "cohere", providerName: "cohere" },
|
|
30
|
+
{ system: "mistral_ai", providerName: "mistral_ai" },
|
|
31
|
+
{ system: "deepseek", providerName: "deepseek" },
|
|
32
|
+
{ system: "groq", providerName: "groq" },
|
|
33
|
+
{ system: "perplexity", providerName: "perplexity" },
|
|
34
|
+
{ system: "x_ai", providerName: "x_ai" },
|
|
35
|
+
{ system: "ibm.watsonx.ai", providerName: "ibm.watsonx.ai" },
|
|
36
|
+
{ system: "gcp.gemini", providerName: "gcp.gemini" },
|
|
37
|
+
];
|
|
38
|
+
// Operations accepted without warning: the three defaults plus other OTel-defined
|
|
39
|
+
// values. Single source of truth for both GenAiOperation below and the coercion
|
|
40
|
+
// warning's "use one of" list.
|
|
41
|
+
const OPERATIONS = [
|
|
42
|
+
"chat",
|
|
43
|
+
"text_completion",
|
|
44
|
+
"embeddings",
|
|
45
|
+
"generate_content",
|
|
46
|
+
"execute_tool",
|
|
47
|
+
"create_agent",
|
|
48
|
+
"invoke_agent",
|
|
49
|
+
];
|
|
50
|
+
const CUSTOM = { system: SYSTEM_CUSTOM, providerName: SYSTEM_CUSTOM };
|
|
51
|
+
// Lookup by either spelling, built once — keeps normalizeProvider O(1) on the hot
|
|
52
|
+
// path instead of scanning PROVIDERS on every call.
|
|
53
|
+
const BY_VALUE = new Map();
|
|
54
|
+
for (const entry of PROVIDERS) {
|
|
55
|
+
BY_VALUE.set(entry.system, entry);
|
|
56
|
+
BY_VALUE.set(entry.providerName, entry);
|
|
57
|
+
}
|
|
58
|
+
// Bounded warn-once: surface each distinct invalid provider/operation value
|
|
59
|
+
// once, but cap how many distinct values we track so a high-cardinality caller
|
|
60
|
+
// (e.g. a gateway labeling calls from request data) can't grow this set without
|
|
61
|
+
// bound. Past the cap, further unknown values are coerced silently after a
|
|
62
|
+
// single generic notice. We do our own de-dup here (emitLog, not emitLogOnce) so
|
|
63
|
+
// the cap is enforced in one place — and so every distinct typo is surfaced, not
|
|
64
|
+
// just the first one.
|
|
65
|
+
const MAX_TRACKED_INVALID = 32;
|
|
66
|
+
const warnedInvalid = new Set();
|
|
67
|
+
let capNoticeEmitted = false;
|
|
68
|
+
// Exported for the custom_label coercion in instrument.ts — every label
|
|
69
|
+
// vocabulary in the SDK that coerces to a sentinel reports through this one
|
|
70
|
+
// bounded helper.
|
|
71
|
+
export function warnInvalidOnce(key, message) {
|
|
72
|
+
if (warnedInvalid.has(key))
|
|
73
|
+
return;
|
|
74
|
+
if (warnedInvalid.size >= MAX_TRACKED_INVALID) {
|
|
75
|
+
if (!capNoticeEmitted) {
|
|
76
|
+
capNoticeEmitted = true;
|
|
77
|
+
emitLog("warn", `frugal-metrics: ${MAX_TRACKED_INVALID}+ distinct invalid provider/operation values seen; further unknown values are coerced to the sentinel without an individual warning.`);
|
|
78
|
+
}
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
warnedInvalid.add(key);
|
|
82
|
+
emitLog("warn", message);
|
|
83
|
+
}
|
|
84
|
+
/** Test-only — clear the bounded invalid-value warning state. */
|
|
85
|
+
export function resetProviderWarningsForTests() {
|
|
86
|
+
warnedInvalid.clear();
|
|
87
|
+
capNoticeEmitted = false;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Resolve a caller-supplied provider string to its canonical
|
|
91
|
+
* `{ system, providerName }` pair. Accepts either spelling (legacy
|
|
92
|
+
* `gen_ai.system` or new `gen_ai.provider.name`). A value the customer has
|
|
93
|
+
* registered via `customProviders` passes through verbatim (system ==
|
|
94
|
+
* providerName). Any other unknown value is coerced to the `custom` sentinel and
|
|
95
|
+
* reported (bounded warn-once). `undefined` resolves to `custom` silently (the
|
|
96
|
+
* intended default). Never throws.
|
|
97
|
+
*/
|
|
98
|
+
export function normalizeProvider(input, customProviders = []) {
|
|
99
|
+
if (input === undefined || input === SYSTEM_CUSTOM)
|
|
100
|
+
return CUSTOM;
|
|
101
|
+
const entry = BY_VALUE.get(input);
|
|
102
|
+
if (entry !== undefined)
|
|
103
|
+
return entry;
|
|
104
|
+
// Customer-registered passthrough: no OTel mapping, so both labels carry the
|
|
105
|
+
// raw name. The set is capped at config-load time, so cardinality stays bounded.
|
|
106
|
+
if (customProviders.includes(input)) {
|
|
107
|
+
return { system: input, providerName: input };
|
|
108
|
+
}
|
|
109
|
+
warnInvalidOnce(`provider:${input}`, `unknown gen_ai provider "${input}" — coerced to "custom". Use a well-known OpenTelemetry GenAI provider value (e.g. "aws.bedrock", "vertex_ai", "anthropic", "openai"), or register it via FRUGAL_CUSTOM_PROVIDERS.`);
|
|
110
|
+
return CUSTOM;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Resolve a caller-supplied operation string. Unknown values are coerced to the
|
|
114
|
+
* `other` sentinel — NOT `chat` — so a typo lands in a distinguishable bucket
|
|
115
|
+
* instead of inflating the real chat series, and reported (bounded warn-once).
|
|
116
|
+
* `undefined` resolves to `chat` (the default); an explicit `other` passes
|
|
117
|
+
* through silently. Never throws.
|
|
118
|
+
*/
|
|
119
|
+
export function normalizeOperation(input) {
|
|
120
|
+
if (input === undefined)
|
|
121
|
+
return OP_CHAT;
|
|
122
|
+
if (input === OP_OTHER || OPERATIONS.includes(input)) {
|
|
123
|
+
return input;
|
|
124
|
+
}
|
|
125
|
+
warnInvalidOnce(`operation:${input}`, `unknown gen_ai.operation.name "${input}" — coerced to "other". Use one of: ${OPERATIONS.join(", ")}.`);
|
|
126
|
+
return OP_OTHER;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
|
package/dist/semconv.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare const GEN_AI_SYSTEM = "gen_ai.system";
|
|
2
|
+
export declare const GEN_AI_PROVIDER_NAME = "gen_ai.provider.name";
|
|
2
3
|
export declare const GEN_AI_REQUEST_MODEL = "gen_ai.request.model";
|
|
3
4
|
export declare const GEN_AI_RESPONSE_MODEL = "gen_ai.response.model";
|
|
4
5
|
export declare const GEN_AI_OPERATION_NAME = "gen_ai.operation.name";
|
|
@@ -12,6 +13,7 @@ export declare const SYSTEM_CUSTOM = "custom";
|
|
|
12
13
|
export declare const OP_CHAT = "chat";
|
|
13
14
|
export declare const OP_TEXT_COMPLETION = "text_completion";
|
|
14
15
|
export declare const OP_EMBEDDINGS = "embeddings";
|
|
16
|
+
export declare const OP_OTHER = "other";
|
|
15
17
|
export declare const TOKEN_INPUT = "input";
|
|
16
18
|
export declare const TOKEN_OUTPUT = "output";
|
|
17
19
|
export declare const METRIC_OPERATION_DURATION = "gen_ai.client.operation.duration";
|
|
@@ -26,8 +28,10 @@ export declare const METRIC_OUTPUT_CAP_UTILIZATION = "frugal.gen_ai.output_cap_u
|
|
|
26
28
|
export declare const METRIC_CACHE_PREFIX_STABLE = "frugal.gen_ai.cache_prefix_stable";
|
|
27
29
|
export declare const METRIC_HISTORY_DEPTH = "frugal.gen_ai.history_depth";
|
|
28
30
|
export declare const METRIC_FEW_SHOT_COUNT = "frugal.gen_ai.few_shot_count";
|
|
31
|
+
export declare const METRIC_FEW_SHOT_TOKENS = "frugal.gen_ai.few_shot_tokens";
|
|
29
32
|
export declare const METRIC_NOISE_RATIO = "frugal.gen_ai.noise_ratio";
|
|
30
33
|
export declare const METRIC_STRUCTURED_OUTPUT_HINT = "frugal.gen_ai.structured_output_hint";
|
|
34
|
+
export declare const METRIC_DUPLICATE_REQUESTS = "frugal.gen_ai.duplicate_requests";
|
|
31
35
|
export declare const FRUGAL_CUSTOMER_ID = "frugal.customer_id";
|
|
32
36
|
export declare const FRUGAL_PROJECT_ID = "frugal.project_id";
|
|
33
37
|
export declare const FRUGAL_COMPONENT = "frugal.component";
|
|
@@ -38,6 +42,14 @@ export declare const FRUGAL_BATCHED = "frugal.batched";
|
|
|
38
42
|
export declare const FRUGAL_STRUCTURED_OUTPUT_MODE = "frugal.structured_output_mode";
|
|
39
43
|
export declare const FRUGAL_BLOCK = "frugal.block";
|
|
40
44
|
export declare const FRUGAL_STABLE = "frugal.stable";
|
|
45
|
+
export declare const FRUGAL_CUSTOM_LABEL = "frugal.custom_label";
|
|
46
|
+
export declare const CUSTOM_LABEL_OTHER = "other";
|
|
47
|
+
export declare const FRUGAL_HISTORY_BUCKET = "frugal.history_bucket";
|
|
48
|
+
export declare const FRUGAL_DUP_STATE = "frugal.dup_state";
|
|
49
|
+
export declare const DUP_FIRST_SEEN = "first_seen";
|
|
50
|
+
export declare const DUP_REPEAT_SEEN = "repeat_seen";
|
|
51
|
+
export declare const HISTORY_BUCKETS: readonly ["0", "1-2", "3-5", "6-10", "11-20", "21-50", "51+"];
|
|
52
|
+
export type HistoryBucket = (typeof HISTORY_BUCKETS)[number];
|
|
41
53
|
export declare const STRUCTURED_OUTPUT_NONE = "none";
|
|
42
54
|
export declare const STRUCTURED_OUTPUT_JSON_OBJECT = "json_object";
|
|
43
55
|
export declare const STRUCTURED_OUTPUT_JSON_SCHEMA = "json_schema";
|
package/dist/semconv.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semconv.d.ts","sourceRoot":"","sources":["../src/semconv.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"semconv.d.ts","sourceRoot":"","sources":["../src/semconv.ts"],"names":[],"mappings":"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"}
|
package/dist/semconv.js
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
// OpenTelemetry GenAI semantic convention constants + Frugal extensions.
|
|
2
2
|
export const GEN_AI_SYSTEM = "gen_ai.system";
|
|
3
|
+
// OTel renamed gen_ai.system → gen_ai.provider.name; we dual-emit both during the
|
|
4
|
+
// transition. See providers.ts for the value mapping.
|
|
5
|
+
export const GEN_AI_PROVIDER_NAME = "gen_ai.provider.name";
|
|
3
6
|
export const GEN_AI_REQUEST_MODEL = "gen_ai.request.model";
|
|
4
7
|
export const GEN_AI_RESPONSE_MODEL = "gen_ai.response.model";
|
|
5
8
|
export const GEN_AI_OPERATION_NAME = "gen_ai.operation.name";
|
|
6
9
|
export const GEN_AI_TOKEN_TYPE = "gen_ai.token.type";
|
|
10
|
+
// Legacy gen_ai.system spellings exposed as named constants for the wrapper
|
|
11
|
+
// modules. The full cross-provider registry (cohere, mistral_ai, deepseek,
|
|
12
|
+
// groq, …) lives solely in the PROVIDERS table in providers.ts — the single
|
|
13
|
+
// source of truth — and those values are not re-declared here.
|
|
7
14
|
export const SYSTEM_OPENAI = "openai";
|
|
8
15
|
export const SYSTEM_ANTHROPIC = "anthropic";
|
|
9
16
|
export const SYSTEM_AZURE_OPENAI = "az.ai.openai";
|
|
@@ -13,6 +20,9 @@ export const SYSTEM_CUSTOM = "custom";
|
|
|
13
20
|
export const OP_CHAT = "chat";
|
|
14
21
|
export const OP_TEXT_COMPLETION = "text_completion";
|
|
15
22
|
export const OP_EMBEDDINGS = "embeddings";
|
|
23
|
+
// Sentinel for an operation outside the accepted set — parallels SYSTEM_CUSTOM so
|
|
24
|
+
// a typo lands in a distinguishable bucket instead of corrupting the real chat series.
|
|
25
|
+
export const OP_OTHER = "other";
|
|
16
26
|
export const TOKEN_INPUT = "input";
|
|
17
27
|
export const TOKEN_OUTPUT = "output";
|
|
18
28
|
export const METRIC_OPERATION_DURATION = "gen_ai.client.operation.duration";
|
|
@@ -27,8 +37,10 @@ export const METRIC_OUTPUT_CAP_UTILIZATION = "frugal.gen_ai.output_cap_utilizati
|
|
|
27
37
|
export const METRIC_CACHE_PREFIX_STABLE = "frugal.gen_ai.cache_prefix_stable";
|
|
28
38
|
export const METRIC_HISTORY_DEPTH = "frugal.gen_ai.history_depth";
|
|
29
39
|
export const METRIC_FEW_SHOT_COUNT = "frugal.gen_ai.few_shot_count";
|
|
40
|
+
export const METRIC_FEW_SHOT_TOKENS = "frugal.gen_ai.few_shot_tokens";
|
|
30
41
|
export const METRIC_NOISE_RATIO = "frugal.gen_ai.noise_ratio";
|
|
31
42
|
export const METRIC_STRUCTURED_OUTPUT_HINT = "frugal.gen_ai.structured_output_hint";
|
|
43
|
+
export const METRIC_DUPLICATE_REQUESTS = "frugal.gen_ai.duplicate_requests";
|
|
32
44
|
export const FRUGAL_CUSTOMER_ID = "frugal.customer_id";
|
|
33
45
|
export const FRUGAL_PROJECT_ID = "frugal.project_id";
|
|
34
46
|
export const FRUGAL_COMPONENT = "frugal.component";
|
|
@@ -39,6 +51,25 @@ export const FRUGAL_BATCHED = "frugal.batched";
|
|
|
39
51
|
export const FRUGAL_STRUCTURED_OUTPUT_MODE = "frugal.structured_output_mode";
|
|
40
52
|
export const FRUGAL_BLOCK = "frugal.block";
|
|
41
53
|
export const FRUGAL_STABLE = "frugal.stable";
|
|
54
|
+
export const FRUGAL_CUSTOM_LABEL = "frugal.custom_label";
|
|
55
|
+
export const CUSTOM_LABEL_OTHER = "other";
|
|
56
|
+
export const FRUGAL_HISTORY_BUCKET = "frugal.history_bucket";
|
|
57
|
+
export const FRUGAL_DUP_STATE = "frugal.dup_state";
|
|
58
|
+
export const DUP_FIRST_SEEN = "first_seen";
|
|
59
|
+
export const DUP_REPEAT_SEEN = "repeat_seen";
|
|
60
|
+
// frugal.history_bucket vocabulary — a wire contract the server cross-tabs on,
|
|
61
|
+
// so the values live here (single source of truth) rather than inline at the
|
|
62
|
+
// derivation site. Bucket edges are inclusive: 0 | 1-2 | 3-5 | 6-10 | 11-20 |
|
|
63
|
+
// 21-50 | 51+.
|
|
64
|
+
export const HISTORY_BUCKETS = [
|
|
65
|
+
"0",
|
|
66
|
+
"1-2",
|
|
67
|
+
"3-5",
|
|
68
|
+
"6-10",
|
|
69
|
+
"11-20",
|
|
70
|
+
"21-50",
|
|
71
|
+
"51+",
|
|
72
|
+
];
|
|
42
73
|
export const STRUCTURED_OUTPUT_NONE = "none";
|
|
43
74
|
export const STRUCTURED_OUTPUT_JSON_OBJECT = "json_object";
|
|
44
75
|
export const STRUCTURED_OUTPUT_JSON_SCHEMA = "json_schema";
|