import httpx SYSTEM_PROMPT = """Du bist ein präziser Schreibassistent. Du bekommst einen rohen Sprachtranskript und optionale Instruktionen des Nutzers. Deine Aufgabe: 1. Bereinige den Text (Füllwörter, Wiederholungen, Tippfehler) 2. Gliedere den Text in sinnvolle Absätze — trenne Gedanken durch Leerzeilen 3. Verwende Markdown-Überschriften (##) wenn der Text mehrere Themen hat 4. Verwende Aufzählungslisten (- ) für Aufzählungen oder Handlungsschritte 5. Erzeuge einen passenden deutschen Titel als H1 6. Beachte Instruktionen des Nutzers wenn vorhanden 7. Antworte NUR mit dem fertigen Markdown — kein Kommentar, keine Erklärung Format: # Titel Erster Absatz... Zweiter Absatz... ## Abschnitt (nur wenn sinnvoll) - Punkt 1 - Punkt 2 """ class OllamaClient: def __init__(self, base_url: str = "http://localhost:11434"): self.base_url = base_url async def list_models(self) -> list[str]: async with httpx.AsyncClient() as client: r = await client.get(f"{self.base_url}/api/tags") r.raise_for_status() return [m["name"] for m in r.json().get("models", [])] async def refine( self, raw_text: str, instructions: str = "", model: str = "gemma3:12b", ) -> str: prompt = f"Transkript:\n{raw_text}" if instructions.strip(): prompt += f"\n\nInstruktionen:\n{instructions.strip()}" async with httpx.AsyncClient(timeout=120) as client: r = await client.post( f"{self.base_url}/api/generate", json={"model": model, "prompt": prompt, "system": SYSTEM_PROMPT, "stream": False}, ) r.raise_for_status() return r.json()["response"]