From c19ecd106deb514b56ee431d69a6760306188d26 Mon Sep 17 00:00:00 2001 From: pwoosam Date: Fri, 10 Jul 2026 00:08:25 -0700 Subject: [PATCH 1/2] Fix CompactionMessageIndex.IsSummaryMessage --- .../Compaction/CompactionMessageIndex.cs | 8 ++++- .../Compaction/CompactionMessageIndexTests.cs | 29 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/dotnet/src/Microsoft.Agents.AI/Compaction/CompactionMessageIndex.cs b/dotnet/src/Microsoft.Agents.AI/Compaction/CompactionMessageIndex.cs index 003a70f2b3a..90c2366f4f7 100644 --- a/dotnet/src/Microsoft.Agents.AI/Compaction/CompactionMessageIndex.cs +++ b/dotnet/src/Microsoft.Agents.AI/Compaction/CompactionMessageIndex.cs @@ -5,6 +5,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; +using System.Text.Json; using Microsoft.Extensions.AI; using Microsoft.ML.Tokenizers; using Microsoft.Shared.DiagnosticIds; @@ -525,5 +526,10 @@ private static bool HasOnlyReasoning(ChatMessage message) => private static bool IsSummaryMessage(ChatMessage message) => message.AdditionalProperties?.TryGetValue(CompactionMessageGroup.SummaryPropertyKey, out object? value) is true - && value is true; + && value switch + { + bool b => b, + JsonElement j => j.GetBoolean(), + _ => false, + }; } diff --git a/dotnet/tests/Microsoft.Agents.AI.UnitTests/Compaction/CompactionMessageIndexTests.cs b/dotnet/tests/Microsoft.Agents.AI.UnitTests/Compaction/CompactionMessageIndexTests.cs index ea0ecd0d449..af915778a86 100644 --- a/dotnet/tests/Microsoft.Agents.AI.UnitTests/Compaction/CompactionMessageIndexTests.cs +++ b/dotnet/tests/Microsoft.Agents.AI.UnitTests/Compaction/CompactionMessageIndexTests.cs @@ -3,6 +3,7 @@ using System; using System.Buffers; using System.Collections.Generic; +using System.Text.Json; using Microsoft.Agents.AI.Compaction; using Microsoft.Extensions.AI; using Microsoft.ML.Tokenizers; @@ -1474,4 +1475,32 @@ public void UpdateIncrementallyAppendsReasoningToolCallGroup() Assert.Equal(CompactionGroupKind.ToolCall, index.Groups[2].Kind); Assert.Equal(3, index.Groups[2].MessageCount); // reasoning + toolCall + toolResult } + + [Theory] + [InlineData(null, CompactionGroupKind.AssistantText)] + [InlineData(false, CompactionGroupKind.AssistantText)] + [InlineData("false", CompactionGroupKind.AssistantText)] + [InlineData(true, CompactionGroupKind.Summary)] + [InlineData("true", CompactionGroupKind.Summary)] + public void SummaryPropertyKeyIsRespected(object? summaryPropertyValue, CompactionGroupKind expectedCompactionGroupKind) + { + ChatMessage message = new(ChatRole.Assistant, "Hello"); + message.AdditionalProperties ??= []; + + // Convert string to JsonElement for the deserialized case + if (summaryPropertyValue != null) + { + message.AdditionalProperties[CompactionMessageGroup.SummaryPropertyKey] = summaryPropertyValue switch + { + string s => JsonDocument.Parse(s).RootElement, + _ => summaryPropertyValue + }; + } + + CompactionMessageIndex index = CompactionMessageIndex.Create([message]); + + // Assert — the message is recognized as a summary message + Assert.Single(index.Groups); + Assert.Equal(expectedCompactionGroupKind, index.Groups[0].Kind); + } } From 4d1f1d091b5abf7e1cb1e253da324edc142f6030 Mon Sep 17 00:00:00 2001 From: pwoosam Date: Fri, 10 Jul 2026 00:30:31 -0700 Subject: [PATCH 2/2] Add more robust JsonElement value checking and tests cases --- .../Microsoft.Agents.AI/Compaction/CompactionMessageIndex.cs | 2 +- .../Compaction/CompactionMessageIndexTests.cs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/dotnet/src/Microsoft.Agents.AI/Compaction/CompactionMessageIndex.cs b/dotnet/src/Microsoft.Agents.AI/Compaction/CompactionMessageIndex.cs index 90c2366f4f7..3edfb4591aa 100644 --- a/dotnet/src/Microsoft.Agents.AI/Compaction/CompactionMessageIndex.cs +++ b/dotnet/src/Microsoft.Agents.AI/Compaction/CompactionMessageIndex.cs @@ -529,7 +529,7 @@ private static bool IsSummaryMessage(ChatMessage message) => && value switch { bool b => b, - JsonElement j => j.GetBoolean(), + JsonElement j => j.ValueKind == JsonValueKind.True, _ => false, }; } diff --git a/dotnet/tests/Microsoft.Agents.AI.UnitTests/Compaction/CompactionMessageIndexTests.cs b/dotnet/tests/Microsoft.Agents.AI.UnitTests/Compaction/CompactionMessageIndexTests.cs index af915778a86..4613479d2a5 100644 --- a/dotnet/tests/Microsoft.Agents.AI.UnitTests/Compaction/CompactionMessageIndexTests.cs +++ b/dotnet/tests/Microsoft.Agents.AI.UnitTests/Compaction/CompactionMessageIndexTests.cs @@ -1480,6 +1480,8 @@ public void UpdateIncrementallyAppendsReasoningToolCallGroup() [InlineData(null, CompactionGroupKind.AssistantText)] [InlineData(false, CompactionGroupKind.AssistantText)] [InlineData("false", CompactionGroupKind.AssistantText)] + [InlineData("null", CompactionGroupKind.AssistantText)] + [InlineData("\"Unexpected string\"", CompactionGroupKind.AssistantText)] [InlineData(true, CompactionGroupKind.Summary)] [InlineData("true", CompactionGroupKind.Summary)] public void SummaryPropertyKeyIsRespected(object? summaryPropertyValue, CompactionGroupKind expectedCompactionGroupKind)