From cbd622682457282712ff382f2da38ca40419e695 Mon Sep 17 00:00:00 2001 From: Yury Gribkov Date: Tue, 24 Feb 2026 10:30:30 +0100 Subject: [PATCH] llmobs: set model tag even when llmobs disabled --- .../openai_java/ChatCompletionDecorator.java | 18 +++++++------ .../openai_java/CompletionDecorator.java | 27 ++++++++++--------- .../openai_java/EmbeddingDecorator.java | 19 ++++++------- .../openai_java/ResponseDecorator.java | 23 +++++++--------- 4 files changed, 44 insertions(+), 43 deletions(-) diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionDecorator.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionDecorator.java index 6c9e9cad9d9..74f14a9daf2 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionDecorator.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ChatCompletionDecorator.java @@ -31,11 +31,6 @@ public void withChatCompletionCreateParams( AgentSpan span, ChatCompletionCreateParams params, boolean stream) { span.setResourceName(CHAT_COMPLETIONS_CREATE); span.setTag(CommonTags.OPENAI_REQUEST_ENDPOINT, "/v1/chat/completions"); - if (!llmObsEnabled) { - return; - } - - span.setTag(CommonTags.SPAN_KIND, Tags.LLMOBS_LLM_SPAN_KIND); if (params == null) { return; } @@ -45,6 +40,12 @@ public void withChatCompletionCreateParams( .asString() .ifPresent(str -> span.setTag(CommonTags.OPENAI_REQUEST_MODEL, str)); + if (!llmObsEnabled) { + return; + } + + span.setTag(CommonTags.SPAN_KIND, Tags.LLMOBS_LLM_SPAN_KIND); + span.setTag( CommonTags.INPUT, params.messages().stream() @@ -97,13 +98,14 @@ private static LLMObs.LLMMessage llmMessage(ChatCompletionMessageParam m) { } public void withChatCompletion(AgentSpan span, ChatCompletion completion) { - if (!llmObsEnabled) { - return; - } String modelName = completion.model(); span.setTag(CommonTags.OPENAI_RESPONSE_MODEL, modelName); span.setTag(CommonTags.MODEL_NAME, modelName); + if (!llmObsEnabled) { + return; + } + List output = completion.choices().stream() .map(ChatCompletionDecorator::llmMessage) diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionDecorator.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionDecorator.java index 2291c860d00..51e7c12ef1c 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionDecorator.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/CompletionDecorator.java @@ -23,11 +23,6 @@ public class CompletionDecorator { public void withCompletionCreateParams(AgentSpan span, CompletionCreateParams params) { span.setResourceName(COMPLETIONS_CREATE); span.setTag(CommonTags.OPENAI_REQUEST_ENDPOINT, "/v1/completions"); - if (!llmObsEnabled) { - return; - } - - span.setTag(CommonTags.SPAN_KIND, Tags.LLMOBS_LLM_SPAN_KIND); if (params == null) { return; } @@ -37,6 +32,12 @@ public void withCompletionCreateParams(AgentSpan span, CompletionCreateParams pa ._value() .asString() .ifPresent(str -> span.setTag(CommonTags.OPENAI_REQUEST_MODEL, str)); + + if (!llmObsEnabled) { + return; + } + + span.setTag(CommonTags.SPAN_KIND, Tags.LLMOBS_LLM_SPAN_KIND); params .prompt() .flatMap(p -> p.string()) @@ -61,14 +62,14 @@ public void withCompletionCreateParams(AgentSpan span, CompletionCreateParams pa } public void withCompletion(AgentSpan span, Completion completion) { - if (!llmObsEnabled) { - return; - } - String modelName = completion.model(); span.setTag(CommonTags.OPENAI_RESPONSE_MODEL, modelName); span.setTag(CommonTags.MODEL_NAME, modelName); + if (!llmObsEnabled) { + return; + } + List output = completion.choices().stream() .map(v -> LLMObs.LLMMessage.from(null, v.text())) @@ -86,10 +87,6 @@ public void withCompletion(AgentSpan span, Completion completion) { } public void withCompletions(AgentSpan span, List completions) { - if (!llmObsEnabled) { - return; - } - if (completions.isEmpty()) { return; } @@ -99,6 +96,10 @@ public void withCompletions(AgentSpan span, List completions) { span.setTag(CommonTags.OPENAI_RESPONSE_MODEL, modelName); span.setTag(CommonTags.MODEL_NAME, modelName); + if (!llmObsEnabled) { + return; + } + Map textByChoiceIndex = new HashMap<>(); for (Completion completion : completions) { completion diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/EmbeddingDecorator.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/EmbeddingDecorator.java index 88098358ebf..02d4588358c 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/EmbeddingDecorator.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/EmbeddingDecorator.java @@ -25,11 +25,6 @@ public class EmbeddingDecorator { public void withEmbeddingCreateParams(AgentSpan span, EmbeddingCreateParams params) { span.setResourceName(EMBEDDINGS_CREATE); span.setTag(CommonTags.OPENAI_REQUEST_ENDPOINT, "/v1/embeddings"); - if (!llmObsEnabled) { - return; - } - - span.setTag(CommonTags.SPAN_KIND, Tags.LLMOBS_EMBEDDING_SPAN_KIND); if (params == null) { return; } @@ -39,6 +34,12 @@ public void withEmbeddingCreateParams(AgentSpan span, EmbeddingCreateParams para .asString() .ifPresent(str -> span.setTag(CommonTags.OPENAI_REQUEST_MODEL, str)); + if (!llmObsEnabled) { + return; + } + + span.setTag(CommonTags.SPAN_KIND, Tags.LLMOBS_EMBEDDING_SPAN_KIND); + span.setTag(CommonTags.INPUT, embeddingDocuments(params.input())); Map metadata = new HashMap<>(); @@ -59,14 +60,14 @@ private List embeddingDocuments(EmbeddingCreateParams.Input inp } public void withCreateEmbeddingResponse(AgentSpan span, CreateEmbeddingResponse response) { - if (!llmObsEnabled) { - return; - } - String modelName = response.model(); span.setTag(CommonTags.OPENAI_RESPONSE_MODEL, modelName); span.setTag(CommonTags.MODEL_NAME, modelName); + if (!llmObsEnabled) { + return; + } + if (!response.data().isEmpty()) { int embeddingCount = response.data().size(); Embedding firstEmbedding = response.data().get(0); diff --git a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseDecorator.java b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseDecorator.java index 4bc95e32934..db2258785d4 100644 --- a/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseDecorator.java +++ b/dd-java-agent/instrumentation/openai-java/openai-java-3.0/src/main/java/datadog/trace/instrumentation/openai_java/ResponseDecorator.java @@ -37,11 +37,6 @@ public class ResponseDecorator { public void withResponseCreateParams(AgentSpan span, ResponseCreateParams params) { span.setResourceName(RESPONSES_CREATE); span.setTag(CommonTags.OPENAI_REQUEST_ENDPOINT, "/v1/responses"); - if (!llmObsEnabled) { - return; - } - - span.setTag(CommonTags.SPAN_KIND, Tags.LLMOBS_LLM_SPAN_KIND); if (params == null) { return; } @@ -51,6 +46,12 @@ public void withResponseCreateParams(AgentSpan span, ResponseCreateParams params String modelName = extractResponseModel(params._model()); span.setTag(CommonTags.OPENAI_REQUEST_MODEL, modelName); + if (!llmObsEnabled) { + return; + } + + span.setTag(CommonTags.SPAN_KIND, Tags.LLMOBS_LLM_SPAN_KIND); + List inputMessages = new ArrayList<>(); params @@ -369,10 +370,6 @@ public void withResponse(AgentSpan span, Response response) { } public void withResponseStreamEvents(AgentSpan span, List events) { - if (!llmObsEnabled) { - return; - } - for (ResponseStreamEvent event : events) { if (event.isCompleted()) { Response response = event.asCompleted().response(); @@ -388,14 +385,14 @@ public void withResponseStreamEvents(AgentSpan span, List e } private void withResponse(AgentSpan span, Response response, boolean stream) { - if (!llmObsEnabled) { - return; - } - String modelName = extractResponseModel(response._model()); span.setTag(CommonTags.OPENAI_RESPONSE_MODEL, modelName); span.setTag(CommonTags.MODEL_NAME, modelName); + if (!llmObsEnabled) { + return; + } + List outputMessages = extractResponseOutputMessages(response.output()); if (!outputMessages.isEmpty()) { span.setTag(CommonTags.OUTPUT, outputMessages);