mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
d3f0c33180
* Checkpoint * Checkpoint * Stable * Strategies * Updated * Encoding * Formatting * Cleanup * Formatting * Tests * Tuning * Update tests * Test update * Remove working solution * Add sample to solution * Sample readyme * Experimental * Format * Formatting * Encoding * Support IChatReducer * Sample output formatting * Initial plan * Replace CompactingChatClient with MessageCompactionContextProvider Co-authored-by: crickman <66376200+crickman@users.noreply.github.com> * Boundary condition * Fix encoding * Fix cast * Test coverage * Namespace * Improvements * Efficiency * Cleanup * Detect service managed conversation * Fix namespace * Fix merge * Fix test expectation * Update dotnet/src/Microsoft.Agents.AI.Abstractions/InMemoryChatHistoryProvider.cs Co-authored-by: westey <164392973+westey-m@users.noreply.github.com> * Address PR comments (x1) * Update comment * Update comments * Clean-up * Format output * Sync sample comment * Fix condition * Adjust data-flow * Address comments (x2) * Direct compaction * Fix summarization content * Argument check / fix count calculation * Minor follow-up * Diagnostics * Minor updates * Fix state test * Fix sliding window perf * Stable state keys * Increase size computation * Formatting * Add README.md for Agent_Step18_CompactionPipeline sample (#4574) * Sample comments * Updated * Update dotnet/src/Microsoft.Agents.AI/Compaction/MessageIndex.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/tests/Microsoft.Agents.AI.UnitTests/Compaction/CompactionProviderTests.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/src/Microsoft.Agents.AI/Compaction/MessageIndex.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Address copilot comments * Fix namespace * Comments / convensions * Prefix `MessageGroup` and `MessageIndex` * Fix sliding window * Update dotnet/src/Microsoft.Agents.AI/Compaction/SummarizationCompactionStrategy.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/src/Microsoft.Agents.AI.Abstractions/InMemoryChatHistoryProvider.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Python alignment * Fix merge * Fix equality, readme, and sample * Readme update and ToolResult fix * Update dotnet/src/Microsoft.Agents.AI/Compaction/SummarizationCompactionStrategy.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Simplify readme * Update dotnet/samples/02-agents/Agents/Agent_Step18_CompactionPipeline/README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Remove example * Remove unused --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: westey <164392973+westey-m@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
181 lines
5.8 KiB
C#
181 lines
5.8 KiB
C#
// Copyright (c) Microsoft. All rights reserved.
|
|
|
|
using Microsoft.Agents.AI.Compaction;
|
|
using Microsoft.Extensions.AI;
|
|
|
|
namespace Microsoft.Agents.AI.UnitTests.Compaction;
|
|
|
|
/// <summary>
|
|
/// Contains tests for <see cref="CompactionTrigger"/> and <see cref="CompactionTriggers"/>.
|
|
/// </summary>
|
|
public class CompactionTriggersTests
|
|
{
|
|
[Fact]
|
|
public void TokensExceedReturnsTrueWhenAboveThreshold()
|
|
{
|
|
// Arrange — use a long message to guarantee tokens > 0
|
|
CompactionTrigger trigger = CompactionTriggers.TokensExceed(0);
|
|
CompactionMessageIndex index = CompactionMessageIndex.Create([new ChatMessage(ChatRole.User, "Hello world")]);
|
|
|
|
// Act & Assert
|
|
Assert.True(trigger(index));
|
|
}
|
|
|
|
[Fact]
|
|
public void TokensExceedReturnsFalseWhenBelowThreshold()
|
|
{
|
|
CompactionTrigger trigger = CompactionTriggers.TokensExceed(999_999);
|
|
CompactionMessageIndex index = CompactionMessageIndex.Create([new ChatMessage(ChatRole.User, "Hi")]);
|
|
|
|
Assert.False(trigger(index));
|
|
}
|
|
|
|
[Fact]
|
|
public void MessagesExceedReturnsExpectedResult()
|
|
{
|
|
CompactionTrigger trigger = CompactionTriggers.MessagesExceed(2);
|
|
CompactionMessageIndex small = CompactionMessageIndex.Create(
|
|
[
|
|
new ChatMessage(ChatRole.User, "A"),
|
|
new ChatMessage(ChatRole.User, "B"),
|
|
]);
|
|
CompactionMessageIndex large = CompactionMessageIndex.Create(
|
|
[
|
|
new ChatMessage(ChatRole.User, "A"),
|
|
new ChatMessage(ChatRole.User, "B"),
|
|
new ChatMessage(ChatRole.User, "C"),
|
|
]);
|
|
|
|
Assert.False(trigger(small));
|
|
Assert.True(trigger(large));
|
|
}
|
|
|
|
[Fact]
|
|
public void TurnsExceedReturnsExpectedResult()
|
|
{
|
|
CompactionTrigger trigger = CompactionTriggers.TurnsExceed(1);
|
|
CompactionMessageIndex oneTurn = CompactionMessageIndex.Create(
|
|
[
|
|
new ChatMessage(ChatRole.User, "Q1"),
|
|
new ChatMessage(ChatRole.Assistant, "A1"),
|
|
]);
|
|
CompactionMessageIndex twoTurns = CompactionMessageIndex.Create(
|
|
[
|
|
new ChatMessage(ChatRole.User, "Q1"),
|
|
new ChatMessage(ChatRole.Assistant, "A1"),
|
|
new ChatMessage(ChatRole.User, "Q2"),
|
|
]);
|
|
|
|
Assert.False(trigger(oneTurn));
|
|
Assert.True(trigger(twoTurns));
|
|
}
|
|
|
|
[Fact]
|
|
public void GroupsExceedReturnsExpectedResult()
|
|
{
|
|
CompactionTrigger trigger = CompactionTriggers.GroupsExceed(2);
|
|
CompactionMessageIndex index = CompactionMessageIndex.Create(
|
|
[
|
|
new ChatMessage(ChatRole.User, "A"),
|
|
new ChatMessage(ChatRole.Assistant, "B"),
|
|
new ChatMessage(ChatRole.User, "C"),
|
|
]);
|
|
|
|
Assert.True(trigger(index));
|
|
}
|
|
|
|
[Fact]
|
|
public void HasToolCallsReturnsTrueWhenToolCallGroupExists()
|
|
{
|
|
CompactionTrigger trigger = CompactionTriggers.HasToolCalls();
|
|
CompactionMessageIndex index = CompactionMessageIndex.Create(
|
|
[
|
|
new ChatMessage(ChatRole.User, "Q1"),
|
|
new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("c1", "fn")]),
|
|
new ChatMessage(ChatRole.Tool, "result"),
|
|
]);
|
|
|
|
Assert.True(trigger(index));
|
|
}
|
|
|
|
[Fact]
|
|
public void HasToolCallsReturnsFalseWhenNoToolCallGroup()
|
|
{
|
|
CompactionTrigger trigger = CompactionTriggers.HasToolCalls();
|
|
CompactionMessageIndex index = CompactionMessageIndex.Create(
|
|
[
|
|
new ChatMessage(ChatRole.User, "Hello"),
|
|
new ChatMessage(ChatRole.Assistant, "Hi!"),
|
|
]);
|
|
|
|
Assert.False(trigger(index));
|
|
}
|
|
|
|
[Fact]
|
|
public void AllRequiresAllConditions()
|
|
{
|
|
CompactionTrigger trigger = CompactionTriggers.All(
|
|
CompactionTriggers.TokensExceed(0),
|
|
CompactionTriggers.MessagesExceed(5));
|
|
|
|
CompactionMessageIndex small = CompactionMessageIndex.Create([new ChatMessage(ChatRole.User, "A")]);
|
|
|
|
// Tokens > 0 is true, but messages > 5 is false
|
|
Assert.False(trigger(small));
|
|
}
|
|
|
|
[Fact]
|
|
public void AnyRequiresAtLeastOneCondition()
|
|
{
|
|
CompactionTrigger trigger = CompactionTriggers.Any(
|
|
CompactionTriggers.TokensExceed(999_999),
|
|
CompactionTriggers.MessagesExceed(0));
|
|
|
|
CompactionMessageIndex index = CompactionMessageIndex.Create([new ChatMessage(ChatRole.User, "A")]);
|
|
|
|
// Tokens not exceeded, but messages > 0 is true
|
|
Assert.True(trigger(index));
|
|
}
|
|
|
|
[Fact]
|
|
public void AllEmptyTriggersReturnsTrue()
|
|
{
|
|
CompactionTrigger trigger = CompactionTriggers.All();
|
|
CompactionMessageIndex index = CompactionMessageIndex.Create([new ChatMessage(ChatRole.User, "A")]);
|
|
Assert.True(trigger(index));
|
|
}
|
|
|
|
[Fact]
|
|
public void AnyEmptyTriggersReturnsFalse()
|
|
{
|
|
CompactionTrigger trigger = CompactionTriggers.Any();
|
|
CompactionMessageIndex index = CompactionMessageIndex.Create([new ChatMessage(ChatRole.User, "A")]);
|
|
Assert.False(trigger(index));
|
|
}
|
|
|
|
[Fact]
|
|
public void TokensBelowReturnsTrueWhenBelowThreshold()
|
|
{
|
|
CompactionTrigger trigger = CompactionTriggers.TokensBelow(999_999);
|
|
CompactionMessageIndex index = CompactionMessageIndex.Create([new ChatMessage(ChatRole.User, "Hi")]);
|
|
|
|
Assert.True(trigger(index));
|
|
}
|
|
|
|
[Fact]
|
|
public void TokensBelowReturnsFalseWhenAboveThreshold()
|
|
{
|
|
CompactionTrigger trigger = CompactionTriggers.TokensBelow(0);
|
|
CompactionMessageIndex index = CompactionMessageIndex.Create([new ChatMessage(ChatRole.User, "Hello world")]);
|
|
|
|
Assert.False(trigger(index));
|
|
}
|
|
|
|
[Fact]
|
|
public void AlwaysReturnsTrue()
|
|
{
|
|
CompactionMessageIndex index = CompactionMessageIndex.Create([new ChatMessage(ChatRole.User, "A")]);
|
|
Assert.True(CompactionTriggers.Always(index));
|
|
}
|
|
}
|