Skip to content

Commit 54375e0

Browse files
authored
Add initial gen_ai instrumentation of bedrock InvokeModel (#13547)
1 parent 8cd3ea0 commit 54375e0

8 files changed

+1198
-63
lines changed

instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/BedrockRuntimeAccess.java

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import javax.annotation.Nullable;
1313
import software.amazon.awssdk.core.SdkRequest;
1414
import software.amazon.awssdk.core.SdkResponse;
15+
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
1516

1617
final class BedrockRuntimeAccess {
1718
private BedrockRuntimeAccess() {}
@@ -44,72 +45,99 @@ static boolean isBedrockRuntimeResponse(SdkResponse response) {
4445
return enabled && BedrockRuntimeImpl.isBedrockRuntimeResponse(response);
4546
}
4647

48+
@NoMuzzle
49+
static void maybeParseInvokeModelRequest(
50+
ExecutionAttributes executionAttributes, SdkRequest request) {
51+
if (enabled) {
52+
BedrockRuntimeImpl.maybeParseInvokeModelRequest(executionAttributes, request);
53+
}
54+
}
55+
56+
@NoMuzzle
57+
static void maybeParseInvokeModelResponse(
58+
ExecutionAttributes executionAttributes, SdkResponse response) {
59+
if (enabled) {
60+
BedrockRuntimeImpl.maybeParseInvokeModelResponse(executionAttributes, response);
61+
}
62+
}
63+
64+
@Nullable
65+
@NoMuzzle
66+
static String getModelId(ExecutionAttributes executionAttributes) {
67+
return enabled ? BedrockRuntimeImpl.getModelId(executionAttributes) : null;
68+
}
69+
4770
@Nullable
4871
@NoMuzzle
49-
static String getModelId(SdkRequest request) {
50-
return enabled ? BedrockRuntimeImpl.getModelId(request) : null;
72+
static String getOperationName(ExecutionAttributes executionAttributes) {
73+
return enabled ? BedrockRuntimeImpl.getOperationName(executionAttributes) : null;
5174
}
5275

5376
@Nullable
5477
@NoMuzzle
55-
static Long getMaxTokens(SdkRequest request) {
56-
return enabled ? BedrockRuntimeImpl.getMaxTokens(request) : null;
78+
static Long getMaxTokens(ExecutionAttributes executionAttributes) {
79+
return enabled ? BedrockRuntimeImpl.getMaxTokens(executionAttributes) : null;
5780
}
5881

5982
@Nullable
6083
@NoMuzzle
61-
static Double getTemperature(SdkRequest request) {
62-
return enabled ? BedrockRuntimeImpl.getTemperature(request) : null;
84+
static Double getTemperature(ExecutionAttributes executionAttributes) {
85+
return enabled ? BedrockRuntimeImpl.getTemperature(executionAttributes) : null;
6386
}
6487

6588
@Nullable
6689
@NoMuzzle
67-
static Double getTopP(SdkRequest request) {
68-
return enabled ? BedrockRuntimeImpl.getTopP(request) : null;
90+
static Double getTopP(ExecutionAttributes executionAttributes) {
91+
return enabled ? BedrockRuntimeImpl.getTopP(executionAttributes) : null;
6992
}
7093

7194
@Nullable
7295
@NoMuzzle
73-
static List<String> getStopSequences(SdkRequest request) {
74-
return enabled ? BedrockRuntimeImpl.getStopSequences(request) : null;
96+
static List<String> getStopSequences(ExecutionAttributes executionAttributes) {
97+
return enabled ? BedrockRuntimeImpl.getStopSequences(executionAttributes) : null;
7598
}
7699

77100
@Nullable
78101
@NoMuzzle
79-
static List<String> getStopReasons(Response response) {
80-
return enabled ? BedrockRuntimeImpl.getStopReasons(response) : null;
102+
static List<String> getStopReasons(ExecutionAttributes executionAttributes, Response response) {
103+
return enabled ? BedrockRuntimeImpl.getStopReasons(executionAttributes, response) : null;
81104
}
82105

83106
@Nullable
84107
@NoMuzzle
85-
static Long getUsageInputTokens(Response response) {
86-
return enabled ? BedrockRuntimeImpl.getUsageInputTokens(response) : null;
108+
static Long getUsageInputTokens(ExecutionAttributes executionAttributes, Response response) {
109+
return enabled ? BedrockRuntimeImpl.getUsageInputTokens(executionAttributes, response) : null;
87110
}
88111

89112
@Nullable
90113
@NoMuzzle
91-
static Long getUsageOutputTokens(Response response) {
92-
return enabled ? BedrockRuntimeImpl.getUsageOutputTokens(response) : null;
114+
static Long getUsageOutputTokens(ExecutionAttributes executionAttributes, Response response) {
115+
return enabled ? BedrockRuntimeImpl.getUsageOutputTokens(executionAttributes, response) : null;
93116
}
94117

95118
@NoMuzzle
96119
static void recordRequestEvents(
97-
Context otelContext, Logger eventLogger, SdkRequest request, boolean captureMessageContent) {
120+
Context otelContext,
121+
Logger eventLogger,
122+
ExecutionAttributes executionAttributes,
123+
SdkRequest request,
124+
boolean captureMessageContent) {
98125
if (enabled) {
99126
BedrockRuntimeImpl.recordRequestEvents(
100-
otelContext, eventLogger, request, captureMessageContent);
127+
otelContext, eventLogger, executionAttributes, request, captureMessageContent);
101128
}
102129
}
103130

104131
@NoMuzzle
105132
static void recordResponseEvents(
106133
Context otelContext,
107134
Logger eventLogger,
135+
ExecutionAttributes executionAttributes,
108136
SdkResponse response,
109137
boolean captureMessageContent) {
110138
if (enabled) {
111139
BedrockRuntimeImpl.recordResponseEvents(
112-
otelContext, eventLogger, response, captureMessageContent);
140+
otelContext, eventLogger, executionAttributes, response, captureMessageContent);
113141
}
114142
}
115143
}

instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/BedrockRuntimeAttributesGetter.java

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,18 @@
55

66
package io.opentelemetry.instrumentation.awssdk.v2_2.internal;
77

8-
import static io.opentelemetry.instrumentation.awssdk.v2_2.internal.TracingExecutionInterceptor.SDK_REQUEST_ATTRIBUTE;
98
import static java.util.Collections.emptyList;
109

1110
import io.opentelemetry.instrumentation.api.incubator.semconv.genai.GenAiAttributesGetter;
1211
import java.util.Collections;
1312
import java.util.List;
1413
import javax.annotation.Nullable;
1514
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
16-
import software.amazon.awssdk.core.interceptor.SdkExecutionAttribute;
1715

1816
enum BedrockRuntimeAttributesGetter
1917
implements GenAiAttributesGetter<ExecutionAttributes, Response> {
2018
INSTANCE;
2119

22-
// copied from GenAiIncubatingAttributes
23-
private static final class GenAiOperationNameIncubatingValues {
24-
static final String CHAT = "chat";
25-
26-
private GenAiOperationNameIncubatingValues() {}
27-
}
28-
2920
static final class GenAiSystemIncubatingValues {
3021
static final String AWS_BEDROCK = "aws.bedrock";
3122

@@ -34,18 +25,7 @@ private GenAiSystemIncubatingValues() {}
3425

3526
@Override
3627
public String getOperationName(ExecutionAttributes executionAttributes) {
37-
String operation = executionAttributes.getAttribute(SdkExecutionAttribute.OPERATION_NAME);
38-
if (operation != null) {
39-
switch (operation) {
40-
case "Converse":
41-
// fallthrough
42-
case "ConverseStream":
43-
return GenAiOperationNameIncubatingValues.CHAT;
44-
default:
45-
return null;
46-
}
47-
}
48-
return null;
28+
return BedrockRuntimeAccess.getOperationName(executionAttributes);
4929
}
5030

5131
@Override
@@ -56,7 +36,7 @@ public String getSystem(ExecutionAttributes executionAttributes) {
5636
@Nullable
5737
@Override
5838
public String getRequestModel(ExecutionAttributes executionAttributes) {
59-
return BedrockRuntimeAccess.getModelId(executionAttributes.getAttribute(SDK_REQUEST_ATTRIBUTE));
39+
return BedrockRuntimeAccess.getModelId(executionAttributes);
6040
}
6141

6242
@Nullable
@@ -80,8 +60,7 @@ public Double getRequestFrequencyPenalty(ExecutionAttributes executionAttributes
8060
@Nullable
8161
@Override
8262
public Long getRequestMaxTokens(ExecutionAttributes executionAttributes) {
83-
return BedrockRuntimeAccess.getMaxTokens(
84-
executionAttributes.getAttribute(SDK_REQUEST_ATTRIBUTE));
63+
return BedrockRuntimeAccess.getMaxTokens(executionAttributes);
8564
}
8665

8766
@Nullable
@@ -93,15 +72,13 @@ public Double getRequestPresencePenalty(ExecutionAttributes executionAttributes)
9372
@Nullable
9473
@Override
9574
public List<String> getRequestStopSequences(ExecutionAttributes executionAttributes) {
96-
return BedrockRuntimeAccess.getStopSequences(
97-
executionAttributes.getAttribute(SDK_REQUEST_ATTRIBUTE));
75+
return BedrockRuntimeAccess.getStopSequences(executionAttributes);
9876
}
9977

10078
@Nullable
10179
@Override
10280
public Double getRequestTemperature(ExecutionAttributes executionAttributes) {
103-
return BedrockRuntimeAccess.getTemperature(
104-
executionAttributes.getAttribute(SDK_REQUEST_ATTRIBUTE));
81+
return BedrockRuntimeAccess.getTemperature(executionAttributes);
10582
}
10683

10784
@Nullable
@@ -113,7 +90,7 @@ public Double getRequestTopK(ExecutionAttributes executionAttributes) {
11390
@Nullable
11491
@Override
11592
public Double getRequestTopP(ExecutionAttributes executionAttributes) {
116-
return BedrockRuntimeAccess.getTopP(executionAttributes.getAttribute(SDK_REQUEST_ATTRIBUTE));
93+
return BedrockRuntimeAccess.getTopP(executionAttributes);
11794
}
11895

11996
@Override
@@ -122,7 +99,7 @@ public List<String> getResponseFinishReasons(
12299
if (response == null) {
123100
return emptyList();
124101
}
125-
List<String> stopReasons = BedrockRuntimeAccess.getStopReasons(response);
102+
List<String> stopReasons = BedrockRuntimeAccess.getStopReasons(executionAttributes, response);
126103
if (stopReasons == null) {
127104
return Collections.emptyList();
128105
}
@@ -148,7 +125,7 @@ public Long getUsageInputTokens(
148125
if (response == null) {
149126
return null;
150127
}
151-
return BedrockRuntimeAccess.getUsageInputTokens(response);
128+
return BedrockRuntimeAccess.getUsageInputTokens(executionAttributes, response);
152129
}
153130

154131
@Nullable
@@ -158,6 +135,6 @@ public Long getUsageOutputTokens(
158135
if (response == null) {
159136
return null;
160137
}
161-
return BedrockRuntimeAccess.getUsageOutputTokens(response);
138+
return BedrockRuntimeAccess.getUsageOutputTokens(executionAttributes, response);
162139
}
163140
}

0 commit comments

Comments
 (0)