@argosvix/sdk 0.4.22-alpha.0 → 0.5.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 +4 -9
- package/dist/aiSdkMiddleware.d.ts +36 -20
- package/dist/aiSdkMiddleware.d.ts.map +1 -1
- package/dist/aiSdkMiddleware.js +98 -31
- package/dist/aiSdkMiddleware.js.map +1 -1
- package/dist/approvals.d.ts +37 -29
- package/dist/approvals.d.ts.map +1 -1
- package/dist/approvals.js +24 -18
- package/dist/approvals.js.map +1 -1
- package/dist/budgetGate.d.ts +30 -24
- package/dist/budgetGate.d.ts.map +1 -1
- package/dist/budgetGate.js +118 -92
- package/dist/budgetGate.js.map +1 -1
- package/dist/client.d.ts +15 -10
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +271 -222
- package/dist/client.js.map +1 -1
- package/dist/context.d.ts +59 -48
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +72 -58
- package/dist/context.js.map +1 -1
- package/dist/flush.d.ts +6 -4
- package/dist/flush.d.ts.map +1 -1
- package/dist/flush.js +6 -4
- package/dist/flush.js.map +1 -1
- package/dist/ids.d.ts +3 -2
- package/dist/ids.d.ts.map +1 -1
- package/dist/ids.js +6 -5
- package/dist/ids.js.map +1 -1
- package/dist/langchainCallback.d.ts +14 -13
- package/dist/langchainCallback.d.ts.map +1 -1
- package/dist/langchainCallback.js +22 -17
- package/dist/langchainCallback.js.map +1 -1
- package/dist/policyScan.d.ts +29 -22
- package/dist/policyScan.d.ts.map +1 -1
- package/dist/policyScan.js +47 -38
- package/dist/policyScan.js.map +1 -1
- package/dist/pricing.d.ts +5 -5
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +24 -22
- package/dist/pricing.js.map +1 -1
- package/dist/prompts.d.ts +20 -17
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +21 -17
- package/dist/prompts.js.map +1 -1
- package/dist/query.d.ts +21 -21
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +14 -14
- package/dist/recorder.d.ts +39 -19
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +120 -69
- package/dist/recorder.js.map +1 -1
- package/dist/redaction.d.ts +35 -33
- package/dist/redaction.d.ts.map +1 -1
- package/dist/redaction.js +73 -64
- package/dist/redaction.js.map +1 -1
- package/dist/types.d.ts +131 -114
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +9 -9
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +9 -9
- package/dist/version.js.map +1 -1
- package/package.json +8 -2
package/dist/context.js
CHANGED
|
@@ -1,40 +1,47 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Automatic trace context propagation.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Keeps the "current trace / span" in AsyncLocalStorage so that wrapped LLM
|
|
5
|
+
* calls automatically belong to (nest under) the surrounding trace without
|
|
6
|
+
* explicitly passing a traceId. Without this, the trace UI and storage would
|
|
7
|
+
* stay empty in real-world use even though they are fully implemented, since
|
|
8
|
+
* IDs would have to be threaded through by hand.
|
|
7
9
|
*
|
|
8
|
-
* ##
|
|
9
|
-
* AsyncLocalStorage
|
|
10
|
-
* `nodejs_compat`)compatibility flag
|
|
11
|
-
*
|
|
10
|
+
* ## Runtime constraints
|
|
11
|
+
* AsyncLocalStorage is standard in Node 12+; on Cloudflare Workers it requires
|
|
12
|
+
* the `nodejs_als` (or `nodejs_compat`) compatibility flag. Because user
|
|
13
|
+
* runtimes vary, failure to obtain it falls back gracefully to the static
|
|
14
|
+
* behavior (config.traceId only, as before) with a single warning.
|
|
12
15
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
16
|
+
* Initially only `withTrace` was exposed (grouping multiple LLM calls into one
|
|
17
|
+
* trace). `withSpan`, which represents intermediate spans, and observation
|
|
18
|
+
* emission were added later, once observation storage landed.
|
|
15
19
|
*/
|
|
16
20
|
import { generateId } from "./ids.js";
|
|
17
21
|
const observationSinks = [];
|
|
18
22
|
let warnedMultiAccount = false;
|
|
19
23
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
24
|
+
* Registers a destination for the observations withSpan emits (wrap()
|
|
25
|
+
* registers its own recorder here). Wrapping multiple clients does not create
|
|
26
|
+
* duplicate registrations. The destination is chosen at emit time, so wrapping
|
|
27
|
+
* another client later stays consistent.
|
|
23
28
|
*/
|
|
24
29
|
export function _registerObservationSink(sink) {
|
|
25
30
|
if (!observationSinks.includes(sink))
|
|
26
31
|
observationSinks.push(sink);
|
|
27
32
|
}
|
|
28
|
-
/**
|
|
33
|
+
/** Test-only: clears the sink registry (not used in production, which assumes one wrap per process). */
|
|
29
34
|
export function _resetObservationSinks() {
|
|
30
35
|
observationSinks.length = 0;
|
|
31
36
|
warnedMultiAccount = false;
|
|
32
37
|
}
|
|
33
38
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
39
|
+
* Picks a single destination for observations. If the enabled sinks all belong
|
|
40
|
+
* to one account (same routingKey), send there. When multiple accounts
|
|
41
|
+
* (different api_keys) are mixed, nothing is sent and a single warning is
|
|
42
|
+
* emitted, to avoid leaking data into the wrong account — this structurally
|
|
43
|
+
* prevents split traces and cross-account sends such as the generation going
|
|
44
|
+
* to client A while the observation goes to client B.
|
|
38
45
|
*/
|
|
39
46
|
function pickObservationSink() {
|
|
40
47
|
const enabled = observationSinks.filter((s) => s.observationsEnabled);
|
|
@@ -55,12 +62,13 @@ function pickObservationSink() {
|
|
|
55
62
|
}
|
|
56
63
|
let warned = false;
|
|
57
64
|
/**
|
|
58
|
-
* AsyncLocalStorage
|
|
59
|
-
* (Workers / Next Edge /
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
65
|
+
* Resolves AsyncLocalStorage without any static import specifier. This cuts
|
|
66
|
+
* off the path where bundlers (targeting Workers / Next Edge / browsers) try
|
|
67
|
+
* to resolve node:async_hooks at build time and fail — top-level await
|
|
68
|
+
* combined with `import("node:...")` causes bundle failures.
|
|
69
|
+
* 1. Cloudflare Workers (nodejs_als / nodejs_compat): AsyncLocalStorage appears as a global
|
|
70
|
+
* 2. Node 22.3+: process.getBuiltinModule obtains the builtin in a form static analysis cannot see
|
|
71
|
+
* On runtimes with neither (old Node / Edge / browsers), returns null and falls back gracefully to the static behavior.
|
|
64
72
|
*/
|
|
65
73
|
function loadAls() {
|
|
66
74
|
try {
|
|
@@ -89,15 +97,16 @@ function warnUnavailableOnce() {
|
|
|
89
97
|
"Calls still record; pass config.traceId to group them manually.");
|
|
90
98
|
}
|
|
91
99
|
const promptAls = loadAls();
|
|
92
|
-
/**
|
|
100
|
+
/** The current ambient prompt tag (non-undefined when inside withPrompt). */
|
|
93
101
|
export function getAmbientPromptTag() {
|
|
94
102
|
return promptAls?.getStore()?.promptTag;
|
|
95
103
|
}
|
|
96
104
|
/**
|
|
97
|
-
*
|
|
98
|
-
* `{name}@v{version}`
|
|
99
|
-
* resolvePrompt()
|
|
100
|
-
* fn
|
|
105
|
+
* Opens a prompt boundary. Wrapped LLM calls inside fn automatically get
|
|
106
|
+
* `{name}@v{version}` as tags.prompt (an explicit tags.prompt from the caller
|
|
107
|
+
* takes precedence). The return value of resolvePrompt() can be passed in
|
|
108
|
+
* directly. On runtimes without AsyncLocalStorage, fn runs as-is (recording
|
|
109
|
+
* continues but tagging is disabled, with a single warning).
|
|
101
110
|
*/
|
|
102
111
|
export function withPrompt(prompt, fn) {
|
|
103
112
|
const promptTag = typeof prompt === "string" ? prompt : `${prompt.name}@v${prompt.version}`;
|
|
@@ -107,7 +116,7 @@ export function withPrompt(prompt, fn) {
|
|
|
107
116
|
}
|
|
108
117
|
return promptAls.run({ promptTag }, fn);
|
|
109
118
|
}
|
|
110
|
-
/**
|
|
119
|
+
/** The current ambient trace context (non-undefined when inside withTrace). */
|
|
111
120
|
export function getAmbientTraceContext() {
|
|
112
121
|
const store = resolveAls();
|
|
113
122
|
if (!store)
|
|
@@ -115,13 +124,14 @@ export function getAmbientTraceContext() {
|
|
|
115
124
|
return store.getStore();
|
|
116
125
|
}
|
|
117
126
|
/**
|
|
118
|
-
* trace
|
|
119
|
-
*
|
|
120
|
-
* withTrace)
|
|
121
|
-
*
|
|
127
|
+
* Opens a trace boundary. Wrapped LLM calls inside fn automatically belong to
|
|
128
|
+
* the same traceId, grouping one agent run / one request into one trace. When
|
|
129
|
+
* nested (withTrace inside withTrace), the inner traceId wins. On runtimes
|
|
130
|
+
* without AsyncLocalStorage, fn runs as-is (recording continues but automatic
|
|
131
|
+
* grouping is disabled, with a single warning).
|
|
122
132
|
*
|
|
123
|
-
* @param fn
|
|
124
|
-
* @param opts.traceId
|
|
133
|
+
* @param fn The work to run (sync or async)
|
|
134
|
+
* @param opts.traceId Explicit traceId (auto-generated when omitted)
|
|
125
135
|
*/
|
|
126
136
|
export function withTrace(fn, opts) {
|
|
127
137
|
const store = resolveAls();
|
|
@@ -130,21 +140,23 @@ export function withTrace(fn, opts) {
|
|
|
130
140
|
return fn();
|
|
131
141
|
}
|
|
132
142
|
const traceId = opts?.traceId ?? generateId();
|
|
133
|
-
//
|
|
143
|
+
// A new trace boundary has no parent span (generations directly inside become the trace root).
|
|
134
144
|
return store.run({ traceId }, fn);
|
|
135
145
|
}
|
|
136
146
|
/**
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* (sync
|
|
147
|
+
* Opens an intermediate span (retrieval / tool / agent / chain / event / span)
|
|
148
|
+
* and emits an observation. Wrapped LLM calls inside fn nest as children of
|
|
149
|
+
* this span. When fn completes (sync and async both supported), status and
|
|
150
|
+
* latency are finalized and the observation is recorded.
|
|
140
151
|
*
|
|
141
|
-
* trace
|
|
142
|
-
*
|
|
152
|
+
* If there is no trace context, a new trace is opened automatically (this span
|
|
153
|
+
* becomes the trace root). On runtimes without AsyncLocalStorage nesting is
|
|
154
|
+
* not possible, but the observation itself is still emitted.
|
|
143
155
|
*
|
|
144
|
-
* @param type
|
|
145
|
-
* @param name
|
|
146
|
-
* @param fn
|
|
147
|
-
* @param opts.metadata
|
|
156
|
+
* @param type Observation type
|
|
157
|
+
* @param name Display name (e.g. "retrieve_docs")
|
|
158
|
+
* @param fn The work to run
|
|
159
|
+
* @param opts.metadata Non-sensitive structured attributes only (counts, sizes, etc. — never raw content or PII)
|
|
148
160
|
*/
|
|
149
161
|
export function withSpan(type, name, fn, opts) {
|
|
150
162
|
const store = resolveAls();
|
|
@@ -202,27 +214,29 @@ export function withSpan(type, name, fn, opts) {
|
|
|
202
214
|
}
|
|
203
215
|
}
|
|
204
216
|
/**
|
|
205
|
-
*
|
|
217
|
+
* Wrapper that instruments an arbitrary function as a span (the higher-order
|
|
218
|
+
* function form of `withSpan`).
|
|
206
219
|
*
|
|
207
|
-
*
|
|
208
|
-
*
|
|
209
|
-
*
|
|
210
|
-
*
|
|
220
|
+
* Decorator syntax (TC39 / legacy) varies too much across runtime
|
|
221
|
+
* configurations, so this is provided as a portable higher-order function.
|
|
222
|
+
* Every call of the wrapped function runs inside `withSpan`, and wrapped LLM
|
|
223
|
+
* calls inside it nest as children of this span. Handles both sync and async
|
|
224
|
+
* functions as-is (async completion is included in the latency).
|
|
211
225
|
*
|
|
212
|
-
*
|
|
226
|
+
* Usage:
|
|
213
227
|
* const retrieve = observe(async (q: string) => db.search(q), { type: "retrieval" });
|
|
214
228
|
* await withTrace(() => retrieve("hello"));
|
|
215
229
|
*
|
|
216
|
-
* @param fn
|
|
217
|
-
* @param opts.name
|
|
218
|
-
* @param opts.type
|
|
219
|
-
* @param opts.metadata
|
|
230
|
+
* @param fn The function to instrument
|
|
231
|
+
* @param opts.name Display name (defaults to fn.name, or "anonymous" if unnamed)
|
|
232
|
+
* @param opts.type Observation type (default "span")
|
|
233
|
+
* @param opts.metadata Non-sensitive structured attributes only (never raw content or PII)
|
|
220
234
|
*/
|
|
221
235
|
export function observe(fn, opts) {
|
|
222
236
|
const name = opts?.name || fn.name || "anonymous";
|
|
223
237
|
const type = opts?.type ?? "span";
|
|
224
|
-
//
|
|
225
|
-
//
|
|
238
|
+
// Use a regular function plus apply so the receiver (this) is preserved when
|
|
239
|
+
// used on a method — with obj.m = observe(obj.m), this still refers to obj.
|
|
226
240
|
return function (...args) {
|
|
227
241
|
return withSpan(type, name, () => fn.apply(this, args), {
|
|
228
242
|
...(opts?.metadata ? { metadata: opts.metadata } : {}),
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/dist/flush.d.ts
CHANGED
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
* that explicitly flushes a wrapped client's buffer and awaits backend delivery.
|
|
4
4
|
*
|
|
5
5
|
* In these runtimes, outstanding fire-and-forget fetches are killed when the
|
|
6
|
-
* handler returns. The SDK's auto-flush
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* handler returns. The SDK's auto-flush fires when `bufferMaxSize` is reached
|
|
7
|
+
* (default 100) or on the idle timer (`flushIntervalMs`, default 5000ms) — but
|
|
8
|
+
* a short-lived handler typically exits before either fires, so a single
|
|
9
|
+
* request with a few LLM calls would lose its records on context exit.
|
|
10
|
+
* Awaiting this helper in the handler's `finally` block guarantees that the
|
|
11
|
+
* buffered records reach the backend before exit.
|
|
10
12
|
*
|
|
11
13
|
* @example
|
|
12
14
|
* import Anthropic from "@anthropic-ai/sdk";
|
package/dist/flush.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flush.d.ts","sourceRoot":"","sources":["../src/flush.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"flush.d.ts","sourceRoot":"","sources":["../src/flush.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS/D"}
|
package/dist/flush.js
CHANGED
|
@@ -4,10 +4,12 @@ import { getRecorder } from "./client.js";
|
|
|
4
4
|
* that explicitly flushes a wrapped client's buffer and awaits backend delivery.
|
|
5
5
|
*
|
|
6
6
|
* In these runtimes, outstanding fire-and-forget fetches are killed when the
|
|
7
|
-
* handler returns. The SDK's auto-flush
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* handler returns. The SDK's auto-flush fires when `bufferMaxSize` is reached
|
|
8
|
+
* (default 100) or on the idle timer (`flushIntervalMs`, default 5000ms) — but
|
|
9
|
+
* a short-lived handler typically exits before either fires, so a single
|
|
10
|
+
* request with a few LLM calls would lose its records on context exit.
|
|
11
|
+
* Awaiting this helper in the handler's `finally` block guarantees that the
|
|
12
|
+
* buffered records reach the backend before exit.
|
|
11
13
|
*
|
|
12
14
|
* @example
|
|
13
15
|
* import Anthropic from "@anthropic-ai/sdk";
|
package/dist/flush.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flush.js","sourceRoot":"","sources":["../src/flush.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C
|
|
1
|
+
{"version":3,"file":"flush.js","sourceRoot":"","sources":["../src/flush.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAc;IAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
|
package/dist/ids.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ID
|
|
3
|
-
*
|
|
2
|
+
* ID generation utility. Extracted into a shared module because both client.ts
|
|
3
|
+
* and context.ts use it (avoids a circular import). Record IDs, trace IDs, and
|
|
4
|
+
* span IDs are all issued by this single implementation.
|
|
4
5
|
*/
|
|
5
6
|
export declare function generateId(): string;
|
|
6
7
|
//# sourceMappingURL=ids.d.ts.map
|
package/dist/ids.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAwBnC"}
|
package/dist/ids.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ID
|
|
3
|
-
*
|
|
2
|
+
* ID generation utility. Extracted into a shared module because both client.ts
|
|
3
|
+
* and context.ts use it (avoids a circular import). Record IDs, trace IDs, and
|
|
4
|
+
* span IDs are all issued by this single implementation.
|
|
4
5
|
*/
|
|
5
6
|
export function generateId() {
|
|
6
7
|
const timePrefix = Date.now().toString(36);
|
|
7
|
-
// globalThis.crypto
|
|
8
|
-
//
|
|
8
|
+
// globalThis.crypto is available in Workers / Node 18+ / modern browsers. The SDK tsconfig does
|
|
9
|
+
// not include the DOM lib, so access it structurally instead of relying on the Crypto type.
|
|
9
10
|
const c = globalThis.crypto;
|
|
10
11
|
if (c?.randomUUID) {
|
|
11
12
|
return `${timePrefix}-${c.randomUUID()}`;
|
|
@@ -18,7 +19,7 @@ export function generateId() {
|
|
|
18
19
|
hex += b.toString(16).padStart(2, "0");
|
|
19
20
|
return `${timePrefix}-${hex}`;
|
|
20
21
|
}
|
|
21
|
-
//
|
|
22
|
+
// Final fallback for runtimes without crypto (concatenating two random strings gives more entropy than the previous behavior, lowering collision probability).
|
|
22
23
|
return `${timePrefix}-${Math.random().toString(36).slice(2)}${Math.random().toString(36).slice(2)}`;
|
|
23
24
|
}
|
|
24
25
|
//# sourceMappingURL=ids.js.map
|
package/dist/ids.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3C,gGAAgG;IAChG,4FAA4F;IAC5F,MAAM,CAAC,GACL,UAMD,CAAC,MAAM,CAAC;IACT,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC;QAClB,OAAO,GAAG,UAAU,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,EAAE,eAAe,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9D,OAAO,GAAG,UAAU,IAAI,GAAG,EAAE,CAAC;IAChC,CAAC;IACD,+JAA+J;IAC/J,OAAO,GAAG,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACtG,CAAC"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import type { ArgosvixConfig } from "./types.js";
|
|
2
2
|
import { Recorder } from "./recorder.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* LangChain.js integration (callback handler).
|
|
5
5
|
*
|
|
6
|
-
* `argosvixLangChainHandler()`
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* cache / reasoning
|
|
6
|
+
* `argosvixLangChainHandler()` returns a callback handler that can be passed
|
|
7
|
+
* to LangChain's `callbacks` array. Placed in the `{ callbacks: [...] }` of a
|
|
8
|
+
* model.invoke / chain / agent, it observes every LLM call made through
|
|
9
|
+
* LangChain — including calls that chains and agents issue internally:
|
|
10
|
+
* provider / model / tokens / cost / latency / TTFT / cache / reasoning.
|
|
11
11
|
*
|
|
12
|
-
* LangChain
|
|
13
|
-
* LangChain
|
|
14
|
-
*
|
|
12
|
+
* There is no hard dependency on LangChain (`@langchain/core` is never
|
|
13
|
+
* imported). LangChain accepts plain objects with handler methods in
|
|
14
|
+
* `callbacks`, not only BaseCallbackHandler instances.
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
16
|
+
* Same design principle as the AI SDK middleware: observation code must never
|
|
17
|
+
* break the host's call (recording is best-effort).
|
|
18
18
|
*
|
|
19
19
|
* @example
|
|
20
20
|
* import { ChatOpenAI } from "@langchain/openai";
|
|
@@ -72,8 +72,9 @@ interface LcLLMResult {
|
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
|
-
* LangChain
|
|
76
|
-
* flush() / recorder
|
|
75
|
+
* The LangChain handler object type (a plain object that can go into the
|
|
76
|
+
* callbacks array). Exposes flush() / recorder directly (flushClient(handler)
|
|
77
|
+
* works as well).
|
|
77
78
|
*/
|
|
78
79
|
export interface ArgosvixLangChainHandler {
|
|
79
80
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"langchainCallback.d.ts","sourceRoot":"","sources":["../src/langchainCallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,YAAY,CAAC;AAK1E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,UAAU,YAAY;IACpB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,iBAAiB,CAAC,EAAE;QAClB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED,UAAU,eAAe;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,oBAAoB,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,KAAK,CACjB,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE;YAAE,cAAc,CAAC,EAAE,eAAe,CAAA;SAAE,CAAA;KAAE,GAAG,SAAS,CAAC,GAAG,SAAS,CAClF,CAAC;IACF,SAAS,CAAC,EAAE;QACV,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,CAAC;YAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACxF,KAAK,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,CAAC;YAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACpF,CAAC;CACH;AAYD
|
|
1
|
+
{"version":3,"file":"langchainCallback.d.ts","sourceRoot":"","sources":["../src/langchainCallback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAA2B,MAAM,YAAY,CAAC;AAK1E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,UAAU,YAAY;IACpB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,iBAAiB,CAAC,EAAE;QAClB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED,UAAU,eAAe;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,oBAAoB,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,KAAK,CACjB,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE;YAAE,cAAc,CAAC,EAAE,eAAe,CAAA;SAAE,CAAA;KAAE,GAAG,SAAS,CAAC,GAAG,SAAS,CAClF,CAAC;IACF,SAAS,CAAC,EAAE;QACV,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,CAAC;YAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACxF,KAAK,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE,MAAM,CAAC;YAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACpF,CAAC;CACH;AAYD;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAChI,oBAAoB,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACvI,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1E,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,cAAc,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAqHD,wBAAgB,wBAAwB,CACtC,MAAM,GAAE,cAAmB,GAC1B,wBAAwB,CAgJ1B"}
|
|
@@ -3,7 +3,7 @@ import { _registerObservationSink, getAmbientTraceContext } from "./context.js";
|
|
|
3
3
|
import { generateId } from "./ids.js";
|
|
4
4
|
import { calculateCostWithCache } from "./pricing.js";
|
|
5
5
|
import { Recorder } from "./recorder.js";
|
|
6
|
-
/**
|
|
6
|
+
/** Recording is best-effort. Exceptions thrown here never break the host's call. */
|
|
7
7
|
function safeRun(fn) {
|
|
8
8
|
try {
|
|
9
9
|
fn();
|
|
@@ -14,12 +14,15 @@ function safeRun(fn) {
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
|
-
* LangChain
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* (
|
|
17
|
+
* Maps LangChain's serialized id (e.g. ["langchain","chat_models","openai",
|
|
18
|
+
* "ChatOpenAI"]) or class name onto Argosvix's four providers. The primary
|
|
19
|
+
* check is exact segment equality, avoiding substring false positives. The
|
|
20
|
+
* last segment (the class name, e.g. ChatOpenAI) is additionally checked with
|
|
21
|
+
* includes, so custom wrappers that only expose a class name are still picked
|
|
22
|
+
* up (side effect: a custom class whose name contains a provider name will be
|
|
23
|
+
* mapped to it). No match returns null: matching the backend's strict enum
|
|
24
|
+
* validation, recording is skipped rather than fabricating a provider
|
|
25
|
+
* (overridable via config.provider).
|
|
23
26
|
*/
|
|
24
27
|
function mapProvider(llm) {
|
|
25
28
|
const segments = [];
|
|
@@ -31,7 +34,7 @@ function mapProvider(llm) {
|
|
|
31
34
|
if (llm && typeof llm.name === "string")
|
|
32
35
|
segments.push(llm.name.toLowerCase());
|
|
33
36
|
const has = (...keys) => segments.some((seg) => keys.some((k) => seg === k));
|
|
34
|
-
// class
|
|
37
|
+
// class names (ChatOpenAI etc.) are matched by substring
|
|
35
38
|
const cls = segments[segments.length - 1] ?? "";
|
|
36
39
|
if (has("openai", "azure_openai", "azureopenai") || cls.includes("openai"))
|
|
37
40
|
return "openai";
|
|
@@ -52,13 +55,14 @@ function resolveModel(extraParams) {
|
|
|
52
55
|
const cand = ip?.model ?? ip?.model_name ?? ip?.modelName;
|
|
53
56
|
return typeof cand === "string" && cand.length > 0 ? cand : "unknown";
|
|
54
57
|
}
|
|
55
|
-
/** LLMResult
|
|
58
|
+
/** Extracts normalized tokens from an LLMResult. Prefers the standard usage_metadata; falls back to llmOutput.tokenUsage. */
|
|
56
59
|
function extractTokens(output) {
|
|
57
|
-
// model
|
|
58
|
-
//
|
|
60
|
+
// The model name is taken from llmOutput.model_name regardless of the token
|
|
61
|
+
// source, so integrations that lack invocation_params at start do not end up
|
|
62
|
+
// with an unknown model and a cost of 0.
|
|
59
63
|
const modelName = typeof output.llmOutput?.model_name === "string" ? output.llmOutput.model_name : undefined;
|
|
60
64
|
const modelSpread = modelName !== undefined ? { modelName } : {};
|
|
61
|
-
//
|
|
65
|
+
// Standard usage_metadata: the provider-agnostic normalized form carried on the AIMessage
|
|
62
66
|
const meta = output.generations?.[0]?.[0]?.message?.usage_metadata;
|
|
63
67
|
if (meta && (typeof meta.input_tokens === "number" || typeof meta.output_tokens === "number")) {
|
|
64
68
|
const promptTokens = meta.input_tokens ?? 0;
|
|
@@ -73,7 +77,7 @@ function extractTokens(output) {
|
|
|
73
77
|
...modelSpread,
|
|
74
78
|
};
|
|
75
79
|
}
|
|
76
|
-
//
|
|
80
|
+
// Fallback: the OpenAI-shaped llmOutput.tokenUsage
|
|
77
81
|
const tu = output.llmOutput?.tokenUsage ?? output.llmOutput?.usage;
|
|
78
82
|
const promptTokens = tu?.promptTokens ?? 0;
|
|
79
83
|
const completionTokens = tu?.completionTokens ?? 0;
|
|
@@ -107,10 +111,11 @@ export function argosvixLangChainHandler(config = {}) {
|
|
|
107
111
|
const recorder = new Recorder(config);
|
|
108
112
|
_registerObservationSink(recorder);
|
|
109
113
|
const callTags = { ...(config.tags ?? {}) };
|
|
110
|
-
// runId
|
|
114
|
+
// Per-runId start state (registered on start; consumed and deleted on end/error).
|
|
111
115
|
const runs = new Map();
|
|
112
|
-
//
|
|
113
|
-
//
|
|
116
|
+
// Cap the map so runs whose end/error never arrives (e.g. after an abort)
|
|
117
|
+
// do not accumulate forever. Map preserves insertion order, so on overflow
|
|
118
|
+
// the oldest entry is evicted FIFO.
|
|
114
119
|
const MAX_PENDING_RUNS = 10000;
|
|
115
120
|
function buildTraceMeta() {
|
|
116
121
|
const meta = {};
|
|
@@ -172,7 +177,7 @@ export function argosvixLangChainHandler(config = {}) {
|
|
|
172
177
|
handleLLMEnd(output, runId) {
|
|
173
178
|
const state = runs.get(runId);
|
|
174
179
|
if (!state)
|
|
175
|
-
return; //
|
|
180
|
+
return; // no start state (e.g. unsupported provider)
|
|
176
181
|
runs.delete(runId);
|
|
177
182
|
safeRun(() => {
|
|
178
183
|
const t = extractTokens(output);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"langchainCallback.js","sourceRoot":"","sources":["../src/langchainCallback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"langchainCallback.js","sourceRoot":"","sources":["../src/langchainCallback.ts"],"names":[],"mappings":"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"}
|