agentid-sdk 0.1.22 → 0.1.24
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 +73 -0
- package/dist/{agentid-BmsXTOCc.d.mts → agentid-BGCUoYV7.d.mts} +17 -2
- package/dist/{agentid-BmsXTOCc.d.ts → agentid-BGCUoYV7.d.ts} +17 -2
- package/dist/{chunk-FVTL572H.mjs → chunk-JLHAS2EE.mjs} +235 -32
- package/dist/index.d.mts +25 -2
- package/dist/index.d.ts +25 -2
- package/dist/index.js +396 -32
- package/dist/index.mjs +161 -1
- package/dist/langchain.d.mts +1 -1
- package/dist/langchain.d.ts +1 -1
- package/dist/langchain.js +50 -5
- package/dist/langchain.mjs +50 -5
- package/package.json +10 -2
package/dist/index.mjs
CHANGED
|
@@ -6,9 +6,169 @@ import {
|
|
|
6
6
|
SecurityBlockError,
|
|
7
7
|
getInjectionScanner,
|
|
8
8
|
scanWithRegex
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-JLHAS2EE.mjs";
|
|
10
|
+
|
|
11
|
+
// src/transparency-badge.tsx
|
|
12
|
+
import * as React from "react";
|
|
13
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
+
var DEFAULT_MESSAGE = "You are interacting with an AI.";
|
|
15
|
+
var DEFAULT_BASE_URL = "https://api.getagentid.com/v1";
|
|
16
|
+
function resolveBadgeMessage(params) {
|
|
17
|
+
if (typeof params.message === "string" && params.message.trim().length > 0) {
|
|
18
|
+
return params.message.trim();
|
|
19
|
+
}
|
|
20
|
+
if (params.metadata?.disclosure) {
|
|
21
|
+
return params.metadata.disclosure;
|
|
22
|
+
}
|
|
23
|
+
return DEFAULT_MESSAGE;
|
|
24
|
+
}
|
|
25
|
+
function normalizeBaseUrl(baseUrl) {
|
|
26
|
+
const candidate = typeof baseUrl === "string" && baseUrl.trim().length > 0 ? baseUrl.trim() : DEFAULT_BASE_URL;
|
|
27
|
+
return candidate.replace(/\/+$/, "");
|
|
28
|
+
}
|
|
29
|
+
function createEventId() {
|
|
30
|
+
try {
|
|
31
|
+
if (typeof globalThis !== "undefined" && globalThis.crypto?.randomUUID) {
|
|
32
|
+
return globalThis.crypto.randomUUID();
|
|
33
|
+
}
|
|
34
|
+
} catch {
|
|
35
|
+
}
|
|
36
|
+
const seed = Math.random().toString(16).slice(2).padEnd(12, "0").slice(0, 12);
|
|
37
|
+
return `00000000-0000-4000-8000-${seed}`;
|
|
38
|
+
}
|
|
39
|
+
async function sendTransparencyBadgeRenderedTelemetry(params) {
|
|
40
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
41
|
+
const eventId = createEventId();
|
|
42
|
+
const payload = {
|
|
43
|
+
event_id: eventId,
|
|
44
|
+
system_id: params.telemetry.systemId,
|
|
45
|
+
input: "__agentid_transparency_badge_rendered__",
|
|
46
|
+
output: params.disclosureText,
|
|
47
|
+
model: params.telemetry.model ?? "agentid-transparency-badge",
|
|
48
|
+
user_id: params.telemetry.userId,
|
|
49
|
+
event_type: "transparency_badge_rendered",
|
|
50
|
+
severity: "info",
|
|
51
|
+
timestamp,
|
|
52
|
+
metadata: {
|
|
53
|
+
compliance_event: "transparency_badge_rendered",
|
|
54
|
+
rendered_at: timestamp,
|
|
55
|
+
placement: params.placement,
|
|
56
|
+
disclosure_text: params.disclosureText,
|
|
57
|
+
...params.telemetry.metadata ?? {}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const targetIngestUrl = typeof params.telemetry.ingestUrl === "string" && params.telemetry.ingestUrl.trim().length > 0 ? params.telemetry.ingestUrl.trim() : `${normalizeBaseUrl(params.telemetry.baseUrl)}/ingest`;
|
|
61
|
+
const headers = {
|
|
62
|
+
"Content-Type": "application/json",
|
|
63
|
+
"X-AgentID-SDK-Version": "js-1.1.0",
|
|
64
|
+
...params.telemetry.headers ?? {}
|
|
65
|
+
};
|
|
66
|
+
if (typeof params.telemetry.apiKey === "string" && params.telemetry.apiKey.trim().length > 0) {
|
|
67
|
+
headers["x-agentid-api-key"] = params.telemetry.apiKey.trim();
|
|
68
|
+
}
|
|
69
|
+
const response = await fetch(targetIngestUrl, {
|
|
70
|
+
method: "POST",
|
|
71
|
+
headers,
|
|
72
|
+
body: JSON.stringify(payload),
|
|
73
|
+
keepalive: true
|
|
74
|
+
});
|
|
75
|
+
if (!response.ok) {
|
|
76
|
+
throw new Error(
|
|
77
|
+
`AgentID transparency badge telemetry failed (status=${response.status})`
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function AgentIDTransparencyBadge(props) {
|
|
82
|
+
const placement = props.placement ?? "chat-header";
|
|
83
|
+
const fixed = props.fixed ?? true;
|
|
84
|
+
const text = resolveBadgeMessage({
|
|
85
|
+
metadata: props.metadata,
|
|
86
|
+
message: props.message
|
|
87
|
+
});
|
|
88
|
+
const hasLoggedRenderRef = React.useRef(false);
|
|
89
|
+
React.useEffect(() => {
|
|
90
|
+
if (hasLoggedRenderRef.current) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
hasLoggedRenderRef.current = true;
|
|
94
|
+
void sendTransparencyBadgeRenderedTelemetry({
|
|
95
|
+
telemetry: props.telemetry,
|
|
96
|
+
disclosureText: text,
|
|
97
|
+
placement
|
|
98
|
+
}).catch((error) => {
|
|
99
|
+
if (typeof props.telemetry.onError === "function") {
|
|
100
|
+
props.telemetry.onError(error);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
console.warn(error);
|
|
104
|
+
});
|
|
105
|
+
}, [placement, props.telemetry, text]);
|
|
106
|
+
const containerStyle = placement === "watermark-overlay" ? {
|
|
107
|
+
position: fixed ? "fixed" : "absolute",
|
|
108
|
+
right: 16,
|
|
109
|
+
bottom: 16,
|
|
110
|
+
zIndex: 2147483e3,
|
|
111
|
+
pointerEvents: "none",
|
|
112
|
+
opacity: 0.95
|
|
113
|
+
} : {
|
|
114
|
+
position: fixed ? "fixed" : "sticky",
|
|
115
|
+
top: 0,
|
|
116
|
+
left: 0,
|
|
117
|
+
right: 0,
|
|
118
|
+
zIndex: 2147483e3,
|
|
119
|
+
pointerEvents: "none"
|
|
120
|
+
};
|
|
121
|
+
const badgeStyle = placement === "watermark-overlay" ? {
|
|
122
|
+
display: "inline-flex",
|
|
123
|
+
alignItems: "center",
|
|
124
|
+
gap: 8,
|
|
125
|
+
background: "rgba(15, 23, 42, 0.9)",
|
|
126
|
+
color: "#f8fafc",
|
|
127
|
+
borderRadius: 9999,
|
|
128
|
+
padding: "8px 12px",
|
|
129
|
+
fontFamily: "ui-sans-serif, -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif",
|
|
130
|
+
fontSize: 12,
|
|
131
|
+
fontWeight: 600,
|
|
132
|
+
boxShadow: "0 8px 24px rgba(15, 23, 42, 0.28)",
|
|
133
|
+
pointerEvents: "none"
|
|
134
|
+
} : {
|
|
135
|
+
display: "flex",
|
|
136
|
+
alignItems: "center",
|
|
137
|
+
justifyContent: "center",
|
|
138
|
+
gap: 8,
|
|
139
|
+
background: "#0f172a",
|
|
140
|
+
color: "#f8fafc",
|
|
141
|
+
borderBottom: "1px solid rgba(148, 163, 184, 0.35)",
|
|
142
|
+
padding: "9px 12px",
|
|
143
|
+
fontFamily: "ui-sans-serif, -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif",
|
|
144
|
+
fontSize: 13,
|
|
145
|
+
fontWeight: 600,
|
|
146
|
+
pointerEvents: "none"
|
|
147
|
+
};
|
|
148
|
+
const iconStyle = {
|
|
149
|
+
width: 22,
|
|
150
|
+
height: 22,
|
|
151
|
+
minWidth: 22,
|
|
152
|
+
borderRadius: 9999,
|
|
153
|
+
background: "#2563eb",
|
|
154
|
+
color: "#eff6ff",
|
|
155
|
+
display: "inline-flex",
|
|
156
|
+
alignItems: "center",
|
|
157
|
+
justifyContent: "center",
|
|
158
|
+
fontSize: 10,
|
|
159
|
+
fontWeight: 800,
|
|
160
|
+
letterSpacing: 0.5,
|
|
161
|
+
lineHeight: 1,
|
|
162
|
+
border: "1px solid rgba(191, 219, 254, 0.55)"
|
|
163
|
+
};
|
|
164
|
+
return /* @__PURE__ */ jsx("div", { className: props.className, style: containerStyle, "aria-live": "polite", role: "status", children: /* @__PURE__ */ jsxs("div", { style: badgeStyle, children: [
|
|
165
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": "true", style: iconStyle, children: "AI" }),
|
|
166
|
+
/* @__PURE__ */ jsx("span", { children: text })
|
|
167
|
+
] }) });
|
|
168
|
+
}
|
|
10
169
|
export {
|
|
11
170
|
AgentID,
|
|
171
|
+
AgentIDTransparencyBadge,
|
|
12
172
|
InjectionScanner,
|
|
13
173
|
OpenAIAdapter,
|
|
14
174
|
PIIManager,
|
package/dist/langchain.d.mts
CHANGED
package/dist/langchain.d.ts
CHANGED
package/dist/langchain.js
CHANGED
|
@@ -27,7 +27,7 @@ var import_base = require("@langchain/core/callbacks/base");
|
|
|
27
27
|
|
|
28
28
|
// src/sdk-version.ts
|
|
29
29
|
var FALLBACK_SDK_VERSION = "js-0.0.0-dev";
|
|
30
|
-
var AGENTID_SDK_VERSION_HEADER = "js-0.1.
|
|
30
|
+
var AGENTID_SDK_VERSION_HEADER = "js-0.1.24".trim().length > 0 ? "js-0.1.24" : FALLBACK_SDK_VERSION;
|
|
31
31
|
|
|
32
32
|
// src/pii-national-identifiers.ts
|
|
33
33
|
var REGION_ANCHORS = {
|
|
@@ -215,6 +215,21 @@ var SecurityBlockError = class extends Error {
|
|
|
215
215
|
function safeString(val) {
|
|
216
216
|
return typeof val === "string" ? val : "";
|
|
217
217
|
}
|
|
218
|
+
function coerceTransparencyMetadata(value) {
|
|
219
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
220
|
+
return void 0;
|
|
221
|
+
}
|
|
222
|
+
const raw = value;
|
|
223
|
+
if (raw.is_ai_generated !== true || raw.disclosure !== "You are interacting with an AI." || raw.article !== "EU_AI_ACT_ARTICLE_50" || raw.injection_mode !== "deterministic") {
|
|
224
|
+
return void 0;
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
is_ai_generated: true,
|
|
228
|
+
disclosure: "You are interacting with an AI.",
|
|
229
|
+
article: "EU_AI_ACT_ARTICLE_50",
|
|
230
|
+
injection_mode: "deterministic"
|
|
231
|
+
};
|
|
232
|
+
}
|
|
218
233
|
function callbackDebugEnabled() {
|
|
219
234
|
try {
|
|
220
235
|
return typeof process !== "undefined" && process?.env?.AGENTID_DEBUG_CALLBACK === "1";
|
|
@@ -483,6 +498,7 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
|
|
|
483
498
|
}
|
|
484
499
|
const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
|
|
485
500
|
const modelName = extractModel(serialized, extraParams);
|
|
501
|
+
const pipelineStartedAtMs = Date.now();
|
|
486
502
|
const verdict = await this.agent.guard({
|
|
487
503
|
input: sanitizedInput,
|
|
488
504
|
system_id: this.systemId,
|
|
@@ -495,6 +511,8 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
|
|
|
495
511
|
}
|
|
496
512
|
const canonicalClientEventId = isUuidLike(verdict.client_event_id) ? verdict.client_event_id.trim() : requestedClientEventId;
|
|
497
513
|
const guardEventId = typeof verdict.guard_event_id === "string" && verdict.guard_event_id.length > 0 ? verdict.guard_event_id : void 0;
|
|
514
|
+
const guardLatencyMs = typeof verdict.guard_latency_ms === "number" && Number.isFinite(verdict.guard_latency_ms) ? Math.max(0, Math.trunc(verdict.guard_latency_ms)) : Math.max(0, Date.now() - pipelineStartedAtMs);
|
|
515
|
+
const transparency = coerceTransparencyMetadata(verdict.transparency);
|
|
498
516
|
let transformedInput = typeof verdict.transformed_input === "string" && verdict.transformed_input.length > 0 ? verdict.transformed_input : sanitizedInput;
|
|
499
517
|
if (transformedInput !== sanitizedInput) {
|
|
500
518
|
const mutated = setPromptInPrompts(prompts, transformedInput);
|
|
@@ -505,9 +523,12 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
|
|
|
505
523
|
this.runs.set(id, {
|
|
506
524
|
input: transformedInput,
|
|
507
525
|
startedAtMs: Date.now(),
|
|
526
|
+
pipelineStartedAtMs,
|
|
527
|
+
guardLatencyMs,
|
|
508
528
|
model: modelName,
|
|
509
529
|
clientEventId: canonicalClientEventId,
|
|
510
|
-
guardEventId
|
|
530
|
+
guardEventId,
|
|
531
|
+
transparency
|
|
511
532
|
});
|
|
512
533
|
logCallbackDebug("handleLLMStart state_set", {
|
|
513
534
|
runId: id,
|
|
@@ -534,6 +555,7 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
|
|
|
534
555
|
}
|
|
535
556
|
const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
|
|
536
557
|
const modelName = extractModel(serialized, extraParams);
|
|
558
|
+
const pipelineStartedAtMs = Date.now();
|
|
537
559
|
const verdict = await this.agent.guard({
|
|
538
560
|
input: sanitizedInput,
|
|
539
561
|
system_id: this.systemId,
|
|
@@ -546,6 +568,8 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
|
|
|
546
568
|
}
|
|
547
569
|
const canonicalClientEventId = isUuidLike(verdict.client_event_id) ? verdict.client_event_id.trim() : requestedClientEventId;
|
|
548
570
|
const guardEventId = typeof verdict.guard_event_id === "string" && verdict.guard_event_id.length > 0 ? verdict.guard_event_id : void 0;
|
|
571
|
+
const guardLatencyMs = typeof verdict.guard_latency_ms === "number" && Number.isFinite(verdict.guard_latency_ms) ? Math.max(0, Math.trunc(verdict.guard_latency_ms)) : Math.max(0, Date.now() - pipelineStartedAtMs);
|
|
572
|
+
const transparency = coerceTransparencyMetadata(verdict.transparency);
|
|
549
573
|
let transformedInput = typeof verdict.transformed_input === "string" && verdict.transformed_input.length > 0 ? verdict.transformed_input : sanitizedInput;
|
|
550
574
|
if (transformedInput !== sanitizedInput) {
|
|
551
575
|
const mutated = setPromptInMessages(messages, transformedInput);
|
|
@@ -556,9 +580,12 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
|
|
|
556
580
|
this.runs.set(id, {
|
|
557
581
|
input: transformedInput,
|
|
558
582
|
startedAtMs: Date.now(),
|
|
583
|
+
pipelineStartedAtMs,
|
|
584
|
+
guardLatencyMs,
|
|
559
585
|
model: modelName,
|
|
560
586
|
clientEventId: canonicalClientEventId,
|
|
561
|
-
guardEventId
|
|
587
|
+
guardEventId,
|
|
588
|
+
transparency
|
|
562
589
|
});
|
|
563
590
|
logCallbackDebug("handleChatModelStart state_set", {
|
|
564
591
|
runId: id,
|
|
@@ -575,7 +602,11 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
|
|
|
575
602
|
return;
|
|
576
603
|
}
|
|
577
604
|
this.runs.delete(id);
|
|
578
|
-
const
|
|
605
|
+
const modelLatencyMs = Math.max(0, Date.now() - state.startedAtMs);
|
|
606
|
+
const totalPipelineLatencyMs = Math.max(
|
|
607
|
+
0,
|
|
608
|
+
Date.now() - (state.pipelineStartedAtMs ?? state.startedAtMs)
|
|
609
|
+
);
|
|
579
610
|
const outText = extractOutputText(output);
|
|
580
611
|
const usage = extractTokenUsage(output);
|
|
581
612
|
const metadata = {};
|
|
@@ -585,6 +616,14 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
|
|
|
585
616
|
if (state.guardEventId) {
|
|
586
617
|
metadata.guard_event_id = state.guardEventId;
|
|
587
618
|
}
|
|
619
|
+
if (typeof state.guardLatencyMs === "number" && Number.isFinite(state.guardLatencyMs)) {
|
|
620
|
+
metadata.guard_latency_ms = state.guardLatencyMs;
|
|
621
|
+
}
|
|
622
|
+
if (state.transparency) {
|
|
623
|
+
metadata.transparency = state.transparency;
|
|
624
|
+
}
|
|
625
|
+
metadata.model_latency_ms = modelLatencyMs;
|
|
626
|
+
metadata.total_pipeline_latency_ms = totalPipelineLatencyMs;
|
|
588
627
|
const resolvedModel = state.model ?? extractModelFromOutput(output) ?? "unknown";
|
|
589
628
|
await this.agent.log({
|
|
590
629
|
system_id: this.systemId,
|
|
@@ -593,7 +632,7 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
|
|
|
593
632
|
event_id: state.clientEventId,
|
|
594
633
|
model: resolvedModel,
|
|
595
634
|
usage,
|
|
596
|
-
latency,
|
|
635
|
+
latency: modelLatencyMs,
|
|
597
636
|
metadata: Object.keys(metadata).length > 0 ? metadata : void 0,
|
|
598
637
|
client_capabilities: this.getLangchainCapabilities()
|
|
599
638
|
}, this.requestOptions);
|
|
@@ -617,6 +656,12 @@ var AgentIDCallbackHandler = class extends import_base.BaseCallbackHandler {
|
|
|
617
656
|
if (state?.guardEventId) {
|
|
618
657
|
metadata.guard_event_id = state.guardEventId;
|
|
619
658
|
}
|
|
659
|
+
if (typeof state?.guardLatencyMs === "number" && Number.isFinite(state.guardLatencyMs)) {
|
|
660
|
+
metadata.guard_latency_ms = state.guardLatencyMs;
|
|
661
|
+
}
|
|
662
|
+
if (state?.transparency) {
|
|
663
|
+
metadata.transparency = state.transparency;
|
|
664
|
+
}
|
|
620
665
|
await this.agent.log({
|
|
621
666
|
system_id: this.systemId,
|
|
622
667
|
input: state?.input ?? "",
|
package/dist/langchain.mjs
CHANGED
|
@@ -1,12 +1,27 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SecurityBlockError
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JLHAS2EE.mjs";
|
|
4
4
|
|
|
5
5
|
// src/langchain.ts
|
|
6
6
|
import { BaseCallbackHandler } from "@langchain/core/callbacks/base";
|
|
7
7
|
function safeString(val) {
|
|
8
8
|
return typeof val === "string" ? val : "";
|
|
9
9
|
}
|
|
10
|
+
function coerceTransparencyMetadata(value) {
|
|
11
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
12
|
+
return void 0;
|
|
13
|
+
}
|
|
14
|
+
const raw = value;
|
|
15
|
+
if (raw.is_ai_generated !== true || raw.disclosure !== "You are interacting with an AI." || raw.article !== "EU_AI_ACT_ARTICLE_50" || raw.injection_mode !== "deterministic") {
|
|
16
|
+
return void 0;
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
is_ai_generated: true,
|
|
20
|
+
disclosure: "You are interacting with an AI.",
|
|
21
|
+
article: "EU_AI_ACT_ARTICLE_50",
|
|
22
|
+
injection_mode: "deterministic"
|
|
23
|
+
};
|
|
24
|
+
}
|
|
10
25
|
function callbackDebugEnabled() {
|
|
11
26
|
try {
|
|
12
27
|
return typeof process !== "undefined" && process?.env?.AGENTID_DEBUG_CALLBACK === "1";
|
|
@@ -275,6 +290,7 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
275
290
|
}
|
|
276
291
|
const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
|
|
277
292
|
const modelName = extractModel(serialized, extraParams);
|
|
293
|
+
const pipelineStartedAtMs = Date.now();
|
|
278
294
|
const verdict = await this.agent.guard({
|
|
279
295
|
input: sanitizedInput,
|
|
280
296
|
system_id: this.systemId,
|
|
@@ -287,6 +303,8 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
287
303
|
}
|
|
288
304
|
const canonicalClientEventId = isUuidLike(verdict.client_event_id) ? verdict.client_event_id.trim() : requestedClientEventId;
|
|
289
305
|
const guardEventId = typeof verdict.guard_event_id === "string" && verdict.guard_event_id.length > 0 ? verdict.guard_event_id : void 0;
|
|
306
|
+
const guardLatencyMs = typeof verdict.guard_latency_ms === "number" && Number.isFinite(verdict.guard_latency_ms) ? Math.max(0, Math.trunc(verdict.guard_latency_ms)) : Math.max(0, Date.now() - pipelineStartedAtMs);
|
|
307
|
+
const transparency = coerceTransparencyMetadata(verdict.transparency);
|
|
290
308
|
let transformedInput = typeof verdict.transformed_input === "string" && verdict.transformed_input.length > 0 ? verdict.transformed_input : sanitizedInput;
|
|
291
309
|
if (transformedInput !== sanitizedInput) {
|
|
292
310
|
const mutated = setPromptInPrompts(prompts, transformedInput);
|
|
@@ -297,9 +315,12 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
297
315
|
this.runs.set(id, {
|
|
298
316
|
input: transformedInput,
|
|
299
317
|
startedAtMs: Date.now(),
|
|
318
|
+
pipelineStartedAtMs,
|
|
319
|
+
guardLatencyMs,
|
|
300
320
|
model: modelName,
|
|
301
321
|
clientEventId: canonicalClientEventId,
|
|
302
|
-
guardEventId
|
|
322
|
+
guardEventId,
|
|
323
|
+
transparency
|
|
303
324
|
});
|
|
304
325
|
logCallbackDebug("handleLLMStart state_set", {
|
|
305
326
|
runId: id,
|
|
@@ -326,6 +347,7 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
326
347
|
}
|
|
327
348
|
const requestedClientEventId = isUuidLike(id) ? id.trim() : createClientEventId();
|
|
328
349
|
const modelName = extractModel(serialized, extraParams);
|
|
350
|
+
const pipelineStartedAtMs = Date.now();
|
|
329
351
|
const verdict = await this.agent.guard({
|
|
330
352
|
input: sanitizedInput,
|
|
331
353
|
system_id: this.systemId,
|
|
@@ -338,6 +360,8 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
338
360
|
}
|
|
339
361
|
const canonicalClientEventId = isUuidLike(verdict.client_event_id) ? verdict.client_event_id.trim() : requestedClientEventId;
|
|
340
362
|
const guardEventId = typeof verdict.guard_event_id === "string" && verdict.guard_event_id.length > 0 ? verdict.guard_event_id : void 0;
|
|
363
|
+
const guardLatencyMs = typeof verdict.guard_latency_ms === "number" && Number.isFinite(verdict.guard_latency_ms) ? Math.max(0, Math.trunc(verdict.guard_latency_ms)) : Math.max(0, Date.now() - pipelineStartedAtMs);
|
|
364
|
+
const transparency = coerceTransparencyMetadata(verdict.transparency);
|
|
341
365
|
let transformedInput = typeof verdict.transformed_input === "string" && verdict.transformed_input.length > 0 ? verdict.transformed_input : sanitizedInput;
|
|
342
366
|
if (transformedInput !== sanitizedInput) {
|
|
343
367
|
const mutated = setPromptInMessages(messages, transformedInput);
|
|
@@ -348,9 +372,12 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
348
372
|
this.runs.set(id, {
|
|
349
373
|
input: transformedInput,
|
|
350
374
|
startedAtMs: Date.now(),
|
|
375
|
+
pipelineStartedAtMs,
|
|
376
|
+
guardLatencyMs,
|
|
351
377
|
model: modelName,
|
|
352
378
|
clientEventId: canonicalClientEventId,
|
|
353
|
-
guardEventId
|
|
379
|
+
guardEventId,
|
|
380
|
+
transparency
|
|
354
381
|
});
|
|
355
382
|
logCallbackDebug("handleChatModelStart state_set", {
|
|
356
383
|
runId: id,
|
|
@@ -367,7 +394,11 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
367
394
|
return;
|
|
368
395
|
}
|
|
369
396
|
this.runs.delete(id);
|
|
370
|
-
const
|
|
397
|
+
const modelLatencyMs = Math.max(0, Date.now() - state.startedAtMs);
|
|
398
|
+
const totalPipelineLatencyMs = Math.max(
|
|
399
|
+
0,
|
|
400
|
+
Date.now() - (state.pipelineStartedAtMs ?? state.startedAtMs)
|
|
401
|
+
);
|
|
371
402
|
const outText = extractOutputText(output);
|
|
372
403
|
const usage = extractTokenUsage(output);
|
|
373
404
|
const metadata = {};
|
|
@@ -377,6 +408,14 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
377
408
|
if (state.guardEventId) {
|
|
378
409
|
metadata.guard_event_id = state.guardEventId;
|
|
379
410
|
}
|
|
411
|
+
if (typeof state.guardLatencyMs === "number" && Number.isFinite(state.guardLatencyMs)) {
|
|
412
|
+
metadata.guard_latency_ms = state.guardLatencyMs;
|
|
413
|
+
}
|
|
414
|
+
if (state.transparency) {
|
|
415
|
+
metadata.transparency = state.transparency;
|
|
416
|
+
}
|
|
417
|
+
metadata.model_latency_ms = modelLatencyMs;
|
|
418
|
+
metadata.total_pipeline_latency_ms = totalPipelineLatencyMs;
|
|
380
419
|
const resolvedModel = state.model ?? extractModelFromOutput(output) ?? "unknown";
|
|
381
420
|
await this.agent.log({
|
|
382
421
|
system_id: this.systemId,
|
|
@@ -385,7 +424,7 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
385
424
|
event_id: state.clientEventId,
|
|
386
425
|
model: resolvedModel,
|
|
387
426
|
usage,
|
|
388
|
-
latency,
|
|
427
|
+
latency: modelLatencyMs,
|
|
389
428
|
metadata: Object.keys(metadata).length > 0 ? metadata : void 0,
|
|
390
429
|
client_capabilities: this.getLangchainCapabilities()
|
|
391
430
|
}, this.requestOptions);
|
|
@@ -409,6 +448,12 @@ var AgentIDCallbackHandler = class extends BaseCallbackHandler {
|
|
|
409
448
|
if (state?.guardEventId) {
|
|
410
449
|
metadata.guard_event_id = state.guardEventId;
|
|
411
450
|
}
|
|
451
|
+
if (typeof state?.guardLatencyMs === "number" && Number.isFinite(state.guardLatencyMs)) {
|
|
452
|
+
metadata.guard_latency_ms = state.guardLatencyMs;
|
|
453
|
+
}
|
|
454
|
+
if (state?.transparency) {
|
|
455
|
+
metadata.transparency = state.transparency;
|
|
456
|
+
}
|
|
412
457
|
await this.agent.log({
|
|
413
458
|
system_id: this.systemId,
|
|
414
459
|
input: state?.input ?? "",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentid-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.24",
|
|
4
4
|
"description": "AgentID JavaScript/TypeScript SDK for guard, ingest, tracing, and analytics.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://agentid.ai",
|
|
@@ -40,8 +40,9 @@
|
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"@langchain/core": "^0.3.0 || ^1.0.0",
|
|
43
|
+
"langchain": "^0.1.0",
|
|
43
44
|
"openai": "^4.0.0 || ^5.0.0 || ^6.0.0",
|
|
44
|
-
"
|
|
45
|
+
"react": "^18.0.0 || ^19.0.0"
|
|
45
46
|
},
|
|
46
47
|
"peerDependenciesMeta": {
|
|
47
48
|
"@langchain/core": {
|
|
@@ -49,10 +50,17 @@
|
|
|
49
50
|
},
|
|
50
51
|
"langchain": {
|
|
51
52
|
"optional": true
|
|
53
|
+
},
|
|
54
|
+
"react": {
|
|
55
|
+
"optional": true
|
|
52
56
|
}
|
|
53
57
|
},
|
|
54
58
|
"devDependencies": {
|
|
59
|
+
"@types/react": "^19.2.2",
|
|
55
60
|
"tsup": "^8.3.5",
|
|
56
61
|
"typescript": "^5.0.0"
|
|
62
|
+
},
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"agentid-sdk": "^0.1.21"
|
|
57
65
|
}
|
|
58
66
|
}
|