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.
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 +425 -14
  26. package/dist/index.cjs.map +1 -1
  27. package/dist/index.d.cts +124 -14
  28. package/dist/index.d.ts +124 -14
  29. package/dist/index.js +418 -14
  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.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["REVIEWER"] = "reviewer";
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["CRITIC"] = "critic";
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["REQUEST"] = "request";
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
 
@@ -1159,28 +1179,36 @@ function withPhase(phase, fn) {
1159
1179
  }
1160
1180
 
1161
1181
  // src/decorators/phase.ts
1162
- function phaseWrapper(phase, kind, fn) {
1182
+ function phaseWrapper(phase, kind, name, fn) {
1163
1183
  return (...args) => {
1164
1184
  const tracer = getTracer2();
1165
1185
  if (!tracer) {
1166
1186
  return fn(...args);
1167
1187
  }
1168
1188
  return withPhase(phase, () => {
1169
- return tracer.startSpan({ name: `phase:${phase}`, kind }, () => fn(...args));
1189
+ return tracer.startSpan({ name, kind }, () => fn(...args));
1170
1190
  });
1171
1191
  };
1172
1192
  }
1173
- function traceThink(fn) {
1174
- return phaseWrapper("think" /* THINK */, "think" /* THINK */, fn);
1193
+ function traceThink(fnOrName, maybeFn) {
1194
+ const name = typeof fnOrName === "string" ? fnOrName : `phase:think`;
1195
+ const fn = typeof fnOrName === "function" ? fnOrName : maybeFn;
1196
+ return phaseWrapper("think" /* THINK */, "think" /* THINK */, name, fn);
1175
1197
  }
1176
- function traceDecide(fn) {
1177
- return phaseWrapper("decide" /* DECIDE */, "decide" /* DECIDE */, fn);
1198
+ function traceDecide(fnOrName, maybeFn) {
1199
+ const name = typeof fnOrName === "string" ? fnOrName : `phase:decide`;
1200
+ const fn = typeof fnOrName === "function" ? fnOrName : maybeFn;
1201
+ return phaseWrapper("decide" /* DECIDE */, "decide" /* DECIDE */, name, fn);
1178
1202
  }
1179
- function traceAct(fn) {
1180
- return phaseWrapper("act" /* ACT */, "tool_call" /* TOOL_CALL */, fn);
1203
+ function traceAct(fnOrName, maybeFn) {
1204
+ const name = typeof fnOrName === "string" ? fnOrName : `phase:act`;
1205
+ const fn = typeof fnOrName === "function" ? fnOrName : maybeFn;
1206
+ return phaseWrapper("act" /* ACT */, "tool_call" /* TOOL_CALL */, name, fn);
1181
1207
  }
1182
- function traceObserve(fn) {
1183
- return phaseWrapper("observe" /* OBSERVE */, "observe" /* OBSERVE */, fn);
1208
+ function traceObserve(fnOrName, maybeFn) {
1209
+ const name = typeof fnOrName === "string" ? fnOrName : `phase:observe`;
1210
+ const fn = typeof fnOrName === "function" ? fnOrName : maybeFn;
1211
+ return phaseWrapper("observe" /* OBSERVE */, "observe" /* OBSERVE */, name, fn);
1184
1212
  }
1185
1213
 
1186
1214
  // src/decorators/multi-agent.ts
@@ -1361,9 +1389,380 @@ function maybeCleanup() {
1361
1389
  }
1362
1390
  }
1363
1391
  }
1392
+
1393
+ // src/streaming.ts
1394
+ async function* tracedStream(source, options) {
1395
+ const opts = typeof options === "string" ? { name: options } : options;
1396
+ const tracer = getTracer2();
1397
+ if (!tracer || !tracer.enabled) {
1398
+ yield* source;
1399
+ return;
1400
+ }
1401
+ const span = tracer.createSpan({
1402
+ name: opts.name,
1403
+ kind: opts.kind ?? "internal" /* INTERNAL */,
1404
+ attributes: opts.attributes
1405
+ });
1406
+ let chunkCount = 0;
1407
+ try {
1408
+ for await (const chunk of source) {
1409
+ chunkCount++;
1410
+ yield chunk;
1411
+ }
1412
+ span.setAttribute("stream.chunk_count", chunkCount);
1413
+ span.setAttribute("stream.completed", true);
1414
+ } catch (error) {
1415
+ span.setAttribute("stream.chunk_count", chunkCount);
1416
+ span.setAttribute("stream.completed", false);
1417
+ span.recordException(error instanceof Error ? error : String(error));
1418
+ throw error;
1419
+ } finally {
1420
+ span.end();
1421
+ }
1422
+ }
1423
+
1424
+ // src/frameworks/langchain.ts
1425
+ var RisicareCallbackHandler = class {
1426
+ name = "RisicareCallbackHandler";
1427
+ _spans = /* @__PURE__ */ new Map();
1428
+ // ── Chain lifecycle ────────────────────────────────────────────────────────
1429
+ handleChainStart(chain, _inputs, runId, parentRunId) {
1430
+ const tracer = getTracer2();
1431
+ if (!tracer?.enabled) return;
1432
+ const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
1433
+ const span = tracer.createSpan({
1434
+ name: chain.name || chain._type || "chain",
1435
+ kind: "internal" /* INTERNAL */,
1436
+ parentSpanId: parentEntry?.span.spanId,
1437
+ traceId: parentEntry?.span.traceId,
1438
+ attributes: {
1439
+ "framework": "langchain",
1440
+ "langchain.run_id": runId,
1441
+ ...parentRunId ? { "langchain.parent_run_id": parentRunId } : {},
1442
+ ...chain._type ? { "langchain.chain_type": chain._type } : {}
1443
+ }
1444
+ });
1445
+ this._spans.set(runId, { span, startTime: Date.now() });
1446
+ }
1447
+ handleChainEnd(_outputs, runId) {
1448
+ const entry = this._spans.get(runId);
1449
+ if (!entry) return;
1450
+ entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
1451
+ entry.span.end();
1452
+ this._spans.delete(runId);
1453
+ }
1454
+ handleChainError(error, runId) {
1455
+ const entry = this._spans.get(runId);
1456
+ if (!entry) return;
1457
+ entry.span.recordException(error);
1458
+ entry.span.end();
1459
+ this._spans.delete(runId);
1460
+ }
1461
+ // ── LLM lifecycle ─────────────────────────────────────────────────────────
1462
+ handleLLMStart(llm, _prompts, runId, parentRunId) {
1463
+ const tracer = getTracer2();
1464
+ if (!tracer?.enabled) return;
1465
+ const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
1466
+ const span = tracer.createSpan({
1467
+ name: llm.name || llm._type || "llm",
1468
+ kind: "llm_call" /* LLM_CALL */,
1469
+ parentSpanId: parentEntry?.span.spanId,
1470
+ traceId: parentEntry?.span.traceId,
1471
+ attributes: {
1472
+ "framework": "langchain",
1473
+ "langchain.run_id": runId,
1474
+ "gen_ai.system": "langchain",
1475
+ "gen_ai.prompt.count": _prompts.length
1476
+ }
1477
+ });
1478
+ this._spans.set(runId, { span, startTime: Date.now() });
1479
+ }
1480
+ handleLLMEnd(output, runId) {
1481
+ const entry = this._spans.get(runId);
1482
+ if (!entry) return;
1483
+ const usage = output.llmOutput?.tokenUsage;
1484
+ if (usage) {
1485
+ entry.span.setLlmFields({
1486
+ promptTokens: usage.promptTokens ?? usage.prompt_tokens,
1487
+ completionTokens: usage.completionTokens ?? usage.completion_tokens,
1488
+ totalTokens: usage.totalTokens ?? usage.total_tokens
1489
+ });
1490
+ }
1491
+ const model = output.llmOutput?.model ?? output.llmOutput?.modelName;
1492
+ if (model) {
1493
+ entry.span.setLlmFields({ model });
1494
+ }
1495
+ entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
1496
+ entry.span.end();
1497
+ this._spans.delete(runId);
1498
+ }
1499
+ handleLLMError(error, runId) {
1500
+ const entry = this._spans.get(runId);
1501
+ if (!entry) return;
1502
+ entry.span.recordException(error);
1503
+ entry.span.end();
1504
+ this._spans.delete(runId);
1505
+ }
1506
+ // ── Tool lifecycle ────────────────────────────────────────────────────────
1507
+ handleToolStart(tool, input, runId, parentRunId) {
1508
+ const tracer = getTracer2();
1509
+ if (!tracer?.enabled) return;
1510
+ const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
1511
+ const span = tracer.createSpan({
1512
+ name: tool.name || "tool",
1513
+ kind: "tool_call" /* TOOL_CALL */,
1514
+ parentSpanId: parentEntry?.span.spanId,
1515
+ traceId: parentEntry?.span.traceId,
1516
+ attributes: {
1517
+ "framework": "langchain",
1518
+ "langchain.run_id": runId,
1519
+ "tool.name": tool.name || "unknown",
1520
+ "tool.input_length": input?.length ?? 0
1521
+ }
1522
+ });
1523
+ this._spans.set(runId, { span, startTime: Date.now() });
1524
+ }
1525
+ handleToolEnd(output, runId) {
1526
+ const entry = this._spans.get(runId);
1527
+ if (!entry) return;
1528
+ entry.span.setAttribute("tool.output_length", output?.length ?? 0);
1529
+ entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
1530
+ entry.span.end();
1531
+ this._spans.delete(runId);
1532
+ }
1533
+ handleToolError(error, runId) {
1534
+ const entry = this._spans.get(runId);
1535
+ if (!entry) return;
1536
+ entry.span.recordException(error);
1537
+ entry.span.end();
1538
+ this._spans.delete(runId);
1539
+ }
1540
+ // ── Retriever lifecycle ───────────────────────────────────────────────────
1541
+ handleRetrieverStart(retriever, _query, runId, parentRunId) {
1542
+ const tracer = getTracer2();
1543
+ if (!tracer?.enabled) return;
1544
+ const parentEntry = parentRunId ? this._spans.get(parentRunId) : void 0;
1545
+ const span = tracer.createSpan({
1546
+ name: retriever.name || "retriever",
1547
+ kind: "retrieval" /* RETRIEVAL */,
1548
+ parentSpanId: parentEntry?.span.spanId,
1549
+ traceId: parentEntry?.span.traceId,
1550
+ attributes: {
1551
+ "framework": "langchain",
1552
+ "langchain.run_id": runId
1553
+ }
1554
+ });
1555
+ this._spans.set(runId, { span, startTime: Date.now() });
1556
+ }
1557
+ handleRetrieverEnd(documents, runId) {
1558
+ const entry = this._spans.get(runId);
1559
+ if (!entry) return;
1560
+ entry.span.setAttribute(
1561
+ "retriever.document_count",
1562
+ documents?.length ?? 0
1563
+ );
1564
+ entry.span.setAttribute("gen_ai.latency_ms", Date.now() - entry.startTime);
1565
+ entry.span.end();
1566
+ this._spans.delete(runId);
1567
+ }
1568
+ };
1569
+
1570
+ // src/frameworks/langgraph.ts
1571
+ function instrumentLangGraph(graph) {
1572
+ return new Proxy(graph, {
1573
+ get(target, prop, receiver) {
1574
+ const value = Reflect.get(target, prop, receiver);
1575
+ if ((prop === "invoke" || prop === "stream") && typeof value === "function") {
1576
+ return function patchedMethod(...args) {
1577
+ const tracer = getTracer2();
1578
+ if (!tracer?.enabled) return value.apply(this, args);
1579
+ return tracer.startSpan(
1580
+ {
1581
+ name: `langgraph.${String(prop)}`,
1582
+ kind: "agent" /* AGENT */,
1583
+ attributes: { framework: "langgraph" }
1584
+ },
1585
+ (_span) => {
1586
+ const config = args[1] ?? {};
1587
+ const callbacks = config.callbacks ?? [];
1588
+ callbacks.push(new RisicareCallbackHandler());
1589
+ args[1] = { ...config, callbacks };
1590
+ const result = value.apply(this, args);
1591
+ if (result && typeof result.then === "function") {
1592
+ return result.then((r) => r);
1593
+ }
1594
+ return result;
1595
+ }
1596
+ );
1597
+ };
1598
+ }
1599
+ return value;
1600
+ }
1601
+ });
1602
+ }
1603
+
1604
+ // src/frameworks/instructor.ts
1605
+ function patchInstructor(client) {
1606
+ return new Proxy(client, {
1607
+ get(target, prop, receiver) {
1608
+ const value = Reflect.get(target, prop, receiver);
1609
+ if (prop === "create" && typeof value === "function") {
1610
+ return function patchedCreate(...args) {
1611
+ const tracer = getTracer2();
1612
+ if (!tracer?.enabled) {
1613
+ debug(
1614
+ "Tracer not initialized \u2014 call init() before using patchInstructor()"
1615
+ );
1616
+ return value.apply(this, args);
1617
+ }
1618
+ const params = args[0] ?? {};
1619
+ const responseModel = params.response_model ?? params.responseModel;
1620
+ let modelName = "unknown";
1621
+ if (responseModel && typeof responseModel === "function") {
1622
+ modelName = responseModel.name || "unknown";
1623
+ } else if (responseModel && typeof responseModel === "object") {
1624
+ modelName = responseModel.name ?? responseModel.description ?? "schema";
1625
+ } else if (typeof responseModel === "string") {
1626
+ modelName = responseModel;
1627
+ }
1628
+ return tracer.startSpan(
1629
+ {
1630
+ name: "instructor.create",
1631
+ kind: "llm_call" /* LLM_CALL */,
1632
+ attributes: {
1633
+ framework: "instructor",
1634
+ "framework.span_kind": "extraction",
1635
+ "instructor.response_model": modelName,
1636
+ ...params.max_retries != null ? { "instructor.max_retries": params.max_retries } : {},
1637
+ ...params.model != null ? { "gen_ai.request.model": params.model } : {}
1638
+ }
1639
+ },
1640
+ (_span) => {
1641
+ const result = value.apply(this, args);
1642
+ if (result && typeof result.then === "function") {
1643
+ return result.then((r) => r);
1644
+ }
1645
+ return result;
1646
+ }
1647
+ );
1648
+ };
1649
+ }
1650
+ return value;
1651
+ }
1652
+ });
1653
+ }
1654
+
1655
+ // src/context/dedup.ts
1656
+ function suppressProviderInstrumentation(fn) {
1657
+ return runWithContext({ _suppressProviderInstrumentation: true }, fn);
1658
+ }
1659
+ function isProviderInstrumentationSuppressed() {
1660
+ return getContext()._suppressProviderInstrumentation === true;
1661
+ }
1662
+
1663
+ // src/frameworks/llamaindex.ts
1664
+ var RisicareLlamaIndexHandler = class {
1665
+ _spans = /* @__PURE__ */ new Map();
1666
+ /**
1667
+ * Handle a LlamaIndex lifecycle event.
1668
+ *
1669
+ * Events follow the convention:
1670
+ * - `*.start` / `*.begin` -- component starts
1671
+ * - `*.end` / `*.complete` -- component finishes
1672
+ * - `*.error` -- component failed
1673
+ */
1674
+ onEvent(event) {
1675
+ const tracer = getTracer2();
1676
+ if (!tracer?.enabled) return;
1677
+ if (event.type.endsWith(".start") || event.type.endsWith(".begin")) {
1678
+ this._handleStart(event);
1679
+ } else if (event.type.endsWith(".end") || event.type.endsWith(".complete")) {
1680
+ this._handleEnd(event);
1681
+ } else if (event.type.endsWith(".error")) {
1682
+ this._handleError(event);
1683
+ }
1684
+ }
1685
+ /**
1686
+ * Run a function with provider instrumentation suppressed.
1687
+ *
1688
+ * LlamaIndex handler creates its own LLM spans, so provider spans
1689
+ * (patchOpenAI, patchAnthropic, etc.) should be suppressed to avoid
1690
+ * double-tracing.
1691
+ */
1692
+ withSuppression(fn) {
1693
+ return suppressProviderInstrumentation(fn);
1694
+ }
1695
+ // ── Internal event handlers ───────────────────────────────────────────────
1696
+ _handleStart(event) {
1697
+ const tracer = getTracer2();
1698
+ if (!tracer?.enabled) return;
1699
+ const componentKind = this._classifyComponent(event.type);
1700
+ const parentEntry = event.parentId ? this._spans.get(event.parentId) : void 0;
1701
+ const spanKind = componentKind === "llm" ? "llm_call" /* LLM_CALL */ : componentKind === "retrieval" ? "retrieval" /* RETRIEVAL */ : componentKind === "embedding" ? "llm_call" /* LLM_CALL */ : "internal" /* INTERNAL */;
1702
+ const span = tracer.createSpan({
1703
+ name: event.type.replace(/\.(start|begin)$/, ""),
1704
+ kind: spanKind,
1705
+ parentSpanId: parentEntry?.span.spanId,
1706
+ traceId: parentEntry?.span.traceId,
1707
+ attributes: {
1708
+ framework: "llamaindex",
1709
+ "framework.span_kind": componentKind,
1710
+ ...event.data?.model ? { "gen_ai.request.model": event.data.model } : {}
1711
+ }
1712
+ });
1713
+ this._spans.set(event.id, { span, startTime: Date.now(), componentKind });
1714
+ }
1715
+ _handleEnd(event) {
1716
+ const entry = this._spans.get(event.id);
1717
+ if (!entry) return;
1718
+ entry.span.setAttribute(
1719
+ "gen_ai.latency_ms",
1720
+ Date.now() - entry.startTime
1721
+ );
1722
+ const usage = event.data?.usage;
1723
+ if (usage) {
1724
+ entry.span.setLlmFields({
1725
+ promptTokens: usage.promptTokens ?? usage.prompt_tokens,
1726
+ completionTokens: usage.completionTokens ?? usage.completion_tokens
1727
+ });
1728
+ }
1729
+ if (event.data?.documentCount != null) {
1730
+ entry.span.setAttribute(
1731
+ "retriever.document_count",
1732
+ event.data.documentCount
1733
+ );
1734
+ }
1735
+ entry.span.end();
1736
+ this._spans.delete(event.id);
1737
+ }
1738
+ _handleError(event) {
1739
+ const entry = this._spans.get(event.id);
1740
+ if (!entry) return;
1741
+ const error = event.data?.error;
1742
+ entry.span.recordException(
1743
+ error instanceof Error ? error : String(error ?? "Unknown error")
1744
+ );
1745
+ entry.span.end();
1746
+ this._spans.delete(event.id);
1747
+ }
1748
+ /**
1749
+ * Classify a LlamaIndex event type into a component kind.
1750
+ */
1751
+ _classifyComponent(eventType) {
1752
+ const lower = eventType.toLowerCase();
1753
+ if (lower.includes("llm") || lower.includes("chat")) return "llm";
1754
+ if (lower.includes("embed")) return "embedding";
1755
+ if (lower.includes("retriev") || lower.includes("vector")) return "retrieval";
1756
+ if (lower.includes("synth") || lower.includes("response")) return "synthesis";
1757
+ if (lower.includes("query")) return "query";
1758
+ return "component";
1759
+ }
1760
+ };
1364
1761
  export {
1365
1762
  AgentRole,
1366
1763
  MessageType,
1764
+ RisicareCallbackHandler,
1765
+ RisicareLlamaIndexHandler,
1367
1766
  SemanticPhase,
1368
1767
  SpanKind,
1369
1768
  SpanStatus,
@@ -1388,12 +1787,16 @@ export {
1388
1787
  getTracer2 as getTracer,
1389
1788
  init,
1390
1789
  injectTraceContext,
1790
+ instrumentLangGraph,
1391
1791
  isEnabled,
1792
+ isProviderInstrumentationSuppressed,
1793
+ patchInstructor,
1392
1794
  registerSpan,
1393
1795
  reportError,
1394
1796
  score,
1395
1797
  session,
1396
1798
  shutdown,
1799
+ suppressProviderInstrumentation,
1397
1800
  traceAct,
1398
1801
  traceCoordinate,
1399
1802
  traceDecide,
@@ -1401,6 +1804,7 @@ export {
1401
1804
  traceMessage,
1402
1805
  traceObserve,
1403
1806
  traceThink,
1807
+ tracedStream,
1404
1808
  unregisterSpan,
1405
1809
  withAgent,
1406
1810
  withPhase,