risicare 0.1.5 → 0.2.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/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 +407 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +96 -6
- package/dist/index.d.ts +96 -6
- package/dist/index.js +400 -4
- 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.js
CHANGED
|
@@ -113,19 +113,39 @@ var SemanticPhase = /* @__PURE__ */ ((SemanticPhase2) => {
|
|
|
113
113
|
var AgentRole = /* @__PURE__ */ ((AgentRole2) => {
|
|
114
114
|
AgentRole2["ORCHESTRATOR"] = "orchestrator";
|
|
115
115
|
AgentRole2["WORKER"] = "worker";
|
|
116
|
-
AgentRole2["
|
|
116
|
+
AgentRole2["SUPERVISOR"] = "supervisor";
|
|
117
|
+
AgentRole2["SPECIALIST"] = "specialist";
|
|
118
|
+
AgentRole2["ROUTER"] = "router";
|
|
119
|
+
AgentRole2["AGGREGATOR"] = "aggregator";
|
|
120
|
+
AgentRole2["BROADCASTER"] = "broadcaster";
|
|
121
|
+
AgentRole2["CRITIC"] = "critic";
|
|
117
122
|
AgentRole2["PLANNER"] = "planner";
|
|
118
123
|
AgentRole2["EXECUTOR"] = "executor";
|
|
119
|
-
AgentRole2["
|
|
124
|
+
AgentRole2["RETRIEVER"] = "retriever";
|
|
125
|
+
AgentRole2["VALIDATOR"] = "validator";
|
|
126
|
+
AgentRole2["REVIEWER"] = "reviewer";
|
|
120
127
|
AgentRole2["CUSTOM"] = "custom";
|
|
121
128
|
return AgentRole2;
|
|
122
129
|
})(AgentRole || {});
|
|
123
130
|
var MessageType = /* @__PURE__ */ ((MessageType2) => {
|
|
124
|
-
MessageType2["
|
|
131
|
+
MessageType2["TASK"] = "task";
|
|
132
|
+
MessageType2["RESULT"] = "result";
|
|
133
|
+
MessageType2["STATUS"] = "status";
|
|
134
|
+
MessageType2["ERROR"] = "error";
|
|
135
|
+
MessageType2["QUERY"] = "query";
|
|
125
136
|
MessageType2["RESPONSE"] = "response";
|
|
137
|
+
MessageType2["BROADCAST"] = "broadcast";
|
|
138
|
+
MessageType2["DIRECT"] = "direct";
|
|
139
|
+
MessageType2["PROPOSAL"] = "proposal";
|
|
140
|
+
MessageType2["VOTE"] = "vote";
|
|
141
|
+
MessageType2["CONSENSUS"] = "consensus";
|
|
142
|
+
MessageType2["CONFLICT"] = "conflict";
|
|
143
|
+
MessageType2["HEARTBEAT"] = "heartbeat";
|
|
144
|
+
MessageType2["SHUTDOWN"] = "shutdown";
|
|
145
|
+
MessageType2["HANDOFF"] = "handoff";
|
|
146
|
+
MessageType2["REQUEST"] = "request";
|
|
126
147
|
MessageType2["DELEGATE"] = "delegate";
|
|
127
148
|
MessageType2["COORDINATE"] = "coordinate";
|
|
128
|
-
MessageType2["BROADCAST"] = "broadcast";
|
|
129
149
|
return MessageType2;
|
|
130
150
|
})(MessageType || {});
|
|
131
151
|
|
|
@@ -1361,9 +1381,380 @@ function maybeCleanup() {
|
|
|
1361
1381
|
}
|
|
1362
1382
|
}
|
|
1363
1383
|
}
|
|
1384
|
+
|
|
1385
|
+
// src/streaming.ts
|
|
1386
|
+
async function* tracedStream(source, options) {
|
|
1387
|
+
const opts = typeof options === "string" ? { name: options } : options;
|
|
1388
|
+
const tracer = getTracer2();
|
|
1389
|
+
if (!tracer || !tracer.enabled) {
|
|
1390
|
+
yield* source;
|
|
1391
|
+
return;
|
|
1392
|
+
}
|
|
1393
|
+
const span = tracer.createSpan({
|
|
1394
|
+
name: opts.name,
|
|
1395
|
+
kind: opts.kind ?? "internal" /* INTERNAL */,
|
|
1396
|
+
attributes: opts.attributes
|
|
1397
|
+
});
|
|
1398
|
+
let chunkCount = 0;
|
|
1399
|
+
try {
|
|
1400
|
+
for await (const chunk of source) {
|
|
1401
|
+
chunkCount++;
|
|
1402
|
+
yield chunk;
|
|
1403
|
+
}
|
|
1404
|
+
span.setAttribute("stream.chunk_count", chunkCount);
|
|
1405
|
+
span.setAttribute("stream.completed", true);
|
|
1406
|
+
} catch (error) {
|
|
1407
|
+
span.setAttribute("stream.chunk_count", chunkCount);
|
|
1408
|
+
span.setAttribute("stream.completed", false);
|
|
1409
|
+
span.recordException(error instanceof Error ? error : String(error));
|
|
1410
|
+
throw error;
|
|
1411
|
+
} finally {
|
|
1412
|
+
span.end();
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
// src/frameworks/langchain.ts
|
|
1417
|
+
var RisicareCallbackHandler = class {
|
|
1418
|
+
name = "RisicareCallbackHandler";
|
|
1419
|
+
_spans = /* @__PURE__ */ new Map();
|
|
1420
|
+
// ── Chain lifecycle ────────────────────────────────────────────────────────
|
|
1421
|
+
handleChainStart(chain, _inputs, runId, parentRunId) {
|
|
1422
|
+
const tracer = getTracer2();
|
|
1423
|
+
if (!tracer?.enabled) return;
|
|
1424
|
+
const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
|
|
1425
|
+
const span = tracer.createSpan({
|
|
1426
|
+
name: chain.name || chain._type || "chain",
|
|
1427
|
+
kind: "internal" /* INTERNAL */,
|
|
1428
|
+
parentSpanId: parentEntry?.span.spanId,
|
|
1429
|
+
traceId: parentEntry?.span.traceId,
|
|
1430
|
+
attributes: {
|
|
1431
|
+
"framework": "langchain",
|
|
1432
|
+
"langchain.run_id": runId,
|
|
1433
|
+
...parentRunId ? { "langchain.parent_run_id": parentRunId } : {},
|
|
1434
|
+
...chain._type ? { "langchain.chain_type": chain._type } : {}
|
|
1435
|
+
}
|
|
1436
|
+
});
|
|
1437
|
+
this._spans.set(runId, { span, startTime: Date.now() });
|
|
1438
|
+
}
|
|
1439
|
+
handleChainEnd(_outputs, runId) {
|
|
1440
|
+
const entry = this._spans.get(runId);
|
|
1441
|
+
if (!entry) return;
|
|
1442
|
+
entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
|
|
1443
|
+
entry.span.end();
|
|
1444
|
+
this._spans.delete(runId);
|
|
1445
|
+
}
|
|
1446
|
+
handleChainError(error, runId) {
|
|
1447
|
+
const entry = this._spans.get(runId);
|
|
1448
|
+
if (!entry) return;
|
|
1449
|
+
entry.span.recordException(error);
|
|
1450
|
+
entry.span.end();
|
|
1451
|
+
this._spans.delete(runId);
|
|
1452
|
+
}
|
|
1453
|
+
// ── LLM lifecycle ─────────────────────────────────────────────────────────
|
|
1454
|
+
handleLLMStart(llm, _prompts, runId, parentRunId) {
|
|
1455
|
+
const tracer = getTracer2();
|
|
1456
|
+
if (!tracer?.enabled) return;
|
|
1457
|
+
const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
|
|
1458
|
+
const span = tracer.createSpan({
|
|
1459
|
+
name: llm.name || llm._type || "llm",
|
|
1460
|
+
kind: "llm_call" /* LLM_CALL */,
|
|
1461
|
+
parentSpanId: parentEntry?.span.spanId,
|
|
1462
|
+
traceId: parentEntry?.span.traceId,
|
|
1463
|
+
attributes: {
|
|
1464
|
+
"framework": "langchain",
|
|
1465
|
+
"langchain.run_id": runId,
|
|
1466
|
+
"gen_ai.system": "langchain",
|
|
1467
|
+
"gen_ai.prompt.count": _prompts.length
|
|
1468
|
+
}
|
|
1469
|
+
});
|
|
1470
|
+
this._spans.set(runId, { span, startTime: Date.now() });
|
|
1471
|
+
}
|
|
1472
|
+
handleLLMEnd(output, runId) {
|
|
1473
|
+
const entry = this._spans.get(runId);
|
|
1474
|
+
if (!entry) return;
|
|
1475
|
+
const usage = output.llmOutput?.tokenUsage;
|
|
1476
|
+
if (usage) {
|
|
1477
|
+
entry.span.setLlmFields({
|
|
1478
|
+
promptTokens: usage.promptTokens ?? usage.prompt_tokens,
|
|
1479
|
+
completionTokens: usage.completionTokens ?? usage.completion_tokens,
|
|
1480
|
+
totalTokens: usage.totalTokens ?? usage.total_tokens
|
|
1481
|
+
});
|
|
1482
|
+
}
|
|
1483
|
+
const model = output.llmOutput?.model ?? output.llmOutput?.modelName;
|
|
1484
|
+
if (model) {
|
|
1485
|
+
entry.span.setLlmFields({ model });
|
|
1486
|
+
}
|
|
1487
|
+
entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
|
|
1488
|
+
entry.span.end();
|
|
1489
|
+
this._spans.delete(runId);
|
|
1490
|
+
}
|
|
1491
|
+
handleLLMError(error, runId) {
|
|
1492
|
+
const entry = this._spans.get(runId);
|
|
1493
|
+
if (!entry) return;
|
|
1494
|
+
entry.span.recordException(error);
|
|
1495
|
+
entry.span.end();
|
|
1496
|
+
this._spans.delete(runId);
|
|
1497
|
+
}
|
|
1498
|
+
// ── Tool lifecycle ────────────────────────────────────────────────────────
|
|
1499
|
+
handleToolStart(tool, input, runId, parentRunId) {
|
|
1500
|
+
const tracer = getTracer2();
|
|
1501
|
+
if (!tracer?.enabled) return;
|
|
1502
|
+
const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
|
|
1503
|
+
const span = tracer.createSpan({
|
|
1504
|
+
name: tool.name || "tool",
|
|
1505
|
+
kind: "tool_call" /* TOOL_CALL */,
|
|
1506
|
+
parentSpanId: parentEntry?.span.spanId,
|
|
1507
|
+
traceId: parentEntry?.span.traceId,
|
|
1508
|
+
attributes: {
|
|
1509
|
+
"framework": "langchain",
|
|
1510
|
+
"langchain.run_id": runId,
|
|
1511
|
+
"tool.name": tool.name || "unknown",
|
|
1512
|
+
"tool.input_length": input?.length ?? 0
|
|
1513
|
+
}
|
|
1514
|
+
});
|
|
1515
|
+
this._spans.set(runId, { span, startTime: Date.now() });
|
|
1516
|
+
}
|
|
1517
|
+
handleToolEnd(output, runId) {
|
|
1518
|
+
const entry = this._spans.get(runId);
|
|
1519
|
+
if (!entry) return;
|
|
1520
|
+
entry.span.setAttribute("tool.output_length", output?.length ?? 0);
|
|
1521
|
+
entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
|
|
1522
|
+
entry.span.end();
|
|
1523
|
+
this._spans.delete(runId);
|
|
1524
|
+
}
|
|
1525
|
+
handleToolError(error, runId) {
|
|
1526
|
+
const entry = this._spans.get(runId);
|
|
1527
|
+
if (!entry) return;
|
|
1528
|
+
entry.span.recordException(error);
|
|
1529
|
+
entry.span.end();
|
|
1530
|
+
this._spans.delete(runId);
|
|
1531
|
+
}
|
|
1532
|
+
// ── Retriever lifecycle ───────────────────────────────────────────────────
|
|
1533
|
+
handleRetrieverStart(retriever, _query, runId, parentRunId) {
|
|
1534
|
+
const tracer = getTracer2();
|
|
1535
|
+
if (!tracer?.enabled) return;
|
|
1536
|
+
const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
|
|
1537
|
+
const span = tracer.createSpan({
|
|
1538
|
+
name: retriever.name || "retriever",
|
|
1539
|
+
kind: "retrieval" /* RETRIEVAL */,
|
|
1540
|
+
parentSpanId: parentEntry?.span.spanId,
|
|
1541
|
+
traceId: parentEntry?.span.traceId,
|
|
1542
|
+
attributes: {
|
|
1543
|
+
"framework": "langchain",
|
|
1544
|
+
"langchain.run_id": runId
|
|
1545
|
+
}
|
|
1546
|
+
});
|
|
1547
|
+
this._spans.set(runId, { span, startTime: Date.now() });
|
|
1548
|
+
}
|
|
1549
|
+
handleRetrieverEnd(documents, runId) {
|
|
1550
|
+
const entry = this._spans.get(runId);
|
|
1551
|
+
if (!entry) return;
|
|
1552
|
+
entry.span.setAttribute(
|
|
1553
|
+
"retriever.document_count",
|
|
1554
|
+
documents?.length ?? 0
|
|
1555
|
+
);
|
|
1556
|
+
entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
|
|
1557
|
+
entry.span.end();
|
|
1558
|
+
this._spans.delete(runId);
|
|
1559
|
+
}
|
|
1560
|
+
};
|
|
1561
|
+
|
|
1562
|
+
// src/frameworks/langgraph.ts
|
|
1563
|
+
function instrumentLangGraph(graph) {
|
|
1564
|
+
return new Proxy(graph, {
|
|
1565
|
+
get(target, prop, receiver) {
|
|
1566
|
+
const value = Reflect.get(target, prop, receiver);
|
|
1567
|
+
if ((prop === "invoke" || prop === "stream") && typeof value === "function") {
|
|
1568
|
+
return function patchedMethod(...args) {
|
|
1569
|
+
const tracer = getTracer2();
|
|
1570
|
+
if (!tracer?.enabled) return value.apply(this, args);
|
|
1571
|
+
return tracer.startSpan(
|
|
1572
|
+
{
|
|
1573
|
+
name: `langgraph.${String(prop)}`,
|
|
1574
|
+
kind: "agent" /* AGENT */,
|
|
1575
|
+
attributes: { framework: "langgraph" }
|
|
1576
|
+
},
|
|
1577
|
+
(_span) => {
|
|
1578
|
+
const config = args[1] ?? {};
|
|
1579
|
+
const callbacks = config.callbacks ?? [];
|
|
1580
|
+
callbacks.push(new RisicareCallbackHandler());
|
|
1581
|
+
args[1] = { ...config, callbacks };
|
|
1582
|
+
const result = value.apply(this, args);
|
|
1583
|
+
if (result && typeof result.then === "function") {
|
|
1584
|
+
return result.then((r) => r);
|
|
1585
|
+
}
|
|
1586
|
+
return result;
|
|
1587
|
+
}
|
|
1588
|
+
);
|
|
1589
|
+
};
|
|
1590
|
+
}
|
|
1591
|
+
return value;
|
|
1592
|
+
}
|
|
1593
|
+
});
|
|
1594
|
+
}
|
|
1595
|
+
|
|
1596
|
+
// src/frameworks/instructor.ts
|
|
1597
|
+
function patchInstructor(client) {
|
|
1598
|
+
return new Proxy(client, {
|
|
1599
|
+
get(target, prop, receiver) {
|
|
1600
|
+
const value = Reflect.get(target, prop, receiver);
|
|
1601
|
+
if (prop === "create" && typeof value === "function") {
|
|
1602
|
+
return function patchedCreate(...args) {
|
|
1603
|
+
const tracer = getTracer2();
|
|
1604
|
+
if (!tracer?.enabled) {
|
|
1605
|
+
debug(
|
|
1606
|
+
"Tracer not initialized \u2014 call init() before using patchInstructor()"
|
|
1607
|
+
);
|
|
1608
|
+
return value.apply(this, args);
|
|
1609
|
+
}
|
|
1610
|
+
const params = args[0] ?? {};
|
|
1611
|
+
const responseModel = params.response_model ?? params.responseModel;
|
|
1612
|
+
let modelName = "unknown";
|
|
1613
|
+
if (responseModel && typeof responseModel === "function") {
|
|
1614
|
+
modelName = responseModel.name || "unknown";
|
|
1615
|
+
} else if (responseModel && typeof responseModel === "object") {
|
|
1616
|
+
modelName = responseModel.name ?? responseModel.description ?? "schema";
|
|
1617
|
+
} else if (typeof responseModel === "string") {
|
|
1618
|
+
modelName = responseModel;
|
|
1619
|
+
}
|
|
1620
|
+
return tracer.startSpan(
|
|
1621
|
+
{
|
|
1622
|
+
name: "instructor.create",
|
|
1623
|
+
kind: "llm_call" /* LLM_CALL */,
|
|
1624
|
+
attributes: {
|
|
1625
|
+
framework: "instructor",
|
|
1626
|
+
"framework.span_kind": "extraction",
|
|
1627
|
+
"instructor.response_model": modelName,
|
|
1628
|
+
...params.max_retries != null ? { "instructor.max_retries": params.max_retries } : {},
|
|
1629
|
+
...params.model != null ? { "gen_ai.request.model": params.model } : {}
|
|
1630
|
+
}
|
|
1631
|
+
},
|
|
1632
|
+
(_span) => {
|
|
1633
|
+
const result = value.apply(this, args);
|
|
1634
|
+
if (result && typeof result.then === "function") {
|
|
1635
|
+
return result.then((r) => r);
|
|
1636
|
+
}
|
|
1637
|
+
return result;
|
|
1638
|
+
}
|
|
1639
|
+
);
|
|
1640
|
+
};
|
|
1641
|
+
}
|
|
1642
|
+
return value;
|
|
1643
|
+
}
|
|
1644
|
+
});
|
|
1645
|
+
}
|
|
1646
|
+
|
|
1647
|
+
// src/context/dedup.ts
|
|
1648
|
+
function suppressProviderInstrumentation(fn) {
|
|
1649
|
+
return runWithContext({ _suppressProviderInstrumentation: true }, fn);
|
|
1650
|
+
}
|
|
1651
|
+
function isProviderInstrumentationSuppressed() {
|
|
1652
|
+
return getContext()._suppressProviderInstrumentation === true;
|
|
1653
|
+
}
|
|
1654
|
+
|
|
1655
|
+
// src/frameworks/llamaindex.ts
|
|
1656
|
+
var RisicareLlamaIndexHandler = class {
|
|
1657
|
+
_spans = /* @__PURE__ */ new Map();
|
|
1658
|
+
/**
|
|
1659
|
+
* Handle a LlamaIndex lifecycle event.
|
|
1660
|
+
*
|
|
1661
|
+
* Events follow the convention:
|
|
1662
|
+
* - `*.start` / `*.begin` -- component starts
|
|
1663
|
+
* - `*.end` / `*.complete` -- component finishes
|
|
1664
|
+
* - `*.error` -- component failed
|
|
1665
|
+
*/
|
|
1666
|
+
onEvent(event) {
|
|
1667
|
+
const tracer = getTracer2();
|
|
1668
|
+
if (!tracer?.enabled) return;
|
|
1669
|
+
if (event.type.endsWith(".start") || event.type.endsWith(".begin")) {
|
|
1670
|
+
this._handleStart(event);
|
|
1671
|
+
} else if (event.type.endsWith(".end") || event.type.endsWith(".complete")) {
|
|
1672
|
+
this._handleEnd(event);
|
|
1673
|
+
} else if (event.type.endsWith(".error")) {
|
|
1674
|
+
this._handleError(event);
|
|
1675
|
+
}
|
|
1676
|
+
}
|
|
1677
|
+
/**
|
|
1678
|
+
* Run a function with provider instrumentation suppressed.
|
|
1679
|
+
*
|
|
1680
|
+
* LlamaIndex handler creates its own LLM spans, so provider spans
|
|
1681
|
+
* (patchOpenAI, patchAnthropic, etc.) should be suppressed to avoid
|
|
1682
|
+
* double-tracing.
|
|
1683
|
+
*/
|
|
1684
|
+
withSuppression(fn) {
|
|
1685
|
+
return suppressProviderInstrumentation(fn);
|
|
1686
|
+
}
|
|
1687
|
+
// ── Internal event handlers ───────────────────────────────────────────────
|
|
1688
|
+
_handleStart(event) {
|
|
1689
|
+
const tracer = getTracer2();
|
|
1690
|
+
if (!tracer?.enabled) return;
|
|
1691
|
+
const componentKind = this._classifyComponent(event.type);
|
|
1692
|
+
const parentEntry = event.parentId ? this._spans.get(event.parentId) : void 0;
|
|
1693
|
+
const spanKind = componentKind === "llm" ? "llm_call" /* LLM_CALL */ : componentKind === "retrieval" ? "retrieval" /* RETRIEVAL */ : componentKind === "embedding" ? "llm_call" /* LLM_CALL */ : "internal" /* INTERNAL */;
|
|
1694
|
+
const span = tracer.createSpan({
|
|
1695
|
+
name: event.type.replace(/\.(start|begin)$/, ""),
|
|
1696
|
+
kind: spanKind,
|
|
1697
|
+
parentSpanId: parentEntry?.span.spanId,
|
|
1698
|
+
traceId: parentEntry?.span.traceId,
|
|
1699
|
+
attributes: {
|
|
1700
|
+
framework: "llamaindex",
|
|
1701
|
+
"framework.span_kind": componentKind,
|
|
1702
|
+
...event.data?.model ? { "gen_ai.request.model": event.data.model } : {}
|
|
1703
|
+
}
|
|
1704
|
+
});
|
|
1705
|
+
this._spans.set(event.id, { span, startTime: Date.now(), componentKind });
|
|
1706
|
+
}
|
|
1707
|
+
_handleEnd(event) {
|
|
1708
|
+
const entry = this._spans.get(event.id);
|
|
1709
|
+
if (!entry) return;
|
|
1710
|
+
entry.span.setAttribute(
|
|
1711
|
+
"gen_ai.latency_ms",
|
|
1712
|
+
Date.now() - entry.startTime
|
|
1713
|
+
);
|
|
1714
|
+
const usage = event.data?.usage;
|
|
1715
|
+
if (usage) {
|
|
1716
|
+
entry.span.setLlmFields({
|
|
1717
|
+
promptTokens: usage.promptTokens ?? usage.prompt_tokens,
|
|
1718
|
+
completionTokens: usage.completionTokens ?? usage.completion_tokens
|
|
1719
|
+
});
|
|
1720
|
+
}
|
|
1721
|
+
if (event.data?.documentCount != null) {
|
|
1722
|
+
entry.span.setAttribute(
|
|
1723
|
+
"retriever.document_count",
|
|
1724
|
+
event.data.documentCount
|
|
1725
|
+
);
|
|
1726
|
+
}
|
|
1727
|
+
entry.span.end();
|
|
1728
|
+
this._spans.delete(event.id);
|
|
1729
|
+
}
|
|
1730
|
+
_handleError(event) {
|
|
1731
|
+
const entry = this._spans.get(event.id);
|
|
1732
|
+
if (!entry) return;
|
|
1733
|
+
const error = event.data?.error;
|
|
1734
|
+
entry.span.recordException(
|
|
1735
|
+
error instanceof Error ? error : String(error ?? "Unknown error")
|
|
1736
|
+
);
|
|
1737
|
+
entry.span.end();
|
|
1738
|
+
this._spans.delete(event.id);
|
|
1739
|
+
}
|
|
1740
|
+
/**
|
|
1741
|
+
* Classify a LlamaIndex event type into a component kind.
|
|
1742
|
+
*/
|
|
1743
|
+
_classifyComponent(eventType) {
|
|
1744
|
+
const lower = eventType.toLowerCase();
|
|
1745
|
+
if (lower.includes("llm") || lower.includes("chat")) return "llm";
|
|
1746
|
+
if (lower.includes("embed")) return "embedding";
|
|
1747
|
+
if (lower.includes("retriev") || lower.includes("vector")) return "retrieval";
|
|
1748
|
+
if (lower.includes("synth") || lower.includes("response")) return "synthesis";
|
|
1749
|
+
if (lower.includes("query")) return "query";
|
|
1750
|
+
return "component";
|
|
1751
|
+
}
|
|
1752
|
+
};
|
|
1364
1753
|
export {
|
|
1365
1754
|
AgentRole,
|
|
1366
1755
|
MessageType,
|
|
1756
|
+
RisicareCallbackHandler,
|
|
1757
|
+
RisicareLlamaIndexHandler,
|
|
1367
1758
|
SemanticPhase,
|
|
1368
1759
|
SpanKind,
|
|
1369
1760
|
SpanStatus,
|
|
@@ -1388,12 +1779,16 @@ export {
|
|
|
1388
1779
|
getTracer2 as getTracer,
|
|
1389
1780
|
init,
|
|
1390
1781
|
injectTraceContext,
|
|
1782
|
+
instrumentLangGraph,
|
|
1391
1783
|
isEnabled,
|
|
1784
|
+
isProviderInstrumentationSuppressed,
|
|
1785
|
+
patchInstructor,
|
|
1392
1786
|
registerSpan,
|
|
1393
1787
|
reportError,
|
|
1394
1788
|
score,
|
|
1395
1789
|
session,
|
|
1396
1790
|
shutdown,
|
|
1791
|
+
suppressProviderInstrumentation,
|
|
1397
1792
|
traceAct,
|
|
1398
1793
|
traceCoordinate,
|
|
1399
1794
|
traceDecide,
|
|
@@ -1401,6 +1796,7 @@ export {
|
|
|
1401
1796
|
traceMessage,
|
|
1402
1797
|
traceObserve,
|
|
1403
1798
|
traceThink,
|
|
1799
|
+
tracedStream,
|
|
1404
1800
|
unregisterSpan,
|
|
1405
1801
|
withAgent,
|
|
1406
1802
|
withPhase,
|