feat(brain): Compacting fuer ARIAs lokalen Modus + Erklaerung in der Info-Box
Lokal bekam ARIA starr die letzten 8 Nachrichten — alles davor war fuer das lokale Modell weg. Neu (local_compact.py): - Fenster nach Tokens: so viele der letzten Nachrichten, wie in ~75 % des Kontextfensters der Karte passen (Systemprompt + Antwort abgezogen), max. LOCAL_MAX_TURNS (12). Kontextfenster vom Cluster (Bridge /internal/llm-models). - Was herausfaellt, fasst das lokale Modell im Hintergrund zum laufenden Notizzettel zusammen (pro Projekt, /data/local_summaries.json); er geht als "Bisheriger Verlauf" in den lokalen Systemprompt. Destillat ins Gedaechtnis laeuft unveraendert weiter. Reset des Gespraechs loescht auch den Zettel. - Bridge/local_llm: optionale laengere Frist fuer Hintergrund-Aufrufe (Compacting 180 s statt der 30 s fuer schnelle Antworten). Diagnostic: Info-Box zum Kontext erklaert Kuerzen / Compacting / Gedaechtnis und was ARIA davon nutzt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+18
-4
@@ -33,6 +33,7 @@ from proxy_client import ProxyClient, Message as ProxyMessage
|
||||
import router as router_mod
|
||||
import metrics
|
||||
from local_llm import local_llm_chat
|
||||
import local_compact
|
||||
import skills as skills_mod
|
||||
import triggers as triggers_mod
|
||||
import watcher as watcher_mod
|
||||
@@ -2359,7 +2360,8 @@ class Agent:
|
||||
# /shared/config/local_llm.json (Default aus → alles Claude wie bisher).
|
||||
# Rueckgabe: fertige Antwort (str) wenn lokal erledigt, sonst None → Claude.
|
||||
|
||||
_LOCAL_WINDOW_TURNS = 8 # nur die letzten N Turns ans lokale Modell (Speed)
|
||||
# Wie viele der letzten Turns ans lokale Modell gehen, regelt jetzt
|
||||
# local_compact (nach Tokens + LOCAL_MAX_TURNS, aeltere als Notizzettel).
|
||||
_LOCAL_TOOL_ITERATIONS = 3 # max Tool-Runden lokal, sonst → Claude
|
||||
|
||||
# Weiche Fehler-Marker im Tool-Ausgabetext. Viele Action-Skills geben einen
|
||||
@@ -2476,9 +2478,21 @@ class Agent:
|
||||
|
||||
sys_prompt = router_mod.build_local_system_prompt(IDENTITY_ANCHOR,
|
||||
has_tools=bool(tools))
|
||||
# Nur die letzten paar Turns ans lokale Modell (Speed — volles Fenster
|
||||
# wuerde das Prefill aufblaehen).
|
||||
window = self.conversation.window(project_id=active_project_id)[-self._LOCAL_WINDOW_TURNS:]
|
||||
# Compacting (local_compact): aeltere Nachrichten als Notizzettel im
|
||||
# Systemprompt, dazu so viele der letzten Nachrichten, wie ins
|
||||
# Kontextfenster der Karte passen (hoechstens LOCAL_MAX_TURNS — Tempo).
|
||||
notes = local_compact.summary_block(active_project_id)
|
||||
if notes:
|
||||
sys_prompt += "\n\n" + notes
|
||||
all_turns = self.conversation.window(project_id=active_project_id)
|
||||
ctx = local_compact.model_ctx(local_model)
|
||||
budget = int(ctx * 0.75) - 500 - local_compact.est_tokens(sys_prompt)
|
||||
window = local_compact.fit_window(all_turns, max(budget, 256))
|
||||
try:
|
||||
local_compact.maybe_compact(active_project_id, all_turns, window,
|
||||
local_model, local_llm_chat)
|
||||
except Exception as exc:
|
||||
logger.debug("[compact] uebersprungen: %s", exc)
|
||||
messages = [{"role": "system", "content": sys_prompt}]
|
||||
messages += [{"role": t.role, "content": t.content} for t in window]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user