modified: app/services/semantic_analyzer.py

This commit is contained in:
Lars 2025-12-12 09:44:01 +01:00
parent 3629bc3fb9
commit 49cdc9a13f

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=[])]