diagnostic/server.js — Handler umgebaut: event: "agent" für Deltas, event: "chat" mit state: "final" für Antworten, extractChatText() parst das content[] Array
bridge/aria_bridge.py — Gleicher Fix: _extract_chat_text() Methode, neue Event-Handler für agent und chat mit state, Legacy-Namen als Fallback
This commit is contained in:
+60
-29
@@ -241,6 +241,21 @@ async function connectGateway() {
|
||||
}
|
||||
}
|
||||
|
||||
// Extrahiert Text aus OpenClaw chat-Event message.content Array
|
||||
function extractChatText(payload) {
|
||||
try {
|
||||
const content = payload.message?.content;
|
||||
if (Array.isArray(content)) {
|
||||
return content
|
||||
.filter(c => c.type === "text")
|
||||
.map(c => c.text || "")
|
||||
.join("");
|
||||
}
|
||||
if (typeof payload.message === "string") return payload.message;
|
||||
return payload.text || "";
|
||||
} catch { return ""; }
|
||||
}
|
||||
|
||||
function handleGatewayMessage(msg) {
|
||||
if (msg.type === "res") {
|
||||
const status = msg.ok ? "OK" : `FEHLER: ${JSON.stringify(msg.error).slice(0, 100)}`;
|
||||
@@ -257,24 +272,59 @@ function handleGatewayMessage(msg) {
|
||||
const event = msg.event || "?";
|
||||
const payload = msg.payload || {};
|
||||
|
||||
if (event === "chat:delta") {
|
||||
const delta = payload.delta || payload.text || "";
|
||||
if (delta) {
|
||||
log("info", "gateway", `Delta: "${delta.slice(0, 60)}"`);
|
||||
if (pipelineActive) plog(`Streaming Delta: "${delta.slice(0, 80)}"`);
|
||||
// ── agent Events: Streaming-Deltas vom LLM ──
|
||||
if (event === "agent") {
|
||||
const data = payload.data || {};
|
||||
const delta = data.delta || "";
|
||||
if (delta && payload.stream === "assistant") {
|
||||
broadcast({ type: "chat_delta", delta, payload });
|
||||
}
|
||||
// agent Events nicht einzeln loggen (zu viele)
|
||||
return;
|
||||
}
|
||||
|
||||
// ── chat Events: Snapshots mit state=delta|final ──
|
||||
if (event === "chat") {
|
||||
const state = payload.state || "";
|
||||
const text = extractChatText(payload);
|
||||
|
||||
if (state === "final") {
|
||||
log("info", "gateway", `ANTWORT: "${text.slice(0, 200)}"`);
|
||||
if (pipelineActive) pipelineEnd(true, `"${text.slice(0, 120)}"`);
|
||||
broadcast({ type: "chat_final", text, payload });
|
||||
return;
|
||||
}
|
||||
|
||||
if (state === "delta") {
|
||||
// Periodischer Snapshot — nicht einzeln loggen
|
||||
return;
|
||||
}
|
||||
|
||||
if (state === "error") {
|
||||
const error = payload.error || text || "Unbekannt";
|
||||
log("error", "gateway", `Chat-Fehler: ${error}`);
|
||||
if (pipelineActive) pipelineEnd(false, error);
|
||||
broadcast({ type: "chat_error", error, payload });
|
||||
return;
|
||||
}
|
||||
|
||||
log("debug", "gateway", `chat state=${state}`);
|
||||
return;
|
||||
}
|
||||
|
||||
// ── Legacy event names (chat:delta, chat:final, chat:error) ──
|
||||
if (event === "chat:delta") {
|
||||
const delta = payload.delta || payload.text || "";
|
||||
if (delta) broadcast({ type: "chat_delta", delta, payload });
|
||||
return;
|
||||
}
|
||||
if (event === "chat:final") {
|
||||
const text = payload.text || payload.message || "";
|
||||
const text = extractChatText(payload) || payload.text || "";
|
||||
log("info", "gateway", `ANTWORT: "${text.slice(0, 200)}"`);
|
||||
if (pipelineActive) pipelineEnd(true, `"${text.slice(0, 120)}"`);
|
||||
broadcast({ type: "chat_final", text, payload });
|
||||
return;
|
||||
}
|
||||
|
||||
if (event === "chat:error") {
|
||||
const error = payload.error || payload.message || "Unbekannt";
|
||||
log("error", "gateway", `Chat-Fehler: ${error}`);
|
||||
@@ -283,28 +333,9 @@ function handleGatewayMessage(msg) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Alle anderen Events — vollstaendig loggen fuer Debugging
|
||||
const payloadStr = JSON.stringify(payload).slice(0, 500);
|
||||
log("info", "gateway", `Event: ${event} | ${payloadStr}`);
|
||||
if (pipelineActive) plog(`Gateway Event: ${event} | ${payloadStr.slice(0, 200)}`);
|
||||
|
||||
// "chat" Event koennte die Antwort sein (anderes Format als erwartet)
|
||||
if (event === "chat") {
|
||||
const text = payload.text || payload.message || payload.content || "";
|
||||
const delta = payload.delta || "";
|
||||
const error = payload.error || "";
|
||||
if (error) {
|
||||
log("error", "gateway", `Chat-Fehler (event:chat): ${error}`);
|
||||
if (pipelineActive) pipelineEnd(false, error);
|
||||
broadcast({ type: "chat_error", error, payload });
|
||||
} else if (text) {
|
||||
log("info", "gateway", `ANTWORT (event:chat): "${text.slice(0, 200)}"`);
|
||||
if (pipelineActive) pipelineEnd(true, `"${text.slice(0, 120)}"`);
|
||||
broadcast({ type: "chat_final", text, payload });
|
||||
} else if (delta) {
|
||||
broadcast({ type: "chat_delta", delta, payload });
|
||||
}
|
||||
}
|
||||
// ── Andere Events (tick, health, presence) ──
|
||||
if (event === "tick" || event === "health") return; // Noise
|
||||
log("debug", "gateway", `Event: ${event}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user