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

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.
@@ -6,6 +6,7 @@ import { BaseMessageFields, MessageContent, BaseMessage } from '@langchain/core/
6
6
  import { LLMResult } from '@langchain/core/outputs';
7
7
  import { ChainValues } from '@langchain/core/utils/types';
8
8
  import { SpanContext } from '@opentelemetry/api';
9
+ import { Logger } from '@cloudbase/agent-shared';
9
10
 
10
11
  /**
11
12
  * LangChain Callback Handler for AG-Kit Observability
@@ -25,6 +26,8 @@ type ConstructorParams = {
25
26
  version?: string;
26
27
  traceMetadata?: Record<string, unknown>;
27
28
  adapterName?: string;
29
+ /** Logger for debug output. Defaults to noopLogger (silent). */
30
+ logger?: Logger;
28
31
  };
29
32
  /**
30
33
  * Message format for LLM input/output.
@@ -66,8 +69,8 @@ declare class CallbackHandler extends BaseCallbackHandler {
66
69
  last_trace_id: string | null;
67
70
  private externalParentSpanContext?;
68
71
  private adapterName?;
72
+ private logger;
69
73
  constructor(params?: ConstructorParams);
70
- get logger(): Console;
71
74
  /**
72
75
  * Set external parent SpanContext from AG-UI.Server span.
73
76
  * This allows the CallbackHandler to link LangChain/LangGraph spans
@@ -6,6 +6,7 @@ import { BaseMessageFields, MessageContent, BaseMessage } from '@langchain/core/
6
6
  import { LLMResult } from '@langchain/core/outputs';
7
7
  import { ChainValues } from '@langchain/core/utils/types';
8
8
  import { SpanContext } from '@opentelemetry/api';
9
+ import { Logger } from '@cloudbase/agent-shared';
9
10
 
10
11
  /**
11
12
  * LangChain Callback Handler for AG-Kit Observability
@@ -25,6 +26,8 @@ type ConstructorParams = {
25
26
  version?: string;
26
27
  traceMetadata?: Record<string, unknown>;
27
28
  adapterName?: string;
29
+ /** Logger for debug output. Defaults to noopLogger (silent). */
30
+ logger?: Logger;
28
31
  };
29
32
  /**
30
33
  * Message format for LLM input/output.
@@ -66,8 +69,8 @@ declare class CallbackHandler extends BaseCallbackHandler {
66
69
  last_trace_id: string | null;
67
70
  private externalParentSpanContext?;
68
71
  private adapterName?;
72
+ private logger;
69
73
  constructor(params?: ConstructorParams);
70
- get logger(): Console;
71
74
  /**
72
75
  * Set external parent SpanContext from AG-UI.Server span.
73
76
  * This allows the CallbackHandler to link LangChain/LangGraph spans
package/dist/langchain.js CHANGED
@@ -713,6 +713,7 @@ module.exports = __toCommonJS(CallbackHandler_exports);
713
713
  var import_base = require("@langchain/core/callbacks/base");
714
714
  var import_messages = require("@langchain/core/messages");
715
715
  init_src();
716
+ var import_agent_shared = require("@cloudbase/agent-shared");
716
717
  var CallbackHandler = class extends import_base.BaseCallbackHandler {
717
718
  name = "ObservabilityCallbackHandler";
718
719
  userId;
@@ -728,6 +729,8 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
728
729
  externalParentSpanContext;
729
730
  // Adapter name for ROOT span prefix
730
731
  adapterName;
732
+ // Logger for debug output (defaults to noopLogger for silent operation)
733
+ logger;
731
734
  constructor(params) {
732
735
  super();
733
736
  this.sessionId = params?.sessionId;
@@ -736,11 +739,9 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
736
739
  this.traceMetadata = params?.traceMetadata;
737
740
  this.version = params?.version;
738
741
  this.adapterName = params?.adapterName;
742
+ this.logger = params?.logger ?? import_agent_shared.noopLogger;
739
743
  this.promptToParentRunMap = /* @__PURE__ */ new Map();
