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:
+13
-3
@@ -4271,7 +4271,7 @@ class ARIABridge:
|
||||
|
||||
async def _local_llm(self, messages: list, max_tokens: int = 512,
|
||||
temperature: float = 0.7, stop=None, tools=None,
|
||||
model=None) -> dict:
|
||||
model=None, timeout: Optional[float] = None) -> dict:
|
||||
"""Schickt einen llm_request an den llm-adapter (AI-Box), wartet auf
|
||||
llm_response. tools (B1b) werden durchgereicht; tool_calls kommen zurueck.
|
||||
Rueckgabe: {ok, content, tool_calls, model, elapsedMs} oder {ok:False, error}."""
|
||||
@@ -4286,7 +4286,7 @@ class ARIABridge:
|
||||
res = await self._llm_cluster.route({
|
||||
"model": model or "", "messages": messages, "max_tokens": max_tokens,
|
||||
"temperature": temperature, "stop": stop, "tools": tools,
|
||||
}, timeout=self._LLM_TIMEOUT_S)
|
||||
}, timeout=timeout or self._LLM_TIMEOUT_S)
|
||||
if not res.get("ok"):
|
||||
err = res.get("error") or "llm-adapter Fehler"
|
||||
if res.get("errorCode") == "model_unavailable":
|
||||
@@ -4773,6 +4773,10 @@ class ARIABridge:
|
||||
elif method == "POST" and path == "/internal/satellite-list":
|
||||
# Brain fragt: welche Satelliten/Netze sind online + Capabilities.
|
||||
await _send_response(writer, 200, {"ok": True, "satellites": self._satellite_list()})
|
||||
elif method in ("GET", "POST") and path == "/internal/llm-models":
|
||||
# Brain fragt: welche lokalen Modelle sind geladen + ihr
|
||||
# Kontextfenster (fuer ARIAs Compacting im lokalen Modus).
|
||||
await _send_response(writer, 200, {"ok": True, "models": self._llm_cluster.models()})
|
||||
elif method in ("GET", "POST") and path == "/internal/worker-list":
|
||||
# Diagnostic/Brain fragt: welche Compute-Worker sind online (Flotte).
|
||||
await _send_response(writer, 200, {"ok": True, "workers": self._worker_list()})
|
||||
@@ -4934,10 +4938,16 @@ class ARIABridge:
|
||||
temperature = 0.7
|
||||
_tools = data.get("tools") if isinstance(data.get("tools"), list) else None
|
||||
_model = data.get("model") if isinstance(data.get("model"), str) else None
|
||||
# Hintergrund-Arbeit (Compacting) darf laenger dauern als die
|
||||
# 30 s fuer schnelle Antworten — gedeckelt auf 5 min.
|
||||
try:
|
||||
_timeout = min(300.0, float(data["timeout"])) if data.get("timeout") else None
|
||||
except (TypeError, ValueError):
|
||||
_timeout = None
|
||||
result = await self._local_llm(
|
||||
messages=messages, max_tokens=max_tokens,
|
||||
temperature=temperature, stop=data.get("stop"),
|
||||
tools=_tools, model=_model,
|
||||
tools=_tools, model=_model, timeout=_timeout,
|
||||
)
|
||||
status = 200 if result.get("ok") else 502
|
||||
await _send_response(writer, status, result)
|
||||
|
||||
Reference in New Issue
Block a user