From e37f2c8feed3e62eafc52357828d87e439e18040 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Mar 2026 21:08:48 +0000 Subject: [PATCH 1/2] Initial plan From 095d05d89dffc6aabaf6af34b7a2bd4f24ef8936 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Mar 2026 21:13:25 +0000 Subject: [PATCH 2/2] Truncate genai attributes to 256KB instead of exempting from truncation Co-authored-by: harsimar <19897860+harsimar@users.noreply.github.com> --- .../builders/AbstractTelemetryBuilder.java | 10 ++++---- .../AbstractTelemetryBuilderTest.java | 23 ++++++++++++++++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/builders/AbstractTelemetryBuilder.java b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/builders/AbstractTelemetryBuilder.java index c0e7e7400fa1..6760d36dac12 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/builders/AbstractTelemetryBuilder.java +++ b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/builders/AbstractTelemetryBuilder.java @@ -23,10 +23,11 @@ public abstract class AbstractTelemetryBuilder { private static final int MAX_PROPERTY_KEY_LENGTH = 150; private static final int MAX_PROPERTY_VALUE_LENGTH = 8192; + private static final int MAX_GENAI_PROPERTY_VALUE_LENGTH = 256 * 1024; // 256 KB // gen_ai properties can contain large payloads (e.g. full conversation messages, - // tool definitions) that should not be truncated - private static final Set TRUNCATION_EXEMPT_PROPERTY_KEYS = new HashSet<>(asList("gen_ai.input.messages", + // tool definitions) that are truncated at a higher limit (256 KB) + private static final Set GENAI_PROPERTY_KEYS = new HashSet<>(asList("gen_ai.input.messages", "gen_ai.output.messages", "gen_ai.system_instructions", "gen_ai.tool.definitions", "gen_ai.tool.call.arguments", "gen_ai.tool.call.result", "gen_ai.evaluation.explanation")); @@ -89,8 +90,9 @@ public void addProperty(@Nullable String key, @Nullable String value) { // TODO (trask) log return; } - if (TRUNCATION_EXEMPT_PROPERTY_KEYS.contains(key)) { - getProperties().put(key, value); + if (GENAI_PROPERTY_KEYS.contains(key)) { + getProperties().put(key, + TelemetryTruncation.truncatePropertyValue(value, MAX_GENAI_PROPERTY_VALUE_LENGTH, key)); } else { getProperties().put(key, TelemetryTruncation.truncatePropertyValue(value, MAX_PROPERTY_VALUE_LENGTH, key)); } diff --git a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/builders/AbstractTelemetryBuilderTest.java b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/builders/AbstractTelemetryBuilderTest.java index 63bbd6c45595..2e64d9130c56 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/builders/AbstractTelemetryBuilderTest.java +++ b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/test/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/builders/AbstractTelemetryBuilderTest.java @@ -35,7 +35,28 @@ public void regularPropertyIsTruncatedAt8192() { "gen_ai.tool.call.arguments", "gen_ai.tool.call.result", "gen_ai.evaluation.explanation" }) - public void genAiPropertyIsNotTruncated(String key) { + public void genAiPropertyIsTruncatedAt256KB(String key) { + MessageTelemetryBuilder builder = MessageTelemetryBuilder.create(); + int size256KB = 256 * 1024; + String longValue = repeat("a", size256KB + 10000); + builder.addProperty(key, longValue); + + TelemetryItem item = builder.build(); + Map properties = getProperties(item); + assertEquals(size256KB, properties.get(key).length()); + } + + @ParameterizedTest + @ValueSource( + strings = { + "gen_ai.input.messages", + "gen_ai.output.messages", + "gen_ai.system_instructions", + "gen_ai.tool.definitions", + "gen_ai.tool.call.arguments", + "gen_ai.tool.call.result", + "gen_ai.evaluation.explanation" }) + public void genAiPropertyUnder256KBIsNotTruncated(String key) { MessageTelemetryBuilder builder = MessageTelemetryBuilder.create(); String longValue = repeat("a", 50000); builder.addProperty(key, longValue);