Refactor: Server-Settings von appsettings.json in DB-Tabelle (server_settings)
- Neuer ServerSettingsService: zentrale Settings in SQLite mit In-Memory-Cache - Auto-Migration: bestehende appsettings.Production.json wird einmalig in DB übernommen - Alle Services umgestellt: IConfiguration → ServerSettingsService (dynamisch, kein Neustart) - Port bleibt als einziges Setting in appsettings.Production.json (erfordert Neustart) - ServerSettingsEndpoint: liest/schreibt DB statt JSON-Datei, Port als Sonder-Setting - IConfiguration komplett entfernt aus allen Services (ChatService, ToolService, AnthropicService, OpenAiService, KreaService, TelegramService, KeyScannerService, GitHubEventScannerService) - AuthMiddleware: KreaApiKey dynamisch aus DB - appsettings.json bereinigt: nur noch Port und Logging - Dokumentation aktualisiert (ARCHITECTURE.md, ARCHITECTURE_QUICK.md, README.md)
This commit is contained in:
1 parent
542a031172
commit
122000487c
18 files changed
+389
-270
No files matched your search
+10
-9
@@ -14,20 +14,21 @@ public class ChatService
|
||||
private readonly ToolService _toolService;
|
||||
private readonly MemoryService _memoryService;
|
||||
private readonly SkillService _skillService;
|
||||
private readonly int _maxHistory;
|
||||
private readonly int _reminderInterval;
|
||||
private readonly ServerSettingsService _settings;
|
||||
|
||||
public ChatService(DatabaseService db, ToolService toolService, MemoryService memoryService, SkillService skillService,
|
||||
int maxHistory = 120, int reminderInterval = 30)
|
||||
ServerSettingsService settings)
|
||||
{
|
||||
_db = db;
|
||||
_toolService = toolService;
|
||||
_memoryService = memoryService;
|
||||
_skillService = skillService;
|
||||
_maxHistory = maxHistory;
|
||||
_reminderInterval = reminderInterval;
|
||||
_settings = settings;
|
||||
}
|
||||
|
||||
private int MaxHistory => _settings.GetInt("MaxHistory", 120);
|
||||
private int ReminderInterval => _settings.GetInt("ReminderInterval", 30);
|
||||
|
||||
public static string ResolveModelId(string model)
|
||||
{
|
||||
// OpenAI-kompatible Provider werden unverändert durchgereicht (Format: "provider:model")
|
||||
@@ -487,9 +488,9 @@ Für welche Plattform soll die App entwickelt werden? Web, Mobile oder Desktop?
|
||||
|
||||
// History auf maximal N Messages begrenzen (älteste entfernen)
|
||||
// WICHTIG: Nicht mitten in einem tool_use/tool_result-Paar abschneiden!
|
||||
if (history.Count > _maxHistory)
|
||||
if (history.Count > MaxHistory)
|
||||
{
|
||||
int removeCount = history.Count - _maxHistory;
|
||||
int removeCount = history.Count - MaxHistory;
|
||||
// Nach vorne korrigieren bis wir an einer sicheren Stelle sind:
|
||||
// Nicht abschneiden wenn die erste verbleibende Message ein tool_result ist
|
||||
// oder die letzte entfernte Message ein assistant mit tool_use ist
|
||||
@@ -550,7 +551,7 @@ Für welche Plattform soll die App entwickelt werden? Web, Mobile oder Desktop?
|
||||
|
||||
// Reminder einfügen: alle ~30 user/assistant-Paare ein Reminder-Paar einfügen
|
||||
var reminder = SystemPromptBuilder.BuildReminder(promptBlocks);
|
||||
if (!string.IsNullOrWhiteSpace(reminder) && _reminderInterval > 0 && history.Count > _reminderInterval)
|
||||
if (!string.IsNullOrWhiteSpace(reminder) && ReminderInterval > 0 && history.Count > ReminderInterval)
|
||||
{
|
||||
var reminderUser = new Dictionary<string, object>
|
||||
{
|
||||
@@ -569,7 +570,7 @@ Für welche Plattform soll die App entwickelt werden? Web, Mobile oder Desktop?
|
||||
for (int i = 0; i < history.Count; i++)
|
||||
{
|
||||
messageCount++;
|
||||
if (messageCount > 0 && messageCount % _reminderInterval == 0)
|
||||
if (messageCount > 0 && messageCount % ReminderInterval == 0)
|
||||
{
|
||||
// Position nach dem aktuellen Element – aber nur einfügen wenn es eine
|
||||
// assistant-Message ist (damit user/assistant-Alternierung nicht bricht)
|
||||
|
||||
Reference in new issue
Block a user