@cloudbase/agent-observability 1.0.1-alpha.10 → 1.0.1-alpha.11

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.
@@ -12,6 +12,7 @@ import {
12
12
  AIMessageChunk,
13
13
  BaseMessage
14
14
  } from "@langchain/core/messages";
15
+ import { noopLogger } from "@cloudbase/agent-shared";
15
16
  var CallbackHandler = class extends BaseCallbackHandler {
16
17
  name = "ObservabilityCallbackHandler";
17
18
  userId;
@@ -27,6 +28,8 @@ var CallbackHandler = class extends BaseCallbackHandler {
27
28
  externalParentSpanContext;
28
29
  // Adapter name for ROOT span prefix
29
30
  adapterName;
31
+ // Logger for debug output (defaults to noopLogger for silent operation)
32
+ logger;
30
33
  constructor(params) {
31
34
  super();
32
35
  this.sessionId = params?.sessionId;
@@ -35,11 +38,9 @@ var CallbackHandler = class extends BaseCallbackHandler {
35
38
  this.traceMetadata = params?.traceMetadata;
36
39
  this.version = params?.version;
37
40
  this.adapterName = params?.adapterName;
41
+ this.logger = params?.logger ?? noopLogger;
38
42
  this.promptToParentRunMap = /* @__PURE__ */ new Map();
39
43
  }
40
- get logger() {
41
- return console;
42
- }
43
44
  /**
44
45
  * Set external parent SpanContext from AG-UI.Server span.
45
46
  * This allows the CallbackHandler to link LangChain/LangGraph spans
@@ -53,13 +54,13 @@ var CallbackHandler = class extends BaseCallbackHandler {
53
54
  }
54
55
  async handleLLMNewToken(token, _idx, runId, _parentRunId, _tags, _fields) {
55
56
  if (runId && !(runId in this.completionStartTimes)) {
56
- this.logger.debug(`LLM first streaming token: ${runId}`);
57
+ this.logger.debug?.(`LLM first streaming token: ${runId}`);
57
58
  this.completionStartTimes[runId] = /* @__PURE__ */ new Date();
58
59
  }
59
60
  }
60
61
  async handleChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, name) {
61
62
  try {
62
- this.logger.debug(`Chain start with Id: ${runId}`);
63
+ this.logger.debug?.(`Chain start with Id: ${runId}`);
63
64
  const runName = name ?? chain.id.at(-1)?.toString() ?? "Langchain Run";
64
65
  this.registerPromptInfo(parentRunId, metadata);
65
66
  let finalInput = inputs;
@@ -96,12 +97,12 @@ var CallbackHandler = class extends BaseCallbackHandler {
96
97
  });
97
98
  }
98
99
  } catch (e) {
99
- this.logger.debug(e instanceof Error ? e.message : String(e));
100
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
100
101
  }
101
102
  }
