risicare 0.4.0 → 0.4.2
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/frameworks/instructor.cjs +94 -81
- package/dist/frameworks/instructor.cjs.map +1 -1
- package/dist/frameworks/instructor.d.cts +19 -7
- package/dist/frameworks/instructor.d.ts +19 -7
- package/dist/frameworks/instructor.js +94 -83
- package/dist/frameworks/instructor.js.map +1 -1
- package/dist/frameworks/langchain.cjs +192 -101
- package/dist/frameworks/langchain.cjs.map +1 -1
- package/dist/frameworks/langchain.d.cts +97 -3
- package/dist/frameworks/langchain.d.ts +97 -3
- package/dist/frameworks/langchain.js +196 -101
- package/dist/frameworks/langchain.js.map +1 -1
- package/dist/frameworks/langgraph.cjs +192 -101
- package/dist/frameworks/langgraph.cjs.map +1 -1
- package/dist/frameworks/langgraph.js +196 -101
- package/dist/frameworks/langgraph.js.map +1 -1
- package/dist/frameworks/llamaindex.cjs +92 -74
- package/dist/frameworks/llamaindex.cjs.map +1 -1
- package/dist/frameworks/llamaindex.d.cts +33 -17
- package/dist/frameworks/llamaindex.d.ts +33 -17
- package/dist/frameworks/llamaindex.js +92 -76
- package/dist/frameworks/llamaindex.js.map +1 -1
- package/dist/index.cjs +2681 -2367
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +35 -1
- package/dist/index.d.ts +35 -1
- package/dist/index.js +2613 -2318
- package/dist/index.js.map +1 -1
- package/dist/providers/anthropic/index.cjs +41 -49
- package/dist/providers/anthropic/index.cjs.map +1 -1
- package/dist/providers/anthropic/index.js +41 -51
- package/dist/providers/anthropic/index.js.map +1 -1
- package/dist/providers/bedrock/index.cjs +64 -59
- package/dist/providers/bedrock/index.cjs.map +1 -1
- package/dist/providers/bedrock/index.d.cts +13 -1
- package/dist/providers/bedrock/index.d.ts +13 -1
- package/dist/providers/bedrock/index.js +63 -61
- package/dist/providers/bedrock/index.js.map +1 -1
- package/dist/providers/cerebras/index.cjs +41 -49
- package/dist/providers/cerebras/index.cjs.map +1 -1
- package/dist/providers/cerebras/index.js +41 -51
- package/dist/providers/cerebras/index.js.map +1 -1
- package/dist/providers/cohere/index.cjs +43 -51
- package/dist/providers/cohere/index.cjs.map +1 -1
- package/dist/providers/cohere/index.js +43 -53
- package/dist/providers/cohere/index.js.map +1 -1
- package/dist/providers/google/index.cjs +41 -49
- package/dist/providers/google/index.cjs.map +1 -1
- package/dist/providers/google/index.js +41 -51
- package/dist/providers/google/index.js.map +1 -1
- package/dist/providers/groq/index.cjs +41 -49
- package/dist/providers/groq/index.cjs.map +1 -1
- package/dist/providers/groq/index.js +41 -51
- package/dist/providers/groq/index.js.map +1 -1
- package/dist/providers/huggingface/index.cjs +41 -49
- package/dist/providers/huggingface/index.cjs.map +1 -1
- package/dist/providers/huggingface/index.js +41 -51
- package/dist/providers/huggingface/index.js.map +1 -1
- package/dist/providers/mistral/index.cjs +45 -53
- package/dist/providers/mistral/index.cjs.map +1 -1
- package/dist/providers/mistral/index.js +45 -55
- package/dist/providers/mistral/index.js.map +1 -1
- package/dist/providers/ollama/index.cjs +49 -49
- package/dist/providers/ollama/index.cjs.map +1 -1
- package/dist/providers/ollama/index.js +49 -51
- package/dist/providers/ollama/index.js.map +1 -1
- package/dist/providers/openai/index.cjs +44 -50
- package/dist/providers/openai/index.cjs.map +1 -1
- package/dist/providers/openai/index.js +44 -52
- package/dist/providers/openai/index.js.map +1 -1
- package/dist/providers/together/index.cjs +41 -49
- package/dist/providers/together/index.cjs.map +1 -1
- package/dist/providers/together/index.js +41 -51
- package/dist/providers/together/index.js.map +1 -1
- package/dist/providers/vercel-ai/index.cjs +28 -43
- package/dist/providers/vercel-ai/index.cjs.map +1 -1
- package/dist/providers/vercel-ai/index.js +28 -45
- package/dist/providers/vercel-ai/index.js.map +1 -1
- package/package.json +94 -33
|
@@ -1,34 +1,8 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// src/globals.ts
|
|
7
|
-
import { AsyncLocalStorage } from "async_hooks";
|
|
8
|
-
function getTracer() {
|
|
9
|
-
return G[PREFIX + "tracer"];
|
|
10
|
-
}
|
|
11
|
-
function getContextStorage() {
|
|
12
|
-
if (!G[PREFIX + "ctx"]) {
|
|
13
|
-
G[PREFIX + "ctx"] = new AsyncLocalStorage();
|
|
14
|
-
}
|
|
15
|
-
return G[PREFIX + "ctx"];
|
|
16
|
-
}
|
|
17
|
-
var G, PREFIX;
|
|
18
|
-
var init_globals = __esm({
|
|
19
|
-
"src/globals.ts"() {
|
|
20
|
-
"use strict";
|
|
21
|
-
G = globalThis;
|
|
22
|
-
PREFIX = "__risicare_";
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
// src/utils/log.ts
|
|
27
|
-
var init_log = __esm({
|
|
28
|
-
"src/utils/log.ts"() {
|
|
29
|
-
"use strict";
|
|
30
|
-
init_globals();
|
|
31
|
-
}
|
|
1
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
+
}) : x)(function(x) {
|
|
4
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
5
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
32
6
|
});
|
|
33
7
|
|
|
34
8
|
// src/ids.ts
|
|
@@ -104,8 +78,24 @@ var NOOP_SPAN = Object.freeze({
|
|
|
104
78
|
}
|
|
105
79
|
});
|
|
106
80
|
|
|
81
|
+
// src/globals.ts
|
|
82
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
83
|
+
var G = globalThis;
|
|
84
|
+
var PREFIX = "__risicare_";
|
|
85
|
+
function getTracer() {
|
|
86
|
+
return G[PREFIX + "tracer"];
|
|
87
|
+
}
|
|
88
|
+
function getContextStorage() {
|
|
89
|
+
if (!G[PREFIX + "ctx"]) {
|
|
90
|
+
G[PREFIX + "ctx"] = new AsyncLocalStorage();
|
|
91
|
+
}
|
|
92
|
+
return G[PREFIX + "ctx"];
|
|
93
|
+
}
|
|
94
|
+
function getDebug() {
|
|
95
|
+
return G[PREFIX + "debug"] ?? false;
|
|
96
|
+
}
|
|
97
|
+
|
|
107
98
|
// src/context/storage.ts
|
|
108
|
-
init_globals();
|
|
109
99
|
function storage() {
|
|
110
100
|
return getContextStorage();
|
|
111
101
|
}
|
|
@@ -118,15 +108,18 @@ function runWithContext(overrides, fn) {
|
|
|
118
108
|
return storage().run(merged, fn);
|
|
119
109
|
}
|
|
120
110
|
|
|
121
|
-
// src/
|
|
122
|
-
|
|
111
|
+
// src/utils/log.ts
|
|
112
|
+
function debug(msg) {
|
|
113
|
+
if (getDebug()) {
|
|
114
|
+
process.stderr.write(`[risicare] ${msg}
|
|
115
|
+
`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
123
118
|
|
|
124
|
-
// src/
|
|
125
|
-
|
|
119
|
+
// src/runtime/applier.ts
|
|
120
|
+
import { createHash } from "crypto";
|
|
126
121
|
|
|
127
122
|
// src/client.ts
|
|
128
|
-
init_log();
|
|
129
|
-
init_globals();
|
|
130
123
|
function getTracer2() {
|
|
131
124
|
return getTracer();
|
|
132
125
|
}
|
|
@@ -138,9 +131,61 @@ function suppressProviderInstrumentation(fn) {
|
|
|
138
131
|
}
|
|
139
132
|
|
|
140
133
|
// src/frameworks/langchain.ts
|
|
141
|
-
|
|
134
|
+
function resolveBaseCallbackHandler() {
|
|
135
|
+
try {
|
|
136
|
+
const { createRequire } = __require("module");
|
|
137
|
+
const req = createRequire(import.meta.url);
|
|
138
|
+
const mod = req("@langchain/core/callbacks/base");
|
|
139
|
+
if (mod?.BaseCallbackHandler) {
|
|
140
|
+
return mod.BaseCallbackHandler;
|
|
141
|
+
}
|
|
142
|
+
} catch {
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
const mod = __require("@langchain/core/callbacks/base");
|
|
146
|
+
if (mod?.BaseCallbackHandler) {
|
|
147
|
+
return mod.BaseCallbackHandler;
|
|
148
|
+
}
|
|
149
|
+
} catch {
|
|
150
|
+
debug("RisicareCallbackHandler: @langchain/core not installed; handler will not satisfy LangChain v0.2+ instanceof check");
|
|
151
|
+
}
|
|
152
|
+
return Object;
|
|
153
|
+
}
|
|
154
|
+
var _BaseCallbackHandler = resolveBaseCallbackHandler();
|
|
155
|
+
var RisicareCallbackHandler = class _RisicareCallbackHandler extends _BaseCallbackHandler {
|
|
156
|
+
// PR-4+5 review B1: duck-type markers that LangChain v0.3's
|
|
157
|
+
// `isBaseCallbackHandler(x)` checks. This is the ONLY reliable way to be
|
|
158
|
+
// recognised across the CJS↔ESM identity split — `instanceof` cannot work
|
|
159
|
+
// when our `createRequire`-loaded BaseCallbackHandler is a different
|
|
160
|
+
// class object from the customer's ESM-imported BaseCallbackHandler.
|
|
161
|
+
// Keep these as instance properties (not prototype) so they survive any
|
|
162
|
+
// Object-fallback path when @langchain/core is absent.
|
|
142
163
|
name = "RisicareCallbackHandler";
|
|
164
|
+
awaitHandlers = true;
|
|
165
|
+
ignoreLLM = false;
|
|
166
|
+
ignoreChain = false;
|
|
167
|
+
ignoreAgent = false;
|
|
168
|
+
ignoreRetriever = false;
|
|
169
|
+
ignoreCustomEvent = false;
|
|
170
|
+
raiseError = false;
|
|
171
|
+
lc_serializable = false;
|
|
172
|
+
lc_kwargs = {};
|
|
143
173
|
_spans = /* @__PURE__ */ new Map();
|
|
174
|
+
constructor() {
|
|
175
|
+
super();
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Required by LangChain's `isBaseCallbackHandler(x)` duck-type check
|
|
179
|
+
* (`typeof x.copy === 'function'`). When @langchain/core is installed
|
|
180
|
+
* BaseCallbackHandler's prototype provides its own `copy()`; this
|
|
181
|
+
* declaration overrides with a Risicare-aware copy that re-instantiates
|
|
182
|
+
* — sufficient for the handler-cloning paths LangChain uses internally
|
|
183
|
+
* (e.g., per-run isolation in concurrent chains). Spans map starts empty
|
|
184
|
+
* because a fresh handler should not share span state with its parent.
|
|
185
|
+
*/
|
|
186
|
+
copy() {
|
|
187
|
+
return new _RisicareCallbackHandler();
|
|
188
|
+
}
|
|
144
189
|
/**
|
|
145
190
|
* Run a function with provider instrumentation suppressed.
|
|
146
191
|
*
|
|
@@ -157,57 +202,75 @@ var RisicareCallbackHandler = class {
|
|
|
157
202
|
withSuppression(fn) {
|
|
158
203
|
return suppressProviderInstrumentation(fn);
|
|
159
204
|
}
|
|
160
|
-
// ──
|
|
161
|
-
|
|
205
|
+
// ── Internal helpers ──────────────────────────────────────────────────────
|
|
206
|
+
_startSpan(runId, parentRunId, name, kind, extraAttrs = {}) {
|
|
162
207
|
const tracer = getTracer2();
|
|
163
208
|
if (!tracer?.enabled) return;
|
|
164
209
|
const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
|
|
165
210
|
const span = tracer.createSpan({
|
|
166
|
-
name
|
|
167
|
-
kind
|
|
211
|
+
name,
|
|
212
|
+
kind,
|
|
168
213
|
parentSpanId: parentEntry?.span.spanId,
|
|
169
214
|
traceId: parentEntry?.span.traceId,
|
|
170
215
|
attributes: {
|
|
171
|
-
|
|
216
|
+
framework: "langchain",
|
|
172
217
|
"langchain.run_id": runId,
|
|
173
218
|
...parentRunId ? { "langchain.parent_run_id": parentRunId } : {},
|
|
174
|
-
...
|
|
219
|
+
...extraAttrs
|
|
175
220
|
}
|
|
176
221
|
});
|
|
177
222
|
this._spans.set(runId, { span, startTime: Date.now() });
|
|
178
223
|
}
|
|
179
|
-
|
|
224
|
+
_endSpan(runId, extraAttrs = {}) {
|
|
180
225
|
const entry = this._spans.get(runId);
|
|
181
226
|
if (!entry) return;
|
|
227
|
+
for (const [k, v] of Object.entries(extraAttrs)) {
|
|
228
|
+
entry.span.setAttribute(k, v);
|
|
229
|
+
}
|
|
182
230
|
entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
|
|
183
231
|
entry.span.end();
|
|
184
232
|
this._spans.delete(runId);
|
|
185
233
|
}
|
|
186
|
-
|
|
234
|
+
_errorSpan(runId, error) {
|
|
187
235
|
const entry = this._spans.get(runId);
|
|
188
236
|
if (!entry) return;
|
|
189
237
|
entry.span.recordException(error);
|
|
190
238
|
entry.span.end();
|
|
191
239
|
this._spans.delete(runId);
|
|
192
240
|
}
|
|
241
|
+
// ── Chain lifecycle ────────────────────────────────────────────────────────
|
|
242
|
+
handleChainStart(chain, _inputs, runId, parentRunId) {
|
|
243
|
+
this._startSpan(runId, parentRunId, chain.name || chain._type || "chain", "internal" /* INTERNAL */, {
|
|
244
|
+
...chain._type ? { "langchain.chain_type": chain._type } : {}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
handleChainEnd(_outputs, runId) {
|
|
248
|
+
this._endSpan(runId);
|
|
249
|
+
}
|
|
250
|
+
handleChainError(error, runId) {
|
|
251
|
+
this._errorSpan(runId, error);
|
|
252
|
+
}
|
|
193
253
|
// ── LLM lifecycle ─────────────────────────────────────────────────────────
|
|
194
254
|
handleLLMStart(llm, _prompts, runId, parentRunId) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
255
|
+
this._startSpan(runId, parentRunId, llm.name || llm._type || "llm", "llm_call" /* LLM_CALL */, {
|
|
256
|
+
"gen_ai.system": "langchain",
|
|
257
|
+
"gen_ai.prompt.count": _prompts.length
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* F-882: chat-model lifecycle — LangChain v0.2+ emits this for any
|
|
262
|
+
* ChatModel (which is EVERY production LLM today). Without this method,
|
|
263
|
+
* not a single `langchain` LLM span fires when used via LCEL.
|
|
264
|
+
*
|
|
265
|
+
* The messages payload is an array-of-arrays (one inner array per prompt);
|
|
266
|
+
* we just count rather than materialize content (PII boundary).
|
|
267
|
+
*/
|
|
268
|
+
handleChatModelStart(llm, messages, runId, parentRunId) {
|
|
269
|
+
const messageCount = Array.isArray(messages) ? messages.reduce((sum, arr) => sum + (Array.isArray(arr) ? arr.length : 0), 0) : 0;
|
|
270
|
+
this._startSpan(runId, parentRunId, llm.name || llm._type || "chat_model", "llm_call" /* LLM_CALL */, {
|
|
271
|
+
"gen_ai.system": "langchain",
|
|
272
|
+
"gen_ai.message.count": messageCount
|
|
209
273
|
});
|
|
210
|
-
this._spans.set(runId, { span, startTime: Date.now() });
|
|
211
274
|
}
|
|
212
275
|
handleLLMEnd(output, runId) {
|
|
213
276
|
const entry = this._spans.get(runId);
|
|
@@ -229,73 +292,105 @@ var RisicareCallbackHandler = class {
|
|
|
229
292
|
this._spans.delete(runId);
|
|
230
293
|
}
|
|
231
294
|
handleLLMError(error, runId) {
|
|
295
|
+
this._errorSpan(runId, error);
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* F-883: streaming-token event. We do NOT create a new span (the LLM span
|
|
299
|
+
* already exists from handleLLMStart/handleChatModelStart) — just count tokens
|
|
300
|
+
* on the existing span. This is a HIGH-FREQUENCY event; do the cheap work only.
|
|
301
|
+
*/
|
|
302
|
+
handleLLMNewToken(_token, _idx, runId) {
|
|
232
303
|
const entry = this._spans.get(runId);
|
|
233
304
|
if (!entry) return;
|
|
234
|
-
entry.span.
|
|
235
|
-
entry.span.
|
|
236
|
-
this._spans.delete(runId);
|
|
305
|
+
const prior = entry.span.attributes?.["gen_ai.stream.token_count"] ?? 0;
|
|
306
|
+
entry.span.setAttribute("gen_ai.stream.token_count", prior + 1);
|
|
237
307
|
}
|
|
238
308
|
// ── Tool lifecycle ────────────────────────────────────────────────────────
|
|
239
309
|
handleToolStart(tool, input, runId, parentRunId) {
|
|
310
|
+
this._startSpan(runId, parentRunId, tool.name || "tool", "tool_call" /* TOOL_CALL */, {
|
|
311
|
+
"tool.name": tool.name || "unknown",
|
|
312
|
+
"tool.input_length": input?.length ?? 0
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
handleToolEnd(output, runId) {
|
|
316
|
+
this._endSpan(runId, { "tool.output_length": output?.length ?? 0 });
|
|
317
|
+
}
|
|
318
|
+
handleToolError(error, runId) {
|
|
319
|
+
this._errorSpan(runId, error);
|
|
320
|
+
}
|
|
321
|
+
// ── Retriever lifecycle ───────────────────────────────────────────────────
|
|
322
|
+
handleRetrieverStart(retriever, _query, runId, parentRunId) {
|
|
323
|
+
this._startSpan(runId, parentRunId, retriever.name || "retriever", "retrieval" /* RETRIEVAL */);
|
|
324
|
+
}
|
|
325
|
+
handleRetrieverEnd(documents, runId) {
|
|
326
|
+
this._endSpan(runId, { "retriever.document_count": documents?.length ?? 0 });
|
|
327
|
+
}
|
|
328
|
+
handleRetrieverError(error, runId) {
|
|
329
|
+
this._errorSpan(runId, error);
|
|
330
|
+
}
|
|
331
|
+
// ── Agent lifecycle (F-882) ───────────────────────────────────────────────
|
|
332
|
+
/**
|
|
333
|
+
* Agent decided to take an action (call a tool). LangChain v0.2 agents emit
|
|
334
|
+
* this between LLM calls. Cheap span, no parent change.
|
|
335
|
+
*/
|
|
336
|
+
handleAgentAction(action, runId, parentRunId) {
|
|
240
337
|
const tracer = getTracer2();
|
|
241
338
|
if (!tracer?.enabled) return;
|
|
242
339
|
const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
|
|
243
340
|
const span = tracer.createSpan({
|
|
244
|
-
name: tool
|
|
245
|
-
kind: "
|
|
341
|
+
name: `agent.action:${action.tool ?? "unknown"}`,
|
|
342
|
+
kind: "internal" /* INTERNAL */,
|
|
246
343
|
parentSpanId: parentEntry?.span.spanId,
|
|
247
344
|
traceId: parentEntry?.span.traceId,
|
|
248
345
|
attributes: {
|
|
249
|
-
|
|
346
|
+
framework: "langchain",
|
|
250
347
|
"langchain.run_id": runId,
|
|
251
|
-
"tool
|
|
252
|
-
"tool.input_length": input?.length ?? 0
|
|
348
|
+
"agent.action.tool": action.tool ?? ""
|
|
253
349
|
}
|
|
254
350
|
});
|
|
255
|
-
|
|
351
|
+
span.end();
|
|
256
352
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
|
|
262
|
-
entry.span.end();
|
|
263
|
-
this._spans.delete(runId);
|
|
264
|
-
}
|
|
265
|
-
handleToolError(error, runId) {
|
|
266
|
-
const entry = this._spans.get(runId);
|
|
267
|
-
if (!entry) return;
|
|
268
|
-
entry.span.recordException(error);
|
|
269
|
-
entry.span.end();
|
|
270
|
-
this._spans.delete(runId);
|
|
271
|
-
}
|
|
272
|
-
// ── Retriever lifecycle ───────────────────────────────────────────────────
|
|
273
|
-
handleRetrieverStart(retriever, _query, runId, parentRunId) {
|
|
353
|
+
/**
|
|
354
|
+
* Agent finished (final answer produced). Mirror of handleAgentAction.
|
|
355
|
+
*/
|
|
356
|
+
handleAgentEnd(action, runId, parentRunId) {
|
|
274
357
|
const tracer = getTracer2();
|
|
275
358
|
if (!tracer?.enabled) return;
|
|
276
359
|
const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
|
|
277
360
|
const span = tracer.createSpan({
|
|
278
|
-
name:
|
|
279
|
-
kind: "
|
|
361
|
+
name: "agent.end",
|
|
362
|
+
kind: "internal" /* INTERNAL */,
|
|
280
363
|
parentSpanId: parentEntry?.span.spanId,
|
|
281
364
|
traceId: parentEntry?.span.traceId,
|
|
282
365
|
attributes: {
|
|
283
|
-
|
|
284
|
-
"langchain.run_id": runId
|
|
366
|
+
framework: "langchain",
|
|
367
|
+
"langchain.run_id": runId,
|
|
368
|
+
"agent.return_keys": action.returnValues ? Object.keys(action.returnValues).length : 0
|
|
285
369
|
}
|
|
286
370
|
});
|
|
287
|
-
|
|
371
|
+
span.end();
|
|
288
372
|
}
|
|
289
|
-
|
|
373
|
+
// ── Misc (F-882) ──────────────────────────────────────────────────────────
|
|
374
|
+
/**
|
|
375
|
+
* Free-text emission (logging-style). Used by ConversationalRetrievalChain
|
|
376
|
+
* and verbose prints. Adds an event to the current chain span if one exists.
|
|
377
|
+
*/
|
|
378
|
+
handleText(text, runId, _parentRunId) {
|
|
290
379
|
const entry = this._spans.get(runId);
|
|
291
380
|
if (!entry) return;
|
|
292
|
-
entry.span.
|
|
293
|
-
"
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
381
|
+
entry.span.addEvent("langchain.text", {
|
|
382
|
+
"text.length": text?.length ?? 0
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Custom event hook (introduced in @langchain/core 0.2.14). Customer code can
|
|
387
|
+
* `dispatchCustomEvent(name, payload)` from inside a runnable. We surface as
|
|
388
|
+
* a span event on the closest enclosing run so it shows up in the trace.
|
|
389
|
+
*/
|
|
390
|
+
handleCustomEvent(eventName, _payload, runId, _tags, _metadata) {
|
|
391
|
+
const entry = this._spans.get(runId);
|
|
392
|
+
if (!entry) return;
|
|
393
|
+
entry.span.addEvent("langchain.custom_event", { name: eventName });
|
|
299
394
|
}
|
|
300
395
|
};
|
|
301
396
|
export {
|