@cloudbase/agent-observability 0.0.20 → 0.0.21
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/{chunk-5EXUNUGP.mjs → chunk-PJ5HSKYS.mjs} +24 -4
- package/dist/{chunk-5EXUNUGP.mjs.map → chunk-PJ5HSKYS.mjs.map} +1 -1
- package/dist/{chunk-AHSI4KTT.mjs → chunk-Q5P7VQEQ.mjs} +206 -141
- package/dist/{chunk-AHSI4KTT.mjs.map → chunk-Q5P7VQEQ.mjs.map} +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +201 -134
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -3
- package/dist/langchain.js +206 -134
- package/dist/langchain.js.map +1 -1
- package/dist/langchain.mjs +7 -3
- package/dist/langchain.mjs.map +1 -1
- package/dist/server.js +3 -1320
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +2 -3
- package/dist/server.mjs.map +1 -1
- package/package.json +7 -10
- package/src/index.ts +259 -160
- package/src/langchain/CallbackHandler.ts +6 -0
- package/dist/chunk-NFEGQTCC.mjs +0 -27
- package/dist/chunk-NFEGQTCC.mjs.map +0 -1
- package/dist/esm-PGEDANAI.mjs +0 -1030
- package/dist/esm-PGEDANAI.mjs.map +0 -1
package/dist/index.js
CHANGED
|
@@ -810,63 +810,98 @@ function createParentContext(parentSpanContext) {
|
|
|
810
810
|
if (!parentSpanContext) return;
|
|
811
811
|
return import_api4.trace.setSpanContext(import_api4.context.active(), parentSpanContext);
|
|
812
812
|
}
|
|
813
|
-
function
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
});
|
|
813
|
+
function createNoopSpan() {
|
|
814
|
+
return import_api4.trace.wrapSpanContext(import_api4.INVALID_SPAN_CONTEXT);
|
|
815
|
+
}
|
|
816
|
+
function createNoopObservation(asType = "chain") {
|
|
817
|
+
const otelSpan = createNoopSpan();
|
|
819
818
|
switch (asType) {
|
|
820
819
|
case "llm":
|
|
821
|
-
return new ObservationLLM({
|
|
822
|
-
otelSpan,
|
|
823
|
-
attributes
|
|
824
|
-
});
|
|
820
|
+
return new ObservationLLM({ otelSpan });
|
|
825
821
|
case "embedding":
|
|
826
|
-
return new ObservationEmbedding({
|
|
827
|
-
otelSpan,
|
|
828
|
-
attributes
|
|
829
|
-
});
|
|
822
|
+
return new ObservationEmbedding({ otelSpan });
|
|
830
823
|
case "agent":
|
|
831
|
-
return new ObservationAgent({
|
|
832
|
-
otelSpan,
|
|
833
|
-
attributes
|
|
834
|
-
});
|
|
824
|
+
return new ObservationAgent({ otelSpan });
|
|
835
825
|
case "tool":
|
|
836
|
-
return new ObservationTool({
|
|
837
|
-
otelSpan,
|
|
838
|
-
attributes
|
|
839
|
-
});
|
|
840
|
-
case "chain":
|
|
841
|
-
return new ObservationChain({
|
|
842
|
-
otelSpan,
|
|
843
|
-
attributes
|
|
844
|
-
});
|
|
826
|
+
return new ObservationTool({ otelSpan });
|
|
845
827
|
case "retriever":
|
|
846
|
-
return new ObservationRetriever({
|
|
847
|
-
otelSpan,
|
|
848
|
-
attributes
|
|
849
|
-
});
|
|
828
|
+
return new ObservationRetriever({ otelSpan });
|
|
850
829
|
case "reranker":
|
|
851
|
-
return new ObservationReranker({
|
|
852
|
-
otelSpan,
|
|
853
|
-
attributes
|
|
854
|
-
});
|
|
830
|
+
return new ObservationReranker({ otelSpan });
|
|
855
831
|
case "evaluator":
|
|
856
|
-
return new ObservationEvaluator({
|
|
857
|
-
otelSpan,
|
|
858
|
-
attributes
|
|
859
|
-
});
|
|
832
|
+
return new ObservationEvaluator({ otelSpan });
|
|
860
833
|
case "guardrail":
|
|
861
|
-
return new ObservationGuardrail({
|
|
862
|
-
|
|
863
|
-
attributes
|
|
864
|
-
});
|
|
834
|
+
return new ObservationGuardrail({ otelSpan });
|
|
835
|
+
case "chain":
|
|
865
836
|
default:
|
|
866
|
-
return new ObservationChain({
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
837
|
+
return new ObservationChain({ otelSpan });
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
function startObservation(name, attributes, options) {
|
|
841
|
+
const { asType = "chain", ...observationOptions } = options || {};
|
|
842
|
+
try {
|
|
843
|
+
const otelSpan = createOtelSpan({
|
|
844
|
+
name,
|
|
845
|
+
...observationOptions
|
|
846
|
+
});
|
|
847
|
+
switch (asType) {
|
|
848
|
+
case "llm":
|
|
849
|
+
return new ObservationLLM({
|
|
850
|
+
otelSpan,
|
|
851
|
+
attributes
|
|
852
|
+
});
|
|
853
|
+
case "embedding":
|
|
854
|
+
return new ObservationEmbedding({
|
|
855
|
+
otelSpan,
|
|
856
|
+
attributes
|
|
857
|
+
});
|
|
858
|
+
case "agent":
|
|
859
|
+
return new ObservationAgent({
|
|
860
|
+
otelSpan,
|
|
861
|
+
attributes
|
|
862
|
+
});
|
|
863
|
+
case "tool":
|
|
864
|
+
return new ObservationTool({
|
|
865
|
+
otelSpan,
|
|
866
|
+
attributes
|
|
867
|
+
});
|
|
868
|
+
case "chain":
|
|
869
|
+
return new ObservationChain({
|
|
870
|
+
otelSpan,
|
|
871
|
+
attributes
|
|
872
|
+
});
|
|
873
|
+
case "retriever":
|
|
874
|
+
return new ObservationRetriever({
|
|
875
|
+
otelSpan,
|
|
876
|
+
attributes
|
|
877
|
+
});
|
|
878
|
+
case "reranker":
|
|
879
|
+
return new ObservationReranker({
|
|
880
|
+
otelSpan,
|
|
881
|
+
attributes
|
|
882
|
+
});
|
|
883
|
+
case "evaluator":
|
|
884
|
+
return new ObservationEvaluator({
|
|
885
|
+
otelSpan,
|
|
886
|
+
attributes
|
|
887
|
+
});
|
|
888
|
+
case "guardrail":
|
|
889
|
+
return new ObservationGuardrail({
|
|
890
|
+
otelSpan,
|
|
891
|
+
attributes
|
|
892
|
+
});
|
|
893
|
+
default:
|
|
894
|
+
return new ObservationChain({
|
|
895
|
+
otelSpan,
|
|
896
|
+
attributes
|
|
897
|
+
});
|
|
898
|
+
}
|
|
899
|
+
} catch (err) {
|
|
900
|
+
console.warn(
|
|
901
|
+
`[Observability] Failed to create observation "${name}":`,
|
|
902
|
+
err instanceof Error ? err.message : err
|
|
903
|
+
);
|
|
904
|
+
return createNoopObservation(asType);
|
|
870
905
|
}
|
|
871
906
|
}
|
|
872
907
|
function updateActiveTrace(attributes) {
|
|
@@ -907,67 +942,81 @@ function wrapPromise(promise, span, endOnExit) {
|
|
|
907
942
|
}
|
|
908
943
|
function startActiveObservation(name, fn, options) {
|
|
909
944
|
const { asType = "chain", endOnExit, ...observationOptions } = options || {};
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
945
|
+
let fnCalled = false;
|
|
946
|
+
try {
|
|
947
|
+
return getTracer().startActiveSpan(
|
|
948
|
+
name,
|
|
949
|
+
{ startTime: observationOptions?.startTime },
|
|
950
|
+
createParentContext(observationOptions?.parentSpanContext) ?? import_api4.context.active(),
|
|
951
|
+
(span) => {
|
|
952
|
+
try {
|
|
953
|
+
let observation;
|
|
954
|
+
switch (asType) {
|
|
955
|
+
case "llm":
|
|
956
|
+
observation = new ObservationLLM({ otelSpan: span });
|
|
957
|
+
break;
|
|
958
|
+
case "embedding":
|
|
959
|
+
observation = new ObservationEmbedding({ otelSpan: span });
|
|
960
|
+
break;
|
|
961
|
+
case "agent":
|
|
962
|
+
observation = new ObservationAgent({ otelSpan: span });
|
|
963
|
+
break;
|
|
964
|
+
case "tool":
|
|
965
|
+
observation = new ObservationTool({ otelSpan: span });
|
|
966
|
+
break;
|
|
967
|
+
case "retriever":
|
|
968
|
+
observation = new ObservationRetriever({ otelSpan: span });
|
|
969
|
+
break;
|
|
970
|
+
case "reranker":
|
|
971
|
+
observation = new ObservationReranker({ otelSpan: span });
|
|
972
|
+
break;
|
|
973
|
+
case "evaluator":
|
|
974
|
+
observation = new ObservationEvaluator({ otelSpan: span });
|
|
975
|
+
break;
|
|
976
|
+
case "guardrail":
|
|
977
|
+
observation = new ObservationGuardrail({ otelSpan: span });
|
|
978
|
+
break;
|
|
979
|
+
case "chain":
|
|
980
|
+
default:
|
|
981
|
+
observation = new ObservationChain({ otelSpan: span });
|
|
982
|
+
}
|
|
983
|
+
fnCalled = true;
|
|
984
|
+
const result = fn(observation);
|
|
985
|
+
if (result instanceof Promise) {
|
|
986
|
+
return wrapPromise(
|
|
987
|
+
result,
|
|
988
|
+
span,
|
|
989
|
+
endOnExit
|
|
990
|
+
);
|
|
991
|
+
} else {
|
|
992
|
+
if (endOnExit !== false) {
|
|
993
|
+
span.end();
|
|
994
|
+
}
|
|
995
|
+
return result;
|
|
996
|
+
}
|
|
997
|
+
} catch (err) {
|
|
998
|
+
span.setStatus({
|
|
999
|
+
code: import_api4.SpanStatusCode.ERROR,
|
|
1000
|
+
message: err instanceof Error ? err.message : "Unknown error"
|
|
1001
|
+
});
|
|
954
1002
|
if (endOnExit !== false) {
|
|
955
1003
|
span.end();
|
|
956
1004
|
}
|
|
957
|
-
|
|
958
|
-
}
|
|
959
|
-
} catch (err) {
|
|
960
|
-
span.setStatus({
|
|
961
|
-
code: import_api4.SpanStatusCode.ERROR,
|
|
962
|
-
message: err instanceof Error ? err.message : "Unknown error"
|
|
963
|
-
});
|
|
964
|
-
if (endOnExit !== false) {
|
|
965
|
-
span.end();
|
|
1005
|
+
throw err;
|
|
966
1006
|
}
|
|
967
|
-
throw err;
|
|
968
1007
|
}
|
|
1008
|
+
);
|
|
1009
|
+
} catch (err) {
|
|
1010
|
+
if (fnCalled) {
|
|
1011
|
+
throw err;
|
|
969
1012
|
}
|
|
970
|
-
|
|
1013
|
+
console.warn(
|
|
1014
|
+
`[Observability] startActiveObservation "${name}" failed, falling back to no-op:`,
|
|
1015
|
+
err instanceof Error ? err.message : err
|
|
1016
|
+
);
|
|
1017
|
+
const noopObservation = createNoopObservation(asType);
|
|
1018
|
+
return fn(noopObservation);
|
|
1019
|
+
}
|
|
971
1020
|
}
|
|
972
1021
|
function updateActiveObservation(attributes) {
|
|
973
1022
|
const span = import_api4.trace.getActiveSpan();
|
|
@@ -993,41 +1042,59 @@ function observe(fn, options = {}) {
|
|
|
993
1042
|
} = options;
|
|
994
1043
|
const wrappedFunction = function(...args) {
|
|
995
1044
|
const name = fn.name || "anonymous-function";
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
inputData ?
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
const result = import_api4.context.with(activeContext, () => fn.apply(this, args));
|
|
1007
|
-
if (result instanceof Promise) {
|
|
1008
|
-
return result.then(
|
|
1009
|
-
(value) => {
|
|
1010
|
-
if (captureOutput) {
|
|
1011
|
-
observation.update({ output: value });
|
|
1012
|
-
}
|
|
1013
|
-
observation.end();
|
|
1014
|
-
return value;
|
|
1015
|
-
},
|
|
1016
|
-
(err) => {
|
|
1017
|
-
observation.update({
|
|
1018
|
-
level: "ERROR",
|
|
1019
|
-
statusMessage: err instanceof Error ? err.message : "Unknown error"
|
|
1020
|
-
});
|
|
1021
|
-
observation.end();
|
|
1022
|
-
throw err;
|
|
1045
|
+
let observation;
|
|
1046
|
+
let fnCalled = false;
|
|
1047
|
+
try {
|
|
1048
|
+
const inputData = captureInput ? _captureArguments(args) : void 0;
|
|
1049
|
+
observation = startObservation(
|
|
1050
|
+
name,
|
|
1051
|
+
inputData ? { input: inputData } : {},
|
|
1052
|
+
{
|
|
1053
|
+
...observationOptions,
|
|
1054
|
+
asType
|
|
1023
1055
|
}
|
|
1024
1056
|
);
|
|
1057
|
+
const activeContext = import_api4.trace.setSpan(import_api4.context.active(), observation.otelSpan);
|
|
1058
|
+
fnCalled = true;
|
|
1059
|
+
const result = import_api4.context.with(activeContext, () => fn.apply(this, args));
|
|
1060
|
+
if (result instanceof Promise) {
|
|
1061
|
+
return result.then(
|
|
1062
|
+
(value) => {
|
|
1063
|
+
if (captureOutput) {
|
|
1064
|
+
observation.update({ output: value });
|
|
1065
|
+
}
|
|
1066
|
+
observation.end();
|
|
1067
|
+
return value;
|
|
1068
|
+
},
|
|
1069
|
+
(err) => {
|
|
1070
|
+
observation.update({
|
|
1071
|
+
level: "ERROR",
|
|
1072
|
+
statusMessage: err instanceof Error ? err.message : "Unknown error"
|
|
1073
|
+
});
|
|
1074
|
+
observation.end();
|
|
1075
|
+
throw err;
|
|
1076
|
+
}
|
|
1077
|
+
);
|
|
1078
|
+
}
|
|
1079
|
+
if (captureOutput) {
|
|
1080
|
+
observation.update({ output: result });
|
|
1081
|
+
}
|
|
1082
|
+
observation.end();
|
|
1083
|
+
return result;
|
|
1084
|
+
} catch (err) {
|
|
1085
|
+
if (fnCalled) {
|
|
1086
|
+
throw err;
|
|
1087
|
+
}
|
|
1088
|
+
console.warn(
|
|
1089
|
+
`[Observability] observe "${name}" failed, falling back to direct call:`,
|
|
1090
|
+
err instanceof Error ? err.message : err
|
|
1091
|
+
);
|
|
1092
|
+
try {
|
|
1093
|
+
observation?.end();
|
|
1094
|
+
} catch {
|
|
1095
|
+
}
|
|
1096
|
+
return fn.apply(this, args);
|
|
1025
1097
|
}
|
|
1026
|
-
if (captureOutput) {
|
|
1027
|
-
observation.update({ output: result });
|
|
1028
|
-
}
|
|
1029
|
-
observation.end();
|
|
1030
|
-
return result;
|
|
1031
1098
|
};
|
|
1032
1099
|
Object.defineProperty(wrappedFunction, "name", { value: fn.name });
|
|
1033
1100
|
Object.defineProperty(wrappedFunction, "length", { value: fn.length });
|