@introspection-sdk/introspection-node 0.20.0 → 0.21.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 (211) hide show
  1. package/README.md +28 -8
  2. package/dist/auth.d.ts +1 -1
  3. package/dist/client.d.ts +4 -3
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +16 -7
  6. package/dist/client.js.map +1 -1
  7. package/dist/dev-target.js +1 -1
  8. package/dist/index.d.ts +3 -7
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -6
  11. package/dist/index.js.map +1 -1
  12. package/dist/otel/index.d.ts +1 -14
  13. package/dist/otel/index.d.ts.map +1 -1
  14. package/dist/otel/index.js +10 -18
  15. package/dist/otel/index.js.map +1 -1
  16. package/dist/otel/init.d.ts +19 -21
  17. package/dist/otel/init.d.ts.map +1 -1
  18. package/dist/otel/init.js +62 -48
  19. package/dist/otel/init.js.map +1 -1
  20. package/dist/otel/integrations/base.d.ts +17 -37
  21. package/dist/otel/integrations/base.d.ts.map +1 -1
  22. package/dist/otel/integrations/base.js +6 -13
  23. package/dist/otel/integrations/base.js.map +1 -1
  24. package/dist/otel/integrations/index.d.ts +3 -4
  25. package/dist/otel/integrations/index.d.ts.map +1 -1
  26. package/dist/otel/integrations/index.js +6 -25
  27. package/dist/otel/integrations/index.js.map +1 -1
  28. package/dist/otel/integrations/pi.d.ts.map +1 -1
  29. package/dist/otel/integrations/pi.js +9 -1
  30. package/dist/otel/integrations/pi.js.map +1 -1
  31. package/dist/otel/logs.d.ts +41 -8
  32. package/dist/otel/logs.d.ts.map +1 -1
  33. package/dist/otel/logs.js +95 -66
  34. package/dist/otel/logs.js.map +1 -1
  35. package/dist/otel/pi.d.ts +18 -5
  36. package/dist/otel/pi.d.ts.map +1 -1
  37. package/dist/otel/pi.js +38 -9
  38. package/dist/otel/pi.js.map +1 -1
  39. package/dist/otel/register.d.ts +2 -2
  40. package/dist/otel/register.d.ts.map +1 -1
  41. package/dist/otel/register.js +7 -9
  42. package/dist/otel/register.js.map +1 -1
  43. package/dist/otel/setup.d.ts +2 -2
  44. package/dist/otel/setup.d.ts.map +1 -1
  45. package/dist/otel/setup.js +16 -6
  46. package/dist/otel/setup.js.map +1 -1
  47. package/dist/otel/span-processor.d.ts +18 -5
  48. package/dist/otel/span-processor.d.ts.map +1 -1
  49. package/dist/otel/span-processor.js +50 -65
  50. package/dist/otel/span-processor.js.map +1 -1
  51. package/dist/resources/experiments.d.ts +10 -5
  52. package/dist/resources/experiments.d.ts.map +1 -1
  53. package/dist/resources/experiments.js +9 -25
  54. package/dist/resources/experiments.js.map +1 -1
  55. package/dist/resources/recipes.d.ts +6 -6
  56. package/dist/resources/recipes.d.ts.map +1 -1
  57. package/dist/resources/recipes.js +5 -23
  58. package/dist/resources/recipes.js.map +1 -1
  59. package/dist/resources/runtimes.d.ts +2 -2
  60. package/dist/resources/runtimes.d.ts.map +1 -1
  61. package/dist/resources/runtimes.js +2 -2
  62. package/dist/resources/runtimes.js.map +1 -1
  63. package/dist/runner.d.ts +8 -4
  64. package/dist/runner.d.ts.map +1 -1
  65. package/dist/runner.js +26 -18
  66. package/dist/runner.js.map +1 -1
  67. package/dist/types.d.ts +1 -1
  68. package/dist/types.d.ts.map +1 -1
  69. package/dist/types.js +1 -1
  70. package/dist/types.js.map +1 -1
  71. package/dist/utils.d.ts +45 -0
  72. package/dist/utils.d.ts.map +1 -1
  73. package/dist/utils.js +61 -2
  74. package/dist/utils.js.map +1 -1
  75. package/dist/version.d.ts +1 -1
  76. package/dist/version.d.ts.map +1 -1
  77. package/dist/version.js +1 -1
  78. package/dist/version.js.map +1 -1
  79. package/package.json +18 -60
  80. package/.turbo/turbo-build.log +0 -4
  81. package/dist/converters/claude.d.ts +0 -150
  82. package/dist/converters/claude.d.ts.map +0 -1
  83. package/dist/converters/claude.js +0 -211
  84. package/dist/converters/claude.js.map +0 -1
  85. package/dist/converters/gemini.d.ts +0 -90
  86. package/dist/converters/gemini.d.ts.map +0 -1
  87. package/dist/converters/gemini.js +0 -171
  88. package/dist/converters/gemini.js.map +0 -1
  89. package/dist/converters/index.d.ts +0 -9
  90. package/dist/converters/index.d.ts.map +0 -1
  91. package/dist/converters/index.js +0 -9
  92. package/dist/converters/index.js.map +0 -1
  93. package/dist/converters/openai.d.ts +0 -51
  94. package/dist/converters/openai.d.ts.map +0 -1
  95. package/dist/converters/openai.js +0 -269
  96. package/dist/converters/openai.js.map +0 -1
  97. package/dist/converters/openinference.d.ts +0 -107
  98. package/dist/converters/openinference.d.ts.map +0 -1
  99. package/dist/converters/openinference.js +0 -553
  100. package/dist/converters/openinference.js.map +0 -1
  101. package/dist/converters/vercel.d.ts +0 -21
  102. package/dist/converters/vercel.d.ts.map +0 -1
  103. package/dist/converters/vercel.js +0 -236
  104. package/dist/converters/vercel.js.map +0 -1
  105. package/dist/otel/anthropic.d.ts +0 -63
  106. package/dist/otel/anthropic.d.ts.map +0 -1
  107. package/dist/otel/anthropic.js +0 -475
  108. package/dist/otel/anthropic.js.map +0 -1
  109. package/dist/otel/claude-hooks.d.ts +0 -346
  110. package/dist/otel/claude-hooks.d.ts.map +0 -1
  111. package/dist/otel/claude-hooks.js +0 -647
  112. package/dist/otel/claude-hooks.js.map +0 -1
  113. package/dist/otel/claude-wrapper.d.ts +0 -93
  114. package/dist/otel/claude-wrapper.d.ts.map +0 -1
  115. package/dist/otel/claude-wrapper.js +0 -155
  116. package/dist/otel/claude-wrapper.js.map +0 -1
  117. package/dist/otel/gemini.d.ts +0 -56
  118. package/dist/otel/gemini.d.ts.map +0 -1
  119. package/dist/otel/gemini.js +0 -350
  120. package/dist/otel/gemini.js.map +0 -1
  121. package/dist/otel/integrations/anthropic.d.ts +0 -10
  122. package/dist/otel/integrations/anthropic.d.ts.map +0 -1
  123. package/dist/otel/integrations/anthropic.js +0 -26
  124. package/dist/otel/integrations/anthropic.js.map +0 -1
  125. package/dist/otel/integrations/claude-agent.d.ts +0 -12
  126. package/dist/otel/integrations/claude-agent.d.ts.map +0 -1
  127. package/dist/otel/integrations/claude-agent.js +0 -28
  128. package/dist/otel/integrations/claude-agent.js.map +0 -1
  129. package/dist/otel/integrations/gemini.d.ts +0 -11
  130. package/dist/otel/integrations/gemini.d.ts.map +0 -1
  131. package/dist/otel/integrations/gemini.js +0 -23
  132. package/dist/otel/integrations/gemini.js.map +0 -1
  133. package/dist/otel/integrations/langchain.d.ts +0 -15
  134. package/dist/otel/integrations/langchain.d.ts.map +0 -1
  135. package/dist/otel/integrations/langchain.js +0 -43
  136. package/dist/otel/integrations/langchain.js.map +0 -1
  137. package/dist/otel/integrations/mastra.d.ts +0 -14
  138. package/dist/otel/integrations/mastra.d.ts.map +0 -1
  139. package/dist/otel/integrations/mastra.js +0 -31
  140. package/dist/otel/integrations/mastra.js.map +0 -1
  141. package/dist/otel/integrations/openai-agents.d.ts +0 -11
  142. package/dist/otel/integrations/openai-agents.d.ts.map +0 -1
  143. package/dist/otel/integrations/openai-agents.js +0 -30
  144. package/dist/otel/integrations/openai-agents.js.map +0 -1
  145. package/dist/otel/integrations/vercel.d.ts +0 -14
  146. package/dist/otel/integrations/vercel.d.ts.map +0 -1
  147. package/dist/otel/integrations/vercel.js +0 -20
  148. package/dist/otel/integrations/vercel.js.map +0 -1
  149. package/dist/otel/langchain-handler.d.ts +0 -112
  150. package/dist/otel/langchain-handler.d.ts.map +0 -1
  151. package/dist/otel/langchain-handler.js +0 -561
  152. package/dist/otel/langchain-handler.js.map +0 -1
  153. package/dist/otel/mastra-exporter.d.ts +0 -87
  154. package/dist/otel/mastra-exporter.d.ts.map +0 -1
  155. package/dist/otel/mastra-exporter.js +0 -530
  156. package/dist/otel/mastra-exporter.js.map +0 -1
  157. package/dist/otel/openai.d.ts +0 -20
  158. package/dist/otel/openai.d.ts.map +0 -1
  159. package/dist/otel/openai.js +0 -55
  160. package/dist/otel/openai.js.map +0 -1
  161. package/dist/otel/tracing-processor.d.ts +0 -139
  162. package/dist/otel/tracing-processor.d.ts.map +0 -1
  163. package/dist/otel/tracing-processor.js +0 -434
  164. package/dist/otel/tracing-processor.js.map +0 -1
  165. package/eslint.config.mjs +0 -4
  166. package/src/auth.ts +0 -236
  167. package/src/client.ts +0 -163
  168. package/src/converters/claude.ts +0 -343
  169. package/src/converters/gemini.ts +0 -243
  170. package/src/converters/index.ts +0 -50
  171. package/src/converters/openai.ts +0 -300
  172. package/src/converters/openinference.ts +0 -665
  173. package/src/converters/vercel.ts +0 -302
  174. package/src/dev-target.ts +0 -79
  175. package/src/http.ts +0 -43
  176. package/src/index.ts +0 -277
  177. package/src/otel/anthropic.ts +0 -619
  178. package/src/otel/claude-hooks.ts +0 -1116
  179. package/src/otel/claude-wrapper.ts +0 -239
  180. package/src/otel/gemini.ts +0 -483
  181. package/src/otel/index.ts +0 -128
  182. package/src/otel/init.ts +0 -411
  183. package/src/otel/integrations/anthropic.ts +0 -36
  184. package/src/otel/integrations/base.ts +0 -158
  185. package/src/otel/integrations/claude-agent.ts +0 -36
  186. package/src/otel/integrations/gemini.ts +0 -30
  187. package/src/otel/integrations/index.ts +0 -152
  188. package/src/otel/integrations/langchain.ts +0 -60
  189. package/src/otel/integrations/mastra.ts +0 -48
  190. package/src/otel/integrations/openai-agents.ts +0 -47
  191. package/src/otel/integrations/pi.ts +0 -28
  192. package/src/otel/integrations/vercel.ts +0 -26
  193. package/src/otel/langchain-handler.ts +0 -804
  194. package/src/otel/logs.ts +0 -395
  195. package/src/otel/mastra-exporter.ts +0 -714
  196. package/src/otel/openai.ts +0 -93
  197. package/src/otel/pi.ts +0 -94
  198. package/src/otel/register.ts +0 -50
  199. package/src/otel/setup.ts +0 -215
  200. package/src/otel/span-processor.ts +0 -512
  201. package/src/otel/tracing-processor.ts +0 -637
  202. package/src/pagination.ts +0 -10
  203. package/src/proxy-from-env.d.ts +0 -7
  204. package/src/resources/experiments.ts +0 -176
  205. package/src/resources/recipes.ts +0 -74
  206. package/src/resources/runtimes.ts +0 -31
  207. package/src/runner.ts +0 -213
  208. package/src/types.ts +0 -13
  209. package/src/utils.ts +0 -95
  210. package/src/version.ts +0 -2
  211. package/tsconfig.json +0 -8
