...
        title = "ohne_titel"
    # Nicht erlaubte Zeichen durch Unterstrich ersetzen
    title = re.sub(r"[^A-Za-z0-9äöüÄÖÜß]+", "_", title)
    title = title.strip("_")
    # Falls nach dem Säubern nichts übrig bleibt
    return title or "chat"

def extract_messages(conv: dict):
    """Gibt eine sortierte Liste (timestamp, role, text) zurück."""
    mapping = conv.get("mapping", {})
    messages = []
...