app/core/graph_adapter.py aktualisiert
All checks were successful
Deploy mindnet to llm-node / deploy (push) Successful in 4s

This commit is contained in:
Lars 2025-12-04 11:16:03 +01:00
parent 13b7c8858a
commit 1688cf0a1e

View File

@ -14,7 +14,8 @@ Kompatibilität:
(tests/test_retriever_edges.py patcht expand()).
Version:
0.2.0 (2025-11-30 direkte Qdrant-Abfrage, confidence-basiertes Gewicht)
0.3.0 (2025-12-04 note_id-bewusste Expansion, zusätzliche Edge-Typ-Gewichte,
Subgraph.edge_bonus() für Kompatibilität zum Retriever)
"""
from __future__ import annotations
@ -38,13 +39,24 @@ except Exception: # pragma: no cover
# Basisgewichte je Edge-Typ.
# Diese Werte werden mit der in der Edge-Payload hinterlegten "confidence"
# multipliziert, falls vorhanden.
#
# Hinweis:
# - Strukturkanten (belongs_to, next/prev) sind schwächer gewichtet.
# - Wissenskanten (depends_on, related_to, similar_to, references) erhalten
# höhere Basisgewichte, damit sie sich im Retriever bemerkbar machen.
EDGE_BASE_WEIGHTS: Dict[str, float] = {
"references": 0.20,
"belongs_to": 0.10,
"next": 0.06,
"prev": 0.06,
"backlink": 0.04,
"references_at": 0.08,
# Struktur / Navigationskanten
"belongs_to": 0.10,
"next": 0.06,
"prev": 0.06,
"backlink": 0.04,
"references_at": 0.08,
# Wissenskanten
"references": 0.20,
"depends_on": 0.18,
"related_to": 0.15,
"similar_to": 0.12,
# weitere Typen erhalten per Default 0.0 und wirken nur über centrality
}
@ -173,9 +185,18 @@ class Subgraph:
"""
return sum(edge["weight"] for edge in self.adj.get(node_id, []))
def edge_bonus(self, node_id: str) -> float:
"""
Kompatibilitäts-Methode für den Retriever.
Der Retriever ruft subgraph.edge_bonus(node_id) auf. Intern verwenden
wir aggregate_edge_bonus(...), um bestehende Tests nicht zu brechen.
"""
return self.aggregate_edge_bonus(node_id)
def centrality_bonus(self, node_id: str) -> float:
"""
Einfache log-gedämpfte Zentralität auf Basis der In-Degree.
Einfache log-gedämpfte Zentralität auf Basis des In-Degree.
Obergrenze: 0.15
"""
import math
@ -197,9 +218,9 @@ def expand(
Expandiert ab Seeds entlang von Edges (bis `depth`), optional gefiltert
nach Edge-Typen.
Seeds sind stabile payload-IDs (z. B. note_id, chunk_id). Es werden Edges
berücksichtigt, bei denen source_id ODER target_id ODER note_id einem der
Seeds entspricht.
Seeds sind stabile payload-IDs (in unserem Fall vor allem note_id).
Es werden Edges berücksichtigt, bei denen source_id ODER target_id ODER
note_id einem der Seeds entspricht.
"""
sg = Subgraph()
frontier = set(seeds)