Skip to content

Commit e097a17

Browse files
authored
Merge pull request #1170 from quarkiverse/observability-npes
Be more defensive in setting metadata for observability events
2 parents d56aa6b + 10d8159 commit e097a17

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

core/runtime/src/main/java/io/quarkiverse/langchain4j/runtime/listeners/MetricsChatModelListener.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import io.micrometer.core.instrument.Counter;
1717
import io.micrometer.core.instrument.Meter;
1818
import io.micrometer.core.instrument.Metrics;
19-
import io.micrometer.core.instrument.Tag;
2019
import io.micrometer.core.instrument.Tags;
2120
import io.micrometer.core.instrument.Timer;
2221
import io.quarkiverse.langchain4j.cost.Cost;
@@ -78,9 +77,10 @@ public void onResponse(ChatModelResponseContext responseContext) {
7877

7978
ChatModelRequest request = responseContext.request();
8079
ChatModelResponse response = responseContext.response();
81-
Tags tags = Tags.of(
82-
Tag.of("gen_ai.request.model", request.model()),
83-
Tag.of("gen_ai.response.model", response.model()));
80+
Tags tags = Tags.of("gen_ai.request.model", request.model());
81+
if (response.model() != null) {
82+
tags = tags.and("gen_ai.response.model", response.model());
83+
}
8484
if (ContextLocals.duplicatedContextActive()) {
8585
String aiServiceClassName = ContextLocals.get(AiServiceConstants.AI_SERVICE_CLASS_NAME);
8686
if (aiServiceClassName != null) {
@@ -112,10 +112,13 @@ public void onError(ChatModelErrorContext errorContext) {
112112
return;
113113
}
114114

115-
Tags tags = Tags.of(
116-
Tag.of("gen_ai.request.model", errorContext.request().model()),
117-
Tag.of("gen_ai.response.model", errorContext.partialResponse().model()),
118-
Tag.of("error.type", aiMessage.text()));
115+
Tags tags = Tags.of("gen_ai.request.model", errorContext.request().model());
116+
if (errorContext.partialResponse().model() != null) {
117+
tags = tags.and("gen_ai.response.model", errorContext.partialResponse().model());
118+
}
119+
if (aiMessage.text() != null) {
120+
tags = tags.and("error.type", aiMessage.text());
121+
}
119122
duration.withTags(tags).record(endTime - startTime, TimeUnit.NANOSECONDS);
120123
}
121124

core/runtime/src/main/java/io/quarkiverse/langchain4j/runtime/listeners/SpanChatModelListener.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,10 @@ public void onResponse(ChatModelResponseContext responseContext) {
6161
Span span = (Span) attributes.get(OTEL_SPAN_KEY_NAME);
6262
if (span != null) {
6363
ChatModelResponse response = responseContext.response();
64-
span.setAttribute("gen_ai.response.id", response.id()).setAttribute("gen_ai.response.model", response.model());
64+
span.setAttribute("gen_ai.response.id", response.id());
65+
if (response.model() != null) {
66+
span.setAttribute("gen_ai.response.model", response.model());
67+
}
6568
if (response.finishReason() != null) {
6669
span.setAttribute("gen_ai.response.finish_reasons", response.finishReason().toString());
6770
}

0 commit comments

Comments
 (0)