740
744
  }
741
- get logger() {
742
- return console;
743
- }
744
745
  /**
745
746
  * Set external parent SpanContext from AG-UI.Server span.
746
747
  * This allows the CallbackHandler to link LangChain/LangGraph spans
@@ -754,13 +755,13 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
754
755
  }
755
756
  async handleLLMNewToken(token, _idx, runId, _parentRunId, _tags, _fields) {
756
757
  if (runId && !(runId in this.completionStartTimes)) {
757
- this.logger.debug(`LLM first streaming token: ${runId}`);
758
+ this.logger.debug?.(`LLM first streaming token: ${runId}`);
758
759
  this.completionStartTimes[runId] = /* @__PURE__ */ new Date();
759
760
  }
760
761
  }
761
762
  async handleChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, name) {
762
763
  try {
763
- this.logger.debug(`Chain start with Id: ${runId}`);
764
+ this.logger.debug?.(`Chain start with Id: ${runId}`);
764
765
  const runName = name ?? chain.id.at(-1)?.toString() ?? "Langchain Run";
765
766
  this.registerPromptInfo(parentRunId, metadata);
766
767
  let finalInput = inputs;
@@ -797,12 +798,12 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
797
798
  });
798
799
  }
799
800
  } catch (e) {
800
- this.logger.debug(e instanceof Error ? e.message : String(e));
801
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
801
802
  }
802
803
  }
803
804
  async handleAgentAction(action, runId, parentRunId) {
804
805
  try {
805
- this.logger.debug(`Agent action ${action.tool} with ID: ${runId}`);
806
+ this.logger.debug?.(`Agent action ${action.tool} with ID: ${runId}`);
806
807
  this.startAndRegisterObservation({
807
808
  runId,
808
809
  parentRunId,
@@ -813,23 +814,23 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
813
814
  asType: "tool"
814
815
  });
815
816
  } catch (e) {
816
- this.logger.debug(e instanceof Error ? e.message : String(e));
817
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
817
818
  }
818
819
  }
819
820
  async handleAgentEnd(action, runId, _parentRunId) {
820
821
  try {
821
- this.logger.debug(`Agent finish with ID: ${runId}`);
822
+ this.logger.debug?.(`Agent finish with ID: ${runId}`);
822
823
  this.handleObservationEnd({
823
824
  runId,
824
825
  attributes: { output: action }
825
826
  });
826
827
  } catch (e) {
827
- this.logger.debug(e instanceof Error ? e.message : String(e));
828
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
828
829
  }
829
830
  }
830
831
  async handleChainError(err, runId, _parentRunId) {
831
832
  try {
832
- this.logger.debug(`Chain error: ${err} with ID: ${runId}`);
833
+ this.logger.debug?.(`Chain error: ${err} with ID: ${runId}`);
833
834
  this.handleObservationEnd({
834
835
  runId,
835
836
  attributes: {
@@ -838,11 +839,11 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
838
839
  }
839
840
  });
840
841
  } catch (e) {
841
- this.logger.debug(e instanceof Error ? e.message : String(e));
842
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
842
843
  }
843
844
  }
844
845
  async handleGenerationStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) {
845
- this.logger.debug(
846
+ this.logger.debug?.(
846
847
  `Generation start with ID: ${runId} and parentRunId ${parentRunId}`
847
848
  );
848
849
  const runName = name ?? llm.id.at(-1)?.toString() ?? "Langchain Generation";
@@ -888,7 +889,7 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
888
889
  }
889
890
  async handleChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) {
890
891
  try {
891
- this.logger.debug(`Chat model start with ID: ${runId}`);
892
+ this.logger.debug?.(`Chat model start with ID: ${runId}`);
892
893
  const prompts = messages.flatMap(
893
894
  (message) => message.map((m) => this.extractChatMessageContent(m))
894
895
  );
@@ -903,12 +904,12 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
903
904
  name
904
905
  );
905
906
  } catch (e) {
906
- this.logger.debug(e instanceof Error ? e.message : String(e));
907
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
907
908
  }
