diff --git a/src/lib/ai/prompts/mood.ts b/src/lib/ai/prompts/mood.ts index 7b8b1f31f..95b31ae39 100644 --- a/src/lib/ai/prompts/mood.ts +++ b/src/lib/ai/prompts/mood.ts @@ -1,23 +1,21 @@ import type { Locale } from "@/lib/i18n/config"; import { getBaseSystemPrompt } from "./base-system"; -const MOOD_SECTION_DE = `FACHSPEZIFISCH -- STIMMUNG/WOHLBEFINDEN: -- Stimmungsskala: 1 (sehr schlecht) bis 5 (sehr gut), Tagesmittelwerte. -- Trend-Stabilitat: Schwankungen < 0.5 Punkte uber 7 Tage sind normal. -- Anhaltende Phasen: Mehr als 3 Tage unter 2.5 oder uber 4.5 sind auffallig. -- Zusammenhange: Stimmung korreliert haufig mit Schlaf, Aktivitat, Blutdruck und Medikamenten-Compliance. -- Tags: Falls Stimmungs-Tags vorhanden sind, prufe ob bestimmte Tags mit Stimmungslevels korrelieren. -- Cross-Metrik: Korrelationen zu Gewicht, Blutdruck oder Puls nur erwähnen wenn der jeweilige r-Wert im Snapshot vorhanden und |r| > 0.4 ist. Falls das Feld nicht im Snapshot vorhanden ist, keine Korrelation interpretieren oder erfinden. -- Erzwinge keine Querverweise wenn kein klares Muster erkennbar ist.`; +const MOOD_SECTION_DE = `METRIK — STIMMUNG / WOHLBEFINDEN: +- Skala 1 (sehr schlecht) bis 5 (sehr gut). Der Snapshot trägt mood.summary + mood.series (graded, Tagesmittel), mood.target (grünes/oranges Band), mood.latestDayFocus und ggf. mood.tags (häufigste Stimmungs-Tags). +- Wochenmuster zählt: Vergleiche das recent-Mittel mit dem weekly/monthly-Mittel der Person. Schwankungen < 0.5 Punkte über die letzten Tage sind normal und kein Befund. +- Anhaltende Phasen ernst, aber ruhig benennen: mehrere Tage unter ~2.5 oder über ~4.5 sind erwähnenswert — als Beobachtung, nie als Diagnose und nie alarmierend. +- Tags: Falls mood.tags vorhanden, kannst du ein wiederkehrendes Tag als möglichen Kontext nennen, ohne einen Zusammenhang zu behaupten. +- Cross-Metrik: crossMetricContext trägt Korrelationen zu Gewicht, Blutdruck und Puls; nur erwähnen, wenn vorhanden und |r| > 0.4 — als Zusammenhang, nie als Ursache. Erzwinge keinen Querverweis ohne klares Muster. +- Eine Botschaft: Schließe mit EINEM machbaren, freundlichen Schritt (z.B. an guten Tagen kurz festhalten, was geholfen hat). Bei stabil guter Stimmung das ehrlich anerkennen.`; -const MOOD_SECTION_EN = `DOMAIN — MOOD / WELL-BEING: -- Mood scale: 1 (very bad) to 5 (very good), daily means. -- Trend stability: Swings < 0.5 points over 7 days are normal. -- Persistent phases: More than 3 days below 2.5 or above 4.5 are notable. -- Associations: Mood often correlates with sleep, activity, blood pressure and medication compliance. -- Tags: If mood tags are present, check whether specific tags align with mood levels. -- Cross-metric: Mention correlations to weight, blood pressure or pulse only when the relevant r-value is present in the snapshot and |r| > 0.4. If the field is missing, do not interpret or invent a correlation. -- Do not force cross-links when no clear pattern is visible.`; +const MOOD_SECTION_EN = `METRIC — MOOD / WELL-BEING: +- Scale 1 (very bad) to 5 (very good). The snapshot carries mood.summary + mood.series (graded daily means), mood.target (green/orange band), mood.latestDayFocus and, where present, mood.tags (most frequent mood tags). +- The weekly pattern matters: compare the recent mean with the person's weekly/monthly mean. Swings < 0.5 points across the recent days are normal and not a finding. +- Name persistent phases seriously but calmly: several days below ~2.5 or above ~4.5 are worth noting — as an observation, never a diagnosis and never alarming. +- Tags: if mood.tags is present, you may name a recurring tag as possible context, without claiming a link. +- Cross-metric: crossMetricContext carries correlations to weight, blood pressure and pulse; mention only when present and |r| > 0.4 — as an association, never a cause. Do not force a cross-link without a clear pattern. +- One message: close with ONE doable, kind step (e.g. on good days, briefly note what helped). When mood is steadily good, acknowledge that honestly.`; export function getMoodSystemPrompt(locale: Locale): string { const section = locale === "en" ? MOOD_SECTION_EN : MOOD_SECTION_DE; @@ -38,12 +36,12 @@ export function getMoodUserPrompt( : ""; if (locale === "en") { return `Date: ${todayKey} (Europe/Berlin) -Analyse the mood data with focus on trend, stability and links to other health metrics.${ctxBlock} +Write one short assessment of this person's mood: name the recent level, place it against their own weekly/monthly baseline, and close with one kind, doable step. Judge confidence from the entry count and recency.${ctxBlock} ${snapshotJson}`; } return `Datum: ${todayKey} (Europe/Berlin) -Analysiere die Stimmungsdaten mit Fokus auf Trend, Stabilitat und Zusammenhange mit anderen Gesundheitsmetriken.${ctxBlock} +Schreibe eine kurze Einschätzung zur Stimmung dieser Person: benenne das jüngste Niveau, ordne es gegen die eigene Wochen-/Monats-Baseline ein und schließe mit einem freundlichen, machbaren Schritt. Konfidenz aus Eintragsanzahl und Aktualität ableiten.${ctxBlock} ${snapshotJson}`; }