From 4e5f8e6c930c9542aaa929182a2211301d8cd0b1 Mon Sep 17 00:00:00 2001 From: chahinebrini Date: Thu, 7 May 2026 04:10:27 +0200 Subject: [PATCH] fix(sos-stream): nickname-Injektion in systemPrompt Lyra halluzinierte Namen wie 'Max' im SOS-Stream weil systemPrompt keinen Nicknamen-Anker hatte. message.post.ts hatte das Pattern schon, aber beim Cutover ins backend/-Layout war's nur dort, nicht in sos-stream.{get,post}.ts. Fix: getProfile(user.id) + Inject 'NUTZER-NAME: ...' wie in message.post.ts. Non-blocking (catch), Memory-Pattern preserved. --- backend/server/api/coach/sos-stream.get.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/backend/server/api/coach/sos-stream.get.ts b/backend/server/api/coach/sos-stream.get.ts index 491c6ce..8dad30f 100644 --- a/backend/server/api/coach/sos-stream.get.ts +++ b/backend/server/api/coach/sos-stream.get.ts @@ -22,6 +22,7 @@ import { COACH_SYSTEM_PROMPT } from "./message.post"; import { getMemoriesForUser, markReferenced } from "../../db/lyraMemory"; import { extractAndStoreMemories } from "../../utils/lyraMemoryExtract"; +import { getProfile } from "../../db/profile"; const SOS_INSTRUCTION = `\n\nDU BEFINDEST DICH IN EINEM AKUTEN SOS-MOMENT. WICHTIGE REGELN: - Antworte als REINER TEXT, KEINE JSON-Wrapper, KEIN Markdown, KEINE Aufzählungen. @@ -127,7 +128,20 @@ export default defineEventHandler(async (event) => { console.error("[lyra-memory] load error (non-fatal):", e); } - const systemPrompt = `${memoryBlock}${lang}\n\n${COACH_SYSTEM_PROMPT.replace("{{PLAN_DETAILS}}", "")}${SOS_INSTRUCTION}`; + // Nickname-Injektion (Pattern aus message.post.ts) — sonst halluziniert Lyra + // Namen wie "Max" weil sie keinen Anker hat. + let nicknamePrefix = ""; + try { + const profile = await getProfile(user.id); + const nickname = profile?.nickname || profile?.username; + if (nickname) { + nicknamePrefix = `NUTZER-NAME: Der Nutzer heißt "${nickname}" – nenne ihn gelegentlich bei seinem Namen wenn es natürlich passt.\n\n`; + } + } catch (e) { + console.error("[sos-stream] profile load (non-fatal):", e); + } + + const systemPrompt = `${nicknamePrefix}${memoryBlock}${lang}\n\n${COACH_SYSTEM_PROMPT.replace("{{PLAN_DETAILS}}", "")}${SOS_INSTRUCTION}`; // Erste Nachricht muss user sein const firstUserIdx = messages.findIndex((m) => m.role === "user");