WP15 #9

Merged
Lars merged 54 commits from WP15 into main 2025-12-13 06:39:48 +01:00
Showing only changes of commit 49cdc9a13f - Show all commits

View File

@ -1,7 +1,6 @@
"""
app/services/semantic_analyzer.py
Kapselt die LLM-Strategie für Chunking und Kanten-Extraktion.
Nutzt die Matrix-Logik aus DiscoveryService für konsistente Kanten-Typen.
"""
import json
@ -59,14 +58,17 @@ class SemanticAnalyzer:
clean_json = response_json.replace("```json", "").replace("```", "").strip()
data = json.loads(clean_json)
# 3a. Typsicherheit des äußeren Arrays
if not isinstance(data, list):
logger.error("SemanticAnalyzer: JSON root ist kein Array. Fehlerhafte LLM-Antwort.")
raise ValueError("Root element is not a list.")
# FIX: Typsicherheit auf der Wurzel
if isinstance(data, dict):
# LLM hat ein Einzelobjekt geliefert -> wandle es in ein Array
data = [data]
elif not isinstance(data, list):
logger.error("SemanticAnalyzer: JSON root ist weder Array noch Objekt. Fehlerhafte LLM-Antwort.")
raise ValueError("Root element is not a list or dictionary.")
results = []
for item in data:
# FIX: Typsicherheit auf Item-Ebene
# Typsicherheit auf Item-Ebene
if not isinstance(item, dict):
logger.warning(f"SemanticAnalyzer: Ungültiges Chunk-Element ignoriert: {item}")
continue
@ -109,7 +111,6 @@ class SemanticAnalyzer:
logger.error("SemanticAnalyzer: LLM lieferte KEIN valides JSON. Fallback auf Raw Text.")
return [SemanticChunkResult(content=text, suggested_edges=[])]
except Exception as e:
# Wichtig: Wir fangen alle anderen Fehler, um den Prozess nicht abzubrechen.
logger.error(f"SemanticAnalyzer Unbehandelter Fehler: {e}")
return [SemanticChunkResult(content=text, suggested_edges=[])]