refactor: MaxHistory + ReminderInterval in appsettings auslagern
- MaxHistory (Default: 120): Max History-Messages pro API-Request - ReminderInterval (Default: 30): System-Prompt Reminder alle N Messages (0 = deaktiviert) - Beide Werte über Server-Settings-UI konfigurierbar - Hardcoded Werte in ChatService durch konfigurierbare Felder ersetzt
This commit is contained in:
1 parent
42d366ea47
commit
57560cbbea
4 files changed
+18
-8
No files matched your search
@@ -25,6 +25,8 @@ public static class ServerSettingsEndpoint
|
|||||||
new SettingDefinition("Port", "int", 19000, "Server-Port (erfordert Neustart)", "number"),
|
new SettingDefinition("Port", "int", 19000, "Server-Port (erfordert Neustart)", "number"),
|
||||||
new SettingDefinition("AnthropicToken", "string", "", "Anthropic API Key", "password"),
|
new SettingDefinition("AnthropicToken", "string", "", "Anthropic API Key", "password"),
|
||||||
new SettingDefinition("MaxIterations", "int", 100, "Max Tool-Loop Iterationen pro Chat", "number"),
|
new SettingDefinition("MaxIterations", "int", 100, "Max Tool-Loop Iterationen pro Chat", "number"),
|
||||||
|
new SettingDefinition("MaxHistory", "int", 120, "Max History-Messages pro Request", "number"),
|
||||||
|
new SettingDefinition("ReminderInterval", "int", 30, "System-Prompt Reminder alle N Messages (0 = deaktiviert)", "number"),
|
||||||
new SettingDefinition("PayloadLogging", "bool", false, "API-Payloads loggen (Debug)", "toggle"),
|
new SettingDefinition("PayloadLogging", "bool", false, "API-Payloads loggen (Debug)", "toggle"),
|
||||||
new SettingDefinition("PayloadLoggingGzip", "bool", false, "Payload-Logs als .gz komprimieren", "toggle"),
|
new SettingDefinition("PayloadLoggingGzip", "bool", false, "Payload-Logs als .gz komprimieren", "toggle"),
|
||||||
new SettingDefinition("KreaToken", "string", "", "Krea API Token", "password"),
|
new SettingDefinition("KreaToken", "string", "", "Krea API Token", "password"),
|
||||||
|
|||||||
+3
-1
@@ -30,7 +30,9 @@ builder.Services.AddSingleton(skillService);
|
|||||||
// Shared Services
|
// Shared Services
|
||||||
var toolService = new ToolService();
|
var toolService = new ToolService();
|
||||||
builder.Services.AddSingleton(toolService);
|
builder.Services.AddSingleton(toolService);
|
||||||
var chatService = new ChatService(dbService, toolService, memoryService, skillService);
|
var maxHistory = builder.Configuration.GetValue<int>("MaxHistory", 120);
|
||||||
|
var reminderInterval = builder.Configuration.GetValue<int>("ReminderInterval", 30);
|
||||||
|
var chatService = new ChatService(dbService, toolService, memoryService, skillService, maxHistory, reminderInterval);
|
||||||
builder.Services.AddSingleton(chatService);
|
builder.Services.AddSingleton(chatService);
|
||||||
|
|
||||||
// AnthropicService (Singleton – shared zwischen ChatEndpoint und TelegramService)
|
// AnthropicService (Singleton – shared zwischen ChatEndpoint und TelegramService)
|
||||||
|
|||||||
+11
-7
@@ -14,13 +14,18 @@ public class ChatService
|
|||||||
private readonly ToolService _toolService;
|
private readonly ToolService _toolService;
|
||||||
private readonly MemoryService _memoryService;
|
private readonly MemoryService _memoryService;
|
||||||
private readonly SkillService _skillService;
|
private readonly SkillService _skillService;
|
||||||
|
private readonly int _maxHistory;
|
||||||
|
private readonly int _reminderInterval;
|
||||||
|
|
||||||
public ChatService(DatabaseService db, ToolService toolService, MemoryService memoryService, SkillService skillService)
|
public ChatService(DatabaseService db, ToolService toolService, MemoryService memoryService, SkillService skillService,
|
||||||
|
int maxHistory = 120, int reminderInterval = 30)
|
||||||
{
|
{
|
||||||
_db = db;
|
_db = db;
|
||||||
_toolService = toolService;
|
_toolService = toolService;
|
||||||
_memoryService = memoryService;
|
_memoryService = memoryService;
|
||||||
_skillService = skillService;
|
_skillService = skillService;
|
||||||
|
_maxHistory = maxHistory;
|
||||||
|
_reminderInterval = reminderInterval;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string ResolveModelId(string model)
|
public static string ResolveModelId(string model)
|
||||||
@@ -478,14 +483,13 @@ Für welche Plattform soll die App entwickelt werden? Web, Mobile oder Desktop?
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// History auf maximal 120 Messages begrenzen (älteste entfernen)
|
// History auf maximal N Messages begrenzen (älteste entfernen)
|
||||||
const int maxHistory = 120;
|
if (history.Count > _maxHistory)
|
||||||
if (history.Count > maxHistory)
|
history.RemoveRange(0, history.Count - _maxHistory);
|
||||||
history.RemoveRange(0, history.Count - maxHistory);
|
|
||||||
|
|
||||||
// Reminder einfügen: alle ~30 user/assistant-Paare ein Reminder-Paar einfügen
|
// Reminder einfügen: alle ~30 user/assistant-Paare ein Reminder-Paar einfügen
|
||||||
var reminder = SystemPromptBuilder.BuildReminder(promptBlocks);
|
var reminder = SystemPromptBuilder.BuildReminder(promptBlocks);
|
||||||
if (!string.IsNullOrWhiteSpace(reminder) && history.Count > 30)
|
if (!string.IsNullOrWhiteSpace(reminder) && _reminderInterval > 0 && history.Count > _reminderInterval)
|
||||||
{
|
{
|
||||||
var reminderUser = new Dictionary<string, object>
|
var reminderUser = new Dictionary<string, object>
|
||||||
{
|
{
|
||||||
@@ -504,7 +508,7 @@ Für welche Plattform soll die App entwickelt werden? Web, Mobile oder Desktop?
|
|||||||
for (int i = 0; i < history.Count; i++)
|
for (int i = 0; i < history.Count; i++)
|
||||||
{
|
{
|
||||||
messageCount++;
|
messageCount++;
|
||||||
if (messageCount > 0 && messageCount % 30 == 0)
|
if (messageCount > 0 && messageCount % _reminderInterval == 0)
|
||||||
{
|
{
|
||||||
// Position nach dem aktuellen Element – aber nur einfügen wenn es eine
|
// Position nach dem aktuellen Element – aber nur einfügen wenn es eine
|
||||||
// assistant-Message ist (damit user/assistant-Alternierung nicht bricht)
|
// assistant-Message ist (damit user/assistant-Alternierung nicht bricht)
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
"Port": 19000,
|
"Port": 19000,
|
||||||
"AnthropicToken": "",
|
"AnthropicToken": "",
|
||||||
"MaxIterations": 100,
|
"MaxIterations": 100,
|
||||||
|
"MaxHistory": 120,
|
||||||
|
"ReminderInterval": 30,
|
||||||
"PayloadLogging": false,
|
"PayloadLogging": false,
|
||||||
"PayloadLoggingGzip": false,
|
"PayloadLoggingGzip": false,
|
||||||
"KreaToken": "",
|
"KreaToken": "",
|
||||||
|
|||||||
Reference in new issue
Block a user