@@ -1,561 +0,0 @@
1
- /**
2
- * LangChain/LangGraph Callback Handler for Introspection.
3
- *
4
- * Hooks into LangChain's native callback system to capture LLM, tool, and
5
- * chain interactions as gen_ai.* OTel spans for the Introspection backend.
6
- *
7
- * Similar to IntrospectionTracingProcessor for OpenAI Agents SDK and
8
- * IntrospectionClaudeHooks for Claude Agent SDK.
9
- *
10
- * **Important:** This module requires `@langchain/core` at runtime.
11
- * Import via the subpath: `@introspection-sdk/introspection-node/langchain`
12
- *
13
- * @example
14
- * ```ts
15
- * import { IntrospectionCallbackHandler } from "@introspection-sdk/introspection-node/langchain";
16
- * import { ChatOpenAI } from "@langchain/openai";
17
- *
18
- * const handler = new IntrospectionCallbackHandler({
19
- * serviceName: "my-langchain-app",
20
- * });
21
- *
22
- * const model = new ChatOpenAI({ modelName: "gpt-4o" });
23
- * const response = await model.invoke("Hello!", { callbacks: [handler] });
24
- *
25
- * await handler.shutdown();
26
- * ```
27
- */
28
- import { BaseCallbackHandler } from "@langchain/core/callbacks/base";
29
- import { context as otelContext, propagation, ROOT_CONTEXT, SpanStatusCode, trace as otelTrace, } from "@opentelemetry/api";
30
- import { BasicTracerProvider, BatchSpanProcessor, SimpleSpanProcessor, } from "@opentelemetry/sdk-trace-base";
31
- import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";
32
- import { resourceFromAttributes } from "@opentelemetry/resources";
33
- import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
34
- import { randomUUID } from "crypto";
35
- import { logger, withOtlpHttpsProxy } from "../utils.js";
36
- import { VERSION } from "../version.js";
37
- import { providerCostAttributes } from "@introspection-sdk/types";
38
- // ---------------------------------------------------------------------------
39
- // Handler
40
- // ---------------------------------------------------------------------------
41
- /**
42
- * LangChain callback handler that captures LLM, tool, and chain events
43
- * as gen_ai.* OTel spans and exports them to the Introspection backend.
44
- *
45
- * Pass as a callback to any LangChain invoke call, or set globally via
46
- * `setGlobalHandler()`.
47
- */
48
- export class IntrospectionCallbackHandler extends BaseCallbackHandler {
49
- name = "IntrospectionCallbackHandler";
50
- _tracerProvider;
51
- _tracer;
52
- _spans = new Map();
53
- _conversationId;
54
- // Track span names and parents so children can resolve gen_ai.agent.name
55
- _spanNames = new Map();
56
- _spanParents = new Map();
57
- _runRoots = new Map();
58
- // LangChain wrapper names to skip when resolving agent names
59
- static _wrapperNames = new Set([
60
- "RunnableSequence",
61
- "RunnableParallel",
62
- "RunnableMap",
63
- "RunnableLambda",
64
- "RunnableRetry",
65
- "_ConfigurableModel",
66
- "ChatOpenAI",
67
- "ChatAnthropic",
68
- "ChatGoogleGenerativeAI",
69
- "ChatGroq",
70
- ]);
71
- // Store LLM input messages per runId for use in handleLLMEnd
72
- _llmInputs = new Map();
73
- constructor(options = {}) {
74
- super();
75
- const advanced = options.advanced;
76
- const serviceName = options.serviceName || process.env.INTROSPECTION_SERVICE_NAME;
77
- const resource = serviceName
78
- ? resourceFromAttributes({ [ATTR_SERVICE_NAME]: serviceName })
79
- : undefined;
80
- if (!advanced?.spanExporter) {
81
- const token = options.token || process.env.INTROSPECTION_TOKEN;
82
- if (!token) {
83
- throw new Error("INTROSPECTION_TOKEN is required");
84
- }
85
- const baseUrl = options.baseUrl ||
86
- process.env.INTROSPECTION_BASE_OTEL_URL ||
87
- "https://otel.introspection.dev";
88
- const endpoint = baseUrl.endsWith("/v1/traces")
89
- ? baseUrl
90
- : `${baseUrl.replace(/\/$/, "")}/v1/traces`;
91
- const headers = {
92
- "User-Agent": `introspection-sdk/${VERSION}`,
93
- Authorization: `Bearer ${token}`,
94
- ...options.additionalHeaders,
95
- };
96
- logger.info(`IntrospectionCallbackHandler initialized: endpoint=${endpoint}`);
97
- const spanExporter = new OTLPTraceExporter(withOtlpHttpsProxy({ url: endpoint, headers }));
98
- const effectiveBatchSize = token.startsWith("intro_dev") || token.startsWith("intro_staging")
99
- ? 1
100
- : undefined;
101
- const useSimple = advanced?.useSimpleSpanProcessor || effectiveBatchSize === 1;
102
- const spanProcessor = useSimple
103
- ? new SimpleSpanProcessor(spanExporter)
104
- : new BatchSpanProcessor(spanExporter, {
105
- scheduledDelayMillis: 1000,
106
- ...(effectiveBatchSize
107
- ? { maxExportBatchSize: effectiveBatchSize }
108
- : {}),
109
- });
110
- this._tracerProvider = new BasicTracerProvider({
111
- resource,
112
- idGenerator: advanced?.idGenerator,
113
- spanProcessors: [spanProcessor],
114
- });
115
- }
116
- else {
117
- logger.info("IntrospectionCallbackHandler initialized in test mode with custom exporter");
118
- const spanProcessor = advanced.useSimpleSpanProcessor
119
- ? new SimpleSpanProcessor(advanced.spanExporter)
120
- : new BatchSpanProcessor(advanced.spanExporter, {
121
- scheduledDelayMillis: 100,
122
- });
123
- this._tracerProvider = new BasicTracerProvider({
124
- resource,
125
- idGenerator: advanced.idGenerator,
126
- spanProcessors: [spanProcessor],
127
- });
128
- }
129
- this._tracer = this._tracerProvider.getTracer("langchain", VERSION);
130
- this._conversationId = `intro_conv_${randomUUID().replace(/-/g, "")}`;
131
- }
132
- _rootRunId(runId, parentRunId) {
133
- if (!parentRunId)
134
- return runId;
135
- return this._runRoots.get(parentRunId) || parentRunId;
136
- }
137
- /** Keep the top-level run span aligned with child conversation IDs. */
138
- _setRootConversationId(conversationId, runId, parentRunId) {
139
- const root = this._spans.get(this._rootRunId(runId, parentRunId));
140
- root?.setAttribute("gen_ai.conversation.id", conversationId);
141
- }
142
- _endRootIfComplete(runId) {
143
- this._runRoots.delete(runId);
144
- this._spanNames.delete(runId);
145
- this._spanParents.delete(runId);
146
- }
147
- /** Create a span under a LangChain parent when one exists.
148
- * Sets gen_ai.agent.name to the parent span's name for hierarchy. */
149
- _createChildSpan(name, runId, parentRunId) {
150
- const parent = parentRunId ? this._spans.get(parentRunId) : undefined;
151
- this._runRoots.set(runId, this._rootRunId(runId, parentRunId));
152
- const ctx = parent
153
- ? otelTrace.setSpan(otelContext.active(), parent)
154
- : ROOT_CONTEXT;
155
- const span = this._tracer.startSpan(name, {}, ctx);
156
- this._spanNames.set(runId, name);
157
- if (parentRunId) {
158
- this._spanParents.set(runId, parentRunId);
159
- }
160
- // Baggage wins so per-call agent identity (e.g. via withAgent())
161
- // overrides the parent-span-name walk used as a default.
162
- const baggageAgentName = this._readBaggage("gen_ai.agent.name");
163
- const agentName = baggageAgentName || this._findAgentName(parentRunId);
164
- if (agentName) {
165
- span.setAttribute("gen_ai.agent.name", agentName);
166
- }
167
- const baggageAgentId = this._readBaggage("gen_ai.agent.id");
168
- if (baggageAgentId) {
169
- span.setAttribute("gen_ai.agent.id", baggageAgentId);
170
- }
171
- return span;
172
- }
173
- // -------------------------------------------------------------------------
174
- // Chat model callbacks (preferred over LLM callbacks for chat models)
175
- // -------------------------------------------------------------------------
176
- handleChatModelStart(llm, messages, runId, parentRunId, extraParams, _tags, metadata, runName) {
177
- const modelName = this._extractModelName(llm, extraParams);
178
- const spanName = modelName ? `chat ${modelName}` : runName || "chat";
179
- const otelSpan = this._createChildSpan(spanName, runId, parentRunId);
180
- this._spans.set(runId, otelSpan);
181
- const conversationId = this._getConversationId(metadata);
182
- this._setRootConversationId(conversationId, runId, parentRunId);
183
- otelSpan.setAttribute("gen_ai.operation.name", "chat");
184
- otelSpan.setAttribute("gen_ai.conversation.id", conversationId);
185
- otelSpan.setAttribute("openinference.span.kind", "LLM");
186
- if (modelName) {
187
- otelSpan.setAttribute("gen_ai.request.model", modelName);
188
- }
189
- const flatMessages = messages[0] || [];
190
- const { inputMessages, systemInstructions } = this._convertMessages(flatMessages);
191
- if (inputMessages.length > 0) {
192
- otelSpan.setAttribute("gen_ai.input.messages", JSON.stringify(inputMessages));
193
- this._llmInputs.set(runId, inputMessages);
194
- }
195
- if (systemInstructions.length > 0) {
196
- otelSpan.setAttribute("gen_ai.system_instructions", JSON.stringify(systemInstructions.map((s) => ({ type: "text", content: s }))));
197
- }
198
- const provider = this._extractProvider(llm);
199
- if (provider) {
200
- otelSpan.setAttribute("gen_ai.provider.name", provider);
201
- }
202
- const invocationParams = extraParams?.["invocation_params"];
203
- const tools = invocationParams?.["tools"];
204
- if (tools && tools.length > 0) {
205
- otelSpan.setAttribute("gen_ai.tool.definitions", JSON.stringify(tools.map((t) => {
206
- const fn = (t.function || t);
207
- return {
208
- type: t.type || "function",
209
- name: (fn.name || ""),
210
- description: (fn.description || ""),
211
- parameters: fn.parameters,
212
- };
213
- })));
214
- }
215
- if (invocationParams?.["temperature"] != null) {
216
- otelSpan.setAttribute("gen_ai.request.temperature", invocationParams["temperature"]);
217
- }
218
- }
219
- handleLLMStart(llm, prompts, runId, parentRunId, extraParams, _tags, metadata, runName) {
220
- const modelName = this._extractModelName(llm, extraParams);
221
- const spanName = modelName ? `chat ${modelName}` : runName || "llm";
222
- const otelSpan = this._createChildSpan(spanName, runId, parentRunId);
223
- this._spans.set(runId, otelSpan);
224
- const conversationId = this._getConversationId(metadata);
225
- this._setRootConversationId(conversationId, runId, parentRunId);
226
- otelSpan.setAttribute("gen_ai.operation.name", "chat");
227
- otelSpan.setAttribute("gen_ai.conversation.id", conversationId);
228
- otelSpan.setAttribute("openinference.span.kind", "LLM");
229
- if (modelName) {
230
- otelSpan.setAttribute("gen_ai.request.model", modelName);
231
- }
232
- if (prompts.length > 0) {
233
- const inputMessages = prompts.map((p) => ({
234
- role: "user",
235
- parts: [{ type: "text", content: p }],
236
- }));
237
- otelSpan.setAttribute("gen_ai.input.messages", JSON.stringify(inputMessages));
238
- this._llmInputs.set(runId, inputMessages);
239
- }
240
- }
241
- handleLLMEnd(output, runId) {
242
- const otelSpan = this._spans.get(runId);
243
- if (!otelSpan)
244
- return;
245
- this._spans.delete(runId);
246
- this._spanNames.delete(runId);
247
- this._llmInputs.delete(runId);
248
- this._endRootIfComplete(runId);
249
- const generations = output.generations?.[0];
250
- if (generations && generations.length > 0) {
251
- const parts = [];
252
- for (const gen of generations) {
253
- if (gen.text) {
254
- parts.push({ type: "text", content: gen.text });
255
- }
256
- const msg = gen.message;
257
- const kwargs = (msg?.["kwargs"] || msg);
258
- const additionalKwargs = kwargs?.["additional_kwargs"];
259
- const toolCalls = (additionalKwargs?.["tool_calls"] ||
260
- kwargs?.["tool_calls"]);
261
- if (toolCalls) {
262
- for (const tc of toolCalls) {
263
- const fn = (tc.function || tc);
264
- parts.push({
265
- type: "tool_call",
266
- name: (fn.name || tc.name || ""),
267
- id: (tc.id || ""),
268
- arguments: (fn.arguments || tc.args || ""),
269
- });
270
- }
271
- }
272
- }
273
- if (parts.length > 0) {
274
- const outputMessages = [{ role: "assistant", parts }];
275
- otelSpan.setAttribute("gen_ai.output.messages", JSON.stringify(outputMessages));
276
- }
277
- }
278
- const usage = output.llmOutput;
279
- const tokenUsage = (usage?.["tokenUsage"] ||
280
- usage?.["token_usage"] ||
281
- usage?.["usage"]);
282
- if (tokenUsage) {
283
- const inputTokens = tokenUsage["promptTokens"] ||
284
- tokenUsage["prompt_tokens"] ||
285
- tokenUsage["input_tokens"];
286
- const outputTokens = tokenUsage["completionTokens"] ||
287
- tokenUsage["completion_tokens"] ||
288
- tokenUsage["output_tokens"];
289
- if (typeof inputTokens === "number") {
290
- otelSpan.setAttribute("gen_ai.usage.input_tokens", inputTokens);
291
- }
292
- if (typeof outputTokens === "number") {
293
- otelSpan.setAttribute("gen_ai.usage.output_tokens", outputTokens);
294
- }
295
- // Flat field (legacy format) or nested cache_creation object (Claude 4+).
296
- const cacheCreationObj = tokenUsage["cache_creation"];
297
- const cacheWriteTokens = tokenUsage["cache_creation_input_tokens"] ||
298
- tokenUsage["cacheCreationInputTokens"] ||
299
- (cacheCreationObj?.["ephemeral_5m_input_tokens"] || 0) +
300
- (cacheCreationObj?.["ephemeral_1h_input_tokens"] || 0) ||
301
- undefined;
302
- if (typeof cacheWriteTokens === "number") {
303
- otelSpan.setAttribute("gen_ai.usage.cache_creation.input_tokens", cacheWriteTokens);
304
- }
305
- const cacheReadTokens = tokenUsage["cache_read_input_tokens"] ||
306
- tokenUsage["cacheReadInputTokens"];
307
- if (typeof cacheReadTokens === "number") {
308
- otelSpan.setAttribute("gen_ai.usage.cache_read.input_tokens", cacheReadTokens);
309
- }
310
- // Provider-reported cost (e.g. OpenRouter usage.cost) when present.
311
- otelSpan.setAttributes(providerCostAttributes(tokenUsage));
312
- }
313
- const model = usage?.["model"] || usage?.["model_name"];
314
- if (typeof model === "string") {
315
- otelSpan.setAttribute("gen_ai.response.model", model);
316
- }
317
- // gen_ai.response.id — required by the server for conversation tracking.
318
- const responseId = usage?.["id"] || usage?.["system_fingerprint"];
319
- otelSpan.setAttribute("gen_ai.response.id", typeof responseId === "string" ? responseId : `langchain-${runId}`);
320
- otelSpan.end();
321
- }
322
- handleLLMError(err, runId) {
323
- const otelSpan = this._spans.get(runId);
324
- if (!otelSpan)
325
- return;
326
- this._spans.delete(runId);
327
- this._spanNames.delete(runId);
328
- this._llmInputs.delete(runId);
329
- this._endRootIfComplete(runId);
330
- otelSpan.recordException(err);
331
- otelSpan.setStatus({ code: SpanStatusCode.ERROR, message: err.message });
332
- otelSpan.setAttribute("exception.message", err.message);
333
- otelSpan.end();
334
- }
335
- // -------------------------------------------------------------------------
336
- // Chain callbacks
337
- // -------------------------------------------------------------------------
338
- handleChainStart(chain, _inputs, runId, _runType, _tags, metadata, runName, parentRunId) {
339
- const name = runName || chain?.name || chain?.id?.[chain.id.length - 1] || "chain";
340
- const otelSpan = this._createChildSpan(name, runId, parentRunId);
341
- this._spans.set(runId, otelSpan);
342
- const conversationId = this._getConversationId(metadata);
343
- this._setRootConversationId(conversationId, runId, parentRunId);
344
- otelSpan.setAttribute("gen_ai.conversation.id", conversationId);
345
- }
346
- handleChainEnd(_outputs, runId) {
347
- const otelSpan = this._spans.get(runId);
348
- if (!otelSpan)
349
- return;
350
- this._spans.delete(runId);
351
- this._endRootIfComplete(runId);
352
- otelSpan.end();
353
- }
354
- handleChainError(err, runId) {
355
- const otelSpan = this._spans.get(runId);
356
- if (!otelSpan)
357
- return;
358
- this._spans.delete(runId);
359
- this._endRootIfComplete(runId);
360
- otelSpan.recordException(err);
361
- otelSpan.setStatus({ code: SpanStatusCode.ERROR, message: err.message });
362
- otelSpan.setAttribute("exception.message", err.message);
363
- otelSpan.end();
364
- }
365
- // -------------------------------------------------------------------------
366
- // Tool callbacks
367
- // -------------------------------------------------------------------------
368
- handleToolStart(tool, input, runId, parentRunId, _tags, metadata, runName) {
369
- const toolName = runName || tool?.name || tool?.id?.[tool.id.length - 1] || "tool";
370
- const otelSpan = this._createChildSpan(`execute_tool ${toolName}`, runId, parentRunId);
371
- this._spans.set(runId, otelSpan);
372
- const conversationId = this._getConversationId(metadata);
373
- this._setRootConversationId(conversationId, runId, parentRunId);
374
- otelSpan.setAttribute("gen_ai.operation.name", "execute_tool");
375
- otelSpan.setAttribute("gen_ai.tool.name", toolName);
376
- otelSpan.setAttribute("gen_ai.tool.type", "function");
377
- otelSpan.setAttribute("gen_ai.tool.call.id", runId);
378
- otelSpan.setAttribute("openinference.span.kind", "TOOL");
379
- otelSpan.setAttribute("gen_ai.tool.call.arguments", input);
380
- otelSpan.setAttribute("gen_ai.conversation.id", conversationId);
381
- }
382
- handleToolEnd(output, runId) {
383
- const otelSpan = this._spans.get(runId);
384
- if (!otelSpan)
385
- return;
386
- this._spans.delete(runId);
387
- this._endRootIfComplete(runId);
388
- if (output != null) {
389
- otelSpan.setAttribute("gen_ai.tool.call.result", typeof output === "string" ? output : JSON.stringify(output));
390
- }
391
- otelSpan.end();
392
- }
393
- handleToolError(err, runId) {
394
- const otelSpan = this._spans.get(runId);
395
- if (!otelSpan)
396
- return;
397
- this._spans.delete(runId);
398
- this._endRootIfComplete(runId);
399
- otelSpan.recordException(err);
400
- otelSpan.setStatus({ code: SpanStatusCode.ERROR, message: err.message });
401
- otelSpan.setAttribute("exception.message", err.message);
402
- otelSpan.end();
403
- }
404
- // -------------------------------------------------------------------------
405
- // Lifecycle
406
- // -------------------------------------------------------------------------
407
- async shutdown() {
408
- for (const span of this._spans.values())
409
- span.end();
410
- this._spans.clear();
411
- this._spanNames.clear();
412
- this._spanParents.clear();
413
- this._runRoots.clear();
414
- await this._tracerProvider.shutdown();
415
- }
416
- async forceFlush() {
417
- await this._tracerProvider.forceFlush();
418
- }
419
- // -------------------------------------------------------------------------
420
- // Helpers
421
- // -------------------------------------------------------------------------
422
- _extractModelName(llm, extraParams) {
423
- const invocationParams = extraParams?.["invocation_params"];
424
- if (invocationParams) {
425
- const model = invocationParams["model"] ||
426
- invocationParams["model_name"] ||
427
- invocationParams["modelName"];
428
- if (typeof model === "string")
429
- return model;
430
- }
431
- const kwargs = llm?.kwargs;
432
- if (kwargs) {
433
- const model = kwargs["model"] || kwargs["model_name"] || kwargs["modelName"];
434
- if (typeof model === "string")
435
- return model;
436
- }
437
- return undefined;
438
- }
439
- _extractProvider(llm) {
440
- const id = llm?.id;
441
- if (Array.isArray(id) && id.length > 0) {
442
- return id[id.length - 1];
443
- }
444
- return undefined;
445
- }
446
- /** Walk up the span tree to find the first non-wrapper span name. */
447
- _findAgentName(runId) {
448
- let current = runId;
449
- for (let i = 0; i < 20 && current; i++) {
450
- const name = this._spanNames.get(current);
451
- if (name && !IntrospectionCallbackHandler._wrapperNames.has(name)) {
452
- return name;
453
- }
454
- current = this._spanParents.get(current);
455
- }
456
- return undefined;
457
- }
458
- _getConversationId(metadata) {
459
- const metaConvId = metadata?.["gen_ai.conversation.id"];
460
- if (metaConvId !== undefined && metaConvId !== null) {
461
- return String(metaConvId);
462
- }
463
- const threadId = metadata?.["thread_id"];
464
- if (threadId !== undefined && threadId !== null) {
465
- return String(threadId);
466
- }
467
- const baggageConvId = this._readBaggage("gen_ai.conversation.id");
468
- if (baggageConvId)
469
- return baggageConvId;
470
- return this._conversationId;
471
- }
472
- /**
473
- * Read a single value from the active OTel baggage. Returns undefined when
474
- * no propagator is installed or the key is absent.
475
- *
476
- * Used so callers can scope LangChain calls with
477
- * `IntrospectionClient.withAgent()` / `.withConversation()` /
478
- * `.withGenAi()` without threading metadata through every invoke().
479
- */
480
- _readBaggage(key) {
481
- const baggage = propagation.getBaggage(otelContext.active());
482
- return baggage?.getEntry(key)?.value;
483
- }
484
- _convertMessages(messages) {
485
- const inputMessages = [];
486
- const systemInstructions = [];
487
- for (const msg of messages) {
488
- const msgType = msg._getType?.() ||
489
- msg.type ||
490
- "unknown";
491
- const role = this._mapRole(msgType);
492
- const content = this._extractContent(msg.content);
493
- if (role === "system") {
494
- systemInstructions.push(typeof msg.content === "string"
495
- ? msg.content
496
- : JSON.stringify(msg.content));
497
- continue;
498
- }
499
- const parts = [];
500
- if (role === "tool") {
501
- const toolCallId = msg
502
- .tool_call_id || "";
503
- parts.push({
504
- type: "tool_call_response",
505
- id: toolCallId,
506
- response: content,
507
- });
508
- }
509
- else if (content) {
510
- parts.push({ type: "text", content });
511
- }
512
- const toolCalls = msg
513
- .tool_calls;
514
- if (toolCalls) {
515
- for (const tc of toolCalls) {
516
- parts.push({
517
- type: "tool_call",
518
- name: (tc.name || ""),
519
- id: (tc.id || ""),
520
- arguments: typeof tc.args === "string" ? tc.args : JSON.stringify(tc.args),
521
- });
522
- }
523
- }
524
- if (parts.length > 0) {
525
- inputMessages.push({ role, parts });
526
- }
527
- }
528
- return { inputMessages, systemInstructions };
529
- }
530
- _mapRole(msgType) {
531
- switch (msgType) {
532
- case "human":
533
- return "user";
534
- case "ai":
535
- return "assistant";
536
- case "system":
537
- return "system";
538
- case "tool":
539
- return "tool";
540
- default:
541
- return "user";
542
- }
543
- }
544
- _extractContent(content) {
545
- if (typeof content === "string")
546
- return content;
547
- if (Array.isArray(content)) {
548
- return content
549
- .map((part) => {
550
- const p = part;
551
- if (p.type === "text")
552
- return (p.text || "");
553
- return "";
554
- })
555
- .filter(Boolean)
556
- .join("");
557
- }
558
- return String(content || "");
559
- }
560
- }
561
- //# sourceMappingURL=langchain-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"langchain-handler.js","sourceRoot":"","sources":["../../src/otel/langchain-handler.ts"],"names":[],"mappings":"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"}