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.
Files changed (93) hide show
  1. package/dist/frameworks/instructor.cjs +178 -0
  2. package/dist/frameworks/instructor.cjs.map +1 -0
  3. package/dist/frameworks/instructor.d.cts +28 -0
  4. package/dist/frameworks/instructor.d.ts +28 -0
  5. package/dist/frameworks/instructor.js +151 -0
  6. package/dist/frameworks/instructor.js.map +1 -0
  7. package/dist/frameworks/langchain.cjs +262 -0
  8. package/dist/frameworks/langchain.cjs.map +1 -0
  9. package/dist/frameworks/langchain.d.cts +45 -0
  10. package/dist/frameworks/langchain.d.ts +45 -0
  11. package/dist/frameworks/langchain.js +235 -0
  12. package/dist/frameworks/langchain.js.map +1 -0
  13. package/dist/frameworks/langgraph.cjs +296 -0
  14. package/dist/frameworks/langgraph.cjs.map +1 -0
  15. package/dist/frameworks/langgraph.d.cts +28 -0
  16. package/dist/frameworks/langgraph.d.ts +28 -0
  17. package/dist/frameworks/langgraph.js +269 -0
  18. package/dist/frameworks/langgraph.js.map +1 -0
  19. package/dist/frameworks/llamaindex.cjs +239 -0
  20. package/dist/frameworks/llamaindex.cjs.map +1 -0
  21. package/dist/frameworks/llamaindex.d.cts +55 -0
  22. package/dist/frameworks/llamaindex.d.ts +55 -0
  23. package/dist/frameworks/llamaindex.js +212 -0
  24. package/dist/frameworks/llamaindex.js.map +1 -0
  25. package/dist/index.cjs +407 -4
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +96 -6
  28. package/dist/index.d.ts +96 -6
  29. package/dist/index.js +400 -4
  30. package/dist/index.js.map +1 -1
  31. package/dist/providers/anthropic/index.cjs +22 -0
  32. package/dist/providers/anthropic/index.cjs.map +1 -1
  33. package/dist/providers/anthropic/index.js +22 -0
  34. package/dist/providers/anthropic/index.js.map +1 -1
  35. package/dist/providers/bedrock/index.cjs +334 -0
  36. package/dist/providers/bedrock/index.cjs.map +1 -0
  37. package/dist/providers/bedrock/index.d.cts +37 -0
  38. package/dist/providers/bedrock/index.d.ts +37 -0
  39. package/dist/providers/bedrock/index.js +307 -0
  40. package/dist/providers/bedrock/index.js.map +1 -0
  41. package/dist/providers/cerebras/index.cjs +282 -0
  42. package/dist/providers/cerebras/index.cjs.map +1 -0
  43. package/dist/providers/cerebras/index.d.cts +24 -0
  44. package/dist/providers/cerebras/index.d.ts +24 -0
  45. package/dist/providers/cerebras/index.js +255 -0
  46. package/dist/providers/cerebras/index.js.map +1 -0
  47. package/dist/providers/cohere/index.cjs +347 -0
  48. package/dist/providers/cohere/index.cjs.map +1 -0
  49. package/dist/providers/cohere/index.d.cts +24 -0
  50. package/dist/providers/cohere/index.d.ts +24 -0
  51. package/dist/providers/cohere/index.js +320 -0
  52. package/dist/providers/cohere/index.js.map +1 -0
  53. package/dist/providers/google/index.cjs +337 -0
  54. package/dist/providers/google/index.cjs.map +1 -0
  55. package/dist/providers/google/index.d.cts +25 -0
  56. package/dist/providers/google/index.d.ts +25 -0
  57. package/dist/providers/google/index.js +310 -0
  58. package/dist/providers/google/index.js.map +1 -0
  59. package/dist/providers/groq/index.cjs +282 -0
  60. package/dist/providers/groq/index.cjs.map +1 -0
  61. package/dist/providers/groq/index.d.cts +23 -0
  62. package/dist/providers/groq/index.d.ts +23 -0
  63. package/dist/providers/groq/index.js +255 -0
  64. package/dist/providers/groq/index.js.map +1 -0
  65. package/dist/providers/huggingface/index.cjs +289 -0
  66. package/dist/providers/huggingface/index.cjs.map +1 -0
  67. package/dist/providers/huggingface/index.d.cts +24 -0
  68. package/dist/providers/huggingface/index.d.ts +24 -0
  69. package/dist/providers/huggingface/index.js +262 -0
  70. package/dist/providers/huggingface/index.js.map +1 -0
  71. package/dist/providers/mistral/index.cjs +336 -0
  72. package/dist/providers/mistral/index.cjs.map +1 -0
  73. package/dist/providers/mistral/index.d.cts +24 -0
  74. package/dist/providers/mistral/index.d.ts +24 -0
  75. package/dist/providers/mistral/index.js +309 -0
  76. package/dist/providers/mistral/index.js.map +1 -0
  77. package/dist/providers/ollama/index.cjs +376 -0
  78. package/dist/providers/ollama/index.cjs.map +1 -0
  79. package/dist/providers/ollama/index.d.cts +28 -0
  80. package/dist/providers/ollama/index.d.ts +28 -0
  81. package/dist/providers/ollama/index.js +349 -0
  82. package/dist/providers/ollama/index.js.map +1 -0
  83. package/dist/providers/openai/index.cjs +31 -1
  84. package/dist/providers/openai/index.cjs.map +1 -1
  85. package/dist/providers/openai/index.js +31 -1
  86. package/dist/providers/openai/index.js.map +1 -1
  87. package/dist/providers/together/index.cjs +275 -0
  88. package/dist/providers/together/index.cjs.map +1 -0
  89. package/dist/providers/together/index.d.cts +24 -0
  90. package/dist/providers/together/index.d.ts +24 -0
  91. package/dist/providers/together/index.js +248 -0
  92. package/dist/providers/together/index.js.map +1 -0
  93. 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["REVIEWER"] = "reviewer";
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["CRITIC"] = "critic";
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["REQUEST"] = "request";
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
 
