WP15 #9
|
|
@ -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=[])]
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user