risicare 0.1.5 → 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/frameworks/instructor.cjs +178 -0
- package/dist/frameworks/instructor.cjs.map +1 -0
- package/dist/frameworks/instructor.d.cts +28 -0
- package/dist/frameworks/instructor.d.ts +28 -0
- package/dist/frameworks/instructor.js +151 -0
- package/dist/frameworks/instructor.js.map +1 -0
- package/dist/frameworks/langchain.cjs +262 -0
- package/dist/frameworks/langchain.cjs.map +1 -0
- package/dist/frameworks/langchain.d.cts +45 -0
- package/dist/frameworks/langchain.d.ts +45 -0
- package/dist/frameworks/langchain.js +235 -0
- package/dist/frameworks/langchain.js.map +1 -0
- package/dist/frameworks/langgraph.cjs +296 -0
- package/dist/frameworks/langgraph.cjs.map +1 -0
- package/dist/frameworks/langgraph.d.cts +28 -0
- package/dist/frameworks/langgraph.d.ts +28 -0
- package/dist/frameworks/langgraph.js +269 -0
- package/dist/frameworks/langgraph.js.map +1 -0
- package/dist/frameworks/llamaindex.cjs +239 -0
- package/dist/frameworks/llamaindex.cjs.map +1 -0
- package/dist/frameworks/llamaindex.d.cts +55 -0
- package/dist/frameworks/llamaindex.d.ts +55 -0
- package/dist/frameworks/llamaindex.js +212 -0
- package/dist/frameworks/llamaindex.js.map +1 -0
- package/dist/index.cjs +425 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +124 -14
- package/dist/index.d.ts +124 -14
- package/dist/index.js +418 -14
- package/dist/index.js.map +1 -1
- package/dist/providers/anthropic/index.cjs +22 -0
- package/dist/providers/anthropic/index.cjs.map +1 -1
- package/dist/providers/anthropic/index.js +22 -0
- package/dist/providers/anthropic/index.js.map +1 -1
- package/dist/providers/bedrock/index.cjs +334 -0
- package/dist/providers/bedrock/index.cjs.map +1 -0
- package/dist/providers/bedrock/index.d.cts +37 -0
- package/dist/providers/bedrock/index.d.ts +37 -0
- package/dist/providers/bedrock/index.js +307 -0
- package/dist/providers/bedrock/index.js.map +1 -0
- package/dist/providers/cerebras/index.cjs +282 -0
- package/dist/providers/cerebras/index.cjs.map +1 -0
- package/dist/providers/cerebras/index.d.cts +24 -0
- package/dist/providers/cerebras/index.d.ts +24 -0
- package/dist/providers/cerebras/index.js +255 -0
- package/dist/providers/cerebras/index.js.map +1 -0
- package/dist/providers/cohere/index.cjs +347 -0
- package/dist/providers/cohere/index.cjs.map +1 -0
- package/dist/providers/cohere/index.d.cts +24 -0
- package/dist/providers/cohere/index.d.ts +24 -0
- package/dist/providers/cohere/index.js +320 -0
- package/dist/providers/cohere/index.js.map +1 -0
- package/dist/providers/google/index.cjs +337 -0
- package/dist/providers/google/index.cjs.map +1 -0
- package/dist/providers/google/index.d.cts +25 -0
- package/dist/providers/google/index.d.ts +25 -0
- package/dist/providers/google/index.js +310 -0
- package/dist/providers/google/index.js.map +1 -0
- package/dist/providers/groq/index.cjs +282 -0
- package/dist/providers/groq/index.cjs.map +1 -0
- package/dist/providers/groq/index.d.cts +23 -0
- package/dist/providers/groq/index.d.ts +23 -0
- package/dist/providers/groq/index.js +255 -0
- package/dist/providers/groq/index.js.map +1 -0
- package/dist/providers/huggingface/index.cjs +289 -0
- package/dist/providers/huggingface/index.cjs.map +1 -0
- package/dist/providers/huggingface/index.d.cts +24 -0
- package/dist/providers/huggingface/index.d.ts +24 -0
- package/dist/providers/huggingface/index.js +262 -0
- package/dist/providers/huggingface/index.js.map +1 -0
- package/dist/providers/mistral/index.cjs +336 -0
- package/dist/providers/mistral/index.cjs.map +1 -0
- package/dist/providers/mistral/index.d.cts +24 -0
- package/dist/providers/mistral/index.d.ts +24 -0
- package/dist/providers/mistral/index.js +309 -0
- package/dist/providers/mistral/index.js.map +1 -0
- package/dist/providers/ollama/index.cjs +376 -0
- package/dist/providers/ollama/index.cjs.map +1 -0
- package/dist/providers/ollama/index.d.cts +28 -0
- package/dist/providers/ollama/index.d.ts +28 -0
- package/dist/providers/ollama/index.js +349 -0
- package/dist/providers/ollama/index.js.map +1 -0
- package/dist/providers/openai/index.cjs +31 -1
- package/dist/providers/openai/index.cjs.map +1 -1
- package/dist/providers/openai/index.js +31 -1
- package/dist/providers/openai/index.js.map +1 -1
- package/dist/providers/together/index.cjs +275 -0
- package/dist/providers/together/index.cjs.map +1 -0
- package/dist/providers/together/index.d.cts +24 -0
- package/dist/providers/together/index.d.ts +24 -0
- package/dist/providers/together/index.js +248 -0
- package/dist/providers/together/index.js.map +1 -0
- package/package.json +124 -2
package/dist/index.cjs
CHANGED
|
@@ -32,6 +32,8 @@ var src_exports = {};
|
|
|
32
32
|
__export(src_exports, {
|
|
33
33
|
AgentRole: () => AgentRole,
|
|
34
34
|
MessageType: () => MessageType,
|
|
35
|
+
RisicareCallbackHandler: () => RisicareCallbackHandler,
|
|
36
|
+
RisicareLlamaIndexHandler: () => RisicareLlamaIndexHandler,
|
|
35
37
|
SemanticPhase: () => SemanticPhase,
|
|
36
38
|
SpanKind: () => SpanKind,
|
|
37
39
|
SpanStatus: () => SpanStatus,
|
|
@@ -56,12 +58,16 @@ __export(src_exports, {
|
|
|
56
58
|
getTracer: () => getTracer2,
|
|
57
59
|
init: () => init,
|
|
58
60
|
injectTraceContext: () => injectTraceContext,
|
|
61
|
+
instrumentLangGraph: () => instrumentLangGraph,
|
|
59
62
|
isEnabled: () => isEnabled,
|
|
63
|
+
isProviderInstrumentationSuppressed: () => isProviderInstrumentationSuppressed,
|
|
64
|
+
patchInstructor: () => patchInstructor,
|
|
60
65
|
registerSpan: () => registerSpan,
|
|
61
66
|
reportError: () => reportError,
|
|
62
67
|
score: () => score,
|
|
63
68
|
session: () => session,
|
|
64
69
|
shutdown: () => shutdown,
|
|
70
|
+
suppressProviderInstrumentation: () => suppressProviderInstrumentation,
|
|
65
71
|
traceAct: () => traceAct,
|
|
66
72
|
traceCoordinate: () => traceCoordinate,
|
|
67
73
|
traceDecide: () => traceDecide,
|
|
@@ -69,6 +75,7 @@ __export(src_exports, {
|
|
|
69
75
|
traceMessage: () => traceMessage,
|
|
70
76
|
traceObserve: () => traceObserve,
|
|
71
77
|
traceThink: () => traceThink,
|
|
78
|
+
tracedStream: () => tracedStream,
|
|
72
79
|
unregisterSpan: () => unregisterSpan,
|
|
73
80
|
withAgent: () => withAgent,
|
|
74
81
|
withPhase: () => withPhase,
|
|
@@ -191,19 +198,39 @@ var SemanticPhase = /* @__PURE__ */ ((SemanticPhase2) => {
|
|
|
191
198
|
var AgentRole = /* @__PURE__ */ ((AgentRole2) => {
|
|
192
199
|
AgentRole2["ORCHESTRATOR"] = "orchestrator";
|
|
193
200
|
AgentRole2["WORKER"] = "worker";
|
|
194
|
-
AgentRole2["
|
|
201
|
+
AgentRole2["SUPERVISOR"] = "supervisor";
|
|
202
|
+
AgentRole2["SPECIALIST"] = "specialist";
|
|
203
|
+
AgentRole2["ROUTER"] = "router";
|
|
204
|
+
AgentRole2["AGGREGATOR"] = "aggregator";
|
|
205
|
+
AgentRole2["BROADCASTER"] = "broadcaster";
|
|
206
|
+
AgentRole2["CRITIC"] = "critic";
|
|
195
207
|
AgentRole2["PLANNER"] = "planner";
|
|
196
208
|
AgentRole2["EXECUTOR"] = "executor";
|
|
197
|
-
AgentRole2["
|
|
209
|
+
AgentRole2["RETRIEVER"] = "retriever";
|
|
210
|
+
AgentRole2["VALIDATOR"] = "validator";
|
|
211
|
+
AgentRole2["REVIEWER"] = "reviewer";
|
|
198
212
|
AgentRole2["CUSTOM"] = "custom";
|
|
199
213
|
return AgentRole2;
|
|
200
214
|
})(AgentRole || {});
|
|
201
215
|
var MessageType = /* @__PURE__ */ ((MessageType2) => {
|
|
202
|
-
MessageType2["
|
|
216
|
+
MessageType2["TASK"] = "task";
|
|
217
|
+
MessageType2["RESULT"] = "result";
|
|
218
|
+
MessageType2["STATUS"] = "status";
|
|
219
|
+
MessageType2["ERROR"] = "error";
|
|
220
|
+
MessageType2["QUERY"] = "query";
|
|
203
221
|
MessageType2["RESPONSE"] = "response";
|
|
222
|
+
MessageType2["BROADCAST"] = "broadcast";
|
|
223
|
+
MessageType2["DIRECT"] = "direct";
|
|
224
|
+
MessageType2["PROPOSAL"] = "proposal";
|
|
225
|
+
MessageType2["VOTE"] = "vote";
|
|
226
|
+
MessageType2["CONSENSUS"] = "consensus";
|
|
227
|
+
MessageType2["CONFLICT"] = "conflict";
|
|
228
|
+
MessageType2["HEARTBEAT"] = "heartbeat";
|
|
229
|
+
MessageType2["SHUTDOWN"] = "shutdown";
|
|
230
|
+
MessageType2["HANDOFF"] = "handoff";
|
|
231
|
+
MessageType2["REQUEST"] = "request";
|
|
204
232
|
MessageType2["DELEGATE"] = "delegate";
|
|
205
233
|
MessageType2["COORDINATE"] = "coordinate";
|
|
206
|
-
MessageType2["BROADCAST"] = "broadcast";
|
|
207
234
|
return MessageType2;
|
|
208
235
|
})(MessageType || {});
|
|
209
236
|
|
|
@@ -1237,28 +1264,36 @@ function withPhase(phase, fn) {
|
|
|
1237
1264
|
}
|
|
1238
1265
|
|
|
1239
1266
|
// src/decorators/phase.ts
|
|
1240
|
-
function phaseWrapper(phase, kind, fn) {
|
|
1267
|
+
function phaseWrapper(phase, kind, name, fn) {
|
|
1241
1268
|
return (...args) => {
|
|
1242
1269
|
const tracer = getTracer2();
|
|
1243
1270
|
if (!tracer) {
|
|
1244
1271
|
return fn(...args);
|
|
1245
1272
|
}
|
|
1246
1273
|
return withPhase(phase, () => {
|
|
1247
|
-
return tracer.startSpan({ name
|
|
1274
|
+
return tracer.startSpan({ name, kind }, () => fn(...args));
|
|
1248
1275
|
});
|
|
1249
1276
|
};
|
|
1250
1277
|
}
|
|
1251
|
-
function traceThink(
|
|
1252
|
-
|
|
1278
|
+
function traceThink(fnOrName, maybeFn) {
|
|
1279
|
+
const name = typeof fnOrName === "string" ? fnOrName : `phase:think`;
|
|
1280
|
+
const fn = typeof fnOrName === "function" ? fnOrName : maybeFn;
|
|
1281
|
+
return phaseWrapper("think" /* THINK */, "think" /* THINK */, name, fn);
|
|
1253
1282
|
}
|
|
1254
|
-
function traceDecide(
|
|
1255
|
-
|
|
1283
|
+
function traceDecide(fnOrName, maybeFn) {
|
|
1284
|
+
const name = typeof fnOrName === "string" ? fnOrName : `phase:decide`;
|
|
1285
|
+
const fn = typeof fnOrName === "function" ? fnOrName : maybeFn;
|
|
1286
|
+
return phaseWrapper("decide" /* DECIDE */, "decide" /* DECIDE */, name, fn);
|
|
1256
1287
|
}
|
|
1257
|
-
function traceAct(
|
|
1258
|
-
|
|
1288
|
+
function traceAct(fnOrName, maybeFn) {
|
|
1289
|
+
const name = typeof fnOrName === "string" ? fnOrName : `phase:act`;
|
|
1290
|
+
const fn = typeof fnOrName === "function" ? fnOrName : maybeFn;
|
|
1291
|
+
return phaseWrapper("act" /* ACT */, "tool_call" /* TOOL_CALL */, name, fn);
|
|
1259
1292
|
}
|
|
1260
|
-
function traceObserve(
|
|
1261
|
-
|
|
1293
|
+
function traceObserve(fnOrName, maybeFn) {
|
|
1294
|
+
const name = typeof fnOrName === "string" ? fnOrName : `phase:observe`;
|
|
1295
|
+
const fn = typeof fnOrName === "function" ? fnOrName : maybeFn;
|
|
1296
|
+
return phaseWrapper("observe" /* OBSERVE */, "observe" /* OBSERVE */, name, fn);
|
|
1262
1297
|
}
|
|
1263
1298
|
|
|
1264
1299
|
// src/decorators/multi-agent.ts
|
|
@@ -1439,10 +1474,381 @@ function maybeCleanup() {
|
|
|
1439
1474
|
}
|
|
1440
1475
|
}
|
|
1441
1476
|
}
|
|
1477
|
+
|
|
1478
|
+
// src/streaming.ts
|
|
1479
|
+
async function* tracedStream(source, options) {
|
|
1480
|
+
const opts = typeof options === "string" ? { name: options } : options;
|
|
1481
|
+
const tracer = getTracer2();
|
|
1482
|
+
if (!tracer || !tracer.enabled) {
|
|
1483
|
+
yield* source;
|
|
1484
|
+
return;
|
|
1485
|
+
}
|
|
1486
|
+
const span = tracer.createSpan({
|
|
1487
|
+
name: opts.name,
|
|
1488
|
+
kind: opts.kind ?? "internal" /* INTERNAL */,
|
|
1489
|
+
attributes: opts.attributes
|
|
1490
|
+
});
|
|
1491
|
+
let chunkCount = 0;
|
|
1492
|
+
try {
|
|
1493
|
+
for await (const chunk of source) {
|
|
1494
|
+
chunkCount++;
|
|
1495
|
+
yield chunk;
|
|
1496
|
+
}
|
|
1497
|
+
span.setAttribute("stream.chunk_count", chunkCount);
|
|
1498
|
+
span.setAttribute("stream.completed", true);
|
|
1499
|
+
} catch (error) {
|
|
1500
|
+
span.setAttribute("stream.chunk_count", chunkCount);
|
|
1501
|
+
span.setAttribute("stream.completed", false);
|
|
1502
|
+
span.recordException(error instanceof Error ? error : String(error));
|
|
1503
|
+
throw error;
|
|
1504
|
+
} finally {
|
|
1505
|
+
span.end();
|
|
1506
|
+
}
|
|
1507
|
+
}
|
|
1508
|
+
|
|
1509
|
+
// src/frameworks/langchain.ts
|
|
1510
|
+
var RisicareCallbackHandler = class {
|
|
1511
|
+
name = "RisicareCallbackHandler";
|
|
1512
|
+
_spans = /* @__PURE__ */ new Map();
|
|
1513
|
+
// ── Chain lifecycle ────────────────────────────────────────────────────────
|
|
1514
|
+
handleChainStart(chain, _inputs, runId, parentRunId) {
|
|
1515
|
+
const tracer = getTracer2();
|
|
1516
|
+
if (!tracer?.enabled) return;
|
|
1517
|
+
const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
|
|
1518
|
+
const span = tracer.createSpan({
|
|
1519
|
+
name: chain.name || chain._type || "chain",
|
|
1520
|
+
kind: "internal" /* INTERNAL */,
|
|
1521
|
+
parentSpanId: parentEntry?.span.spanId,
|
|
1522
|
+
traceId: parentEntry?.span.traceId,
|
|
1523
|
+
attributes: {
|
|
1524
|
+
"framework": "langchain",
|
|
1525
|
+
"langchain.run_id": runId,
|
|
1526
|
+
...parentRunId ? { "langchain.parent_run_id": parentRunId } : {},
|
|
1527
|
+
...chain._type ? { "langchain.chain_type": chain._type } : {}
|
|
1528
|
+
}
|
|
1529
|
+
});
|
|
1530
|
+
this._spans.set(runId, { span, startTime: Date.now() });
|
|
1531
|
+
}
|
|
1532
|
+
handleChainEnd(_outputs, runId) {
|
|
1533
|
+
const entry = this._spans.get(runId);
|
|
1534
|
+
if (!entry) return;
|
|
1535
|
+
entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
|
|
1536
|
+
entry.span.end();
|
|
1537
|
+
this._spans.delete(runId);
|
|
1538
|
+
}
|
|
1539
|
+
handleChainError(error, runId) {
|
|
1540
|
+
const entry = this._spans.get(runId);
|
|
1541
|
+
if (!entry) return;
|
|
1542
|
+
entry.span.recordException(error);
|
|
1543
|
+
entry.span.end();
|
|
1544
|
+
this._spans.delete(runId);
|
|
1545
|
+
}
|
|
1546
|
+
// ── LLM lifecycle ─────────────────────────────────────────────────────────
|
|
1547
|
+
handleLLMStart(llm, _prompts, runId, parentRunId) {
|
|
1548
|
+
const tracer = getTracer2();
|
|
1549
|
+
if (!tracer?.enabled) return;
|
|
1550
|
+
const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
|
|
1551
|
+
const span = tracer.createSpan({
|
|
1552
|
+
name: llm.name || llm._type || "llm",
|
|
1553
|
+
kind: "llm_call" /* LLM_CALL */,
|
|
1554
|
+
parentSpanId: parentEntry?.span.spanId,
|
|
1555
|
+
traceId: parentEntry?.span.traceId,
|
|
1556
|
+
attributes: {
|
|
1557
|
+
"framework": "langchain",
|
|
1558
|
+
"langchain.run_id": runId,
|
|
1559
|
+
"gen_ai.system": "langchain",
|
|
1560
|
+
"gen_ai.prompt.count": _prompts.length
|
|
1561
|
+
}
|
|
1562
|
+
});
|
|
1563
|
+
this._spans.set(runId, { span, startTime: Date.now() });
|
|
1564
|
+
}
|
|
1565
|
+
handleLLMEnd(output, runId) {
|
|
1566
|
+
const entry = this._spans.get(runId);
|
|
1567
|
+
if (!entry) return;
|
|
1568
|
+
const usage = output.llmOutput?.tokenUsage;
|
|
1569
|
+
if (usage) {
|
|
1570
|
+
entry.span.setLlmFields({
|
|
1571
|
+
promptTokens: usage.promptTokens ?? usage.prompt_tokens,
|
|
1572
|
+
completionTokens: usage.completionTokens ?? usage.completion_tokens,
|
|
1573
|
+
totalTokens: usage.totalTokens ?? usage.total_tokens
|
|
1574
|
+
});
|
|
1575
|
+
}
|
|
1576
|
+
const model = output.llmOutput?.model ?? output.llmOutput?.modelName;
|
|
1577
|
+
if (model) {
|
|
1578
|
+
entry.span.setLlmFields({ model });
|
|
1579
|
+
}
|
|
1580
|
+
entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
|
|
1581
|
+
entry.span.end();
|
|
1582
|
+
this._spans.delete(runId);
|
|
1583
|
+
}
|
|
1584
|
+
handleLLMError(error, runId) {
|
|
1585
|
+
const entry = this._spans.get(runId);
|
|
1586
|
+
if (!entry) return;
|
|
1587
|
+
entry.span.recordException(error);
|
|
1588
|
+
entry.span.end();
|
|
1589
|
+
this._spans.delete(runId);
|
|
1590
|
+
}
|
|
1591
|
+
// ── Tool lifecycle ────────────────────────────────────────────────────────
|
|
1592
|
+
handleToolStart(tool, input, runId, parentRunId) {
|
|
1593
|
+
const tracer = getTracer2();
|
|
1594
|
+
if (!tracer?.enabled) return;
|
|
1595
|
+
const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
|
|
1596
|
+
const span = tracer.createSpan({
|
|
1597
|
+
name: tool.name || "tool",
|
|
1598
|
+
kind: "tool_call" /* TOOL_CALL */,
|
|
1599
|
+
parentSpanId: parentEntry?.span.spanId,
|
|
1600
|
+
traceId: parentEntry?.span.traceId,
|
|
1601
|
+
attributes: {
|
|
1602
|
+
"framework": "langchain",
|
|
1603
|
+
"langchain.run_id": runId,
|
|
1604
|
+
"tool.name": tool.name || "unknown",
|
|
1605
|
+
"tool.input_length": input?.length ?? 0
|
|
1606
|
+
}
|
|
1607
|
+
});
|
|
1608
|
+
this._spans.set(runId, { span, startTime: Date.now() });
|
|
1609
|
+
}
|
|
1610
|
+
handleToolEnd(output, runId) {
|
|
1611
|
+
const entry = this._spans.get(runId);
|
|
1612
|
+
if (!entry) return;
|
|
1613
|
+
entry.span.setAttribute("tool.output_length", output?.length ?? 0);
|
|
1614
|
+
entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
|
|
1615
|
+
entry.span.end();
|
|
1616
|
+
this._spans.delete(runId);
|
|
1617
|
+
}
|
|
1618
|
+
handleToolError(error, runId) {
|
|
1619
|
+
const entry = this._spans.get(runId);
|
|
1620
|
+
if (!entry) return;
|
|
1621
|
+
entry.span.recordException(error);
|
|
1622
|
+
entry.span.end();
|
|
1623
|
+
this._spans.delete(runId);
|
|
1624
|
+
}
|
|
1625
|
+
// ── Retriever lifecycle ───────────────────────────────────────────────────
|
|
1626
|
+
handleRetrieverStart(retriever, _query, runId, parentRunId) {
|
|
1627
|
+
const tracer = getTracer2();
|
|
1628
|
+
if (!tracer?.enabled) return;
|
|
1629
|
+
const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
|
|
1630
|
+
const span = tracer.createSpan({
|
|
1631
|
+
name: retriever.name || "retriever",
|
|
1632
|
+
kind: "retrieval" /* RETRIEVAL */,
|
|
1633
|
+
parentSpanId: parentEntry?.span.spanId,
|
|
1634
|
+
traceId: parentEntry?.span.traceId,
|
|
1635
|
+
attributes: {
|
|
1636
|
+
"framework": "langchain",
|
|
1637
|
+
"langchain.run_id": runId
|
|
1638
|
+
}
|
|
1639
|
+
});
|
|
1640
|
+
this._spans.set(runId, { span, startTime: Date.now() });
|
|
1641
|
+
}
|
|
1642
|
+
handleRetrieverEnd(documents, runId) {
|
|
1643
|
+
const entry = this._spans.get(runId);
|
|
1644
|
+
if (!entry) return;
|
|
1645
|
+
entry.span.setAttribute(
|
|
1646
|
+
"retriever.document_count",
|
|
1647
|
+
documents?.length ?? 0
|
|
1648
|
+
);
|
|
1649
|
+
entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
|
|
1650
|
+
entry.span.end();
|
|
1651
|
+
this._spans.delete(runId);
|
|
1652
|
+
}
|
|
1653
|
+
};
|
|
1654
|
+
|
|
1655
|
+
// src/frameworks/langgraph.ts
|
|
1656
|
+
function instrumentLangGraph(graph) {
|
|
1657
|
+
return new Proxy(graph, {
|
|
1658
|
+
get(target, prop, receiver) {
|
|
1659
|
+
const value = Reflect.get(target, prop, receiver);
|
|
1660
|
+
if ((prop === "invoke" || prop === "stream") && typeof value === "function") {
|
|
1661
|
+
return function patchedMethod(...args) {
|
|
1662
|
+
const tracer = getTracer2();
|
|
1663
|
+
if (!tracer?.enabled) return value.apply(this, args);
|
|
1664
|
+
return tracer.startSpan(
|
|
1665
|
+
{
|
|
1666
|
+
name: `langgraph.${String(prop)}`,
|
|
1667
|
+
kind: "agent" /* AGENT */,
|
|
1668
|
+
attributes: { framework: "langgraph" }
|
|
1669
|
+
},
|
|
1670
|
+
(_span) => {
|
|
1671
|
+
const config = args[1] ?? {};
|
|
1672
|
+
const callbacks = config.callbacks ?? [];
|
|
1673
|
+
callbacks.push(new RisicareCallbackHandler());
|
|
1674
|
+
args[1] = { ...config, callbacks };
|
|
1675
|
+
const result = value.apply(this, args);
|
|
1676
|
+
if (result && typeof result.then === "function") {
|
|
1677
|
+
return result.then((r) => r);
|
|
1678
|
+
}
|
|
1679
|
+
return result;
|
|
1680
|
+
}
|
|
1681
|
+
);
|
|
1682
|
+
};
|
|
1683
|
+
}
|
|
1684
|
+
return value;
|
|
1685
|
+
}
|
|
1686
|
+
});
|
|
1687
|
+
}
|
|
1688
|
+
|
|
1689
|
+
// src/frameworks/instructor.ts
|
|
1690
|
+
function patchInstructor(client) {
|
|
1691
|
+
return new Proxy(client, {
|
|
1692
|
+
get(target, prop, receiver) {
|
|
1693
|
+
const value = Reflect.get(target, prop, receiver);
|
|
1694
|
+
if (prop === "create" && typeof value === "function") {
|
|
1695
|
+
return function patchedCreate(...args) {
|
|
1696
|
+
const tracer = getTracer2();
|
|
1697
|
+
if (!tracer?.enabled) {
|
|
1698
|
+
debug(
|
|
1699
|
+
"Tracer not initialized \u2014 call init() before using patchInstructor()"
|
|
1700
|
+
);
|
|
1701
|
+
return value.apply(this, args);
|
|
1702
|
+
}
|
|
1703
|
+
const params = args[0] ?? {};
|
|
1704
|
+
const responseModel = params.response_model ?? params.responseModel;
|
|
1705
|
+
let modelName = "unknown";
|
|
1706
|
+
if (responseModel && typeof responseModel === "function") {
|
|
1707
|
+
modelName = responseModel.name || "unknown";
|
|
1708
|
+
} else if (responseModel && typeof responseModel === "object") {
|
|
1709
|
+
modelName = responseModel.name ?? responseModel.description ?? "schema";
|
|
1710
|
+
} else if (typeof responseModel === "string") {
|
|
1711
|
+
modelName = responseModel;
|
|
1712
|
+
}
|
|
1713
|
+
return tracer.startSpan(
|
|
1714
|
+
{
|
|
1715
|
+
name: "instructor.create",
|
|
1716
|
+
kind: "llm_call" /* LLM_CALL */,
|
|
1717
|
+
attributes: {
|
|
1718
|
+
framework: "instructor",
|
|
1719
|
+
"framework.span_kind": "extraction",
|
|
1720
|
+
"instructor.response_model": modelName,
|
|
1721
|
+
...params.max_retries != null ? { "instructor.max_retries": params.max_retries } : {},
|
|
1722
|
+
...params.model != null ? { "gen_ai.request.model": params.model } : {}
|
|
1723
|
+
}
|
|
1724
|
+
},
|
|
1725
|
+
(_span) => {
|
|
1726
|
+
const result = value.apply(this, args);
|
|
1727
|
+
if (result && typeof result.then === "function") {
|
|
1728
|
+
return result.then((r) => r);
|
|
1729
|
+
}
|
|
1730
|
+
return result;
|
|
1731
|
+
}
|
|
1732
|
+
);
|
|
1733
|
+
};
|
|
1734
|
+
}
|
|
1735
|
+
return value;
|
|
1736
|
+
}
|
|
1737
|
+
});
|
|
1738
|
+
}
|
|
1739
|
+
|
|
1740
|
+
// src/context/dedup.ts
|
|
1741
|
+
function suppressProviderInstrumentation(fn) {
|
|
1742
|
+
return runWithContext({ _suppressProviderInstrumentation: true }, fn);
|
|
1743
|
+
}
|
|
1744
|
+
function isProviderInstrumentationSuppressed() {
|
|
1745
|
+
return getContext()._suppressProviderInstrumentation === true;
|
|
1746
|
+
}
|
|
1747
|
+
|
|
1748
|
+
// src/frameworks/llamaindex.ts
|
|
1749
|
+
var RisicareLlamaIndexHandler = class {
|
|
1750
|
+
_spans = /* @__PURE__ */ new Map();
|
|
1751
|
+
/**
|
|
1752
|
+
* Handle a LlamaIndex lifecycle event.
|
|
1753
|
+
*
|
|
1754
|
+
* Events follow the convention:
|
|
1755
|
+
* - `*.start` / `*.begin` -- component starts
|
|
1756
|
+
* - `*.end` / `*.complete` -- component finishes
|
|
1757
|
+
* - `*.error` -- component failed
|
|
1758
|
+
*/
|
|
1759
|
+
onEvent(event) {
|
|
1760
|
+
const tracer = getTracer2();
|
|
1761
|
+
if (!tracer?.enabled) return;
|
|
1762
|
+
if (event.type.endsWith(".start") || event.type.endsWith(".begin")) {
|
|
1763
|
+
this._handleStart(event);
|
|
1764
|
+
} else if (event.type.endsWith(".end") || event.type.endsWith(".complete")) {
|
|
1765
|
+
this._handleEnd(event);
|
|
1766
|
+
} else if (event.type.endsWith(".error")) {
|
|
1767
|
+
this._handleError(event);
|
|
1768
|
+
}
|
|
1769
|
+
}
|
|
1770
|
+
/**
|
|
1771
|
+
* Run a function with provider instrumentation suppressed.
|
|
1772
|
+
*
|
|
1773
|
+
* LlamaIndex handler creates its own LLM spans, so provider spans
|
|
1774
|
+
* (patchOpenAI, patchAnthropic, etc.) should be suppressed to avoid
|
|
1775
|
+
* double-tracing.
|
|
1776
|
+
*/
|
|
1777
|
+
withSuppression(fn) {
|
|
1778
|
+
return suppressProviderInstrumentation(fn);
|
|
1779
|
+
}
|
|
1780
|
+
// ── Internal event handlers ───────────────────────────────────────────────
|
|
1781
|
+
_handleStart(event) {
|
|
1782
|
+
const tracer = getTracer2();
|
|
1783
|
+
if (!tracer?.enabled) return;
|
|
1784
|
+
const componentKind = this._classifyComponent(event.type);
|
|
1785
|
+
const parentEntry = event.parentId ? this._spans.get(event.parentId) : void 0;
|
|
1786
|
+
const spanKind = componentKind === "llm" ? "llm_call" /* LLM_CALL */ : componentKind === "retrieval" ? "retrieval" /* RETRIEVAL */ : componentKind === "embedding" ? "llm_call" /* LLM_CALL */ : "internal" /* INTERNAL */;
|
|
1787
|
+
const span = tracer.createSpan({
|
|
1788
|
+
name: event.type.replace(/\.(start|begin)$/, ""),
|
|
1789
|
+
kind: spanKind,
|
|
1790
|
+
parentSpanId: parentEntry?.span.spanId,
|
|
1791
|
+
traceId: parentEntry?.span.traceId,
|
|
1792
|
+
attributes: {
|
|
1793
|
+
framework: "llamaindex",
|
|
1794
|
+
"framework.span_kind": componentKind,
|
|
1795
|
+
...event.data?.model ? { "gen_ai.request.model": event.data.model } : {}
|
|
1796
|
+
}
|
|
1797
|
+
});
|
|
1798
|
+
this._spans.set(event.id, { span, startTime: Date.now(), componentKind });
|
|
1799
|
+
}
|
|
1800
|
+
_handleEnd(event) {
|
|
1801
|
+
const entry = this._spans.get(event.id);
|
|
1802
|
+
if (!entry) return;
|
|
1803
|
+
entry.span.setAttribute(
|
|
1804
|
+
"gen_ai.latency_ms",
|
|
1805
|
+
Date.now() - entry.startTime
|
|
1806
|
+
);
|
|
1807
|
+
const usage = event.data?.usage;
|
|
1808
|
+
if (usage) {
|
|
1809
|
+
entry.span.setLlmFields({
|
|
1810
|
+
promptTokens: usage.promptTokens ?? usage.prompt_tokens,
|
|
1811
|
+
completionTokens: usage.completionTokens ?? usage.completion_tokens
|
|
1812
|
+
});
|
|
1813
|
+
}
|
|
1814
|
+
if (event.data?.documentCount != null) {
|
|
1815
|
+
entry.span.setAttribute(
|
|
1816
|
+
"retriever.document_count",
|
|
1817
|
+
event.data.documentCount
|
|
1818
|
+
);
|
|
1819
|
+
}
|
|
1820
|
+
entry.span.end();
|
|
1821
|
+
this._spans.delete(event.id);
|
|
1822
|
+
}
|
|
1823
|
+
_handleError(event) {
|
|
1824
|
+
const entry = this._spans.get(event.id);
|
|
1825
|
+
if (!entry) return;
|
|
1826
|
+
const error = event.data?.error;
|
|
1827
|
+
entry.span.recordException(
|
|
1828
|
+
error instanceof Error ? error : String(error ?? "Unknown error")
|
|
1829
|
+
);
|
|
1830
|
+
entry.span.end();
|
|
1831
|
+
this._spans.delete(event.id);
|
|
1832
|
+
}
|
|
1833
|
+
/**
|
|
1834
|
+
* Classify a LlamaIndex event type into a component kind.
|
|
1835
|
+
*/
|
|
1836
|
+
_classifyComponent(eventType) {
|
|
1837
|
+
const lower = eventType.toLowerCase();
|
|
1838
|
+
if (lower.includes("llm") || lower.includes("chat")) return "llm";
|
|
1839
|
+
if (lower.includes("embed")) return "embedding";
|
|
1840
|
+
if (lower.includes("retriev") || lower.includes("vector")) return "retrieval";
|
|
1841
|
+
if (lower.includes("synth") || lower.includes("response")) return "synthesis";
|
|
1842
|
+
if (lower.includes("query")) return "query";
|
|
1843
|
+
return "component";
|
|
1844
|
+
}
|
|
1845
|
+
};
|
|
1442
1846
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1443
1847
|
0 && (module.exports = {
|
|
1444
1848
|
AgentRole,
|
|
1445
1849
|
MessageType,
|
|
1850
|
+
RisicareCallbackHandler,
|
|
1851
|
+
RisicareLlamaIndexHandler,
|
|
1446
1852
|
SemanticPhase,
|
|
1447
1853
|
SpanKind,
|
|
1448
1854
|
SpanStatus,
|
|
@@ -1467,12 +1873,16 @@ function maybeCleanup() {
|
|
|
1467
1873
|
getTracer,
|
|
1468
1874
|
init,
|
|
1469
1875
|
injectTraceContext,
|
|
1876
|
+
instrumentLangGraph,
|
|
1470
1877
|
isEnabled,
|
|
1878
|
+
isProviderInstrumentationSuppressed,
|
|
1879
|
+
patchInstructor,
|
|
1471
1880
|
registerSpan,
|
|
1472
1881
|
reportError,
|
|
1473
1882
|
score,
|
|
1474
1883
|
session,
|
|
1475
1884
|
shutdown,
|
|
1885
|
+
suppressProviderInstrumentation,
|
|
1476
1886
|
traceAct,
|
|
1477
1887
|
traceCoordinate,
|
|
1478
1888
|
traceDecide,
|
|
@@ -1480,6 +1890,7 @@ function maybeCleanup() {
|
|
|
1480
1890
|
traceMessage,
|
|
1481
1891
|
traceObserve,
|
|
1482
1892
|
traceThink,
|
|
1893
|
+
tracedStream,
|
|
1483
1894
|
unregisterSpan,
|
|
1484
1895
|
withAgent,
|
|
1485
1896
|
withPhase,
|