using AxCopilot.Models; using AxCopilot.Services; using AxCopilot.Services.Agent; using FluentAssertions; using Xunit; namespace AxCopilot.Tests.Services; public class ContextCondenserTests { [Fact] public async Task CondenseIfNeededAsync_WhenProactiveDisabled_ShouldNotChangeMessages() { var settings = new SettingsService(); settings.Settings.Llm.Service = "ollama"; settings.Settings.Llm.Model = "test-model"; using var llm = new LlmService(settings); var messages = BuildLargeConversation(); var before = messages.Select(m => m.Content).ToList(); var changed = await ContextCondenser.CondenseIfNeededAsync( messages, llm, maxOutputTokens: 2_000, proactiveEnabled: false, triggerPercent: 80, force: false, CancellationToken.None); changed.Should().BeFalse(); messages.Select(m => m.Content).Should().Equal(before); } [Fact] public async Task CondenseIfNeededAsync_ShouldTruncateLargeToolResult_WithoutSummarizeCall() { var settings = new SettingsService(); settings.Settings.Llm.Service = "ollama"; settings.Settings.Llm.Model = "test-model"; using var llm = new LlmService(settings); var messages = BuildLargeConversation(); var changed = await ContextCondenser.CondenseIfNeededAsync( messages, llm, maxOutputTokens: 2_000, proactiveEnabled: true, triggerPercent: 80, force: false, CancellationToken.None); changed.Should().BeTrue(); messages.Any(m => (m.Content ?? "").Contains("[축약됨", StringComparison.Ordinal)).Should().BeTrue(); } private static List BuildLargeConversation() { var largeOutput = new string('A', 9_000); var toolJson = "{\"type\":\"tool_result\",\"output\":\"" + largeOutput + "\",\"success\":true}"; return [ new ChatMessage { Role = "system", Content = "system prompt" }, new ChatMessage { Role = "user", Content = "첫 질문" }, new ChatMessage { Role = "assistant", Content = toolJson }, // 오래된 구간에 배치 new ChatMessage { Role = "assistant", Content = "첫 답변" }, new ChatMessage { Role = "user", Content = "둘째 질문" }, new ChatMessage { Role = "assistant", Content = "둘째 답변" }, new ChatMessage { Role = "user", Content = "셋째 질문" }, new ChatMessage { Role = "assistant", Content = "셋째 답변" }, new ChatMessage { Role = "user", Content = "넷째 질문" }, new ChatMessage { Role = "assistant", Content = "넷째 답변" }, new ChatMessage { Role = "user", Content = "다섯째 질문" }, new ChatMessage { Role = "assistant", Content = "다섯째 답변" }, ]; } }