WP15 #9
|
|
@ -7,42 +7,39 @@ import yaml
|
|||
from pathlib import Path
|
||||
from markdown_it import MarkdownIt
|
||||
from markdown_it.token import Token
|
||||
import asyncio # Notwendig für asynchrone Chunking-Strategien
|
||||
import asyncio
|
||||
|
||||
# NEUE IMPORTS
|
||||
# Import der benötigten Klassen direkt (ersetzt get_semantic_analyzer)
|
||||
try:
|
||||
from app.services.semantic_analyzer import SemanticAnalyzer, SemanticChunkResult
|
||||
except ImportError:
|
||||
# Fallback für Tests, wenn der Service noch nicht auf dem Pfad ist
|
||||
# Fallback für Tests
|
||||
print("WARNUNG: SemanticAnalyzer Service nicht gefunden. Semantic Chunking wird fehlschlagen.")
|
||||
class SemanticAnalyzer:
|
||||
async def analyze_and_chunk(self, text, type): return []
|
||||
async def analyze_and_chunk(self, text, type): return [SemanticChunkResult(content=text, suggested_edges=[])]
|
||||
@dataclass
|
||||
class SemanticChunkResult:
|
||||
content: str
|
||||
suggested_edges: List[str] # Format: "kind:Target"
|
||||
suggested_edges: List[str]
|
||||
|
||||
|
||||
# ==========================================
|
||||
# 1. FUNKTION ZUM AUSLESEN DES FRONTMATTERS
|
||||
# 1. FUNKTION ZUM AUSLESEN DES FRONTMATTERS (Lokalisiert und stabil)
|
||||
# ==========================================
|
||||
|
||||
def extract_frontmatter_from_text(md_text: str) -> Tuple[Dict[str, Any], str]:
|
||||
"""
|
||||
Extrakte das YAML Frontmatter aus dem Markdown-Text und gibt den Body zurück.
|
||||
(Lokalisiert im Chunker zur Vermeidung von Import-Zyklen/Fehlern)
|
||||
"""
|
||||
# Regulärer Ausdruck, der den YAML-Block findet
|
||||
fm_match = re.match(r'^---\s*\n(.*?)\n---', md_text, re.DOTALL)
|
||||
|
||||
if not fm_match:
|
||||
# Kein Frontmatter gefunden, gib leeres Dict und gesamten Text zurück
|
||||
return {}, md_text
|
||||
|
||||
frontmatter_yaml = fm_match.group(1)
|
||||
|
||||
try:
|
||||
# Nutzung von safe_load
|
||||
frontmatter = yaml.safe_load(frontmatter_yaml)
|
||||
if not isinstance(frontmatter, dict):
|
||||
frontmatter = {}
|
||||
|
|
@ -352,6 +349,7 @@ async def assemble_chunks(note_id: str, md_text: str, note_type: str) -> List[Ch
|
|||
"""
|
||||
|
||||
# 1. Frontmatter prüfen (Double-LLM-Prevention)
|
||||
# Nutzen der lokalen, robusten Funktion
|
||||
fm, body = extract_frontmatter_from_text(md_text)
|
||||
note_status = fm.get("status", "").lower()
|
||||
|
||||
|
|
@ -369,10 +367,9 @@ async def assemble_chunks(note_id: str, md_text: str, note_type: str) -> List[Ch
|
|||
|
||||
# 3. Execution (Dispatcher)
|
||||
|
||||
# Wir müssen den md_text neu zusammensetzen, falls der Body abgeschnitten wurde
|
||||
if body:
|
||||
md_to_chunk = md_text # Bei LLM oder By_Heading
|
||||
else:
|
||||
# Der Text, der an die Chunker-Strategie geht.
|
||||
# Da extract_frontmatter_from_text den Frontmatter entfernt hat,
|
||||
# ist der Body der saubere Text. md_text enthält ihn noch für non-Frontmatter-Logik.
|
||||
md_to_chunk = md_text
|
||||
|
||||
if strategy == "semantic_llm":
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user