@strands-agents/sdk 0.3.0 → 0.5.0
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/README.md +43 -0
- package/dist/src/__fixtures__/agent-helpers.d.ts +10 -1
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/agent-helpers.js +13 -2
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
- package/dist/src/__fixtures__/mock-hook-provider.d.ts +3 -7
- package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-hook-provider.js +3 -9
- package/dist/src/__fixtures__/mock-hook-provider.js.map +1 -1
- package/dist/src/__fixtures__/mock-message-model.d.ts +8 -2
- package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-message-model.js +1 -0
- package/dist/src/__fixtures__/mock-message-model.js.map +1 -1
- package/dist/src/__fixtures__/mock-span.d.ts +78 -0
- package/dist/src/__fixtures__/mock-span.d.ts.map +1 -0
- package/dist/src/__fixtures__/mock-span.js +93 -0
- package/dist/src/__fixtures__/mock-span.js.map +1 -0
- package/dist/src/__fixtures__/mock-storage-provider.d.ts +37 -0
- package/dist/src/__fixtures__/mock-storage-provider.d.ts.map +1 -0
- package/dist/src/__fixtures__/mock-storage-provider.js +105 -0
- package/dist/src/__fixtures__/mock-storage-provider.js.map +1 -0
- package/dist/src/__fixtures__/slim-types.d.ts +50 -0
- package/dist/src/__fixtures__/slim-types.d.ts.map +1 -0
- package/dist/src/__fixtures__/slim-types.js +6 -0
- package/dist/src/__fixtures__/slim-types.js.map +1 -0
- package/dist/src/__fixtures__/tool-helpers.d.ts +10 -5
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.js +5 -5
- package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
- package/dist/src/__tests__/app-state.test.d.ts +2 -0
- package/dist/src/__tests__/app-state.test.d.ts.map +1 -0
- package/dist/src/{agent/__tests__/state.test.js → __tests__/app-state.test.js} +62 -43
- package/dist/src/__tests__/app-state.test.js.map +1 -0
- package/dist/src/__tests__/mcp.test.js +96 -15
- package/dist/src/__tests__/mcp.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.hook.test.js +18 -18
- package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.test.js +234 -8
- package/dist/src/agent/__tests__/agent.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.tracer.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.tracer.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.tracer.test.js +470 -0
- package/dist/src/agent/__tests__/agent.tracer.test.js.map +1 -0
- package/dist/src/agent/__tests__/printer.test.js +5 -9
- package/dist/src/agent/__tests__/printer.test.js.map +1 -1
- package/dist/src/agent/__tests__/snapshot.test.d.ts +2 -0
- package/dist/src/agent/__tests__/snapshot.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/snapshot.test.js +249 -0
- package/dist/src/agent/__tests__/snapshot.test.js.map +1 -0
- package/dist/src/agent/agent.d.ts +78 -10
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +252 -55
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/agent/printer.d.ts +4 -0
- package/dist/src/agent/printer.d.ts.map +1 -1
- package/dist/src/agent/printer.js +18 -6
- package/dist/src/agent/printer.js.map +1 -1
- package/dist/src/agent/snapshot.d.ts +132 -0
- package/dist/src/agent/snapshot.d.ts.map +1 -0
- package/dist/src/agent/snapshot.js +151 -0
- package/dist/src/agent/snapshot.js.map +1 -0
- package/dist/src/{agent/state.d.ts → app-state.d.ts} +19 -6
- package/dist/src/app-state.d.ts.map +1 -0
- package/dist/src/{agent/state.js → app-state.js} +27 -6
- package/dist/src/app-state.js.map +1 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js +1 -1
- package/dist/src/errors.d.ts +15 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +18 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/hooks/__tests__/events.test.js +102 -21
- package/dist/src/hooks/__tests__/events.test.js.map +1 -1
- package/dist/src/hooks/events.d.ts +156 -22
- package/dist/src/hooks/events.d.ts.map +1 -1
- package/dist/src/hooks/events.js +158 -18
- package/dist/src/hooks/events.js.map +1 -1
- package/dist/src/hooks/index.d.ts +12 -4
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/index.js +11 -3
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/registry.d.ts +5 -5
- package/dist/src/hooks/registry.d.ts.map +1 -1
- package/dist/src/hooks/registry.js.map +1 -1
- package/dist/src/hooks/types.d.ts +5 -5
- package/dist/src/hooks/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +6 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp.d.ts +3 -0
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +38 -1
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/models/__tests__/anthropic.test.js +31 -42
- package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
- package/dist/src/models/__tests__/bedrock.test.js +70 -107
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
- package/dist/src/models/__tests__/gemini.test.js +18 -18
- package/dist/src/models/__tests__/gemini.test.js.map +1 -1
- package/dist/src/models/__tests__/model.test.js +21 -13
- package/dist/src/models/__tests__/model.test.js.map +1 -1
- package/dist/src/models/__tests__/openai.test.js +73 -83
- package/dist/src/models/__tests__/openai.test.js.map +1 -1
- package/dist/src/models/model.d.ts +4 -0
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +6 -0
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/streaming.d.ts +9 -1
- package/dist/src/models/streaming.d.ts.map +1 -1
- package/dist/src/models/streaming.js +17 -0
- package/dist/src/models/streaming.js.map +1 -1
- package/dist/src/multiagent/__tests__/events.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/events.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/events.test.js +189 -0
- package/dist/src/multiagent/__tests__/events.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/nodes.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/nodes.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/nodes.test.js +194 -0
- package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/queue.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/queue.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/queue.test.js +96 -0
- package/dist/src/multiagent/__tests__/queue.test.js.map +1 -0
- package/dist/src/multiagent/base.d.ts +25 -0
- package/dist/src/multiagent/base.d.ts.map +1 -0
- package/dist/src/multiagent/base.js +2 -0
- package/dist/src/multiagent/base.js.map +1 -0
- package/dist/src/multiagent/edge.d.ts +29 -0
- package/dist/src/multiagent/edge.d.ts.map +1 -0
- package/dist/src/multiagent/edge.js +15 -0
- package/dist/src/multiagent/edge.js.map +1 -0
- package/dist/src/multiagent/events.d.ts +135 -0
- package/dist/src/multiagent/events.d.ts.map +1 -0
- package/dist/src/multiagent/events.js +140 -0
- package/dist/src/multiagent/events.js.map +1 -0
- package/dist/src/multiagent/index.d.ts +13 -0
- package/dist/src/multiagent/index.d.ts.map +1 -0
- package/dist/src/multiagent/index.js +8 -0
- package/dist/src/multiagent/index.js.map +1 -0
- package/dist/src/multiagent/nodes.d.ts +123 -0
- package/dist/src/multiagent/nodes.d.ts.map +1 -0
- package/dist/src/multiagent/nodes.js +148 -0
- package/dist/src/multiagent/nodes.js.map +1 -0
- package/dist/src/multiagent/queue.d.ts +67 -0
- package/dist/src/multiagent/queue.d.ts.map +1 -0
- package/dist/src/multiagent/queue.js +59 -0
- package/dist/src/multiagent/queue.js.map +1 -0
- package/dist/src/multiagent/state.d.ts +122 -0
- package/dist/src/multiagent/state.d.ts.map +1 -0
- package/dist/src/multiagent/state.js +132 -0
- package/dist/src/multiagent/state.js.map +1 -0
- package/dist/src/registry/tool-registry.d.ts +2 -1
- package/dist/src/registry/tool-registry.d.ts.map +1 -1
- package/dist/src/registry/tool-registry.js +4 -2
- package/dist/src/registry/tool-registry.js.map +1 -1
- package/dist/src/session/__tests__/file-storage.test.node.d.ts +2 -0
- package/dist/src/session/__tests__/file-storage.test.node.d.ts.map +1 -0
- package/dist/src/session/__tests__/file-storage.test.node.js +218 -0
- package/dist/src/session/__tests__/file-storage.test.node.js.map +1 -0
- package/dist/src/session/__tests__/s3-storage.test.node.d.ts +2 -0
- package/dist/src/session/__tests__/s3-storage.test.node.d.ts.map +1 -0
- package/dist/src/session/__tests__/s3-storage.test.node.js +375 -0
- package/dist/src/session/__tests__/s3-storage.test.node.js.map +1 -0
- package/dist/src/session/__tests__/validation.test.d.ts +2 -0
- package/dist/src/session/__tests__/validation.test.d.ts.map +1 -0
- package/dist/src/session/__tests__/validation.test.js +20 -0
- package/dist/src/session/__tests__/validation.test.js.map +1 -0
- package/dist/src/session/file-storage.d.ts +79 -0
- package/dist/src/session/file-storage.d.ts.map +1 -0
- package/dist/src/session/file-storage.js +144 -0
- package/dist/src/session/file-storage.js.map +1 -0
- package/dist/src/session/index.d.ts +19 -0
- package/dist/src/session/index.d.ts.map +1 -0
- package/dist/src/session/index.js +18 -0
- package/dist/src/session/index.js.map +1 -0
- package/dist/src/session/s3-storage.d.ts +93 -0
- package/dist/src/session/s3-storage.d.ts.map +1 -0
- package/dist/src/session/s3-storage.js +150 -0
- package/dist/src/session/s3-storage.js.map +1 -0
- package/dist/src/session/storage.d.ts +91 -0
- package/dist/src/session/storage.d.ts.map +1 -0
- package/dist/src/session/storage.js +2 -0
- package/dist/src/session/storage.js.map +1 -0
- package/dist/src/session/types.d.ts +49 -0
- package/dist/src/session/types.d.ts.map +1 -0
- package/dist/src/session/types.js +2 -0
- package/dist/src/session/types.js.map +1 -0
- package/dist/src/session/validation.d.ts +10 -0
- package/dist/src/session/validation.d.ts.map +1 -0
- package/dist/src/session/validation.js +16 -0
- package/dist/src/session/validation.js.map +1 -0
- package/dist/src/structured-output/__tests__/context.test.d.ts +2 -0
- package/dist/src/structured-output/__tests__/context.test.d.ts.map +1 -0
- package/dist/src/structured-output/__tests__/context.test.js +201 -0
- package/dist/src/structured-output/__tests__/context.test.js.map +1 -0
- package/dist/src/structured-output/__tests__/exceptions.test.d.ts +2 -0
- package/dist/src/structured-output/__tests__/exceptions.test.d.ts.map +1 -0
- package/dist/src/structured-output/__tests__/exceptions.test.js +103 -0
- package/dist/src/structured-output/__tests__/exceptions.test.js.map +1 -0
- package/dist/src/structured-output/__tests__/tool.test.d.ts +2 -0
- package/dist/src/structured-output/__tests__/tool.test.d.ts.map +1 -0
- package/dist/src/structured-output/__tests__/tool.test.js +256 -0
- package/dist/src/structured-output/__tests__/tool.test.js.map +1 -0
- package/dist/src/structured-output/__tests__/utils.test.d.ts +2 -0
- package/dist/src/structured-output/__tests__/utils.test.d.ts.map +1 -0
- package/dist/src/structured-output/__tests__/utils.test.js +183 -0
- package/dist/src/structured-output/__tests__/utils.test.js.map +1 -0
- package/dist/src/structured-output/context.d.ts +91 -0
- package/dist/src/structured-output/context.d.ts.map +1 -0
- package/dist/src/structured-output/context.js +112 -0
- package/dist/src/structured-output/context.js.map +1 -0
- package/dist/src/structured-output/exceptions.d.ts +18 -0
- package/dist/src/structured-output/exceptions.d.ts.map +1 -0
- package/dist/src/structured-output/exceptions.js +28 -0
- package/dist/src/structured-output/exceptions.js.map +1 -0
- package/dist/src/structured-output/tool.d.ts +33 -0
- package/dist/src/structured-output/tool.d.ts.map +1 -0
- package/dist/src/structured-output/tool.js +73 -0
- package/dist/src/structured-output/tool.js.map +1 -0
- package/dist/src/structured-output/utils.d.ts +23 -0
- package/dist/src/structured-output/utils.d.ts.map +1 -0
- package/dist/src/structured-output/utils.js +104 -0
- package/dist/src/structured-output/utils.js.map +1 -0
- package/dist/src/telemetry/__tests__/config.test.node.d.ts +2 -0
- package/dist/src/telemetry/__tests__/config.test.node.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/config.test.node.js +129 -0
- package/dist/src/telemetry/__tests__/config.test.node.js.map +1 -0
- package/dist/src/telemetry/__tests__/json.test.d.ts +2 -0
- package/dist/src/telemetry/__tests__/json.test.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/json.test.js +89 -0
- package/dist/src/telemetry/__tests__/json.test.js.map +1 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.d.ts +2 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.js +611 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.js.map +1 -0
- package/dist/src/telemetry/config.d.ts +61 -0
- package/dist/src/telemetry/config.d.ts.map +1 -0
- package/dist/src/telemetry/config.js +101 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +34 -0
- package/dist/src/telemetry/index.d.ts.map +1 -0
- package/dist/src/telemetry/index.js +33 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/json.d.ts +11 -0
- package/dist/src/telemetry/json.d.ts.map +1 -0
- package/dist/src/telemetry/json.js +25 -0
- package/dist/src/telemetry/json.js.map +1 -0
- package/dist/src/telemetry/tracer.d.ts +219 -0
- package/dist/src/telemetry/tracer.d.ts.map +1 -0
- package/dist/src/telemetry/tracer.js +610 -0
- package/dist/src/telemetry/tracer.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +101 -0
- package/dist/src/telemetry/types.d.ts.map +1 -0
- package/dist/src/telemetry/types.js +5 -0
- package/dist/src/telemetry/types.js.map +1 -0
- package/dist/src/tools/tool.d.ts +1 -1
- package/dist/src/tools/tool.js +1 -1
- package/dist/src/tools/zod-tool.d.ts.map +1 -1
- package/dist/src/tools/zod-tool.js +2 -5
- package/dist/src/tools/zod-tool.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/__tests__/media.test.js +216 -1
- package/dist/src/types/__tests__/media.test.js.map +1 -1
- package/dist/src/types/__tests__/messages.test.js +193 -4
- package/dist/src/types/__tests__/messages.test.js.map +1 -1
- package/dist/src/types/agent.d.ts +16 -10
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js +8 -1
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/json.d.ts +61 -0
- package/dist/src/types/json.d.ts.map +1 -1
- package/dist/src/types/json.js +24 -0
- package/dist/src/types/json.js.map +1 -1
- package/dist/src/types/media.d.ts +84 -4
- package/dist/src/types/media.d.ts.map +1 -1
- package/dist/src/types/media.js +194 -0
- package/dist/src/types/media.js.map +1 -1
- package/dist/src/types/messages.d.ts +152 -13
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js +235 -8
- package/dist/src/types/messages.js.map +1 -1
- package/dist/src/types/serializable.d.ts +31 -0
- package/dist/src/types/serializable.d.ts.map +1 -0
- package/dist/src/types/serializable.js +19 -0
- package/dist/src/types/serializable.js.map +1 -0
- package/dist/src/utils/zod.d.ts +11 -0
- package/dist/src/utils/zod.d.ts.map +1 -0
- package/dist/src/utils/zod.js +14 -0
- package/dist/src/utils/zod.js.map +1 -0
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +2 -2
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
- package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js +4 -4
- package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js.map +1 -1
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +2 -2
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
- package/package.json +17 -3
- package/dist/src/agent/__tests__/state.test.d.ts +0 -2
- package/dist/src/agent/__tests__/state.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/state.test.js.map +0 -1
- package/dist/src/agent/state.d.ts.map +0 -1
- package/dist/src/agent/state.js.map +0 -1
|
@@ -0,0 +1,610 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry integration.
|
|
3
|
+
*
|
|
4
|
+
* This module provides tracing capabilities using OpenTelemetry,
|
|
5
|
+
* enabling trace data to be sent to OTLP endpoints.
|
|
6
|
+
*
|
|
7
|
+
* Uses a fully stateful approach via OpenTelemetry's context propagation.
|
|
8
|
+
* Parent-child relationships are established automatically through
|
|
9
|
+
* context.active(). Use context.with() to set a span as active before
|
|
10
|
+
* creating child spans.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const tracer = new Tracer()
|
|
15
|
+
* const parentSpan = tracer.startAgentSpan({ ... })
|
|
16
|
+
*
|
|
17
|
+
* // Run code with parentSpan as active context
|
|
18
|
+
* await context.with(trace.setSpan(context.active(), parentSpan), async () => {
|
|
19
|
+
* // Child spans automatically parent to parentSpan
|
|
20
|
+
* const childSpan = tracer.startModelInvokeSpan({ messages })
|
|
21
|
+
* // ...
|
|
22
|
+
* tracer.endModelInvokeSpan(childSpan)
|
|
23
|
+
* })
|
|
24
|
+
*
|
|
25
|
+
* tracer.endAgentSpan(parentSpan)
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
import { context, SpanStatusCode, SpanKind, trace } from '@opentelemetry/api';
|
|
29
|
+
import { logger } from '../logging/index.js';
|
|
30
|
+
import { jsonReplacer } from './json.js';
|
|
31
|
+
import { getServiceName } from './config.js';
|
|
32
|
+
/**
|
|
33
|
+
* Tracer manages OpenTelemetry spans for agent operations.
|
|
34
|
+
*
|
|
35
|
+
* Uses a fully stateful approach via OpenTelemetry's context propagation.
|
|
36
|
+
* Parent-child relationships are established automatically through context.active().
|
|
37
|
+
*
|
|
38
|
+
* To create nested spans, use context.with() to set the parent span as active:
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const parent = tracer.startAgentSpan({ ... })
|
|
41
|
+
* context.with(trace.setSpan(context.active(), parent), () => {
|
|
42
|
+
* const child = tracer.startModelInvokeSpan({ messages }) // auto-parents to parent
|
|
43
|
+
* })
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export class Tracer {
|
|
47
|
+
/**
|
|
48
|
+
* OpenTelemetry tracer instance obtained from the global API.
|
|
49
|
+
*/
|
|
50
|
+
_tracer;
|
|
51
|
+
/**
|
|
52
|
+
* Whether to use latest experimental semantic conventions.
|
|
53
|
+
*
|
|
54
|
+
* Enabled via `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental`.
|
|
55
|
+
* Changes attribute names (e.g., `gen_ai.system` → `gen_ai.provider.name`) and
|
|
56
|
+
* event formats (single `gen_ai.client.inference.operation.details` event vs
|
|
57
|
+
* separate per-message events). Enable when your observability backend supports
|
|
58
|
+
* newer GenAI conventions.
|
|
59
|
+
*
|
|
60
|
+
* @see https://opentelemetry.io/docs/specs/semconv/gen-ai/
|
|
61
|
+
*/
|
|
62
|
+
_useLatestConventions;
|
|
63
|
+
/**
|
|
64
|
+
* Whether to include full tool JSON schemas in span attributes.
|
|
65
|
+
*
|
|
66
|
+
* Enabled via `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_tool_definitions`.
|
|
67
|
+
* Useful for debugging tool configuration issues. Disabled by default to
|
|
68
|
+
* reduce span payload size and observability costs.
|
|
69
|
+
*
|
|
70
|
+
* Can be combined with other options:
|
|
71
|
+
* `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental,gen_ai_tool_definitions`
|
|
72
|
+
*/
|
|
73
|
+
_includeToolDefinitions;
|
|
74
|
+
/**
|
|
75
|
+
* Custom attributes to include on all spans created by this tracer.
|
|
76
|
+
*/
|
|
77
|
+
_traceAttributes;
|
|
78
|
+
/** Root span for the current agent invocation. */
|
|
79
|
+
_agentSpan;
|
|
80
|
+
/** Span for the current agent loop cycle, used to parent model and tool spans. */
|
|
81
|
+
_loopSpan;
|
|
82
|
+
/**
|
|
83
|
+
* Initialize the tracer with OpenTelemetry configuration.
|
|
84
|
+
* Reads OTEL_SEMCONV_STABILITY_OPT_IN to determine convention version.
|
|
85
|
+
* Gets tracer from the global API to ensure ground truth - works correctly
|
|
86
|
+
* whether the user or Strands initialized the tracer provider.
|
|
87
|
+
*
|
|
88
|
+
* @param traceAttributes - Optional custom attributes to include on all spans
|
|
89
|
+
*/
|
|
90
|
+
constructor(traceAttributes) {
|
|
91
|
+
this._traceAttributes = traceAttributes ?? {};
|
|
92
|
+
// Read semantic convention version from environment
|
|
93
|
+
const optInValues = Tracer._parseSemconvOptIn();
|
|
94
|
+
this._useLatestConventions = optInValues.has('gen_ai_latest_experimental');
|
|
95
|
+
this._includeToolDefinitions = optInValues.has('gen_ai_tool_definitions');
|
|
96
|
+
// Get tracer from global API to ensure ground truth
|
|
97
|
+
this._tracer = trace.getTracer(getServiceName());
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Start an agent invocation span.
|
|
101
|
+
* Returns the span which should be ended with endAgentSpan.
|
|
102
|
+
* Parents to the current active span from context.active().
|
|
103
|
+
*
|
|
104
|
+
* @param options - Options for starting the agent span
|
|
105
|
+
*/
|
|
106
|
+
startAgentSpan(options) {
|
|
107
|
+
const { messages, agentName, agentId, modelId, tools, traceAttributes, toolsConfig, systemPrompt } = options;
|
|
108
|
+
try {
|
|
109
|
+
const spanName = `invoke_agent ${agentName}`;
|
|
110
|
+
const attributes = this._getCommonAttributes('invoke_agent');
|
|
111
|
+
attributes['gen_ai.agent.name'] = agentName;
|
|
112
|
+
attributes['name'] = spanName;
|
|
113
|
+
if (agentId)
|
|
114
|
+
attributes['gen_ai.agent.id'] = agentId;
|
|
115
|
+
if (modelId)
|
|
116
|
+
attributes['gen_ai.request.model'] = modelId;
|
|
117
|
+
if (tools && tools.length > 0) {
|
|
118
|
+
const toolNames = tools.map((t) => t.name);
|
|
119
|
+
attributes['gen_ai.agent.tools'] = JSON.stringify(toolNames, jsonReplacer);
|
|
120
|
+
}
|
|
121
|
+
if (this._includeToolDefinitions && toolsConfig) {
|
|
122
|
+
attributes['gen_ai.tool.definitions'] = JSON.stringify(toolsConfig, jsonReplacer);
|
|
123
|
+
}
|
|
124
|
+
if (systemPrompt !== undefined) {
|
|
125
|
+
attributes['system_prompt'] = JSON.stringify(systemPrompt, jsonReplacer);
|
|
126
|
+
}
|
|
127
|
+
const mergedAttributes = { ...attributes, ...this._traceAttributes, ...traceAttributes };
|
|
128
|
+
const span = this._startSpan({ name: spanName, attributes: mergedAttributes, spanKind: SpanKind.INTERNAL });
|
|
129
|
+
this._addEventMessages(span, messages);
|
|
130
|
+
this._agentSpan = span;
|
|
131
|
+
return span;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
logger.warn(`error=<${error}> | failed to start agent span`);
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* End an agent invocation span.
|
|
140
|
+
*
|
|
141
|
+
* @param span - The span to end, or null if span creation failed
|
|
142
|
+
* @param options - Options for ending the span including response, error, and usage data
|
|
143
|
+
*/
|
|
144
|
+
endAgentSpan(span, options = {}) {
|
|
145
|
+
// Clear stale state from any previous invocation
|
|
146
|
+
this._agentSpan = undefined;
|
|
147
|
+
this._loopSpan = undefined;
|
|
148
|
+
if (!span)
|
|
149
|
+
return;
|
|
150
|
+
const { response, error, accumulatedUsage, stopReason } = options;
|
|
151
|
+
try {
|
|
152
|
+
const attributes = {};
|
|
153
|
+
if (accumulatedUsage)
|
|
154
|
+
this._setUsageAttributes(attributes, accumulatedUsage);
|
|
155
|
+
if (response !== undefined)
|
|
156
|
+
this._addResponseEvent(span, response, stopReason);
|
|
157
|
+
this._endSpan(span, attributes, error);
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
logger.warn(`error=<${err}> | failed to end agent span`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Start a model invocation span.
|
|
165
|
+
* Parents to the current active span from context.active().
|
|
166
|
+
*
|
|
167
|
+
* @param options - Options for starting the model invocation span
|
|
168
|
+
*/
|
|
169
|
+
startModelInvokeSpan(options) {
|
|
170
|
+
const { messages, modelId } = options;
|
|
171
|
+
try {
|
|
172
|
+
const attributes = this._getCommonAttributes('chat');
|
|
173
|
+
if (modelId)
|
|
174
|
+
attributes['gen_ai.request.model'] = modelId;
|
|
175
|
+
const span = this._startSpan({
|
|
176
|
+
name: 'chat',
|
|
177
|
+
attributes,
|
|
178
|
+
spanKind: SpanKind.INTERNAL,
|
|
179
|
+
...(this._loopSpan && { parentSpan: this._loopSpan }),
|
|
180
|
+
});
|
|
181
|
+
this._addEventMessages(span, messages);
|
|
182
|
+
return span;
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
logger.warn(`error=<${error}> | failed to start model invoke span`);
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* End a model invocation span.
|
|
191
|
+
*
|
|
192
|
+
* @param span - The span to end, or null if span creation failed
|
|
193
|
+
* @param options - Options for ending the span including usage, metrics, error, and output
|
|
194
|
+
*/
|
|
195
|
+
endModelInvokeSpan(span, options = {}) {
|
|
196
|
+
if (!span)
|
|
197
|
+
return;
|
|
198
|
+
const { usage, metrics, error, output, stopReason } = options;
|
|
199
|
+
try {
|
|
200
|
+
if (output !== undefined)
|
|
201
|
+
this._addOutputEvent(span, output, stopReason);
|
|
202
|
+
const attributes = {};
|
|
203
|
+
if (usage) {
|
|
204
|
+
this._setUsageAttributes(attributes, usage);
|
|
205
|
+
if (metrics)
|
|
206
|
+
this._setMetricsAttributes(attributes, metrics);
|
|
207
|
+
}
|
|
208
|
+
this._endSpan(span, attributes, error);
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
logger.warn(`error=<${err}> | failed to end model invoke span`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Start a tool call span.
|
|
216
|
+
* Parents to the current active span from context.active().
|
|
217
|
+
*
|
|
218
|
+
* @param options - Options for starting the tool call span
|
|
219
|
+
*/
|
|
220
|
+
startToolCallSpan(options) {
|
|
221
|
+
const { tool } = options;
|
|
222
|
+
try {
|
|
223
|
+
const attributes = this._getCommonAttributes('execute_tool');
|
|
224
|
+
attributes['gen_ai.tool.name'] = tool.name;
|
|
225
|
+
attributes['gen_ai.tool.call.id'] = tool.toolUseId;
|
|
226
|
+
const span = this._startSpan({
|
|
227
|
+
name: `execute_tool ${tool.name}`,
|
|
228
|
+
attributes,
|
|
229
|
+
spanKind: SpanKind.INTERNAL,
|
|
230
|
+
...(this._loopSpan && { parentSpan: this._loopSpan }),
|
|
231
|
+
});
|
|
232
|
+
if (this._useLatestConventions) {
|
|
233
|
+
this._addEvent(span, 'gen_ai.client.inference.operation.details', {
|
|
234
|
+
'gen_ai.input.messages': JSON.stringify([
|
|
235
|
+
{
|
|
236
|
+
role: 'tool',
|
|
237
|
+
parts: [{ type: 'tool_call', name: tool.name, id: tool.toolUseId, arguments: tool.input }],
|
|
238
|
+
},
|
|
239
|
+
], jsonReplacer),
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
this._addEvent(span, 'gen_ai.tool.message', {
|
|
244
|
+
role: 'tool',
|
|
245
|
+
content: JSON.stringify(tool.input, jsonReplacer),
|
|
246
|
+
id: tool.toolUseId,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
return span;
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
logger.warn(`error=<${error}> | failed to start tool call span`);
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* End a tool call span.
|
|
258
|
+
*
|
|
259
|
+
* @param span - The span to end, or null if span creation failed
|
|
260
|
+
* @param options - Options for ending the tool call span
|
|
261
|
+
*/
|
|
262
|
+
endToolCallSpan(span, options = {}) {
|
|
263
|
+
if (!span)
|
|
264
|
+
return;
|
|
265
|
+
const { toolResult, error } = options;
|
|
266
|
+
try {
|
|
267
|
+
const attributes = {};
|
|
268
|
+
if (toolResult) {
|
|
269
|
+
const statusStr = typeof toolResult.status === 'string' ? toolResult.status : String(toolResult.status);
|
|
270
|
+
attributes['gen_ai.tool.status'] = statusStr;
|
|
271
|
+
if (this._useLatestConventions) {
|
|
272
|
+
this._addEvent(span, 'gen_ai.client.inference.operation.details', {
|
|
273
|
+
'gen_ai.output.messages': JSON.stringify([
|
|
274
|
+
{
|
|
275
|
+
role: 'tool',
|
|
276
|
+
parts: [{ type: 'tool_call_response', id: toolResult.toolUseId, response: toolResult.content }],
|
|
277
|
+
},
|
|
278
|
+
], jsonReplacer),
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
this._addEvent(span, 'gen_ai.choice', {
|
|
283
|
+
message: JSON.stringify(toolResult.content, jsonReplacer),
|
|
284
|
+
id: toolResult.toolUseId,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
this._endSpan(span, attributes, error);
|
|
289
|
+
}
|
|
290
|
+
catch (err) {
|
|
291
|
+
logger.warn(`error=<${err}> | failed to end tool call span`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Runs a callback with the given span set as the active OpenTelemetry context.
|
|
296
|
+
* Downstream code (e.g., MCP clients) can read the span from context.active()
|
|
297
|
+
* for distributed trace propagation. No-ops if span is null.
|
|
298
|
+
*
|
|
299
|
+
* @param span - The span to set as active, or null if span creation failed
|
|
300
|
+
* @param fn - The callback to run within the span's context
|
|
301
|
+
* @returns The return value of the callback
|
|
302
|
+
*/
|
|
303
|
+
withSpanContext(span, fn) {
|
|
304
|
+
if (!span)
|
|
305
|
+
return fn();
|
|
306
|
+
return context.with(trace.setSpan(context.active(), span), fn);
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Start an agent loop cycle span.
|
|
310
|
+
* Parents to the current active span from context.active().
|
|
311
|
+
*
|
|
312
|
+
* @param options - Options for starting the agent loop span
|
|
313
|
+
*/
|
|
314
|
+
startAgentLoopSpan(options) {
|
|
315
|
+
const { cycleId, messages } = options;
|
|
316
|
+
try {
|
|
317
|
+
const attributes = { 'agent_loop.cycle_id': cycleId };
|
|
318
|
+
const span = this._startSpan({
|
|
319
|
+
name: 'execute_agent_loop_cycle',
|
|
320
|
+
attributes,
|
|
321
|
+
...(this._agentSpan && { parentSpan: this._agentSpan }),
|
|
322
|
+
});
|
|
323
|
+
this._addEventMessages(span, messages);
|
|
324
|
+
this._loopSpan = span;
|
|
325
|
+
return span;
|
|
326
|
+
}
|
|
327
|
+
catch (error) {
|
|
328
|
+
logger.warn(`error=<${error}> | failed to start agent loop cycle span`);
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* End an agent loop cycle span.
|
|
334
|
+
*
|
|
335
|
+
* @param span - The span to end, or null if span creation failed
|
|
336
|
+
* @param options - Options for ending the agent loop span
|
|
337
|
+
*/
|
|
338
|
+
endAgentLoopSpan(span, options = {}) {
|
|
339
|
+
if (!span)
|
|
340
|
+
return;
|
|
341
|
+
try {
|
|
342
|
+
this._endSpan(span, {}, options.error);
|
|
343
|
+
this._loopSpan = undefined;
|
|
344
|
+
}
|
|
345
|
+
catch (err) {
|
|
346
|
+
logger.warn(`error=<${err}> | failed to end agent loop cycle span`);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Create a span parented to the current active context.
|
|
351
|
+
*/
|
|
352
|
+
_startSpan(options) {
|
|
353
|
+
const spanOptions = {};
|
|
354
|
+
if (options.attributes) {
|
|
355
|
+
const otelAttributes = {};
|
|
356
|
+
for (const [key, value] of Object.entries(options.attributes)) {
|
|
357
|
+
if (value !== undefined && value !== null)
|
|
358
|
+
otelAttributes[key] = value;
|
|
359
|
+
}
|
|
360
|
+
spanOptions.attributes = otelAttributes;
|
|
361
|
+
}
|
|
362
|
+
if (options.spanKind !== undefined)
|
|
363
|
+
spanOptions.kind = options.spanKind;
|
|
364
|
+
const ctx = options.parentSpan ? trace.setSpan(context.active(), options.parentSpan) : context.active();
|
|
365
|
+
const span = this._tracer.startSpan(options.name, spanOptions, ctx);
|
|
366
|
+
try {
|
|
367
|
+
span.setAttribute('gen_ai.event.start_time', new Date().toISOString());
|
|
368
|
+
}
|
|
369
|
+
catch (err) {
|
|
370
|
+
logger.warn(`error=<${err}> | failed to set start time attribute`);
|
|
371
|
+
}
|
|
372
|
+
return span;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* End a span with the given attributes and optional error.
|
|
376
|
+
*/
|
|
377
|
+
_endSpan(span, attributes, error) {
|
|
378
|
+
try {
|
|
379
|
+
const endAttributes = { 'gen_ai.event.end_time': new Date().toISOString() };
|
|
380
|
+
if (attributes)
|
|
381
|
+
Object.assign(endAttributes, attributes);
|
|
382
|
+
span.setAttributes(endAttributes);
|
|
383
|
+
if (error) {
|
|
384
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });
|
|
385
|
+
span.recordException(error);
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
389
|
+
}
|
|
390
|
+
span.end();
|
|
391
|
+
}
|
|
392
|
+
catch (err) {
|
|
393
|
+
logger.warn(`error=<${err}> | failed to end span`);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Add an event to a span.
|
|
398
|
+
*/
|
|
399
|
+
_addEvent(span, eventName, eventAttributes) {
|
|
400
|
+
try {
|
|
401
|
+
if (!eventAttributes) {
|
|
402
|
+
span.addEvent(eventName);
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
const otelAttributes = {};
|
|
406
|
+
for (const [key, value] of Object.entries(eventAttributes)) {
|
|
407
|
+
if (value !== undefined && value !== null)
|
|
408
|
+
otelAttributes[key] = value;
|
|
409
|
+
}
|
|
410
|
+
span.addEvent(eventName, otelAttributes);
|
|
411
|
+
}
|
|
412
|
+
catch (err) {
|
|
413
|
+
logger.warn(`error=<${err}>, event=<${eventName}> | failed to add span event`);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Get common attributes based on semantic convention version.
|
|
418
|
+
* The attribute name changed between OTEL semconv versions:
|
|
419
|
+
* - Stable: 'gen_ai.system'
|
|
420
|
+
* - Latest experimental: 'gen_ai.provider.name'
|
|
421
|
+
*/
|
|
422
|
+
_getCommonAttributes(operationName) {
|
|
423
|
+
const attributes = {
|
|
424
|
+
'gen_ai.operation.name': operationName,
|
|
425
|
+
};
|
|
426
|
+
if (this._useLatestConventions) {
|
|
427
|
+
attributes['gen_ai.provider.name'] = getServiceName();
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
attributes['gen_ai.system'] = getServiceName();
|
|
431
|
+
}
|
|
432
|
+
return attributes;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Add message events to a span.
|
|
436
|
+
* Uses different event formats based on semantic convention version:
|
|
437
|
+
* - Latest: Single 'gen_ai.client.inference.operation.details' event with all messages
|
|
438
|
+
* - Stable: Separate events per message (gen_ai.user.message, gen_ai.assistant.message, etc.)
|
|
439
|
+
*/
|
|
440
|
+
_addEventMessages(span, messages) {
|
|
441
|
+
try {
|
|
442
|
+
if (!Array.isArray(messages))
|
|
443
|
+
return;
|
|
444
|
+
if (this._useLatestConventions) {
|
|
445
|
+
const inputMessages = messages.map((m) => ({
|
|
446
|
+
role: m.role,
|
|
447
|
+
parts: Tracer._mapContentBlocksToOtelParts(m.content),
|
|
448
|
+
}));
|
|
449
|
+
this._addEvent(span, 'gen_ai.client.inference.operation.details', {
|
|
450
|
+
'gen_ai.input.messages': JSON.stringify(inputMessages, jsonReplacer),
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
else {
|
|
454
|
+
for (const message of messages) {
|
|
455
|
+
this._addEvent(span, this._getEventNameForMessage(message), {
|
|
456
|
+
content: JSON.stringify(message.content, jsonReplacer),
|
|
457
|
+
});
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
catch (err) {
|
|
462
|
+
logger.warn(`error=<${err}> | failed to add message events`);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Get the event name for a message based on its type.
|
|
467
|
+
*/
|
|
468
|
+
_getEventNameForMessage(message) {
|
|
469
|
+
if (message.role === 'user' && Array.isArray(message.content)) {
|
|
470
|
+
for (const block of message.content) {
|
|
471
|
+
if (block && typeof block === 'object' && 'type' in block && block.type === 'toolResultBlock') {
|
|
472
|
+
return 'gen_ai.tool.message';
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
if (message.role === 'user')
|
|
477
|
+
return 'gen_ai.user.message';
|
|
478
|
+
if (message.role === 'assistant')
|
|
479
|
+
return 'gen_ai.assistant.message';
|
|
480
|
+
return 'gen_ai.message';
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Set usage attributes on an attributes object.
|
|
484
|
+
* Sets both legacy (prompt_tokens/completion_tokens) and new (input_tokens/output_tokens)
|
|
485
|
+
* attribute names for compatibility with different OTEL backends.
|
|
486
|
+
*/
|
|
487
|
+
_setUsageAttributes(attributes, usage) {
|
|
488
|
+
attributes['gen_ai.usage.prompt_tokens'] = usage.inputTokens;
|
|
489
|
+
attributes['gen_ai.usage.input_tokens'] = usage.inputTokens;
|
|
490
|
+
attributes['gen_ai.usage.completion_tokens'] = usage.outputTokens;
|
|
491
|
+
attributes['gen_ai.usage.output_tokens'] = usage.outputTokens;
|
|
492
|
+
attributes['gen_ai.usage.total_tokens'] = usage.totalTokens;
|
|
493
|
+
if ((usage.cacheReadInputTokens ?? 0) > 0) {
|
|
494
|
+
attributes['gen_ai.usage.cache_read_input_tokens'] = usage.cacheReadInputTokens;
|
|
495
|
+
}
|
|
496
|
+
if ((usage.cacheWriteInputTokens ?? 0) > 0) {
|
|
497
|
+
attributes['gen_ai.usage.cache_write_input_tokens'] = usage.cacheWriteInputTokens;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Set metrics attributes on an attributes object.
|
|
502
|
+
*/
|
|
503
|
+
_setMetricsAttributes(attributes, metrics) {
|
|
504
|
+
if (metrics.latencyMs !== undefined && metrics.latencyMs > 0) {
|
|
505
|
+
attributes['gen_ai.server.request.duration'] = metrics.latencyMs;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* Add response event to a span.
|
|
510
|
+
*/
|
|
511
|
+
_addResponseEvent(span, response, stopReason) {
|
|
512
|
+
try {
|
|
513
|
+
const finishReason = stopReason || 'end_turn';
|
|
514
|
+
const textParts = [];
|
|
515
|
+
for (const block of response.content) {
|
|
516
|
+
if (block.type === 'textBlock') {
|
|
517
|
+
textParts.push(block.text);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
const messageText = textParts.join('\n');
|
|
521
|
+
if (this._useLatestConventions) {
|
|
522
|
+
this._addEvent(span, 'gen_ai.client.inference.operation.details', {
|
|
523
|
+
'gen_ai.output.messages': JSON.stringify([{ role: 'assistant', parts: [{ type: 'text', content: messageText }], finish_reason: finishReason }], jsonReplacer),
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
else {
|
|
527
|
+
this._addEvent(span, 'gen_ai.choice', { message: messageText, finish_reason: finishReason });
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
catch (err) {
|
|
531
|
+
logger.warn(`error=<${err}> | failed to add response event`);
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* Add output event to a span for model invocation.
|
|
536
|
+
*/
|
|
537
|
+
_addOutputEvent(span, message, stopReason) {
|
|
538
|
+
const finishReason = stopReason || 'unknown';
|
|
539
|
+
if (this._useLatestConventions) {
|
|
540
|
+
this._addEvent(span, 'gen_ai.client.inference.operation.details', {
|
|
541
|
+
'gen_ai.output.messages': JSON.stringify([
|
|
542
|
+
{
|
|
543
|
+
role: message.role,
|
|
544
|
+
parts: Tracer._mapContentBlocksToOtelParts(message.content),
|
|
545
|
+
finish_reason: finishReason,
|
|
546
|
+
},
|
|
547
|
+
], jsonReplacer),
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
else {
|
|
551
|
+
this._addEvent(span, 'gen_ai.choice', {
|
|
552
|
+
finish_reason: finishReason,
|
|
553
|
+
message: JSON.stringify(Tracer._mapContentBlocksToStableFormat(message.content), jsonReplacer),
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Parse the OTEL_SEMCONV_STABILITY_OPT_IN environment variable.
|
|
559
|
+
*/
|
|
560
|
+
static _parseSemconvOptIn() {
|
|
561
|
+
const optInEnv = globalThis?.process?.env?.OTEL_SEMCONV_STABILITY_OPT_IN ?? '';
|
|
562
|
+
return new Set(optInEnv
|
|
563
|
+
.split(',')
|
|
564
|
+
.map((value) => value.trim())
|
|
565
|
+
.filter((value) => value.length > 0));
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* Map content blocks to OTEL parts format (latest conventions).
|
|
569
|
+
* Converts SDK content block types to OTEL semantic convention format.
|
|
570
|
+
*/
|
|
571
|
+
static _mapContentBlocksToOtelParts(contentBlocks) {
|
|
572
|
+
if (!Array.isArray(contentBlocks))
|
|
573
|
+
return [];
|
|
574
|
+
return contentBlocks.map((block) => {
|
|
575
|
+
switch (block.type) {
|
|
576
|
+
case 'textBlock':
|
|
577
|
+
return { type: 'text', content: block.text };
|
|
578
|
+
case 'toolUseBlock':
|
|
579
|
+
return { type: 'tool_call', name: block.name, id: block.toolUseId, arguments: block.input };
|
|
580
|
+
case 'toolResultBlock':
|
|
581
|
+
return { type: 'tool_call_response', id: block.toolUseId, response: block.content };
|
|
582
|
+
default:
|
|
583
|
+
return block;
|
|
584
|
+
}
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* Map content blocks to stable format (older conventions).
|
|
589
|
+
* Simplifies content blocks to a minimal structure for legacy OTEL backends.
|
|
590
|
+
*/
|
|
591
|
+
static _mapContentBlocksToStableFormat(contentBlocks) {
|
|
592
|
+
if (!Array.isArray(contentBlocks))
|
|
593
|
+
return [];
|
|
594
|
+
return contentBlocks
|
|
595
|
+
.map((block) => {
|
|
596
|
+
switch (block.type) {
|
|
597
|
+
case 'textBlock':
|
|
598
|
+
return { text: block.text };
|
|
599
|
+
case 'toolUseBlock':
|
|
600
|
+
return { type: 'toolUse', name: block.name, toolUseId: block.toolUseId, input: block.input };
|
|
601
|
+
case 'toolResultBlock':
|
|
602
|
+
return { type: 'toolResult', toolUseId: block.toolUseId, content: block.content };
|
|
603
|
+
default:
|
|
604
|
+
return null;
|
|
605
|
+
}
|
|
606
|
+
})
|
|
607
|
+
.filter(Boolean);
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
//# sourceMappingURL=tracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../../src/telemetry/tracer.ts"],"names":[],"mappings":"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"}
|