908
909
  }
909
910
  async handleChainEnd(outputs, runId, _parentRunId) {
910
911
  try {
911
- this.logger.debug(`Chain end with ID: ${runId}`);
912
+ this.logger.debug?.(`Chain end with ID: ${runId}`);
912
913
  let finalOutput = outputs;
913
914
  if (typeof outputs === "object" && "output" in outputs && typeof outputs["output"] === "string") {
914
915
  finalOutput = outputs["output"];
@@ -927,12 +928,12 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
927
928
  });
928
929
  this.deregisterPromptInfo(runId);
929
930
  } catch (e) {
930
- this.logger.debug(e instanceof Error ? e.message : String(e));
931
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
931
932
  }
932
933
  }
933
934
  async handleLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name) {
934
935
  try {
935
- this.logger.debug(`LLM start with ID: ${runId}`);
936
+ this.logger.debug?.(`LLM start with ID: ${runId}`);
936
937
  this.handleGenerationStart(
937
938
  llm,
938
939
  prompts,
@@ -944,12 +945,12 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
944
945
  name
945
946
  );
946
947
  } catch (e) {
947
- this.logger.debug(e instanceof Error ? e.message : String(e));
948
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
948
949
  }
949
950
  }
950
951
  async handleToolStart(tool, input, runId, parentRunId, tags, metadata, name) {
951
952
  try {
952
- this.logger.debug(`Tool start with ID: ${runId}`);
953
+ this.logger.debug?.(`Tool start with ID: ${runId}`);
953
954
  this.startAndRegisterObservation({
954
955
  runId,
955
956
  parentRunId,
@@ -962,12 +963,12 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
962
963
  asType: "tool"
963
964
  });
964
965
  } catch (e) {
965
- this.logger.debug(e instanceof Error ? e.message : String(e));
966
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
966
967
  }
967
968
  }
968
969
  async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, name) {
969
970
  try {
970
- this.logger.debug(`Retriever start with ID: ${runId}`);
971
+ this.logger.debug?.(`Retriever start with ID: ${runId}`);
971
972
  this.startAndRegisterObservation({
972
973
  runId,
973
974
  parentRunId,
@@ -980,12 +981,12 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
980
981
  asType: "span"
981
982
  });
982
983
  } catch (e) {
983
- this.logger.debug(e instanceof Error ? e.message : String(e));
984
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
984
985
  }
985
986
  }
986
987
  async handleRetrieverEnd(documents, runId, _parentRunId) {
987
988
  try {
988
- this.logger.debug(`Retriever end with ID: ${runId}`);
989
+ this.logger.debug?.(`Retriever end with ID: ${runId}`);
989
990
  this.handleObservationEnd({
990
991
  runId,
991
992
  attributes: {
@@ -993,12 +994,12 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
993
994
  }
994
995
  });
995
996
  } catch (e) {
996
- this.logger.debug(e instanceof Error ? e.message : String(e));
997
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
997
998
  }
998
999
  }
999
1000
  async handleRetrieverError(err, runId, _parentRunId) {
1000
1001
  try {
1001
- this.logger.debug(`Retriever error: ${err} with ID: ${runId}`);
1002
+ this.logger.debug?.(`Retriever error: ${err} with ID: ${runId}`);
1002
1003
  this.handleObservationEnd({
1003
1004
  runId,
1004
1005
  attributes: {
@@ -1007,23 +1008,23 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
1007
1008
  }
1008
1009
  });
1009
1010
  } catch (e) {
1010
- this.logger.debug(e instanceof Error ? e.message : String(e));
1011
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
1011
1012
  }
1012
1013
  }
