modified: app/services/semantic_analyzer.py

This commit is contained in:
Lars 2025-12-12 09:41:06 +01:00
parent bf40169662
commit 37c0f526ec

View File

@ -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()