@illuma-ai/observability-langchain 0.1.0 → 0.2.1
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/dist/__tests__/callback-handler.test.d.ts +2 -0
- package/dist/__tests__/callback-handler.test.d.ts.map +1 -0
- package/dist/__tests__/callback-handler.test.js +415 -0
- package/dist/__tests__/callback-handler.test.js.map +1 -0
- package/dist/callback-handler.d.ts +146 -20
- package/dist/callback-handler.d.ts.map +1 -1
- package/dist/callback-handler.js +197 -47
- package/dist/callback-handler.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/package.json +44 -17
|
@@ -2,17 +2,36 @@ import { BaseCallbackHandler } from '@langchain/core/callbacks/base';
|
|
|
2
2
|
import type { Serialized } from '@langchain/core/load/serializable';
|
|
3
3
|
import type { LLMResult } from '@langchain/core/outputs';
|
|
4
4
|
import type { Document } from '@langchain/core/documents';
|
|
5
|
-
import type {
|
|
5
|
+
import type { IngestionEvent, ObservabilityClientConfig } from '@illuma-ai/observability-core';
|
|
6
|
+
/**
|
|
7
|
+
* Minimal interface that the callback handler requires from an observability client.
|
|
8
|
+
*
|
|
9
|
+
* Any concrete client that implements `enqueue`, `flush`, and `shutdown` is
|
|
10
|
+
* compatible — including `ObservabilityCoreClient` subclasses from
|
|
11
|
+
* `@illuma-ai/observability-node` or `@illuma-ai/observability-web`.
|
|
12
|
+
*/
|
|
13
|
+
export interface ObservabilityClient {
|
|
14
|
+
/** Buffer an ingestion event for later flushing. */
|
|
15
|
+
enqueue(event: IngestionEvent): void;
|
|
16
|
+
/** Flush all buffered events to the server. */
|
|
17
|
+
flush(): Promise<void>;
|
|
18
|
+
/** Flush remaining events and release resources. */
|
|
19
|
+
shutdown(): Promise<void>;
|
|
20
|
+
}
|
|
6
21
|
/**
|
|
7
22
|
* Options for constructing the ObservabilityCallbackHandler.
|
|
8
23
|
* Provide either a pre-configured `client` instance, or `clientOptions`
|
|
9
|
-
* to have the handler create one internally.
|
|
24
|
+
* to have the handler create one internally (requires `@illuma-ai/observability-node`).
|
|
10
25
|
*/
|
|
11
26
|
export interface ObservabilityCallbackHandlerOptions {
|
|
12
|
-
/** Pre-configured
|
|
13
|
-
client?:
|
|
14
|
-
/**
|
|
15
|
-
|
|
27
|
+
/** Pre-configured client instance implementing the ObservabilityClient interface */
|
|
28
|
+
client?: ObservabilityClient;
|
|
29
|
+
/**
|
|
30
|
+
* Options to construct an observability client.
|
|
31
|
+
* When provided without `client`, the handler will attempt to dynamically
|
|
32
|
+
* import `@illuma-ai/observability-node` and construct an `Observability` instance.
|
|
33
|
+
*/
|
|
34
|
+
clientOptions?: ObservabilityClientConfig;
|
|
16
35
|
/** Optional trace name override (default: "langchain-run") */
|
|
17
36
|
traceName?: string;
|
|
18
37
|
/** Optional user ID to associate with the trace */
|
|
@@ -23,6 +42,72 @@ export interface ObservabilityCallbackHandlerOptions {
|
|
|
23
42
|
tags?: string[];
|
|
24
43
|
/** Optional metadata for the trace */
|
|
25
44
|
metadata?: Record<string, unknown>;
|
|
45
|
+
/** Optional environment name (e.g., 'production', 'staging') */
|
|
46
|
+
environment?: string;
|
|
47
|
+
/** Enable debug logging for trace routing diagnostics */
|
|
48
|
+
debug?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Guardrail outcome from ranger's GuardrailTrackingMetadata.
|
|
52
|
+
*
|
|
53
|
+
* - `passed` — No violations detected, content passes through unchanged
|
|
54
|
+
* - `blocked` — Policy violation, content rejected with block message
|
|
55
|
+
* - `anonymized`— PII detected and masked (e.g., emails → [EMAIL])
|
|
56
|
+
* - `intervened`— Guardrail modified content without explicit BLOCKED action
|
|
57
|
+
*/
|
|
58
|
+
export type GuardrailOutcome = 'passed' | 'blocked' | 'anonymized' | 'intervened';
|
|
59
|
+
/**
|
|
60
|
+
* Data needed to trace a guardrail execution.
|
|
61
|
+
* Designed to be populated from ranger's GuardrailTrackingMetadata.
|
|
62
|
+
*
|
|
63
|
+
* Every guardrail invocation should be traced — not just blocked ones.
|
|
64
|
+
* The `outcome` field captures what actually happened, and `actionApplied`
|
|
65
|
+
* captures whether the outcome was enforced in the UI (action flags can
|
|
66
|
+
* disable enforcement while still recording the detection for audit).
|
|
67
|
+
*/
|
|
68
|
+
export interface GuardrailTraceData {
|
|
69
|
+
/** Human-readable name (e.g., "Input Moderation", "Output Moderation") */
|
|
70
|
+
name?: string;
|
|
71
|
+
/** The guardrail ID from the provider (e.g., AWS Bedrock guardrailId) */
|
|
72
|
+
guardrailId?: string;
|
|
73
|
+
/** Guardrail version */
|
|
74
|
+
guardrailVersion?: string;
|
|
75
|
+
/**
|
|
76
|
+
* What the guardrail decided.
|
|
77
|
+
* Maps directly to ranger's GuardrailOutcome type.
|
|
78
|
+
*/
|
|
79
|
+
outcome: GuardrailOutcome;
|
|
80
|
+
/**
|
|
81
|
+
* Whether the outcome was actually enforced in the UI.
|
|
82
|
+
* When false, the guardrail detected something but the action flag
|
|
83
|
+
* (e.g., GUARDRAILS_BLOCK_ENABLED=false) prevented enforcement.
|
|
84
|
+
* The detection is still recorded for audit/compliance.
|
|
85
|
+
*/
|
|
86
|
+
actionApplied: boolean;
|
|
87
|
+
/** AWS Bedrock top-level action: 'GUARDRAIL_INTERVENED' | 'NONE' */
|
|
88
|
+
action?: string;
|
|
89
|
+
/** Reason code from the guardrail service (e.g., 'policy_violation', 'anonymized', 'passed') */
|
|
90
|
+
reason?: string;
|
|
91
|
+
/** Source: 'INPUT' for input moderation, 'OUTPUT' for output moderation */
|
|
92
|
+
source: 'INPUT' | 'OUTPUT';
|
|
93
|
+
/** The text that was checked */
|
|
94
|
+
input?: unknown;
|
|
95
|
+
/** The guardrail output (e.g., block message, anonymized text, modified content) */
|
|
96
|
+
output?: unknown;
|
|
97
|
+
/** Original content before modification (for anonymized/intervened outcomes) */
|
|
98
|
+
originalContent?: string;
|
|
99
|
+
/** Modified content after guardrail processing */
|
|
100
|
+
modifiedContent?: string;
|
|
101
|
+
/** Violation details — array of { type, category, confidence?, action? } */
|
|
102
|
+
violations?: unknown[];
|
|
103
|
+
/** Raw AWS Bedrock assessment data (contentPolicy, topicPolicy, wordPolicy, sensitiveInformationPolicy) */
|
|
104
|
+
assessments?: unknown[];
|
|
105
|
+
/** Additional metadata */
|
|
106
|
+
metadata?: Record<string, unknown>;
|
|
107
|
+
/** When the guardrail check started */
|
|
108
|
+
startTime?: string;
|
|
109
|
+
/** When the guardrail check ended */
|
|
110
|
+
endTime?: string;
|
|
26
111
|
}
|
|
27
112
|
/**
|
|
28
113
|
* LangChain callback handler that sends trace data to Illuma Observe.
|
|
@@ -30,15 +115,17 @@ export interface ObservabilityCallbackHandlerOptions {
|
|
|
30
115
|
* The handler maps LangChain's run hierarchy to Illuma Observe's trace model:
|
|
31
116
|
* - The first (root) run lazily creates a **trace**
|
|
32
117
|
* - LLM runs create **generation** observations (with updates on end/error)
|
|
33
|
-
* - Chain
|
|
118
|
+
* - Chain runs create **chain** observations (with updates on end/error)
|
|
119
|
+
* - Tool runs create **tool** observations (with updates on end/error)
|
|
120
|
+
* - Retriever runs create **retriever** observations (with updates on end/error)
|
|
34
121
|
* - Parent/child relationships are preserved via `parentObservationId`
|
|
35
122
|
*
|
|
36
123
|
* @example
|
|
37
124
|
* ```ts
|
|
38
125
|
* import { ObservabilityCallbackHandler } from '@illuma-ai/observability-langchain';
|
|
39
|
-
* import {
|
|
126
|
+
* import { Observability } from '@illuma-ai/observability-node';
|
|
40
127
|
*
|
|
41
|
-
* const client = new
|
|
128
|
+
* const client = new Observability({
|
|
42
129
|
* publicKey: 'pk-...',
|
|
43
130
|
* secretKey: 'sk-...',
|
|
44
131
|
* baseUrl: 'https://observe.illuma.ai',
|
|
@@ -60,6 +147,8 @@ export declare class ObservabilityCallbackHandler extends BaseCallbackHandler {
|
|
|
60
147
|
private sessionId?;
|
|
61
148
|
private traceTags?;
|
|
62
149
|
private traceMetadata?;
|
|
150
|
+
private environment?;
|
|
151
|
+
private debug;
|
|
63
152
|
/**
|
|
64
153
|
* Maps LangChain runId -> internal run state.
|
|
65
154
|
* Used to correlate start/end/error callbacks for the same run.
|
|
@@ -93,14 +182,23 @@ export declare class ObservabilityCallbackHandler extends BaseCallbackHandler {
|
|
|
93
182
|
*/
|
|
94
183
|
handleLLMError(err: Error, runId: string): Promise<void>;
|
|
95
184
|
/**
|
|
96
|
-
* Called when a chain starts. Creates a
|
|
185
|
+
* Called when a chain starts. Creates a chain-create or agent-create event.
|
|
97
186
|
* If this is the first callback, the root trace is also created.
|
|
187
|
+
*
|
|
188
|
+
* Agent detection: emits `agent-create` instead of `chain-create` when:
|
|
189
|
+
* - The `_metadata.langgraph_node` value starts with `agent=` (LangGraph convention)
|
|
190
|
+
* - The chain name matches known agent patterns (AgentExecutor, Agent, etc.)
|
|
191
|
+
*
|
|
98
192
|
* @param chain - Serialized chain descriptor
|
|
99
193
|
* @param inputs - The input object passed to the chain
|
|
100
194
|
* @param runId - Unique ID for this LangChain run
|
|
101
195
|
* @param parentRunId - Parent run ID if this is a nested call
|
|
196
|
+
* @param tags - Tags from LangChain run config
|
|
197
|
+
* @param metadata - Metadata from LangChain run config (may contain langgraph_node)
|
|
198
|
+
* @param runType - LangChain run type hint
|
|
199
|
+
* @param runName - LangChain run name override
|
|
102
200
|
*/
|
|
103
|
-
handleChainStart(chain: Serialized, inputs: Record<string, unknown>, runId: string, parentRunId?: string): Promise<void>;
|
|
201
|
+
handleChainStart(chain: Serialized, inputs: Record<string, unknown>, runId: string, parentRunId?: string, tags?: string[], metadata?: Record<string, unknown>, runType?: string, runName?: string): Promise<void>;
|
|
104
202
|
/**
|
|
105
203
|
* Called when a chain completes. Creates a span-update with the outputs.
|
|
106
204
|
* @param outputs - The output object returned by the chain
|
|
@@ -114,7 +212,7 @@ export declare class ObservabilityCallbackHandler extends BaseCallbackHandler {
|
|
|
114
212
|
*/
|
|
115
213
|
handleChainError(err: Error, runId: string): Promise<void>;
|
|
116
214
|
/**
|
|
117
|
-
* Called when a tool invocation starts. Creates a
|
|
215
|
+
* Called when a tool invocation starts. Creates a tool-create event
|
|
118
216
|
* with the tool name and input.
|
|
119
217
|
* @param tool - Serialized tool descriptor
|
|
120
218
|
* @param input - The input string passed to the tool
|
|
@@ -135,7 +233,7 @@ export declare class ObservabilityCallbackHandler extends BaseCallbackHandler {
|
|
|
135
233
|
*/
|
|
136
234
|
handleToolError(err: Error, runId: string): Promise<void>;
|
|
137
235
|
/**
|
|
138
|
-
* Called when a retriever query starts. Creates a
|
|
236
|
+
* Called when a retriever query starts. Creates a retriever-create event
|
|
139
237
|
* for the retrieval operation.
|
|
140
238
|
* @param retriever - Serialized retriever descriptor
|
|
141
239
|
* @param query - The search query string
|
|
@@ -161,9 +259,20 @@ export declare class ObservabilityCallbackHandler extends BaseCallbackHandler {
|
|
|
161
259
|
* has been created yet (i.e., no callbacks have fired).
|
|
162
260
|
*/
|
|
163
261
|
getTraceId(): string | null;
|
|
262
|
+
/**
|
|
263
|
+
* Trace a guardrail execution as a child observation of the current trace.
|
|
264
|
+
*
|
|
265
|
+
* This is designed to be called externally (e.g., from ranger) to attach
|
|
266
|
+
* guardrail results to the trace, since LangChain has no native guardrail
|
|
267
|
+
* callback. Works for both input and output guardrails.
|
|
268
|
+
*
|
|
269
|
+
* @param result - The guardrail execution result
|
|
270
|
+
* @returns The observation ID of the created guardrail span, or null if no trace exists
|
|
271
|
+
*/
|
|
272
|
+
traceGuardrail(result: GuardrailTraceData): string | null;
|
|
164
273
|
/**
|
|
165
274
|
* Flush all pending events to the Illuma Observe API.
|
|
166
|
-
* Delegates to the underlying
|
|
275
|
+
* Delegates to the underlying client's flush().
|
|
167
276
|
*/
|
|
168
277
|
flushAsync(): Promise<void>;
|
|
169
278
|
/**
|
|
@@ -181,16 +290,33 @@ export declare class ObservabilityCallbackHandler extends BaseCallbackHandler {
|
|
|
181
290
|
*/
|
|
182
291
|
private ensureTrace;
|
|
183
292
|
/**
|
|
184
|
-
*
|
|
293
|
+
* Detect whether a chain is actually an agent execution.
|
|
294
|
+
* Uses two heuristics:
|
|
295
|
+
* 1. LangGraph metadata: `langgraph_node` starts with `agent=` (illuma-agents convention)
|
|
296
|
+
* 2. Chain name patterns: names like `AgentExecutor`, `Agent`, `OpenAIAgent`, etc.
|
|
297
|
+
*
|
|
298
|
+
* @param chainName - The chain's serialized name
|
|
299
|
+
* @param metadata - LangChain run metadata (may contain langgraph_node)
|
|
300
|
+
* @returns true if this chain should be treated as an agent
|
|
301
|
+
*/
|
|
302
|
+
private detectAgent;
|
|
303
|
+
/**
|
|
304
|
+
* Extract the agent ID from LangGraph metadata.
|
|
305
|
+
* The `langgraph_node` value uses the format `agent=<agentId>`.
|
|
306
|
+
*
|
|
307
|
+
* @param metadata - LangChain run metadata
|
|
308
|
+
* @returns The extracted agent ID, or undefined if not present
|
|
309
|
+
*/
|
|
310
|
+
private extractAgentId;
|
|
311
|
+
/**
|
|
312
|
+
* Create an ingestion event and enqueue it via the client's public API.
|
|
185
313
|
*
|
|
186
|
-
*
|
|
187
|
-
*
|
|
188
|
-
* Since both packages are owned by Illuma, we access the client's internal
|
|
189
|
-
* queue directly. The queue is a simple array that gets drained on flush.
|
|
314
|
+
* Uses `client.enqueue()` which handles auto-flush internally when the
|
|
315
|
+
* queue reaches the configured `flushAt` threshold.
|
|
190
316
|
*
|
|
191
317
|
* @param type - The ingestion event type (e.g., 'generation-create', 'span-update')
|
|
192
318
|
* @param body - The event body payload
|
|
193
319
|
*/
|
|
194
|
-
private
|
|
320
|
+
private enqueueEvent;
|
|
195
321
|
}
|
|
196
322
|
//# sourceMappingURL=callback-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callback-handler.d.ts","sourceRoot":"","sources":["../src/callback-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"callback-handler.d.ts","sourceRoot":"","sources":["../src/callback-handler.ts"],"names":[],"mappings":"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"}
|