1013
1014
  async handleToolEnd(output, runId, _parentRunId) {
1014
1015
  try {
1015
- this.logger.debug(`Tool end with ID: ${runId}`);
1016
+ this.logger.debug?.(`Tool end with ID: ${runId}`);
1016
1017
  this.handleObservationEnd({
1017
1018
  runId,
1018
1019
  attributes: { output }
1019
1020
  });
1020
1021
  } catch (e) {
1021
- this.logger.debug(e instanceof Error ? e.message : String(e));
1022
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
1022
1023
  }
1023
1024
  }
1024
1025
  async handleToolError(err, runId, _parentRunId) {
1025
1026
  try {
1026
- this.logger.debug(`Tool error ${err} with ID: ${runId}`);
1027
+ this.logger.debug?.(`Tool error ${err} with ID: ${runId}`);
1027
1028
  this.handleObservationEnd({
1028
1029
  runId,
1029
1030
  attributes: {
@@ -1032,12 +1033,12 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
1032
1033
  }
1033
1034
  });
1034
1035
  } catch (e) {
1035
- this.logger.debug(e instanceof Error ? e.message : String(e));
1036
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
1036
1037
  }
1037
1038
  }
1038
1039
  async handleLLMEnd(output, runId, _parentRunId) {
1039
1040
  try {
1040
- this.logger.debug(`LLM end with ID: ${runId}`);
1041
+ this.logger.debug?.(`LLM end with ID: ${runId}`);
1041
1042
  const lastResponse = output.generations[output.generations.length - 1][output.generations[output.generations.length - 1].length - 1];
1042
1043
  const llmUsage = this.extractUsageMetadata(lastResponse) ?? output.llmOutput?.["tokenUsage"];
1043
1044
  const modelName = this.extractModelNameFromMetadata(lastResponse);
@@ -1082,12 +1083,12 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
1082
1083
  delete this.completionStartTimes[runId];
1083
1084
  }
1084
1085
  } catch (e) {
1085
- this.logger.debug(e instanceof Error ? e.message : String(e));
1086
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
1086
1087
  }
1087
1088
  }
1088
1089
  async handleLLMError(err, runId, _parentRunId) {
1089
1090
  try {
1090
- this.logger.debug(`LLM error ${err} with ID: ${runId}`);
1091
+ this.logger.debug?.(`LLM error ${err} with ID: ${runId}`);
1091
1092
  this.handleObservationEnd({
1092
1093
  runId,
1093
1094
  attributes: {
@@ -1096,7 +1097,7 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
1096
1097
  }
1097
1098
  });
1098
1099
  } catch (e) {
1099
- this.logger.debug(e instanceof Error ? e.message : String(e));
1100
+ this.logger.debug?.(e instanceof Error ? e.message : String(e));
1100
1101
  }
1101
1102
  }
1102
1103
  registerPromptInfo(parentRunId, metadata) {
@@ -1141,7 +1142,7 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
1141
1142
  const { runId, attributes = {} } = params;
1142
1143
  const observation = this.runMap.get(runId);
1143
1144
  if (!observation) {
1144
- this.logger.warn("Observation not found in runMap. Skipping operation.");
1145
+ this.logger.warn?.("Observation not found in runMap. Skipping operation.");
1145
1146
  return;
1146
1147
  }
1147
1148
  observation.update(attributes).end();
@@ -1175,7 +1176,7 @@ var CallbackHandler = class extends import_base.BaseCallbackHandler {
1175
1176
  const usageMetadata = "message" in generation && (import_messages.AIMessage.isInstance(generation["message"]) || import_messages.AIMessageChunk.isInstance(generation["message"])) ? generation["message"].usage_metadata : void 0;
1176
1177
  return usageMetadata;
1177
1178
  } catch (err) {
1178
- this.logger.debug(`Error extracting usage metadata: ${err}`);
1179
+ this.logger.debug?.(`Error extracting usage metadata: ${err}`);
1179
1180
  return;
1180
1181
  }
1181
1182
  }