@cloudbase/agent-observability 1.0.1-alpha.27 → 1.0.1-alpha.29
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-PJ5HSKYS.mjs +80 -0
- package/dist/chunk-PJ5HSKYS.mjs.map +1 -0
- package/dist/{chunk-43GF2BGQ.mjs → chunk-Q5P7VQEQ.mjs} +230 -204
- package/dist/chunk-Q5P7VQEQ.mjs.map +1 -0
- 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 -2
- package/dist/langchain.js +206 -134
- package/dist/langchain.js.map +1 -1
- package/dist/langchain.mjs +7 -2
- package/dist/langchain.mjs.map +1 -1
- package/dist/server.js +79 -1364
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +46 -46
- 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/src/server/SingleLineConsoleSpanExporter.ts +47 -49
- package/dist/chunk-43GF2BGQ.mjs.map +0 -1
- 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
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __esm = (fn, res) => function __init() {
|
|
6
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
7
|
+
};
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/core/constants.ts
|
|
23
|
+
import {
|
|
24
|
+
SemanticConventions,
|
|
25
|
+
OpenInferenceSpanKind
|
|
26
|
+
} from "@arizeai/openinference-semantic-conventions";
|
|
27
|
+
var OBSERVABILITY_TRACER_NAME, OBSERVABILITY_SDK_NAME, OBSERVABILITY_SDK_VERSION, OtelSpanAttributes;
|
|
28
|
+
var init_constants = __esm({
|
|
29
|
+
"src/core/constants.ts"() {
|
|
30
|
+
"use strict";
|
|
31
|
+
OBSERVABILITY_TRACER_NAME = "agui-tracer";
|
|
32
|
+
OBSERVABILITY_SDK_NAME = "observability";
|
|
33
|
+
OBSERVABILITY_SDK_VERSION = "0.1.0";
|
|
34
|
+
OtelSpanAttributes = {
|
|
35
|
+
// OpenInference - re-export all standard conventions
|
|
36
|
+
...SemanticConventions,
|
|
37
|
+
// Trace attributes (non-standard)
|
|
38
|
+
TRACE_NAME: "trace.name",
|
|
39
|
+
TRACE_TAGS: "trace.tags",
|
|
40
|
+
TRACE_PUBLIC: "trace.public",
|
|
41
|
+
TRACE_METADATA: "trace.metadata",
|
|
42
|
+
TRACE_INPUT: "trace.input",
|
|
43
|
+
TRACE_OUTPUT: "trace.output",
|
|
44
|
+
// Observation attributes (non-standard)
|
|
45
|
+
OBSERVATION_TYPE: "observation.type",
|
|
46
|
+
OBSERVATION_LEVEL: "observation.level",
|
|
47
|
+
OBSERVATION_STATUS_MESSAGE: "observation.status_message",
|
|
48
|
+
OBSERVATION_INPUT: "observation.input",
|
|
49
|
+
OBSERVATION_OUTPUT: "observation.output",
|
|
50
|
+
OBSERVATION_METADATA: "observation.metadata",
|
|
51
|
+
// LLM-specific (non-standard)
|
|
52
|
+
LLM_COMPLETION_START_TIME: "llm.completion_start_time",
|
|
53
|
+
LLM_MODEL_PARAMETERS: "llm.model_parameters",
|
|
54
|
+
LLM_USAGE_DETAILS: "llm.usage_details",
|
|
55
|
+
LLM_COST_DETAILS: "llm.cost_details",
|
|
56
|
+
// Retriever-specific (non-standard)
|
|
57
|
+
RETRIEVER_NAME: "retriever.name",
|
|
58
|
+
RETRIEVER_QUERY: "retriever.query",
|
|
59
|
+
RETRIEVER_INDEX_ID: "retriever.index_id",
|
|
60
|
+
RETRIEVER_TOP_K: "retriever.top_k",
|
|
61
|
+
// General (non-standard)
|
|
62
|
+
ENVIRONMENT: "environment",
|
|
63
|
+
RELEASE: "release",
|
|
64
|
+
VERSION: "version"
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
export {
|
|
70
|
+
__esm,
|
|
71
|
+
__export,
|
|
72
|
+
__toCommonJS,
|
|
73
|
+
OpenInferenceSpanKind,
|
|
74
|
+
OBSERVABILITY_TRACER_NAME,
|
|
75
|
+
OBSERVABILITY_SDK_NAME,
|
|
76
|
+
OBSERVABILITY_SDK_VERSION,
|
|
77
|
+
OtelSpanAttributes,
|
|
78
|
+
init_constants
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=chunk-PJ5HSKYS.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/constants.ts"],"sourcesContent":["/**\n * OTEL attribute constants for observability.\n *\n * Uses OpenInference semantic conventions where applicable:\n * https://github.com/Arize-ai/openinference/tree/main/spec\n *\n * Falls back to non-standard attributes where OpenInference\n * doesn't define a standard.\n *\n * @module\n */\n\nimport {\n SemanticConventions,\n OpenInferenceSpanKind,\n} from \"@arizeai/openinference-semantic-conventions\";\n\n// Re-export OpenInference types for convenience\nexport { OpenInferenceSpanKind };\n\n/**\n * SDK information\n */\n// Brandless defaults: avoid emitting project-specific identifiers into traces.\n// Users can still override service.name via OTEL_SERVICE_NAME.\nexport const OBSERVABILITY_TRACER_NAME = \"agui-tracer\";\nexport const OBSERVABILITY_SDK_NAME = \"observability\";\nexport const OBSERVABILITY_SDK_VERSION = \"0.1.0\";\n\n/**\n * Combined attribute namespace for internal use\n * Provides a single namespace for all OTEL attributes used internally.\n *\n * Combines OpenInference SemanticConventions with non-standard attributes\n */\nexport const OtelSpanAttributes = {\n // OpenInference - re-export all standard conventions\n ...SemanticConventions,\n\n // Trace attributes (non-standard)\n TRACE_NAME: \"trace.name\",\n TRACE_TAGS: \"trace.tags\",\n TRACE_PUBLIC: \"trace.public\",\n TRACE_METADATA: \"trace.metadata\",\n TRACE_INPUT: \"trace.input\",\n TRACE_OUTPUT: \"trace.output\",\n\n // Observation attributes (non-standard)\n OBSERVATION_TYPE: \"observation.type\",\n OBSERVATION_LEVEL: \"observation.level\",\n OBSERVATION_STATUS_MESSAGE: \"observation.status_message\",\n OBSERVATION_INPUT: \"observation.input\",\n OBSERVATION_OUTPUT: \"observation.output\",\n OBSERVATION_METADATA: \"observation.metadata\",\n\n // LLM-specific (non-standard)\n LLM_COMPLETION_START_TIME: \"llm.completion_start_time\",\n LLM_MODEL_PARAMETERS: \"llm.model_parameters\",\n LLM_USAGE_DETAILS: \"llm.usage_details\",\n LLM_COST_DETAILS: \"llm.cost_details\",\n\n // Retriever-specific (non-standard)\n RETRIEVER_NAME: \"retriever.name\",\n RETRIEVER_QUERY: \"retriever.query\",\n RETRIEVER_INDEX_ID: \"retriever.index_id\",\n RETRIEVER_TOP_K: \"retriever.top_k\",\n\n // General (non-standard)\n ENVIRONMENT: \"environment\",\n RELEASE: \"release\",\n VERSION: \"version\",\n} as const;\n\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAYA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAfP,IAyBa,2BACA,wBACA,2BAQA;AAnCb;AAAA;AAAA;AAyBO,IAAM,4BAA4B;AAClC,IAAM,yBAAyB;AAC/B,IAAM,4BAA4B;AAQlC,IAAM,qBAAqB;AAAA;AAAA,MAEhC,GAAG;AAAA;AAAA,MAGH,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,cAAc;AAAA;AAAA,MAGd,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,4BAA4B;AAAA,MAC5B,mBAAmB;AAAA,MACnB,oBAAoB;AAAA,MACpB,sBAAsB;AAAA;AAAA,MAGtB,2BAA2B;AAAA,MAC3B,sBAAsB;AAAA,MACtB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA;AAAA,MAGlB,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,oBAAoB;AAAA,MACpB,iBAAiB;AAAA;AAAA,MAGjB,aAAa;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAAA;AAAA;","names":[]}
|
|
@@ -1,57 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
|
+
OBSERVABILITY_SDK_NAME,
|
|
3
|
+
OBSERVABILITY_SDK_VERSION,
|
|
4
|
+
OpenInferenceSpanKind,
|
|
5
|
+
OtelSpanAttributes,
|
|
2
6
|
__esm,
|
|
3
7
|
__export,
|
|
4
|
-
__toCommonJS
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// src/core/constants.ts
|
|
8
|
-
import {
|
|
9
|
-
SemanticConventions,
|
|
10
|
-
OpenInferenceSpanKind
|
|
11
|
-
} from "@arizeai/openinference-semantic-conventions";
|
|
12
|
-
var OBSERVABILITY_SDK_NAME, OBSERVABILITY_SDK_VERSION, OtelSpanAttributes;
|
|
13
|
-
var init_constants = __esm({
|
|
14
|
-
"src/core/constants.ts"() {
|
|
15
|
-
"use strict";
|
|
16
|
-
OBSERVABILITY_SDK_NAME = "observability";
|
|
17
|
-
OBSERVABILITY_SDK_VERSION = "0.1.0";
|
|
18
|
-
OtelSpanAttributes = {
|
|
19
|
-
// OpenInference - re-export all standard conventions
|
|
20
|
-
...SemanticConventions,
|
|
21
|
-
// Trace attributes (non-standard)
|
|
22
|
-
TRACE_NAME: "trace.name",
|
|
23
|
-
TRACE_TAGS: "trace.tags",
|
|
24
|
-
TRACE_PUBLIC: "trace.public",
|
|
25
|
-
TRACE_METADATA: "trace.metadata",
|
|
26
|
-
TRACE_INPUT: "trace.input",
|
|
27
|
-
TRACE_OUTPUT: "trace.output",
|
|
28
|
-
// Observation attributes (non-standard)
|
|
29
|
-
OBSERVATION_TYPE: "observation.type",
|
|
30
|
-
OBSERVATION_LEVEL: "observation.level",
|
|
31
|
-
OBSERVATION_STATUS_MESSAGE: "observation.status_message",
|
|
32
|
-
OBSERVATION_INPUT: "observation.input",
|
|
33
|
-
OBSERVATION_OUTPUT: "observation.output",
|
|
34
|
-
OBSERVATION_METADATA: "observation.metadata",
|
|
35
|
-
// LLM-specific (non-standard)
|
|
36
|
-
LLM_COMPLETION_START_TIME: "llm.completion_start_time",
|
|
37
|
-
LLM_MODEL_PARAMETERS: "llm.model_parameters",
|
|
38
|
-
LLM_USAGE_DETAILS: "llm.usage_details",
|
|
39
|
-
LLM_COST_DETAILS: "llm.cost_details",
|
|
40
|
-
// Retriever-specific (non-standard)
|
|
41
|
-
RETRIEVER_NAME: "retriever.name",
|
|
42
|
-
RETRIEVER_QUERY: "retriever.query",
|
|
43
|
-
RETRIEVER_INDEX_ID: "retriever.index_id",
|
|
44
|
-
RETRIEVER_TOP_K: "retriever.top_k",
|
|
45
|
-
// General (non-standard)
|
|
46
|
-
ENVIRONMENT: "environment",
|
|
47
|
-
RELEASE: "release",
|
|
48
|
-
VERSION: "version"
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
});
|
|
8
|
+
__toCommonJS,
|
|
9
|
+
init_constants
|
|
10
|
+
} from "./chunk-PJ5HSKYS.mjs";
|
|
52
11
|
|
|
53
12
|
// src/core/attributes.ts
|
|
54
|
-
import { SemanticConventions
|
|
13
|
+
import { SemanticConventions } from "@arizeai/openinference-semantic-conventions";
|
|
55
14
|
function createTraceAttributes({
|
|
56
15
|
name,
|
|
57
16
|
userId,
|
|
@@ -98,23 +57,23 @@ function createObservationAttributes(type, attributes) {
|
|
|
98
57
|
} = attributes;
|
|
99
58
|
const spanKind = OpenInferenceSpanKind[type.toUpperCase()] || "CHAIN";
|
|
100
59
|
const otelAttributes = {
|
|
101
|
-
[
|
|
60
|
+
[SemanticConventions.OPENINFERENCE_SPAN_KIND]: spanKind,
|
|
102
61
|
[OtelSpanAttributes.OBSERVATION_TYPE]: type,
|
|
103
62
|
[OtelSpanAttributes.OBSERVATION_LEVEL]: level,
|
|
104
63
|
[OtelSpanAttributes.OBSERVATION_STATUS_MESSAGE]: statusMessage,
|
|
105
64
|
[OtelSpanAttributes.VERSION]: version,
|
|
106
65
|
// Use OpenInference input.value convention
|
|
107
|
-
[
|
|
66
|
+
[SemanticConventions.INPUT_VALUE]: _serialize(input),
|
|
108
67
|
// Also set observation.input for compatibility
|
|
109
68
|
[OtelSpanAttributes.OBSERVATION_INPUT]: _serialize(input),
|
|
110
69
|
// Use OpenInference output.value convention
|
|
111
|
-
[
|
|
70
|
+
[SemanticConventions.OUTPUT_VALUE]: _serialize(output),
|
|
112
71
|
// Also set observation.output for compatibility
|
|
113
72
|
[OtelSpanAttributes.OBSERVATION_OUTPUT]: _serialize(output)
|
|
114
73
|
};
|
|
115
74
|
if (type === "llm") {
|
|
116
75
|
if (model) {
|
|
117
|
-
otelAttributes[
|
|
76
|
+
otelAttributes[SemanticConventions.LLM_MODEL_NAME] = model;
|
|
118
77
|
}
|
|
119
78
|
const system = attributes?.system;
|
|
120
79
|
const provider = attributes?.provider;
|
|
@@ -123,26 +82,26 @@ function createObservationAttributes(type, attributes) {
|
|
|
123
82
|
const inputMimeType = attributes?.inputMimeType;
|
|
124
83
|
const outputMimeType = attributes?.outputMimeType;
|
|
125
84
|
if (system !== void 0) {
|
|
126
|
-
otelAttributes[
|
|
85
|
+
otelAttributes[SemanticConventions.LLM_SYSTEM] = String(system);
|
|
127
86
|
}
|
|
128
87
|
if (provider !== void 0) {
|
|
129
|
-
otelAttributes[
|
|
88
|
+
otelAttributes[SemanticConventions.LLM_PROVIDER] = String(provider);
|
|
130
89
|
}
|
|
131
90
|
if (modelParameters) {
|
|
132
|
-
otelAttributes[
|
|
91
|
+
otelAttributes[SemanticConventions.LLM_INVOCATION_PARAMETERS] = _serialize(modelParameters);
|
|
133
92
|
otelAttributes[OtelSpanAttributes.LLM_MODEL_PARAMETERS] = _serialize(modelParameters);
|
|
134
93
|
}
|
|
135
94
|
if (usageDetails) {
|
|
136
95
|
if (typeof usageDetails === "object") {
|
|
137
96
|
const usage = usageDetails;
|
|
138
97
|
if (usage.promptTokens !== void 0) {
|
|
139
|
-
otelAttributes[
|
|
98
|
+
otelAttributes[SemanticConventions.LLM_TOKEN_COUNT_PROMPT] = usage.promptTokens;
|
|
140
99
|
}
|
|
141
100
|
if (usage.completionTokens !== void 0) {
|
|
142
|
-
otelAttributes[
|
|
101
|
+
otelAttributes[SemanticConventions.LLM_TOKEN_COUNT_COMPLETION] = usage.completionTokens;
|
|
143
102
|
}
|
|
144
103
|
if (usage.totalTokens !== void 0) {
|
|
145
|
-
otelAttributes[
|
|
104
|
+
otelAttributes[SemanticConventions.LLM_TOKEN_COUNT_TOTAL] = usage.totalTokens;
|
|
146
105
|
}
|
|
147
106
|
}
|
|
148
107
|
otelAttributes[OtelSpanAttributes.LLM_USAGE_DETAILS] = _serialize(usageDetails);
|
|
@@ -159,18 +118,18 @@ function createObservationAttributes(type, attributes) {
|
|
|
159
118
|
Object.assign(otelAttributes, messageAttrs);
|
|
160
119
|
}
|
|
161
120
|
if (inputMimeType !== void 0) {
|
|
162
|
-
otelAttributes[
|
|
121
|
+
otelAttributes[SemanticConventions.INPUT_MIME_TYPE] = String(inputMimeType);
|
|
163
122
|
}
|
|
164
123
|
if (outputMimeType !== void 0) {
|
|
165
|
-
otelAttributes[
|
|
124
|
+
otelAttributes[SemanticConventions.OUTPUT_MIME_TYPE] = String(outputMimeType);
|
|
166
125
|
}
|
|
167
126
|
}
|
|
168
127
|
if (type === "embedding") {
|
|
169
128
|
if (model) {
|
|
170
|
-
otelAttributes[
|
|
129
|
+
otelAttributes[SemanticConventions.EMBEDDING_MODEL_NAME] = model;
|
|
171
130
|
}
|
|
172
131
|
if (modelParameters) {
|
|
173
|
-
otelAttributes[
|
|
132
|
+
otelAttributes[SemanticConventions.LLM_INVOCATION_PARAMETERS] = _serialize(modelParameters);
|
|
174
133
|
}
|
|
175
134
|
}
|
|
176
135
|
if (type === "tool") {
|
|
@@ -179,13 +138,13 @@ function createObservationAttributes(type, attributes) {
|
|
|
179
138
|
const toolParameters = attributes?.toolParameters;
|
|
180
139
|
const toolCall = attributes?.toolCall;
|
|
181
140
|
if (toolName !== void 0) {
|
|
182
|
-
otelAttributes[
|
|
141
|
+
otelAttributes[SemanticConventions.TOOL_NAME] = String(toolName);
|
|
183
142
|
}
|
|
184
143
|
if (toolDescription !== void 0) {
|
|
185
|
-
otelAttributes[
|
|
144
|
+
otelAttributes[SemanticConventions.TOOL_DESCRIPTION] = String(toolDescription);
|
|
186
145
|
}
|
|
187
146
|
if (toolParameters !== void 0) {
|
|
188
|
-
otelAttributes[
|
|
147
|
+
otelAttributes[SemanticConventions.TOOL_PARAMETERS] = _serialize(toolParameters);
|
|
189
148
|
}
|
|
190
149
|
if (toolCall !== void 0 && typeof toolCall === "object") {
|
|
191
150
|
const toolCallAttrs = _flattenToolCall(toolCall);
|
|
@@ -195,7 +154,7 @@ function createObservationAttributes(type, attributes) {
|
|
|
195
154
|
if (type === "agent") {
|
|
196
155
|
const agentName = attributes?.agentName;
|
|
197
156
|
if (agentName !== void 0) {
|
|
198
|
-
otelAttributes[
|
|
157
|
+
otelAttributes[SemanticConventions.AGENT_NAME] = String(agentName);
|
|
199
158
|
}
|
|
200
159
|
}
|
|
201
160
|
if (type === "retriever") {
|
|
@@ -211,7 +170,7 @@ function createObservationAttributes(type, attributes) {
|
|
|
211
170
|
}
|
|
212
171
|
const metadataAttrs = _flattenAndSerializeMetadata(
|
|
213
172
|
metadata,
|
|
214
|
-
|
|
173
|
+
SemanticConventions.METADATA
|
|
215
174
|
);
|
|
216
175
|
Object.assign(otelAttributes, metadataAttrs);
|
|
217
176
|
const obsetvabilityMetadataAttrs = _flattenAndSerializeMetadata(
|
|
@@ -780,7 +739,7 @@ __export(src_exports, {
|
|
|
780
739
|
validateTraceContext: () => validateTraceContext,
|
|
781
740
|
validateTraceId: () => validateTraceId
|
|
782
741
|
});
|
|
783
|
-
import { trace as trace2, context as context2, SpanStatusCode as SpanStatusCode2 } from "@opentelemetry/api";
|
|
742
|
+
import { trace as trace2, context as context2, SpanStatusCode as SpanStatusCode2, INVALID_SPAN_CONTEXT } from "@opentelemetry/api";
|
|
784
743
|
function createOtelSpan(params) {
|
|
785
744
|
return getTracer().startSpan(
|
|
786
745
|
params.name,
|
|
@@ -795,63 +754,98 @@ function createParentContext(parentSpanContext) {
|
|
|
795
754
|
if (!parentSpanContext) return;
|
|
796
755
|
return trace2.setSpanContext(context2.active(), parentSpanContext);
|
|
797
756
|
}
|
|
798
|
-
function
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
});
|
|
757
|
+
function createNoopSpan() {
|
|
758
|
+
return trace2.wrapSpanContext(INVALID_SPAN_CONTEXT);
|
|
759
|
+
}
|
|
760
|
+
function createNoopObservation(asType = "chain") {
|
|
761
|
+
const otelSpan = createNoopSpan();
|
|
804
762
|
switch (asType) {
|
|
805
763
|
case "llm":
|
|
806
|
-
return new ObservationLLM({
|
|
807
|
-
otelSpan,
|
|
808
|
-
attributes
|
|
809
|
-
});
|
|
764
|
+
return new ObservationLLM({ otelSpan });
|
|
810
765
|
case "embedding":
|
|
811
|
-
return new ObservationEmbedding({
|
|
812
|
-
otelSpan,
|
|
813
|
-
attributes
|
|
814
|
-
});
|
|
766
|
+
return new ObservationEmbedding({ otelSpan });
|
|
815
767
|
case "agent":
|
|
816
|
-
return new ObservationAgent({
|
|
817
|
-
otelSpan,
|
|
818
|
-
attributes
|
|
819
|
-
});
|
|
768
|
+
return new ObservationAgent({ otelSpan });
|
|
820
769
|
case "tool":
|
|
821
|
-
return new ObservationTool({
|
|
822
|
-
otelSpan,
|
|
823
|
-
attributes
|
|
824
|
-
});
|
|
825
|
-
case "chain":
|
|
826
|
-
return new ObservationChain({
|
|
827
|
-
otelSpan,
|
|
828
|
-
attributes
|
|
829
|
-
});
|
|
770
|
+
return new ObservationTool({ otelSpan });
|
|
830
771
|
case "retriever":
|
|
831
|
-
return new ObservationRetriever({
|
|
832
|
-
otelSpan,
|
|
833
|
-
attributes
|
|
834
|
-
});
|
|
772
|
+
return new ObservationRetriever({ otelSpan });
|
|
835
773
|
case "reranker":
|
|
836
|
-
return new ObservationReranker({
|
|
837
|
-
otelSpan,
|
|
838
|
-
attributes
|
|
839
|
-
});
|
|
774
|
+
return new ObservationReranker({ otelSpan });
|
|
840
775
|
case "evaluator":
|
|
841
|
-
return new ObservationEvaluator({
|
|
842
|
-
otelSpan,
|
|
843
|
-
attributes
|
|
844
|
-
});
|
|
776
|
+
return new ObservationEvaluator({ otelSpan });
|
|
845
777
|
case "guardrail":
|
|
846
|
-
return new ObservationGuardrail({
|
|
847
|
-
|
|
848
|
-
attributes
|
|
849
|
-
});
|
|
778
|
+
return new ObservationGuardrail({ otelSpan });
|
|
779
|
+
case "chain":
|
|
850
780
|
default:
|
|
851
|
-
return new ObservationChain({
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
781
|
+
return new ObservationChain({ otelSpan });
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
function startObservation(name, attributes, options) {
|
|
785
|
+
const { asType = "chain", ...observationOptions } = options || {};
|
|
786
|
+
try {
|
|
787
|
+
const otelSpan = createOtelSpan({
|
|
788
|
+
name,
|
|
789
|
+
...observationOptions
|
|
790
|
+
});
|
|
791
|
+
switch (asType) {
|
|
792
|
+
case "llm":
|
|
793
|
+
return new ObservationLLM({
|
|
794
|
+
otelSpan,
|
|
795
|
+
attributes
|
|
796
|
+
});
|
|
797
|
+
case "embedding":
|
|
798
|
+
return new ObservationEmbedding({
|
|
799
|
+
otelSpan,
|
|
800
|
+
attributes
|
|
801
|
+
});
|
|
802
|
+
case "agent":
|
|
803
|
+
return new ObservationAgent({
|
|
804
|
+
otelSpan,
|
|
805
|
+
attributes
|
|
806
|
+
});
|
|
807
|
+
case "tool":
|
|
808
|
+
return new ObservationTool({
|
|
809
|
+
otelSpan,
|
|
810
|
+
attributes
|
|
811
|
+
});
|
|
812
|
+
case "chain":
|
|
813
|
+
return new ObservationChain({
|
|
814
|
+
otelSpan,
|
|
815
|
+
attributes
|
|
816
|
+
});
|
|
817
|
+
case "retriever":
|
|
818
|
+
return new ObservationRetriever({
|
|
819
|
+
otelSpan,
|
|
820
|
+
attributes
|
|
821
|
+
});
|
|
822
|
+
case "reranker":
|
|
823
|
+
return new ObservationReranker({
|
|
824
|
+
otelSpan,
|
|
825
|
+
attributes
|
|
826
|
+
});
|
|
827
|
+
case "evaluator":
|
|
828
|
+
return new ObservationEvaluator({
|
|
829
|
+
otelSpan,
|
|
830
|
+
attributes
|
|
831
|
+
});
|
|
832
|
+
case "guardrail":
|
|
833
|
+
return new ObservationGuardrail({
|
|
834
|
+
otelSpan,
|
|
835
|
+
attributes
|
|
836
|
+
});
|
|
837
|
+
default:
|
|
838
|
+
return new ObservationChain({
|
|
839
|
+
otelSpan,
|
|
840
|
+
attributes
|
|
841
|
+
});
|
|
842
|
+
}
|
|
843
|
+
} catch (err) {
|
|
844
|
+
console.warn(
|
|
845
|
+
`[Observability] Failed to create observation "${name}":`,
|
|
846
|
+
err instanceof Error ? err.message : err
|
|
847
|
+
);
|
|
848
|
+
return createNoopObservation(asType);
|
|
855
849
|
}
|
|
856
850
|
}
|
|
857
851
|
function updateActiveTrace(attributes) {
|
|
@@ -892,67 +886,81 @@ function wrapPromise(promise, span, endOnExit) {
|
|
|
892
886
|
}
|
|
893
887
|
function startActiveObservation(name, fn, options) {
|
|
894
888
|
const { asType = "chain", endOnExit, ...observationOptions } = options || {};
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
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
|
-
|
|
889
|
+
let fnCalled = false;
|
|
890
|
+
try {
|
|
891
|
+
return getTracer().startActiveSpan(
|
|
892
|
+
name,
|
|
893
|
+
{ startTime: observationOptions?.startTime },
|
|
894
|
+
createParentContext(observationOptions?.parentSpanContext) ?? context2.active(),
|
|
895
|
+
(span) => {
|
|
896
|
+
try {
|
|
897
|
+
let observation;
|
|
898
|
+
switch (asType) {
|
|
899
|
+
case "llm":
|
|
900
|
+
observation = new ObservationLLM({ otelSpan: span });
|
|
901
|
+
break;
|
|
902
|
+
case "embedding":
|
|
903
|
+
observation = new ObservationEmbedding({ otelSpan: span });
|
|
904
|
+
break;
|
|
905
|
+
case "agent":
|
|
906
|
+
observation = new ObservationAgent({ otelSpan: span });
|
|
907
|
+
break;
|
|
908
|
+
case "tool":
|
|
909
|
+
observation = new ObservationTool({ otelSpan: span });
|
|
910
|
+
break;
|
|
911
|
+
case "retriever":
|
|
912
|
+
observation = new ObservationRetriever({ otelSpan: span });
|
|
913
|
+
break;
|
|
914
|
+
case "reranker":
|
|
915
|
+
observation = new ObservationReranker({ otelSpan: span });
|
|
916
|
+
break;
|
|
917
|
+
case "evaluator":
|
|
918
|
+
observation = new ObservationEvaluator({ otelSpan: span });
|
|
919
|
+
break;
|
|
920
|
+
case "guardrail":
|
|
921
|
+
observation = new ObservationGuardrail({ otelSpan: span });
|
|
922
|
+
break;
|
|
923
|
+
case "chain":
|
|
924
|
+
default:
|
|
925
|
+
observation = new ObservationChain({ otelSpan: span });
|
|
926
|
+
}
|
|
927
|
+
fnCalled = true;
|
|
928
|
+
const result = fn(observation);
|
|
929
|
+
if (result instanceof Promise) {
|
|
930
|
+
return wrapPromise(
|
|
931
|
+
result,
|
|
932
|
+
span,
|
|
933
|
+
endOnExit
|
|
934
|
+
);
|
|
935
|
+
} else {
|
|
936
|
+
if (endOnExit !== false) {
|
|
937
|
+
span.end();
|
|
938
|
+
}
|
|
939
|
+
return result;
|
|
940
|
+
}
|
|
941
|
+
} catch (err) {
|
|
942
|
+
span.setStatus({
|
|
943
|
+
code: SpanStatusCode2.ERROR,
|
|
944
|
+
message: err instanceof Error ? err.message : "Unknown error"
|
|
945
|
+
});
|
|
939
946
|
if (endOnExit !== false) {
|
|
940
947
|
span.end();
|
|
941
948
|
}
|
|
942
|
-
|
|
943
|
-
}
|
|
944
|
-
} catch (err) {
|
|
945
|
-
span.setStatus({
|
|
946
|
-
code: SpanStatusCode2.ERROR,
|
|
947
|
-
message: err instanceof Error ? err.message : "Unknown error"
|
|
948
|
-
});
|
|
949
|
-
if (endOnExit !== false) {
|
|
950
|
-
span.end();
|
|
949
|
+
throw err;
|
|
951
950
|
}
|
|
952
|
-
throw err;
|
|
953
951
|
}
|
|
952
|
+
);
|
|
953
|
+
} catch (err) {
|
|
954
|
+
if (fnCalled) {
|
|
955
|
+
throw err;
|
|
954
956
|
}
|
|
955
|
-
|
|
957
|
+
console.warn(
|
|
958
|
+
`[Observability] startActiveObservation "${name}" failed, falling back to no-op:`,
|
|
959
|
+
err instanceof Error ? err.message : err
|
|
960
|
+
);
|
|
961
|
+
const noopObservation = createNoopObservation(asType);
|
|
962
|
+
return fn(noopObservation);
|
|
963
|
+
}
|
|
956
964
|
}
|
|
957
965
|
function updateActiveObservation(attributes) {
|
|
958
966
|
const span = trace2.getActiveSpan();
|
|
@@ -978,41 +986,59 @@ function observe(fn, options = {}) {
|
|
|
978
986
|
} = options;
|
|
979
987
|
const wrappedFunction = function(...args) {
|
|
980
988
|
const name = fn.name || "anonymous-function";
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
inputData ?
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
const result = context2.with(activeContext, () => fn.apply(this, args));
|
|
992
|
-
if (result instanceof Promise) {
|
|
993
|
-
return result.then(
|
|
994
|
-
(value) => {
|
|
995
|
-
if (captureOutput) {
|
|
996
|
-
observation.update({ output: value });
|
|
997
|
-
}
|
|
998
|
-
observation.end();
|
|
999
|
-
return value;
|
|
1000
|
-
},
|
|
1001
|
-
(err) => {
|
|
1002
|
-
observation.update({
|
|
1003
|
-
level: "ERROR",
|
|
1004
|
-
statusMessage: err instanceof Error ? err.message : "Unknown error"
|
|
1005
|
-
});
|
|
1006
|
-
observation.end();
|
|
1007
|
-
throw err;
|
|
989
|
+
let observation;
|
|
990
|
+
let fnCalled = false;
|
|
991
|
+
try {
|
|
992
|
+
const inputData = captureInput ? _captureArguments(args) : void 0;
|
|
993
|
+
observation = startObservation(
|
|
994
|
+
name,
|
|
995
|
+
inputData ? { input: inputData } : {},
|
|
996
|
+
{
|
|
997
|
+
...observationOptions,
|
|
998
|
+
asType
|
|
1008
999
|
}
|
|
1009
1000
|
);
|
|
1001
|
+
const activeContext = trace2.setSpan(context2.active(), observation.otelSpan);
|
|
1002
|
+
fnCalled = true;
|
|
1003
|
+
const result = context2.with(activeContext, () => fn.apply(this, args));
|
|
1004
|
+
if (result instanceof Promise) {
|
|
1005
|
+
return result.then(
|
|
1006
|
+
(value) => {
|
|
1007
|
+
if (captureOutput) {
|
|
1008
|
+
observation.update({ output: value });
|
|
1009
|
+
}
|
|
1010
|
+
observation.end();
|
|
1011
|
+
return value;
|
|
1012
|
+
},
|
|
1013
|
+
(err) => {
|
|
1014
|
+
observation.update({
|
|
1015
|
+
level: "ERROR",
|
|
1016
|
+
statusMessage: err instanceof Error ? err.message : "Unknown error"
|
|
1017
|
+
});
|
|
1018
|
+
observation.end();
|
|
1019
|
+
throw err;
|
|
1020
|
+
}
|
|
1021
|
+
);
|
|
1022
|
+
}
|
|
1023
|
+
if (captureOutput) {
|
|
1024
|
+
observation.update({ output: result });
|
|
1025
|
+
}
|
|
1026
|
+
observation.end();
|
|
1027
|
+
return result;
|
|
1028
|
+
} catch (err) {
|
|
1029
|
+
if (fnCalled) {
|
|
1030
|
+
throw err;
|
|
1031
|
+
}
|
|
1032
|
+
console.warn(
|
|
1033
|
+
`[Observability] observe "${name}" failed, falling back to direct call:`,
|
|
1034
|
+
err instanceof Error ? err.message : err
|
|
1035
|
+
);
|
|
1036
|
+
try {
|
|
1037
|
+
observation?.end();
|
|
1038
|
+
} catch {
|
|
1039
|
+
}
|
|
1040
|
+
return fn.apply(this, args);
|
|
1010
1041
|
}
|
|
1011
|
-
if (captureOutput) {
|
|
1012
|
-
observation.update({ output: result });
|
|
1013
|
-
}
|
|
1014
|
-
observation.end();
|
|
1015
|
-
return result;
|
|
1016
1042
|
};
|
|
1017
1043
|
Object.defineProperty(wrappedFunction, "name", { value: fn.name });
|
|
1018
1044
|
Object.defineProperty(wrappedFunction, "length", { value: fn.length });
|
|
@@ -1059,4 +1085,4 @@ export {
|
|
|
1059
1085
|
observe,
|
|
1060
1086
|
init_src
|
|
1061
1087
|
};
|
|
1062
|
-
//# sourceMappingURL=chunk-
|
|
1088
|
+
//# sourceMappingURL=chunk-Q5P7VQEQ.mjs.map
|