Skip to content

Commit 1494fdd

Browse files
committed
refactor
1 parent 3f389c6 commit 1494fdd

5 files changed

Lines changed: 43 additions & 49 deletions

File tree

instrumentation/openai/openai-java-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/openai/v1_1/ChatTest.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_MESSAGE;
1111
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_STACKTRACE;
1212
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_TYPE;
13+
import static java.util.Collections.singletonList;
1314

1415
import com.openai.client.OpenAIClient;
1516
import com.openai.client.OpenAIClientAsync;
@@ -55,10 +56,8 @@ protected List<Consumer<SpanDataAssert>> maybeWithTransportSpan(Consumer<SpanDat
5556
}
5657

5758
@Override
58-
protected List<Consumer<LogRecordDataAssert>> maybeWithTransportExceptionLog(
59-
Consumer<LogRecordDataAssert> logRecord) {
60-
List<Consumer<LogRecordDataAssert>> result = new ArrayList<>();
61-
result.add(
59+
protected List<Consumer<LogRecordDataAssert>> transportExceptionLogs() {
60+
return singletonList(
6261
transportLog ->
6362
transportLog
6463
.hasSeverity(Severity.WARN)
@@ -68,7 +67,5 @@ protected List<Consumer<LogRecordDataAssert>> maybeWithTransportExceptionLog(
6867
satisfies(
6968
EXCEPTION_MESSAGE, val -> val.startsWith("Failed to connect to localhost")),
7069
satisfies(EXCEPTION_STACKTRACE, val -> val.isNotNull())));
71-
result.add(logRecord);
72-
return result;
7370
}
7471
}

instrumentation/openai/openai-java-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/openai/v1_1/EmbeddingsTest.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_MESSAGE;
1111
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_STACKTRACE;
1212
import static io.opentelemetry.semconv.ExceptionAttributes.EXCEPTION_TYPE;
13+
import static java.util.Collections.singletonList;
1314

1415
import com.openai.client.OpenAIClient;
1516
import com.openai.client.OpenAIClientAsync;
@@ -55,10 +56,8 @@ protected List<Consumer<SpanDataAssert>> maybeWithTransportSpan(Consumer<SpanDat
5556
}
5657

5758
@Override
58-
protected List<Consumer<LogRecordDataAssert>> maybeWithTransportExceptionLog(
59-
Consumer<LogRecordDataAssert> logRecord) {
60-
List<Consumer<LogRecordDataAssert>> result = new ArrayList<>();
61-
result.add(
59+
protected List<Consumer<LogRecordDataAssert>> transportExceptionLogs() {
60+
return singletonList(
6261
transportLog ->
6362
transportLog
6463
.hasSeverity(Severity.WARN)
@@ -68,7 +67,5 @@ protected List<Consumer<LogRecordDataAssert>> maybeWithTransportExceptionLog(
6867
satisfies(
6968
EXCEPTION_MESSAGE, val -> val.startsWith("Failed to connect to localhost")),
7069
satisfies(EXCEPTION_STACKTRACE, val -> val.isNotNull())));
71-
result.add(logRecord);
72-
return result;
7370
}
7471
}

instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
package io.opentelemetry.instrumentation.openai.v1_1;
77

88
import static io.opentelemetry.api.common.AttributeKey.stringKey;
9-
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsLogs;
109
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
1110
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
1211
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies;
@@ -64,7 +63,6 @@
6463
import com.openai.models.chat.completions.ChatCompletionUserMessageParam;
6564
import io.opentelemetry.api.common.KeyValue;
6665
import io.opentelemetry.api.common.Value;
67-
import io.opentelemetry.api.logs.Severity;
6866
import io.opentelemetry.api.trace.Span;
6967
import io.opentelemetry.api.trace.SpanContext;
7068
import io.opentelemetry.context.Context;
@@ -1654,23 +1652,10 @@ private List<Consumer<LogRecordDataAssert>> connectionErrorLogs(
16541652
equalTo(stringKey("event.name"), "gen_ai.user.message"))
16551653
.hasSpanContext(spanCtx)
16561654
.hasBody(Value.of(KeyValue.of("content", Value.of(TEST_CHAT_INPUT)))));
1657-
if (emitExceptionAsLogs()) {
1658-
assertions.addAll(
1659-
maybeWithTransportExceptionLog(
1660-
log ->
1661-
log.hasSeverity(Severity.WARN)
1662-
.hasEventName("gen_ai.client.operation.exception")
1663-
.hasException(thrown)
1664-
.hasTotalAttributeCount(3)));
1665-
}
1655+
assertions.addAll(genAiClientExceptionLogs(thrown));
16661656
return assertions;
16671657
}
16681658

