From 23312ee8b14adeaa024d20713823d3a3cc07915a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 13 May 2026 18:59:32 +0000 Subject: [PATCH] Preserve MessageMerger insertion order without timestamps Agent-Logs-Url: https://github.com/microsoft/agent-framework/sessions/4bacd1d2-5911-4fde-8cfb-375ef0808563 Co-authored-by: lokitoth <6936551+lokitoth@users.noreply.github.com> --- .../MessageMerger.cs | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/dotnet/src/Microsoft.Agents.AI.Workflows/MessageMerger.cs b/dotnet/src/Microsoft.Agents.AI.Workflows/MessageMerger.cs index 4b702034ce..84a5f74b3b 100644 --- a/dotnet/src/Microsoft.Agents.AI.Workflows/MessageMerger.cs +++ b/dotnet/src/Microsoft.Agents.AI.Workflows/MessageMerger.cs @@ -97,23 +97,11 @@ internal sealed class MessageMerger } } - private int CompareByDateTimeOffset(AgentResponse left, AgentResponse right) + private int CompareByDateTimeOffset(AgentResponse left, int leftIndex, AgentResponse right, int rightIndex) { - const int LESS = -1, EQ = 0, GREATER = 1; - - if (left.CreatedAt == right.CreatedAt) + if (!left.CreatedAt.HasValue || !right.CreatedAt.HasValue || left.CreatedAt == right.CreatedAt) { - return EQ; - } - - if (!left.CreatedAt.HasValue) - { - return GREATER; - } - - if (!right.CreatedAt.HasValue) - { - return LESS; + return leftIndex.CompareTo(rightIndex); } return left.CreatedAt.Value.CompareTo(right.CreatedAt.Value); @@ -136,8 +124,14 @@ internal sealed class MessageMerger responseList.Add(mergeState.ComputeDangling()); } - responseList.Sort(this.CompareByDateTimeOffset); - responses[responseId] = responseList.Aggregate(MergeResponses); + List<(AgentResponse Response, int Index)> orderedResponseList = responseList + .Select((response, index) => (Response: response, Index: index)) + .ToList(); + orderedResponseList.Sort((left, right) => this.CompareByDateTimeOffset(left.Response, left.Index, right.Response, right.Index)); + + responses[responseId] = orderedResponseList + .Select(item => item.Response) + .Aggregate(MergeResponses); messages.AddRange(GetMessagesWithCreatedAt(responses[responseId])); }