"""Publication preparation: teasers, visual ideas, final package.""" from pathlib import Path from rich.console import Console from rich.panel import Panel console = Console() _SYSTEM = """Du bist ein erfahrener Redaktionsassistent für KNIEPUNKT. Erstelle prägnante, ansprechende LinkedIn-Texte und kreative Cover-Ideen für eine hochgebildete Zielgruppe.""" def generate_teasers(client, draft: str) -> str: """Generate 3 teaser/invitation text variants.""" from kniepunkt.llm import chat console.print("\n[yellow]Erstelle Teaser-Varianten...[/yellow]") prompt = f"""Erstelle 3 verschiedene LinkedIn-Einladungstexte (Teaser) für diese KNIEPUNKT-Episode. Episodentext (Auszug): {draft[:2000]} **Variante 1 – Neugier-Aufhänger:** stellt eine Frage oder weckt Neugier **Variante 2 – Pointierte These:** provokante Aussage oder klare Meinung **Variante 3 – Bild/Anekdote:** beginnt mit einem konkreten Bild oder einer kurzen Geschichte Jeder Teaser: 3-5 Sätze, LinkedIn-gerecht, endet mit einer Leseeinladung und "Schönen Sonntag! 🤙" """ return chat(client, [{"role": "user", "content": prompt}], _SYSTEM, max_tokens=1024) def generate_visual_ideas(client, draft: str) -> str: """Generate 3 cover/visual concept ideas.""" from kniepunkt.llm import chat console.print("\n[yellow]Entwickle Cover-Ideen...[/yellow]") prompt = f"""Entwickle 3 Cover-Ideen für diese KNIEPUNKT-Episode. Episodentext (Auszug): {draft[:1500]} Für jede Idee: - **Bildkonzept:** Was ist zu sehen? Konkrete Beschreibung des Motivs - **Stil:** fotorealistisch / illustrativ / symbolisch / abstrakt - **Verbindung zur Episode:** Wie spiegelt es das Thema wider? - **Bildgenerierungs-Prompt (Englisch):** konkreter Prompt für DALL-E / Midjourney / Flux Hinweis: KNIEPUNKT-Logo, Episodentitel und Datum werden vom Autor separat hinzugefügt.""" return chat(client, [{"role": "user", "content": prompt}], _SYSTEM, max_tokens=1024) def save_package(session_date: str, draft: str, teasers: str, source_assessment: str, visual_ideas: str) -> Path: """Write the complete publication package to a markdown file.""" sessions_dir = Path(__file__).parent.parent / "sessions" sessions_dir.mkdir(exist_ok=True) out_path = sessions_dir / f"{session_date}_publikation.md" content = f"""# KNIEPUNKT Publikationspaket – {session_date} ## Artikel {draft} --- ## Einladungstexte (Teaser-Varianten) {teasers} --- ## Cover-Ideen {visual_ideas} --- ## Quellenbewertung {source_assessment} """ out_path.write_text(content, encoding="utf-8") return out_path