From 8472775333f34c88363d683571b7717076befad1 Mon Sep 17 00:00:00 2001 From: Marco Minerva Date: Thu, 20 Feb 2025 10:30:55 +0100 Subject: [PATCH] Add message limit to chat history management Updated `ChatService` to enforce a message limit based on the new `MessageLimit` property in `AppSettings`. Excess messages are removed before updating the cache to optimize performance. Adjusted `appsettings.json` to reflect the new configuration, changing `MaxInputTokens` from 16385 to 16384 and adding `MessageLimit` with a default value of 20. --- SqlDatabaseVectorSearch/Services/ChatService.cs | 9 ++++++++- SqlDatabaseVectorSearch/Settings/AppSettings.cs | 2 ++ SqlDatabaseVectorSearch/appsettings.json | 5 +++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/SqlDatabaseVectorSearch/Services/ChatService.cs b/SqlDatabaseVectorSearch/Services/ChatService.cs index 25da2b6..973fb2d 100644 --- a/SqlDatabaseVectorSearch/Services/ChatService.cs +++ b/SqlDatabaseVectorSearch/Services/ChatService.cs @@ -156,7 +156,14 @@ public class ChatService(IChatCompletionService chatCompletionService, Tokenizer } private async Task UpdateCacheAsync(Guid conversationId, ChatHistory chat, CancellationToken cancellationToken) - => await cache.SetAsync(conversationId.ToString(), chat, cancellationToken: cancellationToken); + { + if (chat.Count > appSettings.MessageLimit) + { + chat.RemoveRange(0, chat.Count - appSettings.MessageLimit); + } + + await cache.SetAsync(conversationId.ToString(), chat, cancellationToken: cancellationToken); + } private async Task GetChatHistoryAsync(Guid conversationId, CancellationToken cancellationToken) { diff --git a/SqlDatabaseVectorSearch/Settings/AppSettings.cs b/SqlDatabaseVectorSearch/Settings/AppSettings.cs index 76ed3ad..a75a26e 100644 --- a/SqlDatabaseVectorSearch/Settings/AppSettings.cs +++ b/SqlDatabaseVectorSearch/Settings/AppSettings.cs @@ -15,4 +15,6 @@ public class AppSettings public int MaxOutputTokens { get; init; } = 800; public TimeSpan MessageExpiration { get; init; } + + public int MessageLimit { get; set; } = 20; } diff --git a/SqlDatabaseVectorSearch/appsettings.json b/SqlDatabaseVectorSearch/appsettings.json index 4df5bad..52ff3cf 100644 --- a/SqlDatabaseVectorSearch/appsettings.json +++ b/SqlDatabaseVectorSearch/appsettings.json @@ -24,9 +24,10 @@ "MaxTokensPerParagraph": 1000, "OverlapTokens": 100, "MaxRelevantChunks": 10, - "MaxInputTokens": 16385, + "MaxInputTokens": 16384, "MaxOutputTokens": 800, - "MessageExpiration": "00:05:00" + "MessageExpiration": "00:05:00", + "MessageLimit": 20 }, "Logging": { "LogLevel": {