@ai-sdk/otel 1.0.0-beta.4 → 1.0.0-beta.40

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.
@@ -1,16 +1,16 @@
1
1
  import { Attributes, AttributeValue } from '@opentelemetry/api';
2
- import type { CallSettings, TelemetrySettings } from 'ai';
2
+ import type { LanguageModelCallOptions } from 'ai';
3
3
 
4
4
  export function getBaseTelemetryAttributes({
5
5
  model,
6
6
  settings,
7
- telemetry,
8
7
  headers,
8
+ context,
9
9
  }: {
10
10
  model: { modelId: string; provider: string };
11
- settings: Omit<CallSettings, 'abortSignal' | 'headers' | 'temperature'>;
12
- telemetry: TelemetrySettings | undefined;
11
+ settings: LanguageModelCallOptions;
13
12
  headers: Record<string, string | undefined> | undefined;
13
+ context: Record<string, unknown> | undefined;
14
14
  }): Attributes {
15
15
  return {
16
16
  'ai.model.provider': model.provider,
@@ -22,16 +22,13 @@ export function getBaseTelemetryAttributes({
22
22
  return attributes;
23
23
  }, {} as Attributes),
24
24
 
25
- // add metadata as attributes:
26
- ...Object.entries(telemetry?.metadata ?? {}).reduce(
27
- (attributes, [key, value]) => {
28
- if (value != undefined) {
29
- attributes[`ai.telemetry.metadata.${key}`] = value as AttributeValue;
30
- }
31
- return attributes;
32
- },
33
- {} as Attributes,
34
- ),
25
+ // add context as attributes:
26
+ ...Object.entries(context ?? {}).reduce((attributes, [key, value]) => {
27
+ if (value != undefined) {
28
+ attributes[`ai.settings.context.${key}`] = value as AttributeValue;
29
+ }
30
+ return attributes;
31
+ }, {} as Attributes),
35
32
 
36
33
  // request headers
37
34
  ...Object.entries(headers ?? {}).reduce((attributes, [key, value]) => {
package/src/index.ts CHANGED
@@ -1 +1,2 @@
1
+ export { GenAIOpenTelemetryIntegration } from './gen-ai-open-telemetry-integration';
1
2
  export { OpenTelemetryIntegration } from './open-telemetry-integration';
@@ -1,9 +1,10 @@
1
1
  import { LanguageModelV4Prompt } from '@ai-sdk/provider';
2
+ import type { Context as AISDKContext } from '@ai-sdk/provider-utils';
2
3
  import {
3
4
  Attributes,
4
5
  AttributeValue,
5
6
  context,
6
- Context,
7
+ Context as OpenTelemetryContext,
7
8
  Span,
8
9
  SpanStatusCode,
9
10
  trace,
@@ -14,7 +15,6 @@ import type {
14
15
  EmbedOnFinishEvent,
15
16
  EmbedOnStartEvent,
16
17
  EmbedStartEvent,
17
- GenerationContext,
18
18
  ObjectOnFinishEvent,
19
19
  ObjectOnStartEvent,
20
20
  ObjectOnStepFinishEvent,
@@ -110,9 +110,9 @@ function selectAttributes(
110
110
 
111
111
  interface OtelStepStartEvent<
112
112
  TOOLS extends ToolSet = ToolSet,
113
- CONTEXT extends GenerationContext<TOOLS> = GenerationContext<TOOLS>,
113
+ USER_CONTEXT extends AISDKContext = AISDKContext,
114
114
  OUTPUT extends Output = Output,
115
- > extends OnStepStartEvent<TOOLS, CONTEXT, OUTPUT> {
115
+ > extends OnStepStartEvent<TOOLS, USER_CONTEXT, OUTPUT> {
116
116
  readonly promptMessages?: LanguageModelV4Prompt;
117
117
  readonly stepTools?: ReadonlyArray<Record<string, unknown>>;
118
118
  readonly stepToolChoice?: unknown;
@@ -122,12 +122,12 @@ interface CallState {
122
122
  operationId: string;
123
123
  telemetry: TelemetrySettings | undefined;
124
124
  rootSpan: Span | undefined;
125
- rootContext: Context | undefined;
125
+ rootContext: OpenTelemetryContext | undefined;
126
126
  stepSpan: Span | undefined;
127
- stepContext: Context | undefined;
128
- embedSpans: Map<string, { span: Span; context: Context }>;
129
- rerankSpan: { span: Span; context: Context } | undefined;
130
- toolSpans: Map<string, { span: Span; context: Context }>;
127
+ stepContext: OpenTelemetryContext | undefined;
128
+ embedSpans: Map<string, { span: Span; context: OpenTelemetryContext }>;
129
+ rerankSpan: { span: Span; context: OpenTelemetryContext } | undefined;
130
+ toolSpans: Map<string, { span: Span; context: OpenTelemetryContext }>;
131
131
  baseTelemetryAttributes: Attributes;
132
132
  settings: Record<string, unknown>;
133
133
  }
@@ -176,7 +176,7 @@ export class OpenTelemetryIntegration implements TelemetryIntegration {
176
176
 
177
177
  onStart(
178
178
  event:
179
- | OnStartEvent<ToolSet, Output>
179
+ | OnStartEvent
180
180
  | ObjectOnStartEvent
181
181
  | EmbedOnStartEvent
182
182
  | RerankOnStartEvent,
@@ -204,16 +204,15 @@ export class OpenTelemetryIntegration implements TelemetryIntegration {
204
204
  return;
205
205
  }
206
206
 
207
- this.onGenerateStart(event as OnStartEvent<ToolSet, Output>);
207
+ this.onGenerateStart(event as OnStartEvent);
208
208
  }
209
209
 
210
- private onGenerateStart(event: OnStartEvent<ToolSet, Output>): void {
210
+ private onGenerateStart(event: OnStartEvent): void {
211
211
  const telemetry: TelemetrySettings = {
212
212
  isEnabled: event.isEnabled,
213
213
  recordInputs: event.recordInputs,
214
214
  recordOutputs: event.recordOutputs,
215
215
  functionId: event.functionId,
216
- metadata: event.metadata,
217
216
  };
218
217
 
219
218
  const settings: Record<string, unknown> = {
@@ -230,9 +229,9 @@ export class OpenTelemetryIntegration implements TelemetryIntegration {
230
229
 
231
230
  const baseTelemetryAttributes = getBaseTelemetryAttributes({
232
231
  model: { provider: event.provider, modelId: event.modelId },
233
- telemetry,
234
232
  headers: event.headers,
235
233
  settings,
234
+ context: event.context as Record<string, unknown> | undefined,
236
235
  });
237
236
 
238
237
  const attributes = selectAttributes(telemetry, {
@@ -277,7 +276,6 @@ export class OpenTelemetryIntegration implements TelemetryIntegration {
277
276
  recordInputs: event.recordInputs,
278
277
  recordOutputs: event.recordOutputs,
279
278
  functionId: event.functionId,
280
- metadata: event.metadata,
281
279
  };
282
280
 
283
281
  const settings: Record<string, unknown> = {
@@ -293,9 +291,9 @@ export class OpenTelemetryIntegration implements TelemetryIntegration {
293
291
 
294
292
  const baseTelemetryAttributes = getBaseTelemetryAttributes({
295
293
  model: { provider: event.provider, modelId: event.modelId },
296
- telemetry,
297
294
  headers: event.headers,
298
295
  settings,
296
+ context: undefined,
299
297
  });
300
298
 
301
299
  const attributes = selectAttributes(telemetry, {
@@ -449,7 +447,6 @@ export class OpenTelemetryIntegration implements TelemetryIntegration {
449
447
  recordInputs: event.recordInputs,
450
448
  recordOutputs: event.recordOutputs,
451
449
  functionId: event.functionId,
452
- metadata: event.metadata,
453
450
  };
454
451
 
455
452
  const settings: Record<string, unknown> = {
@@ -458,9 +455,9 @@ export class OpenTelemetryIntegration implements TelemetryIntegration {
458
455
 
459
456
  const baseTelemetryAttributes = getBaseTelemetryAttributes({
460
457
  model: { provider: event.provider, modelId: event.modelId },
461
- telemetry,
462
458
  headers: event.headers,
463
459
  settings,
460
+ context: undefined,
464
461
  });
465
462
 
466
463
  const value = event.value;
@@ -503,7 +500,7 @@ export class OpenTelemetryIntegration implements TelemetryIntegration {
503
500
  });
504
501
  }
505
502
 
506
- onStepStart(event: OtelStepStartEvent<ToolSet, Output>): void {
503
+ onStepStart(event: OtelStepStartEvent): void {
507
504
  const state = this.getCallState(event.callId);
508
505
  if (!state?.rootSpan || !state.rootContext) return;
509
506
 
@@ -619,7 +616,7 @@ export class OpenTelemetryIntegration implements TelemetryIntegration {
619
616
  },
620
617
  }),
621
618
  );
622
- } catch (_ignored) {
619
+ } catch {
623
620
  // JSON.stringify might fail for non-serializable results
624
621
  }
625
622
  } else {
@@ -934,7 +931,6 @@ export class OpenTelemetryIntegration implements TelemetryIntegration {
934
931
  recordInputs: event.recordInputs,
935
932
  recordOutputs: event.recordOutputs,
936
933
  functionId: event.functionId,
937
- metadata: event.metadata,
938
934
  };
939
935
 
940
936
  const settings: Record<string, unknown> = {
@@ -943,9 +939,9 @@ export class OpenTelemetryIntegration implements TelemetryIntegration {
943
939
 
944
940
  const baseTelemetryAttributes = getBaseTelemetryAttributes({
945
941
  model: { provider: event.provider, modelId: event.modelId },
946
- telemetry,
947
942
  headers: event.headers,
948
943
  settings,
944
+ context: undefined,
949
945
  });
950
946
 
951
947
  const attributes = selectAttributes(telemetry, {
package/dist/index.d.mts DELETED
@@ -1,52 +0,0 @@
1
- import { LanguageModelV4Prompt } from '@ai-sdk/provider';
2
- import { Tracer } from '@opentelemetry/api';
3
- import { TelemetryIntegration, OnStartEvent, ToolSet, OutputInterface, ObjectOnStartEvent, EmbedOnStartEvent, RerankOnStartEvent, ObjectOnStepStartEvent, ObjectOnStepFinishEvent, GenerationContext, OnStepStartEvent, OnToolCallStartEvent, OnToolCallFinishEvent, OnStepFinishEvent, OnFinishEvent, ObjectOnFinishEvent, EmbedOnFinishEvent, RerankOnFinishEvent, EmbedStartEvent, EmbedFinishEvent, RerankStartEvent, RerankFinishEvent, OnChunkEvent } from 'ai';
4
-
5
- interface OtelStepStartEvent<TOOLS extends ToolSet = ToolSet, CONTEXT extends GenerationContext<TOOLS> = GenerationContext<TOOLS>, OUTPUT extends OutputInterface = OutputInterface> extends OnStepStartEvent<TOOLS, CONTEXT, OUTPUT> {
6
- readonly promptMessages?: LanguageModelV4Prompt;
7
- readonly stepTools?: ReadonlyArray<Record<string, unknown>>;
8
- readonly stepToolChoice?: unknown;
9
- }
10
- declare class OpenTelemetryIntegration implements TelemetryIntegration {
11
- private readonly callStates;
12
- /**
13
- * The tracer to use for the telemetry data.
14
- */
15
- private readonly tracer;
16
- constructor(options?: {
17
- tracer?: Tracer;
18
- });
19
- private getCallState;
20
- private cleanupCallState;
21
- executeTool<T>({ callId, toolCallId, execute, }: {
22
- callId: string;
23
- toolCallId: string;
24
- execute: () => PromiseLike<T>;
25
- }): PromiseLike<T>;
26
- onStart(event: OnStartEvent<ToolSet, OutputInterface> | ObjectOnStartEvent | EmbedOnStartEvent | RerankOnStartEvent): void;
27
- private onGenerateStart;
28
- private onObjectOperationStart;
29
- /** @deprecated */
30
- onObjectStepStart(event: ObjectOnStepStartEvent): void;
31
- /** @deprecated */
32
- onObjectStepFinish(event: ObjectOnStepFinishEvent): void;
33
- private onEmbedOperationStart;
34
- onStepStart(event: OtelStepStartEvent<ToolSet, OutputInterface>): void;
35
- onToolCallStart(event: OnToolCallStartEvent<ToolSet>): void;
36
- onToolCallFinish(event: OnToolCallFinishEvent<ToolSet>): void;
37
- onStepFinish(event: OnStepFinishEvent<ToolSet>): void;
38
- onFinish(event: OnFinishEvent<ToolSet> | ObjectOnFinishEvent<unknown> | EmbedOnFinishEvent | RerankOnFinishEvent): void;
39
- private onGenerateFinish;
40
- private onObjectOperationFinish;
41
- private onEmbedOperationFinish;
42
- onEmbedStart(event: EmbedStartEvent): void;
43
- onEmbedFinish(event: EmbedFinishEvent): void;
44
- private onRerankOperationStart;
45
- private onRerankOperationFinish;
46
- onRerankStart(event: RerankStartEvent): void;
47
- onRerankFinish(event: RerankFinishEvent): void;
48
- onChunk(event: OnChunkEvent<ToolSet>): void;
49
- onError(error: unknown): void;
50
- }
51
-
52
- export { OpenTelemetryIntegration };