WP15 #9
|
|
@ -113,11 +113,13 @@ def parse_markdown_draft(full_text):
|
|||
"""Robustes Parsing + Sanitization."""
|
||||
clean_text = full_text
|
||||
|
||||
# 1. Markdown Code-Blöcke entfernen
|
||||
pattern_block = r"```(?:markdown|md)?\s*(.*?)\s*```"
|
||||
match_block = re.search(pattern_block, full_text, re.DOTALL | re.IGNORECASE)
|
||||
if match_block:
|
||||
clean_text = match_block.group(1).strip()
|
||||
|
||||
# 2. Split YAML / Body
|
||||
parts = re.split(r"^---+\s*$", clean_text, maxsplit=2, flags=re.MULTILINE)
|
||||
|
||||
meta = {}
|
||||
|
|
@ -126,13 +128,28 @@ def parse_markdown_draft(full_text):
|
|||
if len(parts) >= 3:
|
||||
yaml_str = parts[1]
|
||||
body_candidate = parts[2]
|
||||
|
||||
# --- FIX 1: Hashtag-Cleaner für YAML ---
|
||||
# Entfernt #, wenn sie innerhalb von [] stehen, um YAML-Kommentare zu verhindern.
|
||||
# Wir entfernen pauschal # im YAML-Block, da Tags dort keine brauchen.
|
||||
yaml_str_clean = yaml_str.replace("#", "")
|
||||
|
||||
try:
|
||||
parsed = yaml.safe_load(yaml_str)
|
||||
parsed = yaml.safe_load(yaml_str_clean)
|
||||
if isinstance(parsed, dict):
|
||||
meta = parsed
|
||||
body = body_candidate.strip()
|
||||
except Exception:
|
||||
pass
|
||||
except Exception as e:
|
||||
print(f"YAML Parsing Warning: {e}")
|
||||
# Fallback: Body retten, Meta leer lassen
|
||||
body = body_candidate.strip()
|
||||
|
||||
# --- FIX 2: Type/Status Swap Korrektur ---
|
||||
# Wenn das LLM halluziniert hat: type='draft' -> Das ist eigentlich der Status.
|
||||
if meta.get("type") == "draft":
|
||||
meta["status"] = "draft"
|
||||
# Wir raten einen besseren Typ oder setzen default
|
||||
meta["type"] = "experience" # Da Interviews oft Experiences sind
|
||||
|
||||
return normalize_meta_and_body(meta, body)
|
||||
|
||||
|
|
|
|||
|
|
@ -97,7 +97,6 @@ technical_template: |
|
|||
# ---------------------------------------------------------
|
||||
# 5. INTERVIEW: Der "One-Shot Extractor" (Performance Mode)
|
||||
# ---------------------------------------------------------
|
||||
|
||||
interview_template: |
|
||||
TASK:
|
||||
Erstelle einen Markdown-Entwurf für eine Notiz vom Typ '{target_type}'.
|
||||
|
|
@ -114,14 +113,14 @@ interview_template: |
|
|||
|
||||
OUTPUT REGELN (STRIKT BEACHTEN):
|
||||
A. FRONTMATTER (YAML):
|
||||
- Darf NUR folgende Felder enthalten: [type, status, title, tags].
|
||||
- Schreibe KEINE inhaltlichen Sätze (wie 'Situation', 'Ziel') in das YAML!
|
||||
- Setze 'status: draft'.
|
||||
- 'type': Muss '{target_type}' sein (oder 'experience', 'project' etc.). NIEMALS 'draft'.
|
||||
- 'status': Muss IMMER 'draft' sein.
|
||||
- 'tags': Eine JSON-Liste von Strings OHNE Hashtags. Beispiel: ['Recycling', 'Konflikt']. NICHT: [#Recycling].
|
||||
- Keine Sätze im YAML, nur Daten.
|
||||
|
||||
B. BODY (Markdown):
|
||||
- Nutze für jedes Schema-Feld eine Markdown-Überschrift (## Feldname).
|
||||
- Schreibe den Inhalt DARUNTER.
|
||||
- Nutze "[TODO: Ergänzen]", wenn Infos fehlen.
|
||||
|
||||
HINWEIS ZUM TYP:
|
||||
{schema_hint}
|
||||
|
|
@ -132,7 +131,7 @@ interview_template: |
|
|||
type: {target_type}
|
||||
status: draft
|
||||
title: ...
|
||||
tags: [...]
|
||||
tags: ["Tag1", "Tag2"]
|
||||
---
|
||||
# Titel der Notiz
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user