@@ -1439,10 +1466,381 @@ function maybeCleanup() {
1439
1466
  }
1440
1467
  }
1441
1468
  }
1469
+
1470
+ // src/streaming.ts
1471
+ async function* tracedStream(source, options) {
1472
+ const opts = typeof options === "string" ? { name: options } : options;
1473
+ const tracer = getTracer2();
1474
+ if (!tracer || !tracer.enabled) {
1475
+ yield* source;
1476
+ return;
1477
+ }
1478
+ const span = tracer.createSpan({
1479
+ name: opts.name,
1480
+ kind: opts.kind ?? "internal" /* INTERNAL */,
1481
+ attributes: opts.attributes
1482
+ });
1483
+ let chunkCount = 0;
1484
+ try {
1485
+ for await (const chunk of source) {
1486
+ chunkCount++;
1487
+ yield chunk;
1488
+ }
1489
+ span.setAttribute("stream.chunk_count", chunkCount);
1490
+ span.setAttribute("stream.completed", true);
1491
+ } catch (error) {
1492
+ span.setAttribute("stream.chunk_count", chunkCount);
1493
+ span.setAttribute("stream.completed", false);
1494
+ span.recordException(error instanceof Error ? error : String(error));
1495
+ throw error;
1496
+ } finally {
1497
+ span.end();
1498
+ }
1499
+ }
1500
+
1501
+ // src/frameworks/langchain.ts
1502
+ var RisicareCallbackHandler = class {
1503
+ name = "RisicareCallbackHandler";
1504
+ _spans = /* @__PURE__ */ new Map();
1505
+ // ── Chain lifecycle ────────────────────────────────────────────────────────
1506
+ handleChainStart(chain, _inputs, runId, parentRunId) {
1507
+ const tracer = getTracer2();
1508
+ if (!tracer?.enabled) return;
1509
+ const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
1510
+ const span = tracer.createSpan({
1511
+ name: chain.name || chain._type || "chain",
1512
+ kind: "internal" /* INTERNAL */,
1513
+ parentSpanId: parentEntry?.span.spanId,
1514
+ traceId: parentEntry?.span.traceId,
1515
+ attributes: {
1516
+ "framework": "langchain",
1517
+ "langchain.run_id": runId,
1518
+ ...parentRunId ? { "langchain.parent_run_id": parentRunId } : {},
1519
+ ...chain._type ? { "langchain.chain_type": chain._type } : {}
1520
+ }
1521
+ });
1522
+ this._spans.set(runId, { span, startTime: Date.now() });
1523
+ }
1524
+ handleChainEnd(_outputs, runId) {
1525
+ const entry = this._spans.get(runId);
1526
+ if (!entry) return;
1527
+ entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
1528
+ entry.span.end();
1529
+ this._spans.delete(runId);
1530
+ }
1531
+ handleChainError(error, runId) {
1532
+ const entry = this._spans.get(runId);
1533
+ if (!entry) return;
1534
+ entry.span.recordException(error);
1535
+ entry.span.end();
1536
+ this._spans.delete(runId);
1537
+ }
1538
+ // ── LLM lifecycle ─────────────────────────────────────────────────────────
1539
+ handleLLMStart(llm, _prompts, runId, parentRunId) {
1540
+ const tracer = getTracer2();
1541
+ if (!tracer?.enabled) return;
1542
+ const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
1543
+ const span = tracer.createSpan({
1544
+ name: llm.name || llm._type || "llm",
1545
+ kind: "llm_call" /* LLM_CALL */,
1546
+ parentSpanId: parentEntry?.span.spanId,
1547
+ traceId: parentEntry?.span.traceId,
1548
+ attributes: {
1549
+ "framework": "langchain",
1550
+ "langchain.run_id": runId,
1551
+ "gen_ai.system": "langchain",
1552
+ "gen_ai.prompt.count": _prompts.length
1553
+ }
1554
+ });
1555
+ this._spans.set(runId, { span, startTime: Date.now() });
1556
+ }
1557
+ handleLLMEnd(output, runId) {
1558
+ const entry = this._spans.get(runId);
1559
+ if (!entry) return;
1560
+ const usage = output.llmOutput?.tokenUsage;
1561
+ if (usage) {
1562
+ entry.span.setLlmFields({
1563
+ promptTokens: usage.promptTokens ?? usage.prompt_tokens,
1564
+ completionTokens: usage.completionTokens ?? usage.completion_tokens,
1565
+ totalTokens: usage.totalTokens ?? usage.total_tokens
1566
+ });
1567
+ }
1568
+ const model = output.llmOutput?.model ?? output.llmOutput?.modelName;
1569
+ if (model) {
1570
+ entry.span.setLlmFields({ model });
1571
+ }
1572
+ entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
1573
+ entry.span.end();
1574
+ this._spans.delete(runId);
1575
+ }
1576
+ handleLLMError(error, runId) {
1577
+ const entry = this._spans.get(runId);
1578
+ if (!entry) return;
1579
+ entry.span.recordException(error);
1580
+ entry.span.end();
1581
+ this._spans.delete(runId);
1582
+ }
1583
+ // ── Tool lifecycle ────────────────────────────────────────────────────────
1584
+ handleToolStart(tool, input, runId, parentRunId) {
1585
+ const tracer = getTracer2();
1586
+ if (!tracer?.enabled) return;
1587
+ const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
1588
+ const span = tracer.createSpan({
1589
+ name: tool.name || "tool",
1590
+ kind: "tool_call" /* TOOL_CALL */,
1591
+ parentSpanId: parentEntry?.span.spanId,
1592
+ traceId: parentEntry?.span.traceId,
1593
+ attributes: {
1594
+ "framework": "langchain",
1595
+ "langchain.run_id": runId,
1596
+ "tool.name": tool.name || "unknown",
1597
+ "tool.input_length": input?.length ?? 0
1598
+ }
1599
+ });
1600
+ this._spans.set(runId, { span, startTime: Date.now() });
1601
+ }
1602
+ handleToolEnd(output, runId) {
1603
+ const entry = this._spans.get(runId);
1604
+ if (!entry) return;
1605
+ entry.span.setAttribute("tool.output_length", output?.length ?? 0);
1606
+ entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
1607
+ entry.span.end();
1608
+ this._spans.delete(runId);
1609
+ }
1610
+ handleToolError(error, runId) {
1611
+ const entry = this._spans.get(runId);
1612
+ if (!entry) return;
1613
+ entry.span.recordException(error);
1614
+ entry.span.end();
1615
+ this._spans.delete(runId);
1616
+ }
1617
+ // ── Retriever lifecycle ───────────────────────────────────────────────────
1618
+ handleRetrieverStart(retriever, _query, runId, parentRunId) {
1619
+ const tracer = getTracer2();
1620
+ if (!tracer?.enabled) return;
1621
+ const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
1622
+ const span = tracer.createSpan({
1623
+ name: retriever.name || "retriever",
1624
+ kind: "retrieval" /* RETRIEVAL */,
1625
+ parentSpanId: parentEntry?.span.spanId,
1626
+ traceId: parentEntry?.span.traceId,
1627
+ attributes: {
1628
+ "framework": "langchain",
1629
+ "langchain.run_id": runId
1630
+ }
1631
+ });
1632
+ this._spans.set(runId, { span, startTime: Date.now() });
1633
+ }
1634
+ handleRetrieverEnd(documents, runId) {
1635
+ const entry = this._spans.get(runId);
1636
+ if (!entry) return;
1637
+ entry.span.setAttribute(
1638
+ "retriever.document_count",
1639
+ documents?.length ?? 0
1640
+ );
1641
+ entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
1642
+ entry.span.end();
1643
+ this._spans.delete(runId);
1644
+ }
1645
+ };
1646
+
1647
+ // src/frameworks/langgraph.ts
1648
+ function instrumentLangGraph(graph) {
1649
+ return new Proxy(graph, {
1650
+ get(target, prop, receiver) {
1651
+ const value = Reflect.get(target, prop, receiver);
1652
+ if ((prop === "invoke" || prop === "stream") && typeof value === "function") {
1653
+ return function patchedMethod(...args) {
1654
+ const tracer = getTracer2();
1655
+ if (!tracer?.enabled) return value.apply(this, args);
1656
+ return tracer.startSpan(
1657
+ {
1658
+ name: `langgraph.${String(prop)}`,
1659
+ kind: "agent" /* AGENT */,
1660
+ attributes: { framework: "langgraph" }
1661
+ },
1662
+ (_span) => {
1663
+ const config = args[1] ?? {};
1664
+ const callbacks = config.callbacks ?? [];
1665
+ callbacks.push(new RisicareCallbackHandler());
1666
+ args[1] = { ...config, callbacks };
1667
+ const result = value.apply(this, args);
1668
+ if (result && typeof result.then === "function") {
1669
+ return result.then((r) => r);
1670
+ }
1671
+ return result;
1672
+ }
1673
+ );
1674
+ };
1675
+ }
1676
+ return value;
1677
+ }
1678
+ });
1679
+ }
1680
+
1681
+ // src/frameworks/instructor.ts
1682
+ function patchInstructor(client) {
1683
+ return new Proxy(client, {
1684
+ get(target, prop, receiver) {
1685
+ const value = Reflect.get(target, prop, receiver);
1686
+ if (prop === "create" && typeof value === "function") {
1687
+ return function patchedCreate(...args) {
1688
+ const tracer = getTracer2();
1689
+ if (!tracer?.enabled) {
1690
+ debug(
1691
+ "Tracer not initialized \u2014 call init() before using patchInstructor()"
1692
+ );
1693
+ return value.apply(this, args);
1694
+ }
1695
+ const params = args[0] ?? {};
1696
+ const responseModel = params.response_model ?? params.responseModel;
1697
+ let modelName = "unknown";
1698
+ if (responseModel && typeof responseModel === "function") {
1699
+ modelName = responseModel.name || "unknown";
1700
+ } else if (responseModel && typeof responseModel === "object") {
1701
+ modelName = responseModel.name ?? responseModel.description ?? "schema";
1702
+ } else if (typeof responseModel === "string") {
1703
+ modelName = responseModel;
1704
+ }
1705
+ return tracer.startSpan(
1706
+ {
1707
+ name: "instructor.create",
1708
+ kind: "llm_call" /* LLM_CALL */,
1709
+ attributes: {
1710
+ framework: "instructor",
1711
+ "framework.span_kind": "extraction",
1712
+ "instructor.response_model": modelName,
1713
+ ...params.max_retries != null ? { "instructor.max_retries": params.max_retries } : {},
1714
+ ...params.model != null ? { "gen_ai.request.model": params.model } : {}
1715
+ }
1716
+ },
1717
+ (_span) => {
1718
+ const result = value.apply(this, args);
1719
+ if (result && typeof result.then === "function") {
1720
+ return result.then((r) => r);
1721
+ }
1722
+ return result;
1723
+ }
1724
+ );
1725
+ };
1726
+ }
1727
+ return value;
1728
+ }
1729
+ });
1730
+ }
1731
+
1732
+ // src/context/dedup.ts
1733
+ function suppressProviderInstrumentation(fn) {
1734
+ return runWithContext({ _suppressProviderInstrumentation: true }, fn);
1735
+ }
1736
+ function isProviderInstrumentationSuppressed() {
1737
+ return getContext()._suppressProviderInstrumentation === true;
1738
+ }
1739
+
1740
+ // src/frameworks/llamaindex.ts
1741
+ var RisicareLlamaIndexHandler = class {
1742
+ _spans = /* @__PURE__ */ new Map();
1743
+ /**
1744
+ * Handle a LlamaIndex lifecycle event.
1745
+ *
1746
+ * Events follow the convention:
1747
+ * - `*.start` / `*.begin` -- component starts
1748
+ * - `*.end` / `*.complete` -- component finishes
1749
+ * - `*.error` -- component failed
1750
+ */
1751
+ onEvent(event) {
1752
+ const tracer = getTracer2();
1753
+ if (!tracer?.enabled) return;
1754
+ if (event.type.endsWith(".start") || event.type.endsWith(".begin")) {
1755
+ this._handleStart(event);
1756
+ } else if (event.type.endsWith(".end") || event.type.endsWith(".complete")) {
1757
+ this._handleEnd(event);
1758
+ } else if (event.type.endsWith(".error")) {
1759
+ this._handleError(event);
1760
+ }
1761
+ }
1762
+ /**
1763
+ * Run a function with provider instrumentation suppressed.
1764
+ *
1765
+ * LlamaIndex handler creates its own LLM spans, so provider spans
1766
+ * (patchOpenAI, patchAnthropic, etc.) should be suppressed to avoid
1767
+ * double-tracing.
1768
+ */
1769
+ withSuppression(fn) {
1770
+ return suppressProviderInstrumentation(fn);
1771
+ }
1772
+ // ── Internal event handlers ───────────────────────────────────────────────
1773
+ _handleStart(event) {
1774
+ const tracer = getTracer2();
1775
+ if (!tracer?.enabled) return;
1776
+ const componentKind = this._classifyComponent(event.type);
1777
+ const parentEntry = event.parentId ? this._spans.get(event.parentId) : void 0;
1778
+ const spanKind = componentKind === "llm" ? "llm_call" /* LLM_CALL */ : componentKind === "retrieval" ? "retrieval" /* RETRIEVAL */ : componentKind === "embedding" ? "llm_call" /* LLM_CALL */ : "internal" /* INTERNAL */;
1779
+ const span = tracer.createSpan({
1780
+ name: event.type.replace(/\.(start|begin)$/, ""),
1781
+ kind: spanKind,
1782
+ parentSpanId: parentEntry?.span.spanId,
1783
+ traceId: parentEntry?.span.traceId,
1784
+ attributes: {
1785
+ framework: "llamaindex",
1786
+ "framework.span_kind": componentKind,
1787
+ ...event.data?.model ? { "gen_ai.request.model": event.data.model } : {}
1788
+ }
1789
+ });
1790
+ this._spans.set(event.id, { span, startTime: Date.now(), componentKind });
1791
+ }
1792
+ _handleEnd(event) {
1793
+ const entry = this._spans.get(event.id);
1794
+ if (!entry) return;
1795
+ entry.span.setAttribute(
1796
+ "gen_ai.latency_ms",
1797
+ Date.now() - entry.startTime
1798
+ );
1799
+ const usage = event.data?.usage;
1800
+ if (usage) {
1801
+ entry.span.setLlmFields({
1802
+ promptTokens: usage.promptTokens ?? usage.prompt_tokens,
1803
+ completionTokens: usage.completionTokens ?? usage.completion_tokens
1804
+ });
1805
+ }
1806
+ if (event.data?.documentCount != null) {
1807
+ entry.span.setAttribute(
1808
+ "retriever.document_count",
1809
+ event.data.documentCount
1810
+ );
1811
+ }
1812
+ entry.span.end();
1813
+ this._spans.delete(event.id);
1814
+ }
1815
+ _handleError(event) {
1816
+ const entry = this._spans.get(event.id);
1817
+ if (!entry) return;
1818
+ const error = event.data?.error;
1819
+ entry.span.recordException(
1820
+ error instanceof Error ? error : String(error ?? "Unknown error")
1821
+ );
1822
+ entry.span.end();
1823
+ this._spans.delete(event.id);
1824
+ }
1825
+ /**
1826
+ * Classify a LlamaIndex event type into a component kind.
1827
+ */
1828
+ _classifyComponent(eventType) {
1829
+ const lower = eventType.toLowerCase();
1830
+ if (lower.includes("llm") || lower.includes("chat")) return "llm";
1831
+ if (lower.includes("embed")) return "embedding";
1832
+ if (lower.includes("retriev") || lower.includes("vector")) return "retrieval";
1833
+ if (lower.includes("synth") || lower.includes("response")) return "synthesis";
1834
+ if (lower.includes("query")) return "query";
1835
+ return "component";
1836
+ }
1837
+ };
1442
1838
  // Annotate the CommonJS export names for ESM import in node:
1443
1839
  0 && (module.exports = {
1444
1840
  AgentRole,
1445
1841
  MessageType,
1842
+ RisicareCallbackHandler,
1843
+ RisicareLlamaIndexHandler,
1446
1844
  SemanticPhase,
1447
1845
  SpanKind,
1448
1846
  SpanStatus,
@@ -1467,12 +1865,16 @@ function maybeCleanup() {
1467
1865
  getTracer,
1468
1866
  init,
1469
1867
  injectTraceContext,
1868
+ instrumentLangGraph,
1470
1869
  isEnabled,
1870
+ isProviderInstrumentationSuppressed,
1871
+ patchInstructor,
1471
1872
  registerSpan,
1472
1873
  reportError,
1473
1874
  score,
1474
1875
  session,
1475
1876
  shutdown,
1877
+ suppressProviderInstrumentation,
1476
1878
  traceAct,
1477
1879
  traceCoordinate,
1478
1880
  traceDecide,
@@ -1480,6 +1882,7 @@ function maybeCleanup() {
1480
1882
  traceMessage,
1481
1883
  traceObserve,
1482
1884
  traceThink,
1885
+ tracedStream,
1483
1886
  unregisterSpan,
1484
1887
  withAgent,
1485
1888
  withPhase,