From 37c0f526ec86d9c3b36537fbdd58fa2d7117480b Mon Sep 17 00:00:00 2001 From: Lars Date: Fri, 12 Dec 2025 09:41:06 +0100 Subject: [PATCH] modified: app/services/semantic_analyzer.py --- app/services/semantic_analyzer.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/services/semantic_analyzer.py b/app/services/semantic_analyzer.py index dc13ae2..2d4399e 100644 --- a/app/services/semantic_analyzer.py +++ b/app/services/semantic_analyzer.py @@ -12,7 +12,6 @@ from dataclasses import dataclass # Import der benötigten Services (Annahme: llm_service und discovery sind verfügbar.) from app.services.llm_service import LLMService -# ANNAHME: DiscoveryService ist für die Matrix-Logik verfügbar. from app.services.discovery import DiscoveryService logger = logging.getLogger(__name__) @@ -49,8 +48,7 @@ class SemanticAnalyzer: user_prompt = f"Dokument-Typ: {source_type}\n\nTEXT:\n{text}" try: - # 2. LLM Call (Async) - # WICHTIG: Erzwingt Ollama JSON Mode über den neuen Parameter force_json=True + # WICHTIG: Erzwingt Ollama JSON Mode response_json = await self.llm.generate_raw_response( user_prompt, system=system_prompt, @@ -70,6 +68,11 @@ class SemanticAnalyzer: refined_edges = [] for rel in raw_rels: + # FIX: Sicherstellen, dass rel ein Dictionary ist, um 'str' object has no attribute 'get' zu verhindern + if not isinstance(rel, dict): + logger.warning(f"SemanticAnalyzer: Ignoriere ungültige Relation: {rel}") + continue + target = rel.get("target") raw_type = rel.get("type", "related_to") @@ -94,16 +97,16 @@ class SemanticAnalyzer: return results except json.JSONDecodeError: - logger.warning("SemanticAnalyzer: LLM lieferte kein valides JSON. Fallback auf Raw Text.") + logger.error("SemanticAnalyzer: LLM lieferte KEIN valides JSON. Fallback auf Raw Text.") return [SemanticChunkResult(content=text, suggested_edges=[])] except Exception as e: - logger.error(f"SemanticAnalyzer Error: {e}") + # Wichtig: Fehler im Loggen, damit wir wissen, warum es crashte (z.B. Timeout/Ressource) + logger.error(f"SemanticAnalyzer Unbehandelter Fehler: {e}") return [SemanticChunkResult(content=text, suggested_edges=[])] # NEU: Helper zur Abfrage des Typs (muss die bestehenden Funktionen nutzen) def _get_target_type_from_title(self, title: str) -> str: """Simuliert den Abruf des Notiztyps basierend auf dem Titel aus dem Index (für Matrix-Logik).""" - # Diese Logik dient der Behebung des Test-Falls B4. title_lower = title.lower()