1669-
protected List<Consumer<LogRecordDataAssert>> maybeWithTransportExceptionLog(
1670-
Consumer<LogRecordDataAssert> logRecord) {
1671-
return singletonList(logRecord);
1672-
}
1673-
16741659
protected static ChatCompletionMessageParam createUserMessage(String content) {
16751660
return ChatCompletionMessageParam.ofUser(
16761661
ChatCompletionUserMessageParam.builder()

instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
package io.opentelemetry.instrumentation.openai.v1_1;
77

8-
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsLogs;
98
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents;
109
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
1110
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
@@ -31,15 +30,11 @@
3130
import com.openai.errors.OpenAIIoException;
3231
import com.openai.models.embeddings.CreateEmbeddingResponse;
3332
import com.openai.models.embeddings.EmbeddingCreateParams;
34-
import io.opentelemetry.api.logs.Severity;
3533
import io.opentelemetry.api.trace.Span;
3634
import io.opentelemetry.api.trace.SpanKind;
3735
import io.opentelemetry.context.Context;
3836
import io.opentelemetry.instrumentation.testing.internal.AutoCleanupExtension;
39-
import io.opentelemetry.sdk.testing.assertj.LogRecordDataAssert;
40-
import java.util.List;
4137
import java.util.concurrent.CompletionException;
42-
import java.util.function.Consumer;
4338
import org.junit.jupiter.api.Test;
4439
import org.junit.jupiter.api.extension.RegisterExtension;
4540

@@ -260,17 +255,7 @@ void connectionError() {
260255
GEN_AI_REQUEST_ENCODING_FORMATS,
261256
val -> val.isIn(singletonList("base64"), null))))));
262257

263-
if (emitExceptionAsLogs()) {
264-
getTesting()
265-
.waitAndAssertLogRecords(
266-
maybeWithTransportExceptionLog(
267-
logRecord ->
268-
logRecord
269-
.hasSeverity(Severity.WARN)
270-
.hasEventName("gen_ai.client.operation.exception")
271-
.hasException(thrown)
272-
.hasTotalAttributeCount(3)));
273-
}
258+
getTesting().waitAndAssertLogRecords(genAiClientExceptionLogs(thrown));
274259

275260
getTesting()
276261
.waitAndAssertMetrics(
@@ -289,9 +274,4 @@ void connectionError() {
289274
equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS),
290275
equalTo(GEN_AI_REQUEST_MODEL, MODEL)))));
291276
}
292-
293-
protected List<Consumer<LogRecordDataAssert>> maybeWithTransportExceptionLog(
294-
Consumer<LogRecordDataAssert> logRecord) {
295-
return singletonList(logRecord);
296-
}
297277
}

instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractOpenAiTest.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,22 @@
55

66
package io.opentelemetry.instrumentation.openai.v1_1;
77

8+
import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsLogs;
89
import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps;
10+
import static java.util.Collections.emptyList;
911

1012
import com.openai.client.OpenAIClient;
1113
import com.openai.client.OpenAIClientAsync;
1214
import com.openai.client.okhttp.OpenAIOkHttpClient;
1315
import com.openai.client.okhttp.OpenAIOkHttpClientAsync;
16+
import io.opentelemetry.api.logs.Severity;
1417
import io.opentelemetry.instrumentation.openai.TestHelper;
1518
import io.opentelemetry.instrumentation.openai.v3_0.OpenAi3TestHelper;
1619
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
1720
import io.opentelemetry.instrumentation.testing.recording.RecordingExtension;
21+
import io.opentelemetry.sdk.testing.assertj.LogRecordDataAssert;
1822
import io.opentelemetry.sdk.testing.assertj.SpanDataAssert;
23+
import java.util.ArrayList;
1924
import java.util.List;
2025
import java.util.function.Consumer;
2126
import org.junit.jupiter.api.extension.RegisterExtension;
@@ -90,5 +95,35 @@ protected OpenAIClientAsync getClientAsync() {
9095
protected abstract List<Consumer<SpanDataAssert>> maybeWithTransportSpan(
9196
Consumer<SpanDataAssert> span);
9297

98+
/**
99+
* Returns the log record assertions expected when a GenAI client operation fails. Empty unless
100+
* exceptions are emitted as logs, in which case it contains the {@code
101+
* gen_ai.client.operation.exception} log, preceded by any transport-level exception logs supplied
102+
* by {@link #transportExceptionLogs}.
103+
*/
104+
protected final List<Consumer<LogRecordDataAssert>> genAiClientExceptionLogs(Throwable thrown) {
105+
if (!emitExceptionAsLogs()) {
106+
return emptyList();
107+
}
108+
List<Consumer<LogRecordDataAssert>> logs = new ArrayList<>(transportExceptionLogs());
109+
logs.add(
110+
logRecord ->
111+
logRecord
112+
.hasSeverity(Severity.WARN)
113+
.hasEventName("gen_ai.client.operation.exception")
114+
.hasException(thrown)
115+
.hasTotalAttributeCount(3));
116+
return logs;
117+
}
118+
119+
/**
120+
* Returns the transport-level exception log assertions emitted by additional instrumentation
121+
* (e.g. the HTTP client under the javaagent), ordered before the GenAI exception log. Empty by
122+
* default.
123+
*/
124+
protected List<Consumer<LogRecordDataAssert>> transportExceptionLogs() {
125+
return emptyList();
126+
}
127+
93128
@Parameter protected TestType testType;
94129
}

0 commit comments

Comments
 (0)