diff --git a/dotnet/src/Microsoft.Agents.AI/Compaction/CompactionMessageIndex.cs b/dotnet/src/Microsoft.Agents.AI/Compaction/CompactionMessageIndex.cs index 003a70f2b3a..3edfb4591aa 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.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 ea0ecd0d449..4613479d2a5 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,34 @@ 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("null", CompactionGroupKind.AssistantText)] + [InlineData("\"Unexpected string\"", 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); + } }