fix(llm): fertige Antwort geht bei RVS-Abbruch nicht mehr verloren
28.10., 17:51:42: alle Clients verloren gleichzeitig die RVS-Verbindung
(RVS/Proxy kurz weg) — waehrend Gemma 31 s an einer Anfrage von Marina
rechnete. Nach 2 s war alles wieder verbunden, aber die fertige Antwort ging
ueber die tote Verbindung raus und wurde verworfen ("Send fehlgeschlagen
(llm_response)"); Marina wartete bis zu ihrer Frist (660 s) ins Leere.
llm-adapter: llm_response wird ueber die aktuelle Verbindung geschickt, ist
gerade keine offen, aufgehoben (5 min) und nach dem Wiederverbinden
nachgeschickt.
RVS: gezielte Antwort, deren Fragender nur neu verbunden ist (alte
Verbindung weg), geht bis 2 MB an den Raum statt verworfen zu werden — der
Fragende erkennt sie an der requestId. Dateien bleiben gezielt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+13
-1
@@ -188,6 +188,9 @@ const TARGETED_REPLIES = new Set(TARGETED.values());
|
||||
// Nachrichten-ID) — darum ein Set, sonst bekaeme nur der letzte die Antwort.
|
||||
const pendingReplies = new Map();
|
||||
const PENDING_TTL_MS = 180_000;
|
||||
// Antworten bis zu dieser Groesse gehen an den Raum, wenn der Fragende nur
|
||||
// neu verbunden ist (siehe Weiterleitung). Dateien sind groesser.
|
||||
const REJOIN_BROADCAST_MAX = 2 * 1024 * 1024;
|
||||
|
||||
function pendingKey(replyType, requestId) {
|
||||
return `${replyType}\u0000${requestId}`;
|
||||
@@ -696,7 +699,16 @@ function registerClient(ws, token) {
|
||||
rememberRequester(ws, msg);
|
||||
|
||||
// Gezielte Antwort? Dann NUR an den Fragenden — nicht an den ganzen Raum.
|
||||
const targets = targetedRecipients(msg);
|
||||
let targets = targetedRecipients(msg);
|
||||
// Fragender inzwischen neu verbunden (RVS-/Proxy-Neustart waehrend die
|
||||
// Antwort noch lief): seine alte Verbindung gibt es nicht mehr, die neue
|
||||
// kennen wir nicht. Kleine Antworten (LLM-Antwort, Status) dann an den
|
||||
// Raum — der Fragende erkennt sie an der requestId. Grosse (Dateien)
|
||||
// bleiben verworfen, sonst gingen hunderte MB an alle.
|
||||
if (targets && targets.length === 0 && raw.length <= REJOIN_BROADCAST_MAX) {
|
||||
log(`${msg.type}: Fragender neu verbunden — ${(raw.length / 1024).toFixed(0)}KB an den Raum`);
|
||||
targets = null;
|
||||
}
|
||||
if (targets) {
|
||||
const data = raw.toString();
|
||||
let sent = 0;
|
||||
|
||||
Reference in New Issue
Block a user