102
103
  async handleAgentAction(action, runId, parentRunId) {
103
104
  try {
104
- this.logger.debug(`Agent action ${action.tool} with ID: ${runId}`);
105
+ this.logger.debug?.(`Agent action ${action.tool} with ID: ${runId}`);
105
106
  this.startAndRegisterObservation({
106
107
  runId,
107
108
  parentRunId,
@@ -112,23 +113,23 @@ var CallbackHandler = class extends BaseCallbackHandler {
112
113
  asType: "tool"
113
114
  });
114
115
  } catch (e) {
115
- this.logger.debug(e instanceof Error ? e.message : String(e));
116
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
116
117
  }
117
118
  }
118
119
  async handleAgentEnd(action, runId, _parentRunId) {
119
120
  try {
120
- this.logger.debug(`Agent finish with ID: ${runId}`);
121
+ this.logger.debug?.(`Agent finish with ID: ${runId}`);
121
122
  this.handleObservationEnd({
122
123
  runId,
123
124
  attributes: { output: action }
124
125
  });
125
126
  } catch (e) {
126
- this.logger.debug(e instanceof Error ? e.message : String(e));
127
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
127
128
  }
128
129
  }
129
130
  async handleChainError(err, runId, _parentRunId) {
130
131
  try {
131
- this.logger.debug(`Chain error: ${err} with ID: ${runId}`);
132
+ this.logger.debug?.(`Chain error: ${err} with ID: ${runId}`);
132
133
  this.handleObservationEnd({
133
134
  runId,
134
135
  attributes: {
@@ -137,11 +138,11 @@ var CallbackHandler = class extends BaseCallbackHandler {
137
138
  }
138
139
  });
139
140
  } catch (e) {
140
- this.logger.debug(e instanceof Error ? e.message : String(e));
141
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
141
142
  }
142
143
  }
143
144
  async handleGenerationStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) {
144
- this.logger.debug(
145
+ this.logger.debug?.(
145
146
  `Generation start with ID: ${runId} and parentRunId ${parentRunId}`
146
147
  );
147
148
  const runName = name ?? llm.id.at(-1)?.toString() ?? "Langchain Generation";
@@ -187,7 +188,7 @@ var CallbackHandler = class extends BaseCallbackHandler {
187
188
  }
188
189
  async handleChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) {
189
190
  try {
190
- this.logger.debug(`Chat model start with ID: ${runId}`);
191
+ this.logger.debug?.(`Chat model start with ID: ${runId}`);
191
192
  const prompts = messages.flatMap(
192
193
  (message) => message.map((m) => this.extractChatMessageContent(m))
193
194
  );
@@ -202,12 +203,12 @@ var CallbackHandler = class extends BaseCallbackHandler {
202
203
  name
203
204
  );
204
205
  } catch (e) {
205
- this.logger.debug(e instanceof Error ? e.message : String(e));
206
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
206
207
  }
207
208
  }
208
209
  async handleChainEnd(outputs, runId, _parentRunId) {
209
210
  try {
210
- this.logger.debug(`Chain end with ID: ${runId}`);
211
+ this.logger.debug?.(`Chain end with ID: ${runId}`);
211
212
  let finalOutput = outputs;
212
213
  if (typeof outputs === "object" && "output" in outputs && typeof outputs["output"] === "string") {
213
214
  finalOutput = outputs["output"];
@@ -226,12 +227,12 @@ var CallbackHandler = class extends BaseCallbackHandler {
226
227
  });
227
228
  this.deregisterPromptInfo(runId);
228
229
  } catch (e) {
229
- this.logger.debug(e instanceof Error ? e.message : String(e));
230
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
230
231
  }
231
232
  }
232
233
  async handleLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name) {
233
234
  try {
234
- this.logger.debug(`LLM start with ID: ${runId}`);
235
+ this.logger.debug?.(`LLM start with ID: ${runId}`);
235
236
  this.handleGenerationStart(
236
237
  llm,
237
238
  prompts,
@@ -243,12 +244,12 @@ var CallbackHandler = class extends BaseCallbackHandler {
243
244
  name
244
245
  );
245
246
  } catch (e) {
246
- this.logger.debug(e instanceof Error ? e.message : String(e));
247
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
247
248
  }
248
249
  }
249
250
  async handleToolStart(tool, input, runId, parentRunId, tags, metadata, name) {
250
251
  try {
251
- this.logger.debug(`Tool start with ID: ${runId}`);
252
+ this.logger.debug?.(`Tool start with ID: ${runId}`);
252
253
  this.startAndRegisterObservation({
253
254
  runId,
254
255
  parentRunId,
@@ -261,12 +262,12 @@ var CallbackHandler = class extends BaseCallbackHandler {
261
262
  asType: "tool"
262
263
  });
263
264
  } catch (e) {
264
- this.logger.debug(e instanceof Error ? e.message : String(e));
265
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
265
266
  }
266
267
  }
267
268
  async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, name) {
268
269
  try {
269
- this.logger.debug(`Retriever start with ID: ${runId}`);
270
+ this.logger.debug?.(`Retriever start with ID: ${runId}`);
270
271
  this.startAndRegisterObservation({
271
272
  runId,
272
273
  parentRunId,
@@ -279,12 +280,12 @@ var CallbackHandler = class extends BaseCallbackHandler {
279
280
  asType: "span"
280
281
  });
281
282
  } catch (e) {
282
- this.logger.debug(e instanceof Error ? e.message : String(e));
283
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
283
284
  }
284
285
  }
285
286
  async handleRetrieverEnd(documents, runId, _parentRunId) {
286
287
  try {
287
- this.logger.debug(`Retriever end with ID: ${runId}`);
288
+ this.logger.debug?.(`Retriever end with ID: ${runId}`);
288
289
  this.handleObservationEnd({
289
290
  runId,
290
291
  attributes: {
@@ -292,12 +293,12 @@ var CallbackHandler = class extends BaseCallbackHandler {
292
293
  }
293
294
  });
294
295
  } catch (e) {
295
- this.logger.debug(e instanceof Error ? e.message : String(e));
296
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
296
297
  }
297
298
  }
298
299
  async handleRetrieverError(err, runId, _parentRunId) {
299
300
  try {
300
- this.logger.debug(`Retriever error: ${err} with ID: ${runId}`);
301
+ this.logger.debug?.(`Retriever error: ${err} with ID: ${runId}`);
301
302
  this.handleObservationEnd({
302
303
  runId,
303
304
  attributes: {
@@ -306,23 +307,23 @@ var CallbackHandler = class extends BaseCallbackHandler {
306
307
  }
307
308
  });
308
309
  } catch (e) {
309
- this.logger.debug(e instanceof Error ? e.message : String(e));
310
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
310
311
  }
311
312
  }
312
313
  async handleToolEnd(output, runId, _parentRunId) {
313
314
  try {
314
- this.logger.debug(`Tool end with ID: ${runId}`);
315
+ this.logger.debug?.(`Tool end with ID: ${runId}`);
315
316
  this.handleObservationEnd({
316
317
  runId,
317
318
  attributes: { output }
318
319
  });
319
320
  } catch (e) {
320
- this.logger.debug(e instanceof Error ? e.message : String(e));
321
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
321
322
  }
322
323
  }
323
324
  async handleToolError(err, runId, _parentRunId) {
324
325
  try {
325
- this.logger.debug(`Tool error ${err} with ID: ${runId}`);
326
+ this.logger.debug?.(`Tool error ${err} with ID: ${runId}`);
326
327
  this.handleObservationEnd({
327
328
  runId,
328
329
  attributes: {
@@ -331,12 +332,12 @@ var CallbackHandler = class extends BaseCallbackHandler {
331
332
  }
332
333
  });
333
334
  } catch (e) {
334
- this.logger.debug(e instanceof Error ? e.message : String(e));
335
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
335
336
  }
336
337
  }
337
338
  async handleLLMEnd(output, runId, _parentRunId) {
338
339
  try {
339
- this.logger.debug(`LLM end with ID: ${runId}`);
340
+ this.logger.debug?.(`LLM end with ID: ${runId}`);
340
341
  const lastResponse = output.generations[output.generations.length - 1][output.generations[output.generations.length - 1].length - 1];
341
342
  const llmUsage = this.extractUsageMetadata(lastResponse) ?? output.llmOutput?.["tokenUsage"];
342
343
  const modelName = this.extractModelNameFromMetadata(lastResponse);
@@ -381,12 +382,12 @@ var CallbackHandler = class extends BaseCallbackHandler {
381
382
  delete this.completionStartTimes[runId];
382
383
  }
383
384
  } catch (e) {
384
- this.logger.debug(e instanceof Error ? e.message : String(e));
385
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
385
386
  }
386
387
  }
387
388
  async handleLLMError(err, runId, _parentRunId) {
388
389
  try {
389
- this.logger.debug(`LLM error ${err} with ID: ${runId}`);
390
+ this.logger.debug?.(`LLM error ${err} with ID: ${runId}`);
390
391
  this.handleObservationEnd({
391
392
  runId,
392
393
  attributes: {
@@ -395,7 +396,7 @@ var CallbackHandler = class extends BaseCallbackHandler {
395
396
  }
396
397
  });
397
398
  } catch (e) {
398
- this.logger.debug(e instanceof Error ? e.message : String(e));
399
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
399
400
  }
400
401
  }
401
402
  registerPromptInfo(parentRunId, metadata) {
@@ -440,7 +441,7 @@ var CallbackHandler = class extends BaseCallbackHandler {
440
441
  const { runId, attributes = {} } = params;
441
442
  const observation = this.runMap.get(runId);
442
443
  if (!observation) {
443
- this.logger.warn("Observation not found in runMap. Skipping operation.");
444
+ this.logger.warn?.("Observation not found in runMap. Skipping operation.");
444
445
  return;
445
446
  }
446
447
  observation.update(attributes).end();
@@ -474,7 +475,7 @@ var CallbackHandler = class extends BaseCallbackHandler {
474
475
  const usageMetadata = "message" in generation && (AIMessage.isInstance(generation["message"]) || AIMessageChunk.isInstance(generation["message"])) ? generation["message"].usage_metadata : void 0;
475
476
  return usageMetadata;
476
477
  } catch (err) {
477
- this.logger.debug(`Error extracting usage metadata: ${err}`);
478
+ this.logger.debug?.(`Error extracting usage metadata: ${err}`);
478
479
  return;
479
480
  }
480
481
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/langchain/CallbackHandler.ts"],"sourcesContent":["/**\n * LangChain Callback Handler for AG-Kit Observability\n *\n * Converts LangChain callback events into AG-Kit observations with OpenInference semantics.\n */\n\nimport type { AgentAction, AgentFinish } from \"@langchain/core/agents\";\nimport { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport type { Document } from \"@langchain/core/documents\";\nimport type { Serialized } from \"@langchain/core/load/serializable\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n type UsageMetadata,\n type BaseMessageFields,\n type MessageContent,\n} from \"@langchain/core/messages\";\nimport type { Generation, LLMResult } from \"@langchain/core/outputs\";\nimport type { ChainValues } from \"@langchain/core/utils/types\";\n\nimport {\n startObservation,\n type ObservationLLM,\n type ObservationSpan,\n type ObservationTool,\n type Observation,\n type ObservationAttributes,\n} from \"../index.js\";\nimport type { SpanContext } from \"@opentelemetry/api\";\n\n/**\n * Constructor parameters for CallbackHandler.\n *\n * @public\n */\ntype ConstructorParams = {\n userId?: string;\n sessionId?: string;\n tags?: string[];\n version?: string;\n traceMetadata?: Record<string, unknown>;\n adapterName?: string; // e.g., \"LangGraph\" or \"LangChain\"\n};\n\n/**\n * Message format for LLM input/output.\n *\n * @public\n */\nexport type LlmMessage = {\n role: string;\n content: BaseMessageFields[\"content\"];\n additional_kwargs?: BaseMessageFields[\"additional_kwargs\"];\n};\n\n/**\n * Anonymous message format (without role).\n *\n * @public\n */\nexport type AnonymousLlmMessage = {\n content: BaseMessageFields[\"content\"];\n additional_kwargs?: BaseMessageFields[\"additional_kwargs\"];\n};\n\n/**\n * Prompt information for linking to generations.\n *\n * @public\n */\ntype PromptInfo = {\n name: string;\n version: number;\n isFallback: boolean;\n};\n\n/**\n * LangChain Callback Handler for AG-Kit Observability.\n *\n * This handler intercepts LangChain callbacks and converts them into\n * AG-Kit observations following OpenInference semantic conventions.\n *\n * @public\n */\nexport class CallbackHandler extends BaseCallbackHandler {\n name = \"ObservabilityCallbackHandler\";\n\n private userId?: string;\n private version?: string;\n private sessionId?: string;\n private tags: string[];\n private traceMetadata?: Record<string, unknown>;\n\n private completionStartTimes: Record<string, Date> = {};\n private promptToParentRunMap;\n private runMap: Map<string, Observation> = new Map();\n\n public last_trace_id: string | null = null;\n\n // External parent context from AG-UI.Server span\n private externalParentSpanContext?: SpanContext;\n\n // Adapter name for ROOT span prefix\n private adapterName?: string;\n\n constructor(params?: ConstructorParams) {\n super();\n\n this.sessionId = params?.sessionId;\n this.userId = params?.userId;\n this.tags = params?.tags ?? [];\n this.traceMetadata = params?.traceMetadata;\n this.version = params?.version;\n this.adapterName = params?.adapterName;\n\n this.promptToParentRunMap = new Map<string, PromptInfo>();\n }\n\n get logger() {\n return console;\n }\n\n /**\n * Set external parent SpanContext from AG-UI.Server span.\n * This allows the CallbackHandler to link LangChain/LangGraph spans\n * to the server-level span, creating a unified trace hierarchy.\n *\n * @param spanContext - SpanContext from the AG-UI.Server span\n * @public\n */\n setExternalParentContext(spanContext: SpanContext): void {\n this.externalParentSpanContext = spanContext;\n }\n\n async handleLLMNewToken(\n token: string,\n _idx: any,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n _fields?: any\n ): Promise<void> {\n if (runId && !(runId in this.completionStartTimes)) {\n this.logger.debug(`LLM first streaming token: ${runId}`);\n this.completionStartTimes[runId] = new Date();\n }\n }\n\n async handleChainStart(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n parentRunId?: string | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n runType?: string,\n name?: string\n ): Promise<void> {\n try {\n this.logger.debug(`Chain start with Id: ${runId}`);\n\n const runName = name ?? chain.id.at(-1)?.toString() ?? \"Langchain Run\";\n\n this.registerPromptInfo(parentRunId, metadata);\n\n let finalInput: string | ChainValues = inputs;\n if (\n typeof inputs === \"object\" &&\n \"input\" in inputs &&\n Array.isArray(inputs[\"input\"]) &&\n inputs[\"input\"].every((m: unknown) => m instanceof BaseMessage)\n ) {\n finalInput = inputs[\"input\"].map((m: BaseMessage) =>\n this.extractChatMessageContent(m)\n );\n } else if (\n typeof inputs === \"object\" &&\n \"messages\" in inputs &&\n Array.isArray(inputs[\"messages\"]) &&\n inputs[\"messages\"].every((m: unknown) => m instanceof BaseMessage)\n ) {\n finalInput = inputs[\"messages\"].map((m: BaseMessage) =>\n this.extractChatMessageContent(m)\n );\n } else if (\n typeof inputs === \"object\" &&\n \"content\" in inputs &&\n typeof inputs[\"content\"] === \"string\"\n ) {\n finalInput = inputs[\"content\"];\n }\n\n const observation = this.startAndRegisterObservation({\n runName,\n parentRunId,\n runId,\n tags,\n metadata,\n attributes: {\n input: finalInput,\n },\n asType: \"span\",\n });\n\n const traceTags = [...new Set([...(tags ?? []), ...this.tags])];\n\n if (!parentRunId) {\n observation.updateTrace({\n tags: traceTags,\n userId:\n metadata &&\n \"userId\" in metadata &&\n typeof metadata[\"userId\"] === \"string\"\n ? metadata[\"userId\"]\n : this.userId,\n sessionId:\n metadata &&\n \"sessionId\" in metadata &&\n typeof metadata[\"sessionId\"] === \"string\"\n ? metadata[\"sessionId\"]\n : this.sessionId,\n metadata: this.traceMetadata,\n version: this.version,\n });\n }\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleAgentAction(\n action: AgentAction,\n runId: string,\n parentRunId?: string\n ): Promise<void> {\n try {\n this.logger.debug(`Agent action ${action.tool} with ID: ${runId}`);\n this.startAndRegisterObservation({\n runId,\n parentRunId,\n runName: action.tool,\n attributes: {\n input: action,\n },\n asType: \"tool\",\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleAgentEnd?(\n action: AgentFinish,\n runId: string,\n _parentRunId?: string\n ): Promise<void> {\n try {\n this.logger.debug(`Agent finish with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: { output: action },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleChainError(\n err: any,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug(`Chain error: ${err} with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: {\n level: \"ERROR\",\n statusMessage: err.toString(),\n },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleGenerationStart(\n llm: Serialized,\n messages: (LlmMessage | MessageContent | AnonymousLlmMessage)[],\n runId: string,\n parentRunId?: string | undefined,\n extraParams?: Record<string, unknown> | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n this.logger.debug(\n `Generation start with ID: ${runId} and parentRunId ${parentRunId}`\n );\n\n const runName = name ?? llm.id.at(-1)?.toString() ?? \"Langchain Generation\";\n\n const modelParameters: Record<string, any> = {};\n const invocationParams = extraParams?.[\"invocation_params\"];\n\n for (const [key, value] of Object.entries({\n temperature: (invocationParams as any)?.temperature,\n max_tokens: (invocationParams as any)?.max_tokens,\n top_p: (invocationParams as any)?.top_p,\n frequency_penalty: (invocationParams as any)?.frequency_penalty,\n presence_penalty: (invocationParams as any)?.presence_penalty,\n request_timeout: (invocationParams as any)?.request_timeout,\n })) {\n if (value !== undefined && value !== null) {\n modelParameters[key] = value;\n }\n }\n\n interface InvocationParams {\n _type?: string;\n model?: string;\n model_name?: string;\n repo_id?: string;\n }\n\n let extractedModelName: string | undefined;\n if (extraParams) {\n const invocationParamsModelName = (\n extraParams.invocation_params as InvocationParams\n ).model;\n const metadataModelName =\n metadata && \"ls_model_name\" in metadata\n ? (metadata[\"ls_model_name\"] as string)\n : undefined;\n\n extractedModelName = invocationParamsModelName ?? metadataModelName;\n }\n\n const registeredPrompt = this.promptToParentRunMap.get(\n parentRunId ?? \"root\"\n );\n if (registeredPrompt && parentRunId) {\n this.deregisterPromptInfo(parentRunId);\n }\n\n this.startAndRegisterObservation({\n runId,\n parentRunId,\n metadata,\n tags,\n runName,\n attributes: {\n input: messages,\n model: extractedModelName,\n modelParameters: modelParameters,\n },\n asType: \"llm\",\n });\n }\n\n async handleChatModelStart(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n parentRunId?: string | undefined,\n extraParams?: Record<string, unknown> | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n try {\n this.logger.debug(`Chat model start with ID: ${runId}`);\n\n const prompts = messages.flatMap((message) =>\n message.map((m) => this.extractChatMessageContent(m))\n );\n\n this.handleGenerationStart(\n llm,\n prompts,\n runId,\n parentRunId,\n extraParams,\n tags,\n metadata,\n name\n );\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleChainEnd(\n outputs: ChainValues,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug(`Chain end with ID: ${runId}`);\n\n let finalOutput: ChainValues | string = outputs;\n if (\n typeof outputs === \"object\" &&\n \"output\" in outputs &&\n typeof outputs[\"output\"] === \"string\"\n ) {\n finalOutput = outputs[\"output\"];\n } else if (\n typeof outputs === \"object\" &&\n \"messages\" in outputs &&\n Array.isArray(outputs[\"messages\"]) &&\n outputs[\"messages\"].every((m: unknown) => m instanceof BaseMessage)\n ) {\n finalOutput = {\n messages: outputs.messages.map((message: BaseMessage) =>\n this.extractChatMessageContent(message)\n ),\n };\n }\n\n this.handleObservationEnd({\n runId,\n attributes: {\n output: finalOutput,\n },\n });\n this.deregisterPromptInfo(runId);\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string | undefined,\n extraParams?: Record<string, unknown> | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n try {\n this.logger.debug(`LLM start with ID: ${runId}`);\n this.handleGenerationStart(\n llm,\n prompts,\n runId,\n parentRunId,\n extraParams,\n tags,\n metadata,\n name\n );\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleToolStart(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n try {\n this.logger.debug(`Tool start with ID: ${runId}`);\n this.startAndRegisterObservation({\n runId,\n parentRunId,\n runName: name ?? tool.id.at(-1)?.toString() ?? \"Tool execution\",\n attributes: {\n input,\n },\n metadata,\n tags,\n asType: \"tool\",\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleRetrieverStart(\n retriever: Serialized,\n query: string,\n runId: string,\n parentRunId?: string | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n try {\n this.logger.debug(`Retriever start with ID: ${runId}`);\n this.startAndRegisterObservation({\n runId,\n parentRunId,\n runName: name ?? retriever.id.at(-1)?.toString() ?? \"Retriever\",\n attributes: {\n input: query,\n },\n tags,\n metadata,\n asType: \"span\",\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleRetrieverEnd(\n documents: Document<Record<string, any>>[],\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug(`Retriever end with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: {\n output: documents,\n },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleRetrieverError(\n err: any,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug(`Retriever error: ${err} with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: {\n level: \"ERROR\",\n statusMessage: err.toString(),\n },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleToolEnd(\n output: string,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug(`Tool end with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: { output },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleToolError(\n err: any,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug(`Tool error ${err} with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: {\n level: \"ERROR\",\n statusMessage: err.toString(),\n },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleLLMEnd(\n output: LLMResult,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug(`LLM end with ID: ${runId}`);\n\n const lastResponse =\n output.generations[output.generations.length - 1][\n output.generations[output.generations.length - 1].length - 1\n ];\n const llmUsage =\n this.extractUsageMetadata(lastResponse) ??\n output.llmOutput?.[\"tokenUsage\"];\n const modelName = this.extractModelNameFromMetadata(lastResponse);\n\n const usageDetails: Record<string, any> = {\n input:\n llmUsage?.input_tokens ??\n (\"promptTokens\" in llmUsage ? llmUsage?.promptTokens : undefined),\n output:\n llmUsage?.output_tokens ??\n (\"completionTokens\" in llmUsage\n ? llmUsage?.completionTokens\n : undefined),\n total:\n llmUsage?.total_tokens ??\n (\"totalTokens\" in llmUsage ? llmUsage?.totalTokens : undefined),\n };\n\n if (llmUsage && \"input_token_details\" in llmUsage) {\n for (const [key, val] of Object.entries(\n llmUsage[\"input_token_details\"] ?? {}\n )) {\n usageDetails[`input_${key}`] = val;\n if (\"input\" in usageDetails && typeof val === \"number\") {\n usageDetails[\"input\"] = Math.max(0, usageDetails[\"input\"] - val);\n }\n }\n }\n\n if (llmUsage && \"output_token_details\" in llmUsage) {\n for (const [key, val] of Object.entries(\n llmUsage[\"output_token_details\"] ?? {}\n )) {\n usageDetails[`output_${key}`] = val;\n if (\"output\" in usageDetails && typeof val === \"number\") {\n usageDetails[\"output\"] = Math.max(0, usageDetails[\"output\"] - val);\n }\n }\n }\n\n const extractedOutput =\n \"message\" in lastResponse\n ? this.extractChatMessageContent(\n lastResponse[\"message\"] as BaseMessage\n )\n : lastResponse.text;\n\n this.handleObservationEnd({\n runId,\n attributes: {\n model: modelName,\n output: extractedOutput,\n completionStartTime:\n runId in this.completionStartTimes\n ? this.completionStartTimes[runId]\n : undefined,\n usageDetails: usageDetails,\n },\n });\n\n if (runId in this.completionStartTimes) {\n delete this.completionStartTimes[runId];\n }\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleLLMError(\n err: any,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug(`LLM error ${err} with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: {\n level: \"ERROR\",\n statusMessage: err.toString(),\n },\n });\n } catch (e) {\n this.logger.debug(e instanceof Error ? e.message : String(e));\n }\n }\n\n private registerPromptInfo(\n parentRunId?: string,\n metadata?: Record<string, unknown>\n ): void {\n if (metadata && \"promptInfo\" in metadata && parentRunId) {\n this.promptToParentRunMap.set(\n parentRunId,\n metadata.promptInfo as PromptInfo\n );\n }\n }\n\n private deregisterPromptInfo(runId: string): void {\n this.promptToParentRunMap.delete(runId);\n }\n\n private startAndRegisterObservation(params: {\n runName: string;\n runId: string;\n parentRunId?: string;\n attributes: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n tags?: string[];\n asType?: \"span\" | \"llm\" | \"tool\";\n }): Observation {\n const { runName, runId, parentRunId, attributes, metadata, tags, asType } =\n params;\n\n // Determine parent context:\n // 1. If parentRunId exists, use the parent span from runMap (internal LangChain/LangGraph hierarchy)\n // 2. If no parentRunId (ROOT span) but externalParentSpanContext exists, use it (link to AG-UI.Server)\n // 3. Otherwise, create a new root span\n let parentSpanContext: SpanContext | undefined;\n\n if (parentRunId) {\n // Internal parent from LangChain/LangGraph\n parentSpanContext = this.runMap.get(parentRunId)?.otelSpan.spanContext();\n } else if (this.externalParentSpanContext) {\n // External parent from AG-UI.Server\n parentSpanContext = this.externalParentSpanContext;\n }\n\n // Add adapter name prefix to ROOT span\n let finalRunName = runName;\n if (!parentRunId && this.adapterName) {\n // ROOT span: add Adapter.LangGraph or Adapter.LangChain prefix\n finalRunName = `Adapter.${this.adapterName}`;\n }\n\n const observation = startObservation(\n finalRunName,\n {\n version: this.version,\n metadata: this.joinTagsAndMetaData(tags, metadata),\n ...attributes,\n },\n {\n asType: asType ?? \"span\",\n parentSpanContext,\n }\n );\n this.runMap.set(runId, observation);\n\n return observation;\n }\n\n private handleObservationEnd(params: {\n runId: string;\n attributes?: Record<string, unknown>;\n }) {\n const { runId, attributes = {} } = params;\n\n const observation = this.runMap.get(runId);\n if (!observation) {\n this.logger.warn(\"Observation not found in runMap. Skipping operation.\");\n return;\n }\n\n // Type-safe update: cast to ObservationAttributes which is the union of all observation attribute types\n observation.update(attributes as ObservationAttributes).end();\n\n this.last_trace_id = observation.traceId;\n this.runMap.delete(runId);\n }\n\n private joinTagsAndMetaData(\n tags?: string[] | undefined,\n metadata1?: Record<string, unknown> | undefined,\n metadata2?: Record<string, unknown> | undefined\n ): Record<string, unknown> | undefined {\n const finalDict: Record<string, unknown> = {};\n if (tags && tags.length > 0) {\n finalDict.tags = tags;\n }\n if (metadata1) {\n Object.assign(finalDict, metadata1);\n }\n if (metadata2) {\n Object.assign(finalDict, metadata2);\n }\n return this.stripObservabilityKeysFromMetadata(finalDict);\n }\n\n private stripObservabilityKeysFromMetadata(\n metadata?: Record<string, unknown>\n ): Record<string, unknown> | undefined {\n if (!metadata) {\n return;\n }\n\n const reservedKeys = [\"promptInfo\", \"userId\", \"sessionId\"];\n\n return Object.fromEntries(\n Object.entries(metadata).filter(([key, _]) => !reservedKeys.includes(key))\n );\n }\n\n private extractUsageMetadata(\n generation: Generation\n ): UsageMetadata | undefined {\n try {\n const usageMetadata =\n \"message\" in generation &&\n (AIMessage.isInstance(generation[\"message\"]) ||\n AIMessageChunk.isInstance(generation[\"message\"]))\n ? generation[\"message\"].usage_metadata\n : undefined;\n return usageMetadata;\n } catch (err) {\n this.logger.debug(`Error extracting usage metadata: ${err}`);\n return;\n }\n }\n\n private extractModelNameFromMetadata(generation: any): string | undefined {\n try {\n return \"message\" in generation &&\n (AIMessage.isInstance(generation[\"message\"]) ||\n AIMessageChunk.isInstance(generation[\"message\"]))\n ? generation[\"message\"].response_metadata.model_name\n : undefined;\n } catch {}\n }\n\n private extractChatMessageContent(\n message: BaseMessage\n ): LlmMessage | AnonymousLlmMessage | MessageContent {\n let response = undefined;\n\n if (message.getType() === \"human\") {\n response = { content: message.content, role: \"user\" };\n } else if (message.getType() === \"generic\") {\n response = {\n content: message.content,\n role: \"human\",\n };\n } else if (message.getType() === \"ai\") {\n response = { content: message.content, role: \"assistant\" };\n\n if (\n \"tool_calls\" in message &&\n Array.isArray(message.tool_calls) &&\n (message.tool_calls?.length ?? 0) > 0\n ) {\n (response as any)[\"tool_calls\"] = message[\"tool_calls\"];\n }\n if (\n \"additional_kwargs\" in message &&\n \"tool_calls\" in message[\"additional_kwargs\"]\n ) {\n (response as any)[\"tool_calls\"] =\n message[\"additional_kwargs\"][\"tool_calls\"];\n }\n } else if (message.getType() === \"system\") {\n response = { content: message.content, role: \"system\" };\n } else if (message.getType() === \"function\") {\n response = {\n content: message.content,\n additional_kwargs: message.additional_kwargs,\n role: message.name,\n };\n } else if (message.getType() === \"tool\") {\n response = {\n content: message.content,\n additional_kwargs: message.additional_kwargs,\n role: message.name,\n };\n } else if (!message.name) {\n response = { content: message.content };\n } else {\n response = {\n role: message.name,\n content: message.content,\n };\n }\n\n if (\n (message.additional_kwargs.function_call ||\n message.additional_kwargs.tool_calls) &&\n (response as any)[\"tool_calls\"] === undefined\n ) {\n return { ...response, additional_kwargs: message.additional_kwargs };\n }\n\n return response;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/langchain/CallbackHandler.ts"],"sourcesContent":["/**\n * LangChain Callback Handler for AG-Kit Observability\n *\n * Converts LangChain callback events into AG-Kit observations with OpenInference semantics.\n */\n\nimport type { AgentAction, AgentFinish } from \"@langchain/core/agents\";\nimport { BaseCallbackHandler } from \"@langchain/core/callbacks/base\";\nimport type { Document } from \"@langchain/core/documents\";\nimport type { Serialized } from \"@langchain/core/load/serializable\";\nimport {\n AIMessage,\n AIMessageChunk,\n BaseMessage,\n type UsageMetadata,\n type BaseMessageFields,\n type MessageContent,\n} from \"@langchain/core/messages\";\nimport type { Generation, LLMResult } from \"@langchain/core/outputs\";\nimport type { ChainValues } from \"@langchain/core/utils/types\";\n\nimport {\n startObservation,\n type ObservationLLM,\n type ObservationSpan,\n type ObservationTool,\n type Observation,\n type ObservationAttributes,\n} from \"../index.js\";\nimport type { SpanContext } from \"@opentelemetry/api\";\nimport { type Logger, noopLogger } from \"@cloudbase/agent-shared\";\n\n/**\n * Constructor parameters for CallbackHandler.\n *\n * @public\n */\ntype ConstructorParams = {\n userId?: string;\n sessionId?: string;\n tags?: string[];\n version?: string;\n traceMetadata?: Record<string, unknown>;\n adapterName?: string; // e.g., \"LangGraph\" or \"LangChain\"\n /** Logger for debug output. Defaults to noopLogger (silent). */\n logger?: Logger;\n};\n\n/**\n * Message format for LLM input/output.\n *\n * @public\n */\nexport type LlmMessage = {\n role: string;\n content: BaseMessageFields[\"content\"];\n additional_kwargs?: BaseMessageFields[\"additional_kwargs\"];\n};\n\n/**\n * Anonymous message format (without role).\n *\n * @public\n */\nexport type AnonymousLlmMessage = {\n content: BaseMessageFields[\"content\"];\n additional_kwargs?: BaseMessageFields[\"additional_kwargs\"];\n};\n\n/**\n * Prompt information for linking to generations.\n *\n * @public\n */\ntype PromptInfo = {\n name: string;\n version: number;\n isFallback: boolean;\n};\n\n/**\n * LangChain Callback Handler for AG-Kit Observability.\n *\n * This handler intercepts LangChain callbacks and converts them into\n * AG-Kit observations following OpenInference semantic conventions.\n *\n * @public\n */\nexport class CallbackHandler extends BaseCallbackHandler {\n name = \"ObservabilityCallbackHandler\";\n\n private userId?: string;\n private version?: string;\n private sessionId?: string;\n private tags: string[];\n private traceMetadata?: Record<string, unknown>;\n\n private completionStartTimes: Record<string, Date> = {};\n private promptToParentRunMap;\n private runMap: Map<string, Observation> = new Map();\n\n public last_trace_id: string | null = null;\n\n // External parent context from AG-UI.Server span\n private externalParentSpanContext?: SpanContext;\n\n // Adapter name for ROOT span prefix\n private adapterName?: string;\n\n // Logger for debug output (defaults to noopLogger for silent operation)\n private logger: Logger;\n\n constructor(params?: ConstructorParams) {\n super();\n\n this.sessionId = params?.sessionId;\n this.userId = params?.userId;\n this.tags = params?.tags ?? [];\n this.traceMetadata = params?.traceMetadata;\n this.version = params?.version;\n this.adapterName = params?.adapterName;\n this.logger = params?.logger ?? noopLogger;\n\n this.promptToParentRunMap = new Map<string, PromptInfo>();\n }\n\n /**\n * Set external parent SpanContext from AG-UI.Server span.\n * This allows the CallbackHandler to link LangChain/LangGraph spans\n * to the server-level span, creating a unified trace hierarchy.\n *\n * @param spanContext - SpanContext from the AG-UI.Server span\n * @public\n */\n setExternalParentContext(spanContext: SpanContext): void {\n this.externalParentSpanContext = spanContext;\n }\n\n async handleLLMNewToken(\n token: string,\n _idx: any,\n runId: string,\n _parentRunId?: string,\n _tags?: string[],\n _fields?: any\n ): Promise<void> {\n if (runId && !(runId in this.completionStartTimes)) {\n this.logger.debug?.(`LLM first streaming token: ${runId}`);\n this.completionStartTimes[runId] = new Date();\n }\n }\n\n async handleChainStart(\n chain: Serialized,\n inputs: ChainValues,\n runId: string,\n parentRunId?: string | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n runType?: string,\n name?: string\n ): Promise<void> {\n try {\n this.logger.debug?.(`Chain start with Id: ${runId}`);\n\n const runName = name ?? chain.id.at(-1)?.toString() ?? \"Langchain Run\";\n\n this.registerPromptInfo(parentRunId, metadata);\n\n let finalInput: string | ChainValues = inputs;\n if (\n typeof inputs === \"object\" &&\n \"input\" in inputs &&\n Array.isArray(inputs[\"input\"]) &&\n inputs[\"input\"].every((m: unknown) => m instanceof BaseMessage)\n ) {\n finalInput = inputs[\"input\"].map((m: BaseMessage) =>\n this.extractChatMessageContent(m)\n );\n } else if (\n typeof inputs === \"object\" &&\n \"messages\" in inputs &&\n Array.isArray(inputs[\"messages\"]) &&\n inputs[\"messages\"].every((m: unknown) => m instanceof BaseMessage)\n ) {\n finalInput = inputs[\"messages\"].map((m: BaseMessage) =>\n this.extractChatMessageContent(m)\n );\n } else if (\n typeof inputs === \"object\" &&\n \"content\" in inputs &&\n typeof inputs[\"content\"] === \"string\"\n ) {\n finalInput = inputs[\"content\"];\n }\n\n const observation = this.startAndRegisterObservation({\n runName,\n parentRunId,\n runId,\n tags,\n metadata,\n attributes: {\n input: finalInput,\n },\n asType: \"span\",\n });\n\n const traceTags = [...new Set([...(tags ?? []), ...this.tags])];\n\n if (!parentRunId) {\n observation.updateTrace({\n tags: traceTags,\n userId:\n metadata &&\n \"userId\" in metadata &&\n typeof metadata[\"userId\"] === \"string\"\n ? metadata[\"userId\"]\n : this.userId,\n sessionId:\n metadata &&\n \"sessionId\" in metadata &&\n typeof metadata[\"sessionId\"] === \"string\"\n ? metadata[\"sessionId\"]\n : this.sessionId,\n metadata: this.traceMetadata,\n version: this.version,\n });\n }\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleAgentAction(\n action: AgentAction,\n runId: string,\n parentRunId?: string\n ): Promise<void> {\n try {\n this.logger.debug?.(`Agent action ${action.tool} with ID: ${runId}`);\n this.startAndRegisterObservation({\n runId,\n parentRunId,\n runName: action.tool,\n attributes: {\n input: action,\n },\n asType: \"tool\",\n });\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleAgentEnd?(\n action: AgentFinish,\n runId: string,\n _parentRunId?: string\n ): Promise<void> {\n try {\n this.logger.debug?.(`Agent finish with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: { output: action },\n });\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleChainError(\n err: any,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug?.(`Chain error: ${err} with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: {\n level: \"ERROR\",\n statusMessage: err.toString(),\n },\n });\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleGenerationStart(\n llm: Serialized,\n messages: (LlmMessage | MessageContent | AnonymousLlmMessage)[],\n runId: string,\n parentRunId?: string | undefined,\n extraParams?: Record<string, unknown> | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n this.logger.debug?.(\n `Generation start with ID: ${runId} and parentRunId ${parentRunId}`\n );\n\n const runName = name ?? llm.id.at(-1)?.toString() ?? \"Langchain Generation\";\n\n const modelParameters: Record<string, any> = {};\n const invocationParams = extraParams?.[\"invocation_params\"];\n\n for (const [key, value] of Object.entries({\n temperature: (invocationParams as any)?.temperature,\n max_tokens: (invocationParams as any)?.max_tokens,\n top_p: (invocationParams as any)?.top_p,\n frequency_penalty: (invocationParams as any)?.frequency_penalty,\n presence_penalty: (invocationParams as any)?.presence_penalty,\n request_timeout: (invocationParams as any)?.request_timeout,\n })) {\n if (value !== undefined && value !== null) {\n modelParameters[key] = value;\n }\n }\n\n interface InvocationParams {\n _type?: string;\n model?: string;\n model_name?: string;\n repo_id?: string;\n }\n\n let extractedModelName: string | undefined;\n if (extraParams) {\n const invocationParamsModelName = (\n extraParams.invocation_params as InvocationParams\n ).model;\n const metadataModelName =\n metadata && \"ls_model_name\" in metadata\n ? (metadata[\"ls_model_name\"] as string)\n : undefined;\n\n extractedModelName = invocationParamsModelName ?? metadataModelName;\n }\n\n const registeredPrompt = this.promptToParentRunMap.get(\n parentRunId ?? \"root\"\n );\n if (registeredPrompt && parentRunId) {\n this.deregisterPromptInfo(parentRunId);\n }\n\n this.startAndRegisterObservation({\n runId,\n parentRunId,\n metadata,\n tags,\n runName,\n attributes: {\n input: messages,\n model: extractedModelName,\n modelParameters: modelParameters,\n },\n asType: \"llm\",\n });\n }\n\n async handleChatModelStart(\n llm: Serialized,\n messages: BaseMessage[][],\n runId: string,\n parentRunId?: string | undefined,\n extraParams?: Record<string, unknown> | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n try {\n this.logger.debug?.(`Chat model start with ID: ${runId}`);\n\n const prompts = messages.flatMap((message) =>\n message.map((m) => this.extractChatMessageContent(m))\n );\n\n this.handleGenerationStart(\n llm,\n prompts,\n runId,\n parentRunId,\n extraParams,\n tags,\n metadata,\n name\n );\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleChainEnd(\n outputs: ChainValues,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug?.(`Chain end with ID: ${runId}`);\n\n let finalOutput: ChainValues | string = outputs;\n if (\n typeof outputs === \"object\" &&\n \"output\" in outputs &&\n typeof outputs[\"output\"] === \"string\"\n ) {\n finalOutput = outputs[\"output\"];\n } else if (\n typeof outputs === \"object\" &&\n \"messages\" in outputs &&\n Array.isArray(outputs[\"messages\"]) &&\n outputs[\"messages\"].every((m: unknown) => m instanceof BaseMessage)\n ) {\n finalOutput = {\n messages: outputs.messages.map((message: BaseMessage) =>\n this.extractChatMessageContent(message)\n ),\n };\n }\n\n this.handleObservationEnd({\n runId,\n attributes: {\n output: finalOutput,\n },\n });\n this.deregisterPromptInfo(runId);\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleLLMStart(\n llm: Serialized,\n prompts: string[],\n runId: string,\n parentRunId?: string | undefined,\n extraParams?: Record<string, unknown> | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n try {\n this.logger.debug?.(`LLM start with ID: ${runId}`);\n this.handleGenerationStart(\n llm,\n prompts,\n runId,\n parentRunId,\n extraParams,\n tags,\n metadata,\n name\n );\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleToolStart(\n tool: Serialized,\n input: string,\n runId: string,\n parentRunId?: string | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n try {\n this.logger.debug?.(`Tool start with ID: ${runId}`);\n this.startAndRegisterObservation({\n runId,\n parentRunId,\n runName: name ?? tool.id.at(-1)?.toString() ?? \"Tool execution\",\n attributes: {\n input,\n },\n metadata,\n tags,\n asType: \"tool\",\n });\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleRetrieverStart(\n retriever: Serialized,\n query: string,\n runId: string,\n parentRunId?: string | undefined,\n tags?: string[] | undefined,\n metadata?: Record<string, unknown> | undefined,\n name?: string\n ): Promise<void> {\n try {\n this.logger.debug?.(`Retriever start with ID: ${runId}`);\n this.startAndRegisterObservation({\n runId,\n parentRunId,\n runName: name ?? retriever.id.at(-1)?.toString() ?? \"Retriever\",\n attributes: {\n input: query,\n },\n tags,\n metadata,\n asType: \"span\",\n });\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleRetrieverEnd(\n documents: Document<Record<string, any>>[],\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug?.(`Retriever end with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: {\n output: documents,\n },\n });\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleRetrieverError(\n err: any,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug?.(`Retriever error: ${err} with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: {\n level: \"ERROR\",\n statusMessage: err.toString(),\n },\n });\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleToolEnd(\n output: string,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug?.(`Tool end with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: { output },\n });\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleToolError(\n err: any,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug?.(`Tool error ${err} with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: {\n level: \"ERROR\",\n statusMessage: err.toString(),\n },\n });\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleLLMEnd(\n output: LLMResult,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug?.(`LLM end with ID: ${runId}`);\n\n const lastResponse =\n output.generations[output.generations.length - 1][\n output.generations[output.generations.length - 1].length - 1\n ];\n const llmUsage =\n this.extractUsageMetadata(lastResponse) ??\n output.llmOutput?.[\"tokenUsage\"];\n const modelName = this.extractModelNameFromMetadata(lastResponse);\n\n const usageDetails: Record<string, any> = {\n input:\n llmUsage?.input_tokens ??\n (\"promptTokens\" in llmUsage ? llmUsage?.promptTokens : undefined),\n output:\n llmUsage?.output_tokens ??\n (\"completionTokens\" in llmUsage\n ? llmUsage?.completionTokens\n : undefined),\n total:\n llmUsage?.total_tokens ??\n (\"totalTokens\" in llmUsage ? llmUsage?.totalTokens : undefined),\n };\n\n if (llmUsage && \"input_token_details\" in llmUsage) {\n for (const [key, val] of Object.entries(\n llmUsage[\"input_token_details\"] ?? {}\n )) {\n usageDetails[`input_${key}`] = val;\n if (\"input\" in usageDetails && typeof val === \"number\") {\n usageDetails[\"input\"] = Math.max(0, usageDetails[\"input\"] - val);\n }\n }\n }\n\n if (llmUsage && \"output_token_details\" in llmUsage) {\n for (const [key, val] of Object.entries(\n llmUsage[\"output_token_details\"] ?? {}\n )) {\n usageDetails[`output_${key}`] = val;\n if (\"output\" in usageDetails && typeof val === \"number\") {\n usageDetails[\"output\"] = Math.max(0, usageDetails[\"output\"] - val);\n }\n }\n }\n\n const extractedOutput =\n \"message\" in lastResponse\n ? this.extractChatMessageContent(\n lastResponse[\"message\"] as BaseMessage\n )\n : lastResponse.text;\n\n this.handleObservationEnd({\n runId,\n attributes: {\n model: modelName,\n output: extractedOutput,\n completionStartTime:\n runId in this.completionStartTimes\n ? this.completionStartTimes[runId]\n : undefined,\n usageDetails: usageDetails,\n },\n });\n\n if (runId in this.completionStartTimes) {\n delete this.completionStartTimes[runId];\n }\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n async handleLLMError(\n err: any,\n runId: string,\n _parentRunId?: string | undefined\n ): Promise<void> {\n try {\n this.logger.debug?.(`LLM error ${err} with ID: ${runId}`);\n this.handleObservationEnd({\n runId,\n attributes: {\n level: \"ERROR\",\n statusMessage: err.toString(),\n },\n });\n } catch (e) {\n this.logger.debug?.(e instanceof Error ? e.message : String(e));\n }\n }\n\n private registerPromptInfo(\n parentRunId?: string,\n metadata?: Record<string, unknown>\n ): void {\n if (metadata && \"promptInfo\" in metadata && parentRunId) {\n this.promptToParentRunMap.set(\n parentRunId,\n metadata.promptInfo as PromptInfo\n );\n }\n }\n\n private deregisterPromptInfo(runId: string): void {\n this.promptToParentRunMap.delete(runId);\n }\n\n private startAndRegisterObservation(params: {\n runName: string;\n runId: string;\n parentRunId?: string;\n attributes: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n tags?: string[];\n asType?: \"span\" | \"llm\" | \"tool\";\n }): Observation {\n const { runName, runId, parentRunId, attributes, metadata, tags, asType } =\n params;\n\n // Determine parent context:\n // 1. If parentRunId exists, use the parent span from runMap (internal LangChain/LangGraph hierarchy)\n // 2. If no parentRunId (ROOT span) but externalParentSpanContext exists, use it (link to AG-UI.Server)\n // 3. Otherwise, create a new root span\n let parentSpanContext: SpanContext | undefined;\n\n if (parentRunId) {\n // Internal parent from LangChain/LangGraph\n parentSpanContext = this.runMap.get(parentRunId)?.otelSpan.spanContext();\n } else if (this.externalParentSpanContext) {\n // External parent from AG-UI.Server\n parentSpanContext = this.externalParentSpanContext;\n }\n\n // Add adapter name prefix to ROOT span\n let finalRunName = runName;\n if (!parentRunId && this.adapterName) {\n // ROOT span: add Adapter.LangGraph or Adapter.LangChain prefix\n finalRunName = `Adapter.${this.adapterName}`;\n }\n\n const observation = startObservation(\n finalRunName,\n {\n version: this.version,\n metadata: this.joinTagsAndMetaData(tags, metadata),\n ...attributes,\n },\n {\n asType: asType ?? \"span\",\n parentSpanContext,\n }\n );\n this.runMap.set(runId, observation);\n\n return observation;\n }\n\n private handleObservationEnd(params: {\n runId: string;\n attributes?: Record<string, unknown>;\n }) {\n const { runId, attributes = {} } = params;\n\n const observation = this.runMap.get(runId);\n if (!observation) {\n this.logger.warn?.(\"Observation not found in runMap. Skipping operation.\");\n return;\n }\n\n // Type-safe update: cast to ObservationAttributes which is the union of all observation attribute types\n observation.update(attributes as ObservationAttributes).end();\n\n this.last_trace_id = observation.traceId;\n this.runMap.delete(runId);\n }\n\n private joinTagsAndMetaData(\n tags?: string[] | undefined,\n metadata1?: Record<string, unknown> | undefined,\n metadata2?: Record<string, unknown> | undefined\n ): Record<string, unknown> | undefined {\n const finalDict: Record<string, unknown> = {};\n if (tags && tags.length > 0) {\n finalDict.tags = tags;\n }\n if (metadata1) {\n Object.assign(finalDict, metadata1);\n }\n if (metadata2) {\n Object.assign(finalDict, metadata2);\n }\n return this.stripObservabilityKeysFromMetadata(finalDict);\n }\n\n private stripObservabilityKeysFromMetadata(\n metadata?: Record<string, unknown>\n ): Record<string, unknown> | undefined {\n if (!metadata) {\n return;\n }\n\n const reservedKeys = [\"promptInfo\", \"userId\", \"sessionId\"];\n\n return Object.fromEntries(\n Object.entries(metadata).filter(([key, _]) => !reservedKeys.includes(key))\n );\n }\n\n private extractUsageMetadata(\n generation: Generation\n ): UsageMetadata | undefined {\n try {\n const usageMetadata =\n \"message\" in generation &&\n (AIMessage.isInstance(generation[\"message\"]) ||\n AIMessageChunk.isInstance(generation[\"message\"]))\n ? generation[\"message\"].usage_metadata\n : undefined;\n return usageMetadata;\n } catch (err) {\n this.logger.debug?.(`Error extracting usage metadata: ${err}`);\n return;\n }\n }\n\n private extractModelNameFromMetadata(generation: any): string | undefined {\n try {\n return \"message\" in generation &&\n (AIMessage.isInstance(generation[\"message\"]) ||\n AIMessageChunk.isInstance(generation[\"message\"]))\n ? generation[\"message\"].response_metadata.model_name\n : undefined;\n } catch {}\n }\n\n private extractChatMessageContent(\n message: BaseMessage\n ): LlmMessage | AnonymousLlmMessage | MessageContent {\n let response = undefined;\n\n if (message.getType() === \"human\") {\n response = { content: message.content, role: \"user\" };\n } else if (message.getType() === \"generic\") {\n response = {\n content: message.content,\n role: \"human\",\n };\n } else if (message.getType() === \"ai\") {\n response = { content: message.content, role: \"assistant\" };\n\n if (\n \"tool_calls\" in message &&\n Array.isArray(message.tool_calls) &&\n (message.tool_calls?.length ?? 0) > 0\n ) {\n (response as any)[\"tool_calls\"] = message[\"tool_calls\"];\n }\n if (\n \"additional_kwargs\" in message &&\n \"tool_calls\" in message[\"additional_kwargs\"]\n ) {\n (response as any)[\"tool_calls\"] =\n message[\"additional_kwargs\"][\"tool_calls\"];\n }\n } else if (message.getType() === \"system\") {\n response = { content: message.content, role: \"system\" };\n } else if (message.getType() === \"function\") {\n response = {\n content: message.content,\n additional_kwargs: message.additional_kwargs,\n role: message.name,\n };\n } else if (message.getType() === \"tool\") {\n response = {\n content: message.content,\n additional_kwargs: message.additional_kwargs,\n role: message.name,\n };\n } else if (!message.name) {\n response = { content: message.content };\n } else {\n response = {\n role: message.name,\n content: message.content,\n };\n }\n\n if (\n (message.additional_kwargs.function_call ||\n message.additional_kwargs.tool_calls) &&\n (response as any)[\"tool_calls\"] === undefined\n ) {\n return { ...response, additional_kwargs: message.additional_kwargs };\n }\n\n return response;\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/agent-observability",
3
- "version": "1.0.1-alpha.10",
3
+ "version": "1.0.1-alpha.11",
4
4
  "description": "OpenInference-compatible observability for AG-Kit",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -64,7 +64,8 @@
64
64
  "dependencies": {
65
65
  "@arizeai/openinference-semantic-conventions": "^2.1.7",
66
66
  "@opentelemetry/api": "^1.9.0",
67
- "@opentelemetry/semantic-conventions": "^1.39.0"
67
+ "@opentelemetry/semantic-conventions": "^1.39.0",
68
+ "@cloudbase/agent-shared": "^1.0.1-alpha.11"
68
69
  },
69
70
  "optionalDependencies": {
70
71
  "@opentelemetry/exporter-trace-otlp-http": "^0.210.0",