fix: Audio-Dateien nie auf Frontpage + Sprach-Regeln im Triage-Prompt

- media_publish_flags: .ogg/.mp3/.wav auf '0' (nicht veröffentlichen)
- TRIAGE_PROMPT: Sprachnachrichten-Regeln (dünn=Zusammenfassung, reichhaltig=1:1)
- threading-Import-Fix in WhatsApp/Telegram-Webhooks
This commit is contained in:
Hermes Agent
2026-06-19 13:36:00 +02:00
parent ad3082c195
commit 8bc524ca9c
+29 -4
View File
@@ -242,6 +242,15 @@ WICHTIG zu display_text:
kopiere ihn 1:1 als display_text.
- Wenn der Text kurz, unstrukturiert oder noisy ist:
formuliere einen sauberen, lesbaren Display-Text (2-4 Sätze), der die Kernaussage wiedergibt.
- 🎤 SPRACHNACHRICHTEN (erkennbar an \"🎤\" am Anfang):
- Wenn der Inhalt REICHHALTIG ist (200 Zeichen, mehrere Fakten, klare News):
Transkription 1:1 als display_text übernehmen.
- Wenn der Inhalt DÜNN ist (nur \"Spiel X gibt's an Stand Y für €Z\"):
Kurze LLM-Zusammenfassung (1 Satz), nicht die ganze Transkription.
Grund: Die Sprachnachricht selbst wird NICHT veröffentlicht (nur der Text).
- 🖼 FOTO + 🎤 SPRACHNACHRICHT kombiniert (erkennbar an \"[Bild ohne Text]\" + \"🎤\"):
display_text = Transkription der Sprachnachricht (mit Foto-Regeln wie oben).
Das Foto wird automatisch mitveröffentlicht, die Audio-Datei NICHT.
- Entferne dabei: Füllwörter, Emoji-Overload, unhöfliche Formulierungen, irrelevante Anhängsel.
- Der display_text MUSS auf Deutsch sein (englische Eigennamen/Fachbegriffe sind OK).
- Maximal 500 Zeichen.
@@ -436,11 +445,27 @@ def triage_submission(db, submission_id: int) -> dict:
if len(display_text) > 1000:
display_text = display_text[:997] + "..."
# ── Media-Publish-Flags: Audio nicht veröffentlichen ────────────
# Regel: Sprachnachrichten (.ogg/.mp3/.wav) sollen NIE auf der
# Frontpage als Audio-Player erscheinen. Nur die Transkription
# (display_text) wird gezeigt. Bilder/Videos bleiben sichtbar.
media_flags = None
if row["media_path"]:
paths = row["media_path"].split("||")
flags = []
for p in paths:
ext = os.path.splitext(p)[1].lower()
if ext in (".ogg", ".mp3", ".wav"):
flags.append("0") # Audio: nicht veröffentlichen
else:
flags.append("1") # Bild/Video: veröffentlichen
media_flags = ",".join(flags)
# ── DB-Update ───────────────────────────────────────────────────
db.execute(
"""UPDATE submissions
SET triage_tier=?, triage_reasons=?, triage_at=CURRENT_TIMESTAMP,
public=?, status=?, display_text=?,
public=?, status=?, display_text=?, media_publish_flags=?,
published_at=CASE WHEN ? = 1 THEN COALESCE(published_at, CURRENT_TIMESTAMP) ELSE published_at END
WHERE id=?""",
(
@@ -449,6 +474,7 @@ def triage_submission(db, submission_id: int) -> dict:
1 if tier == 1 else 0,
"published" if tier == 1 else ("blocked" if tier == 3 else "pending"),
display_text,
media_flags,
tier,
submission_id,
),
@@ -979,6 +1005,7 @@ def whatsapp_webhook():
return "OK", 200
try:
import threading
entries = body.get("entry", [])
db = get_db()
@@ -1159,7 +1186,6 @@ def whatsapp_webhook():
# Transcribe audio in background (non-blocking)
if msg_type == "audio" and media_path:
import threading
sub_id = recent["id"] if thread_found else db.execute(
"SELECT last_insert_rowid()"
).fetchone()[0]
@@ -1171,7 +1197,6 @@ def whatsapp_webhook():
# Transcribe video in background
if msg_type == "video" and media_path:
import threading
sub_id = recent["id"] if thread_found else db.execute(
"SELECT last_insert_rowid()"
).fetchone()[0]
@@ -1183,7 +1208,6 @@ def whatsapp_webhook():
# Auto-summarize text/image submissions (LLM hall + summary)
if msg_type in ("text", "image") and not thread_found and content and len(content.strip()) > 20:
import threading
sub_id = db.execute("SELECT last_insert_rowid()").fetchone()[0]
# Only if regex didn't already find a halle
if not halle:
@@ -4600,6 +4624,7 @@ def telegram_webhook():
return "OK", 200
try:
import threading
msg = body.get("message", {})
if not msg:
return "OK", 200