@ai-sdk/otel 1.0.127 → 1.0.128
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/CHANGELOG.md +15 -0
- package/dist/index.d.ts +33 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +106 -65
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/legacy-open-telemetry.ts +79 -38
- package/src/open-telemetry.ts +93 -47
- package/src/supplemental-attributes.ts +9 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @ai-sdk/otel
|
|
2
2
|
|
|
3
|
+
## 1.0.128
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 2959d35: feat: rename `evaluate` to `decide`
|
|
8
|
+
- 51e1763: fix(otel): mark span status as `ERROR` when finish reason is `error`
|
|
9
|
+
- Updated dependencies [0fe8c67]
|
|
10
|
+
- Updated dependencies [2959d35]
|
|
11
|
+
- Updated dependencies [0ca1ab9]
|
|
12
|
+
- Updated dependencies [d6b42fd]
|
|
13
|
+
- Updated dependencies [ed6e72d]
|
|
14
|
+
- Updated dependencies [2136151]
|
|
15
|
+
- ai@7.0.128
|
|
16
|
+
- @ai-sdk/provider@4.0.22
|
|
17
|
+
|
|
3
18
|
## 1.0.127
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Attributes, Tracer } from "@opentelemetry/api";
|
|
2
|
-
import { EmbedEndEvent, EmbedStartEvent, EmbeddingModelCallEndEvent, EmbeddingModelCallStartEvent,
|
|
2
|
+
import { EmbedEndEvent, EmbedStartEvent, EmbeddingModelCallEndEvent, EmbeddingModelCallStartEvent, Experimental_DecideEndEvent, Experimental_DecideStartEvent, Experimental_DecisionModelCallEndEvent, Experimental_DecisionModelCallStartEvent, Experimental_StreamTranscriptionEndEvent, Experimental_StreamTranscriptionStartEvent, GenerateObjectEndEvent, GenerateObjectStartEvent, GenerateObjectStepEndEvent, GenerateObjectStepStartEvent, GenerateSpeechEndEvent, GenerateSpeechStartEvent, GenerateTextAbortEvent, GenerateTextEndEvent, GenerateTextStartEvent, GenerateTextStepEndEvent, GenerateTextStepStartEvent, InferTelemetryEvent, LanguageModelCallEndEvent, LanguageModelCallStartEvent, Output, RerankEndEvent, RerankStartEvent, RerankingModelCallEndEvent, RerankingModelCallStartEvent, Telemetry, ToolExecutionEndEvent, ToolExecutionStartEvent, ToolSet, TranscriptionEndEvent, TranscriptionStartEvent } from "ai";
|
|
3
3
|
import { APICallError, LanguageModelV4Prompt } from "@ai-sdk/provider";
|
|
4
4
|
//#region src/supplemental-attributes.d.ts
|
|
5
|
-
type OpenTelemetrySpanType = 'operation' | 'step' | 'languageModel' | 'tool' | 'embedding' | 'reranking' | '
|
|
5
|
+
type OpenTelemetrySpanType = 'operation' | 'step' | 'languageModel' | 'tool' | 'embedding' | 'reranking' | 'experimental_decision';
|
|
6
6
|
type EnrichSpan = (options: {
|
|
7
7
|
spanType: OpenTelemetrySpanType;
|
|
8
8
|
operationId: string;
|
|
@@ -36,8 +36,10 @@ type OpenTelemetryOptions = {
|
|
|
36
36
|
*/
|
|
37
37
|
reranking?: boolean;
|
|
38
38
|
/**
|
|
39
|
-
* Emit
|
|
39
|
+
* Emit decision state, questions, and answers.
|
|
40
40
|
*/
|
|
41
|
+
experimental_decision?: boolean;
|
|
42
|
+
/** @deprecated Use `experimental_decision` instead. */
|
|
41
43
|
experimental_evaluation?: boolean;
|
|
42
44
|
/**
|
|
43
45
|
* Emit runtime context values.
|
|
@@ -113,12 +115,20 @@ export declare class OpenTelemetry implements Telemetry {
|
|
|
113
115
|
private onRerankOperationEnd;
|
|
114
116
|
onRerankStart(event: RerankingModelCallStartEvent): void;
|
|
115
117
|
onRerankEnd(event: RerankingModelCallEndEvent): void;
|
|
116
|
-
private
|
|
117
|
-
private
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
118
|
+
private onDecideOperationStart;
|
|
119
|
+
private onDecideOperationEnd;
|
|
120
|
+
experimental_onDecideStart(event: InferTelemetryEvent<Experimental_DecideStartEvent>): void;
|
|
121
|
+
experimental_onDecideEnd(event: Experimental_DecideEndEvent): void;
|
|
122
|
+
experimental_onDecisionModelCallStart(event: Experimental_DecisionModelCallStartEvent): void;
|
|
123
|
+
experimental_onDecisionModelCallEnd(event: Experimental_DecisionModelCallEndEvent): void;
|
|
124
|
+
/** @deprecated Use `experimental_onDecideStart` instead. */
|
|
125
|
+
experimental_onEvaluateStart(event: InferTelemetryEvent<Experimental_DecideStartEvent>): void;
|
|
126
|
+
/** @deprecated Use `experimental_onDecideEnd` instead. */
|
|
127
|
+
experimental_onEvaluateEnd(event: Experimental_DecideEndEvent): void;
|
|
128
|
+
/** @deprecated Use `experimental_onDecisionModelCallStart` instead. */
|
|
129
|
+
experimental_onEvaluationModelCallStart(event: InferTelemetryEvent<Experimental_DecisionModelCallStartEvent>): void;
|
|
130
|
+
/** @deprecated Use `experimental_onDecisionModelCallEnd` instead. */
|
|
131
|
+
experimental_onEvaluationModelCallEnd(event: InferTelemetryEvent<Experimental_DecisionModelCallEndEvent>): void;
|
|
122
132
|
onAbort(event: GenerateTextAbortEvent<ToolSet>): void;
|
|
123
133
|
onError(error: unknown): void;
|
|
124
134
|
}
|
|
@@ -194,12 +204,20 @@ export declare class LegacyOpenTelemetry implements Telemetry {
|
|
|
194
204
|
private onRerankOperationEnd;
|
|
195
205
|
onRerankStart(event: RerankingModelCallStartEvent): void;
|
|
196
206
|
onRerankEnd(event: RerankingModelCallEndEvent): void;
|
|
197
|
-
private
|
|
198
|
-
private
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
207
|
+
private onDecideOperationStart;
|
|
208
|
+
private onDecideOperationEnd;
|
|
209
|
+
experimental_onDecideStart(event: InferTelemetryEvent<Experimental_DecideStartEvent>): void;
|
|
210
|
+
experimental_onDecideEnd(event: Experimental_DecideEndEvent): void;
|
|
211
|
+
experimental_onDecisionModelCallStart(event: Experimental_DecisionModelCallStartEvent): void;
|
|
212
|
+
experimental_onDecisionModelCallEnd(event: Experimental_DecisionModelCallEndEvent): void;
|
|
213
|
+
/** @deprecated Use `experimental_onDecideStart` instead. */
|
|
214
|
+
experimental_onEvaluateStart(event: InferTelemetryEvent<Experimental_DecideStartEvent>): void;
|
|
215
|
+
/** @deprecated Use `experimental_onDecideEnd` instead. */
|
|
216
|
+
experimental_onEvaluateEnd(event: Experimental_DecideEndEvent): void;
|
|
217
|
+
/** @deprecated Use `experimental_onDecisionModelCallStart` instead. */
|
|
218
|
+
experimental_onEvaluationModelCallStart(event: InferTelemetryEvent<Experimental_DecisionModelCallStartEvent>): void;
|
|
219
|
+
/** @deprecated Use `experimental_onDecisionModelCallEnd` instead. */
|
|
220
|
+
experimental_onEvaluationModelCallEnd(event: InferTelemetryEvent<Experimental_DecisionModelCallEndEvent>): void;
|
|
203
221
|
onAbort(event: GenerateTextAbortEvent<ToolSet>): void;
|
|
204
222
|
onError(error: unknown): void;
|
|
205
223
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["OtelStepStartEvent","StreamTranscriptionStartEvent","StreamTranscriptionEndEvent","
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["OtelStepStartEvent","StreamTranscriptionStartEvent","StreamTranscriptionEndEvent","DecideStartEvent","DecideEndEvent","DecisionModelCallStartEvent","DecisionModelCallEndEvent","AISDKContext","StreamTranscriptionStartEvent","StreamTranscriptionEndEvent","DecideStartEvent","DecideEndEvent","DecisionModelCallStartEvent","DecisionModelCallEndEvent"],"sources":["../src/supplemental-attributes.ts","../src/open-telemetry.ts","../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v4/core/schemas.d.cts","../../provider-utils/dist/index.d.ts","../src/legacy-open-telemetry.ts"],"x_google_ignoreList":[2],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -573,7 +573,7 @@ const disabledSupplementalAttributes = {
|
|
|
573
573
|
providerMetadata: false,
|
|
574
574
|
embedding: false,
|
|
575
575
|
reranking: false,
|
|
576
|
-
|
|
576
|
+
experimental_decision: false,
|
|
577
577
|
runtimeContext: false,
|
|
578
578
|
headers: false,
|
|
579
579
|
toolChoice: false,
|
|
@@ -586,7 +586,7 @@ function normalizeSupplementalAttributes(options) {
|
|
|
586
586
|
providerMetadata: options.providerMetadata ?? false,
|
|
587
587
|
embedding: options.embedding ?? false,
|
|
588
588
|
reranking: options.reranking ?? false,
|
|
589
|
-
|
|
589
|
+
experimental_decision: options.experimental_decision ?? options.experimental_evaluation ?? false,
|
|
590
590
|
runtimeContext: options.runtimeContext ?? false,
|
|
591
591
|
headers: options.headers ?? false,
|
|
592
592
|
toolChoice: options.toolChoice ?? false,
|
|
@@ -763,7 +763,7 @@ var OpenTelemetry = class {
|
|
|
763
763
|
inferenceContext: void 0,
|
|
764
764
|
embedSpans: /* @__PURE__ */ new Map(),
|
|
765
765
|
rerankSpan: void 0,
|
|
766
|
-
|
|
766
|
+
decisionSpan: void 0,
|
|
767
767
|
toolSpans: /* @__PURE__ */ new Map(),
|
|
768
768
|
settings: {},
|
|
769
769
|
provider: event.provider,
|
|
@@ -839,7 +839,7 @@ var OpenTelemetry = class {
|
|
|
839
839
|
inferenceContext: void 0,
|
|
840
840
|
embedSpans: /* @__PURE__ */ new Map(),
|
|
841
841
|
rerankSpan: void 0,
|
|
842
|
-
|
|
842
|
+
decisionSpan: void 0,
|
|
843
843
|
toolSpans: /* @__PURE__ */ new Map(),
|
|
844
844
|
settings,
|
|
845
845
|
provider: event.provider,
|
|
@@ -916,7 +916,7 @@ var OpenTelemetry = class {
|
|
|
916
916
|
inferenceContext: void 0,
|
|
917
917
|
embedSpans: /* @__PURE__ */ new Map(),
|
|
918
918
|
rerankSpan: void 0,
|
|
919
|
-
|
|
919
|
+
decisionSpan: void 0,
|
|
920
920
|
toolSpans: /* @__PURE__ */ new Map(),
|
|
921
921
|
settings,
|
|
922
922
|
provider: event.provider,
|
|
@@ -966,6 +966,7 @@ var OpenTelemetry = class {
|
|
|
966
966
|
onObjectStepEnd(event) {
|
|
967
967
|
const state = this.getCallState(event.callId);
|
|
968
968
|
if (!state?.inferenceSpan) return;
|
|
969
|
+
if (event.finishReason === "error") state.inferenceSpan.setStatus({ code: SpanStatusCode.ERROR });
|
|
969
970
|
const { telemetry } = state;
|
|
970
971
|
state.inferenceSpan.setAttributes(selectAttributes$1(telemetry, {
|
|
971
972
|
"gen_ai.response.finish_reasons": [event.finishReason],
|
|
@@ -1038,7 +1039,7 @@ var OpenTelemetry = class {
|
|
|
1038
1039
|
inferenceContext: void 0,
|
|
1039
1040
|
embedSpans: /* @__PURE__ */ new Map(),
|
|
1040
1041
|
rerankSpan: void 0,
|
|
1041
|
-
|
|
1042
|
+
decisionSpan: void 0,
|
|
1042
1043
|
toolSpans: /* @__PURE__ */ new Map(),
|
|
1043
1044
|
settings: { maxRetries: event.maxRetries },
|
|
1044
1045
|
provider: event.provider,
|
|
@@ -1111,6 +1112,7 @@ var OpenTelemetry = class {
|
|
|
1111
1112
|
onLanguageModelCallEnd(event) {
|
|
1112
1113
|
const state = this.getCallState(event.callId);
|
|
1113
1114
|
if (!state?.inferenceSpan) return;
|
|
1115
|
+
if (event.finishReason === "error") state.inferenceSpan.setStatus({ code: SpanStatusCode.ERROR });
|
|
1114
1116
|
const { telemetry } = state;
|
|
1115
1117
|
const providerName = mapProviderName(event.provider);
|
|
1116
1118
|
const toolDefinitions = [...state.inferenceToolDefinitions ?? []];
|
|
@@ -1232,6 +1234,7 @@ var OpenTelemetry = class {
|
|
|
1232
1234
|
onStepEnd(event) {
|
|
1233
1235
|
const state = this.getCallState(event.callId);
|
|
1234
1236
|
if (!state?.stepSpan) return;
|
|
1237
|
+
if (event.finishReason === "error") state.stepSpan.setStatus({ code: SpanStatusCode.ERROR });
|
|
1235
1238
|
const { telemetry } = state;
|
|
1236
1239
|
state.stepSpan.setAttributes(selectSupplementalAttributes(telemetry, this.supplementalAttributes, {
|
|
1237
1240
|
providerMetadata: { "ai.response.providerMetadata": event.providerMetadata ? JSON.stringify(event.providerMetadata) : void 0 },
|
|
@@ -1304,6 +1307,7 @@ var OpenTelemetry = class {
|
|
|
1304
1307
|
onGenerateEnd(event) {
|
|
1305
1308
|
const state = this.getCallState(event.callId);
|
|
1306
1309
|
if (!state?.rootSpan) return;
|
|
1310
|
+
if (event.finishReason === "error") state.rootSpan.setStatus({ code: SpanStatusCode.ERROR });
|
|
1307
1311
|
const { telemetry } = state;
|
|
1308
1312
|
state.rootSpan.setAttributes(selectAttributes$1(telemetry, {
|
|
1309
1313
|
"gen_ai.response.finish_reasons": [event.finishReason],
|
|
@@ -1330,6 +1334,7 @@ var OpenTelemetry = class {
|
|
|
1330
1334
|
onObjectOperationEnd(event) {
|
|
1331
1335
|
const state = this.getCallState(event.callId);
|
|
1332
1336
|
if (!state?.rootSpan) return;
|
|
1337
|
+
if (event.finishReason === "error") state.rootSpan.setStatus({ code: SpanStatusCode.ERROR });
|
|
1333
1338
|
const { telemetry } = state;
|
|
1334
1339
|
state.rootSpan.setAttributes(selectAttributes$1(telemetry, {
|
|
1335
1340
|
"gen_ai.response.finish_reasons": [event.finishReason],
|
|
@@ -1441,7 +1446,7 @@ var OpenTelemetry = class {
|
|
|
1441
1446
|
inferenceContext: void 0,
|
|
1442
1447
|
embedSpans: /* @__PURE__ */ new Map(),
|
|
1443
1448
|
rerankSpan: void 0,
|
|
1444
|
-
|
|
1449
|
+
decisionSpan: void 0,
|
|
1445
1450
|
toolSpans: /* @__PURE__ */ new Map(),
|
|
1446
1451
|
settings: { maxRetries: event.maxRetries },
|
|
1447
1452
|
provider: event.provider,
|
|
@@ -1495,7 +1500,7 @@ var OpenTelemetry = class {
|
|
|
1495
1500
|
span.end();
|
|
1496
1501
|
state.rerankSpan = void 0;
|
|
1497
1502
|
}
|
|
1498
|
-
|
|
1503
|
+
onDecideOperationStart(event) {
|
|
1499
1504
|
const telemetry = {
|
|
1500
1505
|
recordInputs: event.recordInputs,
|
|
1501
1506
|
recordOutputs: event.recordOutputs,
|
|
@@ -1507,16 +1512,16 @@ var OpenTelemetry = class {
|
|
|
1507
1512
|
headers: getHeaderAttributes(event.headers)
|
|
1508
1513
|
});
|
|
1509
1514
|
const attributes = selectAttributes$1(telemetry, {
|
|
1510
|
-
"gen_ai.operation.name": "
|
|
1515
|
+
"gen_ai.operation.name": "decide",
|
|
1511
1516
|
"gen_ai.provider.name": mapProviderName(event.provider),
|
|
1512
1517
|
"gen_ai.request.model": event.modelId,
|
|
1513
1518
|
...baseSupplementalAttributes,
|
|
1514
|
-
...selectSupplementalAttributes(telemetry, this.supplementalAttributes, {
|
|
1515
|
-
"ai.
|
|
1516
|
-
"ai.
|
|
1519
|
+
...selectSupplementalAttributes(telemetry, this.supplementalAttributes, { experimental_decision: {
|
|
1520
|
+
"ai.decision.state": { input: () => JSON.stringify(event.state) },
|
|
1521
|
+
"ai.decision.questions": { input: () => JSON.stringify(event.questions) }
|
|
1517
1522
|
} })
|
|
1518
1523
|
});
|
|
1519
|
-
const rootSpan = this.tracer.startSpan(`
|
|
1524
|
+
const rootSpan = this.tracer.startSpan(`decide ${event.modelId}`, {
|
|
1520
1525
|
attributes: this.getSpanAttributes({
|
|
1521
1526
|
attributes,
|
|
1522
1527
|
spanType: "operation",
|
|
@@ -1538,7 +1543,7 @@ var OpenTelemetry = class {
|
|
|
1538
1543
|
inferenceContext: void 0,
|
|
1539
1544
|
embedSpans: /* @__PURE__ */ new Map(),
|
|
1540
1545
|
rerankSpan: void 0,
|
|
1541
|
-
|
|
1546
|
+
decisionSpan: void 0,
|
|
1542
1547
|
toolSpans: /* @__PURE__ */ new Map(),
|
|
1543
1548
|
settings: { maxRetries: event.maxRetries },
|
|
1544
1549
|
provider: event.provider,
|
|
@@ -1547,60 +1552,76 @@ var OpenTelemetry = class {
|
|
|
1547
1552
|
baseSupplementalAttributes
|
|
1548
1553
|
});
|
|
1549
1554
|
}
|
|
1550
|
-
|
|
1555
|
+
onDecideOperationEnd(event) {
|
|
1551
1556
|
const state = this.getCallState(event.callId);
|
|
1552
1557
|
if (!state?.rootSpan) return;
|
|
1553
|
-
state.rootSpan.setAttributes(selectSupplementalAttributes(state.telemetry, this.supplementalAttributes, {
|
|
1558
|
+
state.rootSpan.setAttributes(selectSupplementalAttributes(state.telemetry, this.supplementalAttributes, { experimental_decision: { "ai.decision.answers": { output: () => JSON.stringify(event.answers) } } }));
|
|
1554
1559
|
state.rootSpan.end();
|
|
1555
1560
|
this.cleanupCallState(event.callId);
|
|
1556
1561
|
}
|
|
1562
|
+
experimental_onDecideStart(event) {
|
|
1563
|
+
this.experimental_onEvaluateStart(event);
|
|
1564
|
+
}
|
|
1565
|
+
experimental_onDecideEnd(event) {
|
|
1566
|
+
this.experimental_onEvaluateEnd(event);
|
|
1567
|
+
}
|
|
1568
|
+
experimental_onDecisionModelCallStart(event) {
|
|
1569
|
+
this.experimental_onEvaluationModelCallStart(event);
|
|
1570
|
+
}
|
|
1571
|
+
experimental_onDecisionModelCallEnd(event) {
|
|
1572
|
+
this.experimental_onEvaluationModelCallEnd(event);
|
|
1573
|
+
}
|
|
1574
|
+
/** @deprecated Use `experimental_onDecideStart` instead. */
|
|
1557
1575
|
experimental_onEvaluateStart(event) {
|
|
1558
|
-
this.
|
|
1576
|
+
this.onDecideOperationStart(event);
|
|
1559
1577
|
}
|
|
1578
|
+
/** @deprecated Use `experimental_onDecideEnd` instead. */
|
|
1560
1579
|
experimental_onEvaluateEnd(event) {
|
|
1561
|
-
this.
|
|
1580
|
+
this.onDecideOperationEnd(event);
|
|
1562
1581
|
}
|
|
1582
|
+
/** @deprecated Use `experimental_onDecisionModelCallStart` instead. */
|
|
1563
1583
|
experimental_onEvaluationModelCallStart(event) {
|
|
1564
1584
|
const state = this.getCallState(event.callId);
|
|
1565
1585
|
if (!state?.rootSpan || !state.rootContext) return;
|
|
1566
1586
|
const attributes = selectAttributes$1(state.telemetry, {
|
|
1567
|
-
"gen_ai.operation.name": "
|
|
1587
|
+
"gen_ai.operation.name": "decide",
|
|
1568
1588
|
"gen_ai.provider.name": mapProviderName(state.provider),
|
|
1569
1589
|
"gen_ai.request.model": state.modelId,
|
|
1570
1590
|
...state.baseSupplementalAttributes,
|
|
1571
|
-
...selectSupplementalAttributes(state.telemetry, this.supplementalAttributes, {
|
|
1572
|
-
"ai.
|
|
1573
|
-
"ai.
|
|
1591
|
+
...selectSupplementalAttributes(state.telemetry, this.supplementalAttributes, { experimental_decision: {
|
|
1592
|
+
"ai.decision.state": { input: () => JSON.stringify(event.state) },
|
|
1593
|
+
"ai.decision.questions": { input: () => JSON.stringify(event.questions) }
|
|
1574
1594
|
} })
|
|
1575
1595
|
});
|
|
1576
|
-
const span = this.tracer.startSpan(`
|
|
1596
|
+
const span = this.tracer.startSpan(`decide ${state.modelId}`, {
|
|
1577
1597
|
attributes: this.getSpanAttributes({
|
|
1578
1598
|
attributes,
|
|
1579
|
-
spanType: "
|
|
1599
|
+
spanType: "experimental_decision",
|
|
1580
1600
|
operationId: event.operationId,
|
|
1581
1601
|
callId: event.callId,
|
|
1582
1602
|
runtimeContext: state.runtimeContext
|
|
1583
1603
|
}),
|
|
1584
1604
|
kind: SpanKind.CLIENT
|
|
1585
1605
|
}, state.rootContext);
|
|
1586
|
-
state.
|
|
1606
|
+
state.decisionSpan = {
|
|
1587
1607
|
span,
|
|
1588
1608
|
context: trace.setSpan(state.rootContext, span)
|
|
1589
1609
|
};
|
|
1590
1610
|
}
|
|
1611
|
+
/** @deprecated Use `experimental_onDecisionModelCallEnd` instead. */
|
|
1591
1612
|
experimental_onEvaluationModelCallEnd(event) {
|
|
1592
1613
|
const state = this.getCallState(event.callId);
|
|
1593
|
-
if (!state?.
|
|
1594
|
-
state.
|
|
1614
|
+
if (!state?.decisionSpan) return;
|
|
1615
|
+
state.decisionSpan.span.setAttributes(selectAttributes$1(state.telemetry, {
|
|
1595
1616
|
"gen_ai.usage.input_tokens": event.usage?.inputTokens,
|
|
1596
1617
|
"gen_ai.usage.output_tokens": event.usage?.outputTokens,
|
|
1597
1618
|
...selectSupplementalAttributes(state.telemetry, this.supplementalAttributes, {
|
|
1598
|
-
|
|
1619
|
+
experimental_decision: { "ai.decision.answers": { output: () => JSON.stringify(event.answers) } },
|
|
1599
1620
|
providerMetadata: { "ai.response.providerMetadata": event.providerMetadata ? JSON.stringify(event.providerMetadata) : void 0 }
|
|
1600
1621
|
})
|
|
1601
1622
|
}));
|
|
1602
|
-
state.
|
|
1603
|
-
state.
|
|
1623
|
+
state.decisionSpan.span.end();
|
|
1624
|
+
state.decisionSpan = void 0;
|
|
1604
1625
|
}
|
|
1605
1626
|
onAbort(event) {
|
|
1606
1627
|
const state = this.getCallState(event.callId);
|
|
@@ -1623,9 +1644,9 @@ var OpenTelemetry = class {
|
|
|
1623
1644
|
state.rerankSpan.span.end();
|
|
1624
1645
|
state.rerankSpan = void 0;
|
|
1625
1646
|
}
|
|
1626
|
-
if (state.
|
|
1627
|
-
state.
|
|
1628
|
-
state.
|
|
1647
|
+
if (state.decisionSpan) {
|
|
1648
|
+
state.decisionSpan.span.end();
|
|
1649
|
+
state.decisionSpan = void 0;
|
|
1629
1650
|
}
|
|
1630
1651
|
state.rootSpan.end();
|
|
1631
1652
|
this.cleanupCallState(event.callId);
|
|
@@ -1663,10 +1684,10 @@ var OpenTelemetry = class {
|
|
|
1663
1684
|
state.rerankSpan.span.end();
|
|
1664
1685
|
state.rerankSpan = void 0;
|
|
1665
1686
|
}
|
|
1666
|
-
if (state.
|
|
1667
|
-
recordErrorOnSpan(state.
|
|
1668
|
-
state.
|
|
1669
|
-
state.
|
|
1687
|
+
if (state.decisionSpan) {
|
|
1688
|
+
recordErrorOnSpan(state.decisionSpan.span, actualError);
|
|
1689
|
+
state.decisionSpan.span.end();
|
|
1690
|
+
state.decisionSpan = void 0;
|
|
1670
1691
|
}
|
|
1671
1692
|
recordErrorOnSpan(state.rootSpan, actualError);
|
|
1672
1693
|
state.rootSpan.end();
|
|
@@ -1856,7 +1877,7 @@ var LegacyOpenTelemetry = class {
|
|
|
1856
1877
|
stepContext: void 0,
|
|
1857
1878
|
embedSpans: /* @__PURE__ */ new Map(),
|
|
1858
1879
|
rerankSpan: void 0,
|
|
1859
|
-
|
|
1880
|
+
decisionSpan: void 0,
|
|
1860
1881
|
toolSpans: /* @__PURE__ */ new Map(),
|
|
1861
1882
|
baseTelemetryAttributes,
|
|
1862
1883
|
settings: {}
|
|
@@ -1912,7 +1933,7 @@ var LegacyOpenTelemetry = class {
|
|
|
1912
1933
|
stepContext: void 0,
|
|
1913
1934
|
embedSpans: /* @__PURE__ */ new Map(),
|
|
1914
1935
|
rerankSpan: void 0,
|
|
1915
|
-
|
|
1936
|
+
decisionSpan: void 0,
|
|
1916
1937
|
toolSpans: /* @__PURE__ */ new Map(),
|
|
1917
1938
|
baseTelemetryAttributes,
|
|
1918
1939
|
settings
|
|
@@ -1970,7 +1991,7 @@ var LegacyOpenTelemetry = class {
|
|
|
1970
1991
|
stepContext: void 0,
|
|
1971
1992
|
embedSpans: /* @__PURE__ */ new Map(),
|
|
1972
1993
|
rerankSpan: void 0,
|
|
1973
|
-
|
|
1994
|
+
decisionSpan: void 0,
|
|
1974
1995
|
toolSpans: /* @__PURE__ */ new Map(),
|
|
1975
1996
|
baseTelemetryAttributes,
|
|
1976
1997
|
settings
|
|
@@ -2005,6 +2026,7 @@ var LegacyOpenTelemetry = class {
|
|
|
2005
2026
|
onObjectStepEnd(event) {
|
|
2006
2027
|
const state = this.getCallState(event.callId);
|
|
2007
2028
|
if (!state?.stepSpan) return;
|
|
2029
|
+
if (event.finishReason === "error") state.stepSpan.setStatus({ code: SpanStatusCode.ERROR });
|
|
2008
2030
|
const { telemetry } = state;
|
|
2009
2031
|
state.stepSpan.setAttributes(selectAttributes(telemetry, {
|
|
2010
2032
|
"ai.response.finishReason": event.finishReason,
|
|
@@ -2075,7 +2097,7 @@ var LegacyOpenTelemetry = class {
|
|
|
2075
2097
|
stepContext: void 0,
|
|
2076
2098
|
embedSpans: /* @__PURE__ */ new Map(),
|
|
2077
2099
|
rerankSpan: void 0,
|
|
2078
|
-
|
|
2100
|
+
decisionSpan: void 0,
|
|
2079
2101
|
toolSpans: /* @__PURE__ */ new Map(),
|
|
2080
2102
|
baseTelemetryAttributes,
|
|
2081
2103
|
settings
|
|
@@ -2150,6 +2172,7 @@ var LegacyOpenTelemetry = class {
|
|
|
2150
2172
|
onStepEnd(event) {
|
|
2151
2173
|
const state = this.getCallState(event.callId);
|
|
2152
2174
|
if (!state?.stepSpan) return;
|
|
2175
|
+
if (event.finishReason === "error") state.stepSpan.setStatus({ code: SpanStatusCode.ERROR });
|
|
2153
2176
|
const { telemetry } = state;
|
|
2154
2177
|
const isStreamText = state.operationId === "ai.streamText";
|
|
2155
2178
|
state.stepSpan.setAttributes(selectAttributes(telemetry, {
|
|
@@ -2251,6 +2274,7 @@ var LegacyOpenTelemetry = class {
|
|
|
2251
2274
|
onGenerateEnd(event) {
|
|
2252
2275
|
const state = this.getCallState(event.callId);
|
|
2253
2276
|
if (!state?.rootSpan) return;
|
|
2277
|
+
if (event.finishReason === "error") state.rootSpan.setStatus({ code: SpanStatusCode.ERROR });
|
|
2254
2278
|
const { telemetry } = state;
|
|
2255
2279
|
state.rootSpan.setAttributes(selectAttributes(telemetry, {
|
|
2256
2280
|
"ai.response.finishReason": event.finishReason,
|
|
@@ -2284,6 +2308,7 @@ var LegacyOpenTelemetry = class {
|
|
|
2284
2308
|
onObjectOperationEnd(event) {
|
|
2285
2309
|
const state = this.getCallState(event.callId);
|
|
2286
2310
|
if (!state?.rootSpan) return;
|
|
2311
|
+
if (event.finishReason === "error") state.rootSpan.setStatus({ code: SpanStatusCode.ERROR });
|
|
2287
2312
|
const { telemetry } = state;
|
|
2288
2313
|
state.rootSpan.setAttributes(selectAttributes(telemetry, {
|
|
2289
2314
|
"ai.response.finishReason": event.finishReason,
|
|
@@ -2378,7 +2403,7 @@ var LegacyOpenTelemetry = class {
|
|
|
2378
2403
|
stepContext: void 0,
|
|
2379
2404
|
embedSpans: /* @__PURE__ */ new Map(),
|
|
2380
2405
|
rerankSpan: void 0,
|
|
2381
|
-
|
|
2406
|
+
decisionSpan: void 0,
|
|
2382
2407
|
toolSpans: /* @__PURE__ */ new Map(),
|
|
2383
2408
|
baseTelemetryAttributes,
|
|
2384
2409
|
settings
|
|
@@ -2420,7 +2445,7 @@ var LegacyOpenTelemetry = class {
|
|
|
2420
2445
|
span.end();
|
|
2421
2446
|
state.rerankSpan = void 0;
|
|
2422
2447
|
}
|
|
2423
|
-
|
|
2448
|
+
onDecideOperationStart(event) {
|
|
2424
2449
|
const telemetry = {
|
|
2425
2450
|
recordInputs: event.recordInputs,
|
|
2426
2451
|
recordOutputs: event.recordOutputs,
|
|
@@ -2442,8 +2467,8 @@ var LegacyOpenTelemetry = class {
|
|
|
2442
2467
|
telemetry
|
|
2443
2468
|
}),
|
|
2444
2469
|
...baseTelemetryAttributes,
|
|
2445
|
-
"ai.
|
|
2446
|
-
"ai.
|
|
2470
|
+
"ai.decision.state": { input: () => JSON.stringify(event.state) },
|
|
2471
|
+
"ai.decision.questions": { input: () => JSON.stringify(event.questions) }
|
|
2447
2472
|
});
|
|
2448
2473
|
const rootSpan = this.tracer.startSpan(event.operationId, { attributes });
|
|
2449
2474
|
const rootContext = trace.setSpan(context.active(), rootSpan);
|
|
@@ -2456,25 +2481,40 @@ var LegacyOpenTelemetry = class {
|
|
|
2456
2481
|
stepContext: void 0,
|
|
2457
2482
|
embedSpans: /* @__PURE__ */ new Map(),
|
|
2458
2483
|
rerankSpan: void 0,
|
|
2459
|
-
|
|
2484
|
+
decisionSpan: void 0,
|
|
2460
2485
|
toolSpans: /* @__PURE__ */ new Map(),
|
|
2461
2486
|
baseTelemetryAttributes,
|
|
2462
2487
|
settings
|
|
2463
2488
|
});
|
|
2464
2489
|
}
|
|
2465
|
-
|
|
2490
|
+
onDecideOperationEnd(event) {
|
|
2466
2491
|
const state = this.getCallState(event.callId);
|
|
2467
2492
|
if (!state?.rootSpan) return;
|
|
2468
|
-
state.rootSpan.setAttributes(selectAttributes(state.telemetry, { "ai.
|
|
2493
|
+
state.rootSpan.setAttributes(selectAttributes(state.telemetry, { "ai.decision.answers": { output: () => JSON.stringify(event.answers) } }));
|
|
2469
2494
|
state.rootSpan.end();
|
|
2470
2495
|
this.cleanupCallState(event.callId);
|
|
2471
2496
|
}
|
|
2497
|
+
experimental_onDecideStart(event) {
|
|
2498
|
+
this.experimental_onEvaluateStart(event);
|
|
2499
|
+
}
|
|
2500
|
+
experimental_onDecideEnd(event) {
|
|
2501
|
+
this.experimental_onEvaluateEnd(event);
|
|
2502
|
+
}
|
|
2503
|
+
experimental_onDecisionModelCallStart(event) {
|
|
2504
|
+
this.experimental_onEvaluationModelCallStart(event);
|
|
2505
|
+
}
|
|
2506
|
+
experimental_onDecisionModelCallEnd(event) {
|
|
2507
|
+
this.experimental_onEvaluationModelCallEnd(event);
|
|
2508
|
+
}
|
|
2509
|
+
/** @deprecated Use `experimental_onDecideStart` instead. */
|
|
2472
2510
|
experimental_onEvaluateStart(event) {
|
|
2473
|
-
this.
|
|
2511
|
+
this.onDecideOperationStart(event);
|
|
2474
2512
|
}
|
|
2513
|
+
/** @deprecated Use `experimental_onDecideEnd` instead. */
|
|
2475
2514
|
experimental_onEvaluateEnd(event) {
|
|
2476
|
-
this.
|
|
2515
|
+
this.onDecideOperationEnd(event);
|
|
2477
2516
|
}
|
|
2517
|
+
/** @deprecated Use `experimental_onDecisionModelCallStart` instead. */
|
|
2478
2518
|
experimental_onEvaluationModelCallStart(event) {
|
|
2479
2519
|
const state = this.getCallState(event.callId);
|
|
2480
2520
|
if (!state?.rootSpan || !state.rootContext) return;
|
|
@@ -2484,26 +2524,27 @@ var LegacyOpenTelemetry = class {
|
|
|
2484
2524
|
telemetry: state.telemetry
|
|
2485
2525
|
}),
|
|
2486
2526
|
...state.baseTelemetryAttributes,
|
|
2487
|
-
"ai.
|
|
2488
|
-
"ai.
|
|
2527
|
+
"ai.decision.state": { input: () => JSON.stringify(event.state) },
|
|
2528
|
+
"ai.decision.questions": { input: () => JSON.stringify(event.questions) }
|
|
2489
2529
|
});
|
|
2490
2530
|
const span = this.tracer.startSpan(event.operationId, { attributes }, state.rootContext);
|
|
2491
|
-
state.
|
|
2531
|
+
state.decisionSpan = {
|
|
2492
2532
|
span,
|
|
2493
2533
|
context: trace.setSpan(state.rootContext, span)
|
|
2494
2534
|
};
|
|
2495
2535
|
}
|
|
2536
|
+
/** @deprecated Use `experimental_onDecisionModelCallEnd` instead. */
|
|
2496
2537
|
experimental_onEvaluationModelCallEnd(event) {
|
|
2497
2538
|
const state = this.getCallState(event.callId);
|
|
2498
|
-
if (!state?.
|
|
2499
|
-
state.
|
|
2500
|
-
"ai.
|
|
2539
|
+
if (!state?.decisionSpan) return;
|
|
2540
|
+
state.decisionSpan.span.setAttributes(selectAttributes(state.telemetry, {
|
|
2541
|
+
"ai.decision.answers": { output: () => JSON.stringify(event.answers) },
|
|
2501
2542
|
"ai.usage.inputTokens": event.usage?.inputTokens,
|
|
2502
2543
|
"ai.usage.outputTokens": event.usage?.outputTokens,
|
|
2503
2544
|
"ai.response.providerMetadata": event.providerMetadata ? JSON.stringify(event.providerMetadata) : void 0
|
|
2504
2545
|
}));
|
|
2505
|
-
state.
|
|
2506
|
-
state.
|
|
2546
|
+
state.decisionSpan.span.end();
|
|
2547
|
+
state.decisionSpan = void 0;
|
|
2507
2548
|
}
|
|
2508
2549
|
onAbort(event) {
|
|
2509
2550
|
const state = this.getCallState(event.callId);
|
|
@@ -2521,9 +2562,9 @@ var LegacyOpenTelemetry = class {
|
|
|
2521
2562
|
state.rerankSpan.span.end();
|
|
2522
2563
|
state.rerankSpan = void 0;
|
|
2523
2564
|
}
|
|
2524
|
-
if (state.
|
|
2525
|
-
state.
|
|
2526
|
-
state.
|
|
2565
|
+
if (state.decisionSpan) {
|
|
2566
|
+
state.decisionSpan.span.end();
|
|
2567
|
+
state.decisionSpan = void 0;
|
|
2527
2568
|
}
|
|
2528
2569
|
state.rootSpan.end();
|
|
2529
2570
|
this.cleanupCallState(event.callId);
|
|
@@ -2548,10 +2589,10 @@ var LegacyOpenTelemetry = class {
|
|
|
2548
2589
|
state.rerankSpan.span.end();
|
|
2549
2590
|
state.rerankSpan = void 0;
|
|
2550
2591
|
}
|
|
2551
|
-
if (state.
|
|
2552
|
-
recordSpanError(state.
|
|
2553
|
-
state.
|
|
2554
|
-
state.
|
|
2592
|
+
if (state.decisionSpan) {
|
|
2593
|
+
recordSpanError(state.decisionSpan.span, actualError);
|
|
2594
|
+
state.decisionSpan.span.end();
|
|
2595
|
+
state.decisionSpan = void 0;
|
|
2555
2596
|
}
|
|
2556
2597
|
recordSpanError(state.rootSpan, actualError);
|
|
2557
2598
|
state.rootSpan.end();
|