diff --git a/backend/generator.py b/backend/generator.py index 8168423..cd0a06d 100644 --- a/backend/generator.py +++ b/backend/generator.py @@ -1435,13 +1435,6 @@ async def generate_element(topic: str, hint: str, provider: str = DEFAULT_PROVID return fallback -def _fence(content: str) -> str: - """Beispiele müssen Codeblöcke sein — fehlende Fences nachrüsten.""" - if content.startswith("```"): - return content - return f"```\n{content}\n```" - - def _parse_suggestions(stdout: str) -> list[dict] | None: """Validiert Vorschlags-JSON aus KI-Output. None bei ungültigem JSON.""" data = _parse_json_text(stdout) @@ -1455,8 +1448,6 @@ def _parse_suggestions(stdout: str) -> list[dict] | None: target = s.get("target") content = str(s.get("content", "")).strip() if text and content and target in ("description", "examples", "hints"): - if target == "examples": - content = _fence(content) suggestions.append({"text": text, "target": target, "content": content}) return suggestions @@ -1530,8 +1521,6 @@ def _validate_change(c, element: dict) -> dict | None: return None else: index = None - if target == "examples" and action in ("anpassen", "hinzufuegen"): - content = _fence(content) return {"text": text, "action": action, "target": target, "index": index, "content": content} diff --git a/templates/Prompt/Element-Chat.md b/templates/Prompt/Element-Chat.md index 215b1f5..bfee420 100644 --- a/templates/Prompt/Element-Chat.md +++ b/templates/Prompt/Element-Chat.md @@ -9,7 +9,7 @@ BISHERIGER CHAT-VERLAUF: Setze die letzte Nutzer-Anweisung in Änderungs-Vorschläge um. Halte die Element-Regeln ein: 1. title — prägnanter Titel (max. 8 Wörter, reiner Text ohne Markdown/Backticks) 2. description — was es ist und wozu: MAXIMAL 1–2 Sätze -3. examples — KURZ und SIMPEL: wenige Zeilen Code, das Minimalbeispiel. Jedes beginnt mit einem kurzen Kommentar in der Code-Syntax (z. B. ``), der die Variante benennt. Als Codeblock mit Sprachangabe (```sprache). +3. examples — KURZ und SIMPEL: das Minimalbeispiel im themengerechten Format (Codeblock mit Sprachangabe bei Code-Themen, sonst Beispielsätze/Mini-Dialog/Mini-Szenario als normaler Text). Jedes mit Varianten-Label: Code-Kommentar (z. B. ``) bzw. **fettes** Label (z. B. **Höfliche Bitte:**). 4. hints — jeder Hinweis muss WICHTIG oder NÜTZLICH sein. Telegrammstil: nur die Kernaussage. Beispiel: "Keine Blockelemente in `

`." Umfang: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH. Markdown: `inline-code` für Bezeichner, Tags und Befehle — IMMER in Backticks. Tonalität: klares Deutsch, direkt, keine Füllsätze. diff --git a/templates/Prompt/Element-Check.md b/templates/Prompt/Element-Check.md index 1cdd5dd..c578c17 100644 --- a/templates/Prompt/Element-Check.md +++ b/templates/Prompt/Element-Check.md @@ -11,7 +11,7 @@ RECHERCHE — sammle breit alle Kandidaten: fehlende Kernaussagen, wichtige Vari Jeder Kandidat: - text: kurze Beschreibung der Lücke (max. 12 Wörter, reiner Text) - target: "description" | "examples" | "hints" -- content: fertiger Inhalt zum Einfügen. SO KURZ WIE MÖGLICH, so lang wie nötig. Markdown: `inline-code` für Bezeichner, examples als Codeblock mit Sprachangabe (```sprache), beginnend mit kurzem Kommentar zur Variante (z. B. ``), hints nur wenn WICHTIG oder NÜTZLICH, im Telegrammstil (nur Kernaussage, z. B. "Keine Blockelemente in `

`."). Tags/Bezeichner im Fließtext IMMER in Backticks. +- content: fertiger Inhalt zum Einfügen. SO KURZ WIE MÖGLICH, so lang wie nötig. Markdown: `inline-code` für Bezeichner, examples im themengerechten Format (Codeblock mit Sprachangabe bei Code, sonst Beispielsätze/Mini-Szenario als normaler Text), jeweils mit Varianten-Label (Code-Kommentar bzw. **fettes** Label), hints nur wenn WICHTIG oder NÜTZLICH, im Telegrammstil (nur Kernaussage, z. B. "Keine Blockelemente in `

`."). Tags/Bezeichner im Fließtext IMMER in Backticks. Gib NUR gültiges JSON aus, ohne Code-Fence, ohne weiteren Text: {{"suggestions": [{{"text": "...", "target": "hints", "content": "..."}}]}} diff --git a/templates/Prompt/Element-Create.md b/templates/Prompt/Element-Create.md index 388c375..ec91f88 100644 --- a/templates/Prompt/Element-Create.md +++ b/templates/Prompt/Element-Create.md @@ -9,16 +9,24 @@ KONTEXT (Auszüge aus dem Themen-Material): Erstelle GENAU EIN Element zum Stichwort: 1. title — prägnanter Titel (max. 8 Wörter, reiner Text ohne Markdown/Backticks) 2. description — was es ist und wozu: MAXIMAL 1–2 Sätze -3. examples — GENAU EIN Beispiel: KURZ und SIMPEL, wenige Zeilen Code, das Minimalbeispiel, keine Realwelt-Komplexität. Beginnt mit einem kurzen Kommentar in der Code-Syntax (z. B. ``, `// Mit Default-Wert`), der die Variante benennt. +3. examples — GENAU EIN Beispiel: KURZ und SIMPEL, das Minimalbeispiel im themengerechten Format (siehe BEISPIELFORMAT), keine Realwelt-Komplexität. 4. hints — IMMER leere Liste. Hinweise ergänzt der Nutzer später selbst. (Falls je gefordert: TELEGRAMMSTIL, max. 10 Wörter.) +BEISPIELFORMAT — am Thema ausrichten, nicht pauschal an Code: +- Code-/Tool-Thema (Sprache, Framework, CLI, Konfiguration): Codeblock mit Sprachangabe, wenige Zeilen, Minimalbeispiel. +- Sprach-Thema (Vokabeln, Grammatik, Formulierungen): 1–3 Beispielsätze oder ein Mini-Dialog, fremdsprachiger Teil *kursiv*, deutsche Übersetzung in Klammern wo nötig. +- Konzept-Thema (Psychologie, Kommunikation, Methoden, Theorie): ein Mini-Szenario in 2–4 Sätzen (Situation → Anwendung → Wirkung), ein Schema oder eine Formel. +Mischthemen: pro Beispiel das Format wählen, das den Punkt am direktesten zeigt. +Ein Beispiel ist immer KONKRET (echter Code, echte Sätze, echte Situation) — nie die Beschreibung, was ein Beispiel zeigen würde. +Jedes Beispiel benennt seine Variante: in Code als Kommentar in der Code-Syntax (z. B. ``, `// Mit Default-Wert`), in Prosa als vorangestelltes fettes Label (z. B. **Höfliche Bitte:**). + Das Element ist ATOMAR: allein verständlich, ohne dass der Leser etwas anderes gelesen hat. Benutzte Begriffe in einem Halbsatz auflösen. Umfang: SO KURZ WIE MÖGLICH, so lang wie nötig — gilt für description, examples und hints. Jedes Wort muss seinen Platz verdienen: Füllwörter, Nebensätze ohne Informationswert und Selbstverständliches streichen. Die Länge kommt aus der ZAHL der Beispiele (Varianten), nie aus langen Texten. Tonalität: klares Deutsch, direkt, praxisorientiert. Fachbegriffe beim ersten Auftreten kurz erklären. Keine Füllsätze, keine Einleitungsfloskeln. -Markdown in description und examples: normale Absätze, `inline-code` für Bezeichner, Codeblöcke mit Sprachangabe (```sprache), **fett** sparsam für Kernaussagen. Keine Überschriften. Code-Beispiele IMMER als Codeblock, nie als Inline-Code. Bezeichner, Tags und Befehle (z. B. `

`, `git add`) im Fließtext IMMER in Backticks — nie nackt. +Markdown in description und examples: normale Absätze, `inline-code` für Bezeichner, **fett** sparsam für Kernaussagen. Keine Überschriften. Code-Beispiele IMMER als Codeblock mit Sprachangabe (```sprache), nie als Inline-Code; Prosa-Beispiele (Sätze, Dialoge, Szenarien) als normaler Text, NIE in einen Codeblock zwingen. Bezeichner, Tags und Befehle (z. B. `

`, `git add`) im Fließtext IMMER in Backticks — nie nackt. Gib NUR gültiges JSON aus, ohne Code-Fence, ohne weiteren Text: -{{"title": "...", "description": "...", "examples": ["```sprache\n...\n```"], "hints": []}} +{{"title": "...", "description": "...", "examples": ["```sprache\n...\n``` ODER **Variante:** Prosa-Beispiel"], "hints": []}} diff --git a/templates/Prompt/Element-Refine.md b/templates/Prompt/Element-Refine.md index 7a9825b..33c4d19 100644 --- a/templates/Prompt/Element-Refine.md +++ b/templates/Prompt/Element-Refine.md @@ -11,7 +11,7 @@ ANWEISUNG DES NUTZERS: Passe den Vorschlag gemäß der Anweisung an. Behalte action/target/index bei, außer die Anweisung verlangt anderes. -Stil-Regeln für content: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH. `inline-code` für Bezeichner, Tags und Befehle — IMMER in Backticks. examples als Codeblock mit Sprachangabe und kurzem Varianten-Kommentar (z. B. ``). hints im Telegrammstil: nur die Kernaussage. +Stil-Regeln für content: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH. `inline-code` für Bezeichner, Tags und Befehle — IMMER in Backticks. examples im themengerechten Format (Codeblock mit Sprachangabe NUR bei Code, sonst Beispielsätze/Mini-Szenario) mit Varianten-Label (Code-Kommentar bzw. **fettes** Label). hints im Telegrammstil: nur die Kernaussage. Felder: - text: kurz, was geändert wird (max. 12 Wörter, reiner Text) diff --git a/templates/Prompt/Element-Stil.md b/templates/Prompt/Element-Stil.md index 1e80e9f..bed4113 100644 --- a/templates/Prompt/Element-Stil.md +++ b/templates/Prompt/Element-Stil.md @@ -6,12 +6,20 @@ AKTUELLES ELEMENT (JSON): STIL-REGELN: 1. title — prägnant, max. 8 Wörter, reiner Text ohne Markdown/Backticks 2. description — was es ist und wozu: MAXIMAL 1–2 Sätze -3. examples — KURZ und SIMPEL: wenige Zeilen Code, Minimalbeispiel, keine Realwelt-Komplexität. Ein Beispiel pro relevanter Variante, geordnet vom Üblichen zum Speziellen. Als Codeblock mit Sprachangabe (```sprache), nie als Inline-Code. Jedes Beispiel beginnt mit einem kurzen Kommentar in der Code-Syntax (z. B. ``), der die Variante benennt. +3. examples — KURZ und SIMPEL: das Minimalbeispiel im themengerechten Format (siehe BEISPIELFORMAT), keine Realwelt-Komplexität. Ein Beispiel pro relevanter Variante, geordnet vom Üblichen zum Speziellen. Ein Codeblock um ein Prosa-Beispiel ist ein Stil-Verstoß — ebenso ein Code-Beispiel ohne Codeblock. + + BEISPIELFORMAT — am Thema ausrichten, nicht pauschal an Code: + - Code-/Tool-Thema (Sprache, Framework, CLI, Konfiguration): Codeblock mit Sprachangabe, wenige Zeilen, Minimalbeispiel. + - Sprach-Thema (Vokabeln, Grammatik, Formulierungen): 1–3 Beispielsätze oder ein Mini-Dialog, fremdsprachiger Teil *kursiv*, deutsche Übersetzung in Klammern wo nötig. + - Konzept-Thema (Psychologie, Kommunikation, Methoden, Theorie): ein Mini-Szenario in 2–4 Sätzen (Situation → Anwendung → Wirkung), ein Schema oder eine Formel. + Mischthemen: pro Beispiel das Format wählen, das den Punkt am direktesten zeigt. + Ein Beispiel ist immer KONKRET (echter Code, echte Sätze, echte Situation) — nie die Beschreibung, was ein Beispiel zeigen würde. + Jedes Beispiel benennt seine Variante: in Code als Kommentar in der Code-Syntax (z. B. ``, `// Mit Default-Wert`), in Prosa als vorangestelltes fettes Label (z. B. **Höfliche Bitte:**). 4. hints — jeder Hinweis muss WICHTIG oder NÜTZLICH sein: Stolperfalle, Merksatz oder Best Practice mit echtem Praxiswert. Selbstverständliches, Nischenwissen und Redundantes zum Element entfernen. Telegrammstil: nur die Kernaussage, Füllverben und Herleitungen streichen. Vorher: "Browser fügen standardmäßig vertikalen Abstand vor und nach `

` ein — anpassbar mit `margin`." Nachher: "Browser-Abstand um `

` per `margin` anpassbar." 5. Umfang: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH. Jedes Wort muss seinen Platz verdienen — Füllwörter, Nebensätze ohne Informationswert und Selbstverständliches streichen. Aber: Kürze nie auf Kosten der Verständlichkeit oder Korrektheit. -6. Markdown: `inline-code` für Bezeichner, Tags und Befehle im Fließtext (z. B. `

`, `git add`) — IMMER in Backticks, nie nackt. **fett** sparsam. Keine Überschriften. +6. Markdown: `inline-code` für Bezeichner, Tags und Befehle im Fließtext (z. B. `

`, `git add`) — IMMER in Backticks, nie nackt. Fremdsprachige Beispielsätze *kursiv*. **fett** sparsam. Keine Überschriften. 7. Tonalität: klares Deutsch, direkt, praxisorientiert. Keine Füllsätze. Schlage für jeden Stil-Verstoß GENAU EINE Änderung vor: diff --git a/templates/Prompt/Element-Verify.md b/templates/Prompt/Element-Verify.md index fa9a74a..462668c 100644 --- a/templates/Prompt/Element-Verify.md +++ b/templates/Prompt/Element-Verify.md @@ -15,7 +15,7 @@ Prüfe JEDEN Kandidaten kritisch: 3. KORREKT? Fachlich falsch oder irreführend → ablehnen. 4. PASST das target ("description" | "examples" | "hints")? Sonst korrigieren. -Behalte nur Kandidaten, die alle Prüfungen bestehen. Verbessere dabei content auf die Stil-Regeln: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH; `inline-code` für Bezeichner; examples als Codeblock mit Sprachangabe und kurzem Varianten-Kommentar; hints im Telegrammstil (nur Kernaussage, Kürze nie auf Kosten der Verständlichkeit). +Behalte nur Kandidaten, die alle Prüfungen bestehen. Verbessere dabei content auf die Stil-Regeln: SO LANG WIE NÖTIG und SO KURZ WIE MÖGLICH; `inline-code` für Bezeichner; examples im themengerechten Format (Codeblock mit Sprachangabe bei Code, sonst Beispielsätze/Mini-Szenario) mit Varianten-Label; hints im Telegrammstil (nur Kernaussage, Kürze nie auf Kosten der Verständlichkeit). Gib NUR gültiges JSON aus, ohne Code-Fence, ohne weiteren Text: {{"suggestions": [{{"text": "...", "target": "hints", "content": "..."}}]}}