@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.
- package/dist/langchain.d.mts +4 -1
- package/dist/langchain.d.ts +4 -1
- package/dist/langchain.js +38 -37
- package/dist/langchain.js.map +1 -1
- package/dist/langchain.mjs +38 -37
- package/dist/langchain.mjs.map +1 -1
- package/package.json +3 -2
- package/src/langchain/CallbackHandler.ts +41 -38
package/dist/langchain.d.mts
CHANGED
|
@@ -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.d.ts
CHANGED
|
@@ -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
|
}
|