app/core/graph_adapter.py aktualisiert
All checks were successful
Deploy mindnet to llm-node / deploy (push) Successful in 4s
All checks were successful
Deploy mindnet to llm-node / deploy (push) Successful in 4s
This commit is contained in:
parent
13b7c8858a
commit
1688cf0a1e
|
|
@ -14,7 +14,8 @@ Kompatibilität:
|
||||||
(tests/test_retriever_edges.py patcht expand()).
|
(tests/test_retriever_edges.py patcht expand()).
|
||||||
|
|
||||||
Version:
|
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
|
from __future__ import annotations
|
||||||
|
|
@ -38,13 +39,24 @@ except Exception: # pragma: no cover
|
||||||
# Basisgewichte je Edge-Typ.
|
# Basisgewichte je Edge-Typ.
|
||||||
# Diese Werte werden mit der in der Edge-Payload hinterlegten "confidence"
|
# Diese Werte werden mit der in der Edge-Payload hinterlegten "confidence"
|
||||||
# multipliziert, falls vorhanden.
|
# 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] = {
|
EDGE_BASE_WEIGHTS: Dict[str, float] = {
|
||||||
"references": 0.20,
|
# Struktur / Navigationskanten
|
||||||
"belongs_to": 0.10,
|
"belongs_to": 0.10,
|
||||||
"next": 0.06,
|
"next": 0.06,
|
||||||
"prev": 0.06,
|
"prev": 0.06,
|
||||||
"backlink": 0.04,
|
"backlink": 0.04,
|
||||||
"references_at": 0.08,
|
"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
|
# 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, []))
|
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:
|
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
|
Obergrenze: 0.15
|
||||||
"""
|
"""
|
||||||
import math
|
import math
|
||||||
|
|
@ -197,9 +218,9 @@ def expand(
|
||||||
Expandiert ab Seeds entlang von Edges (bis `depth`), optional gefiltert
|
Expandiert ab Seeds entlang von Edges (bis `depth`), optional gefiltert
|
||||||
nach Edge-Typen.
|
nach Edge-Typen.
|
||||||
|
|
||||||
Seeds sind stabile payload-IDs (z. B. note_id, chunk_id). Es werden Edges
|
Seeds sind stabile payload-IDs (in unserem Fall vor allem note_id).
|
||||||
berücksichtigt, bei denen source_id ODER target_id ODER note_id einem der
|
Es werden Edges berücksichtigt, bei denen source_id ODER target_id ODER
|
||||||
Seeds entspricht.
|
note_id einem der Seeds entspricht.
|
||||||
"""
|
"""
|
||||||
sg = Subgraph()
|
sg = Subgraph()
|
||||||
frontier = set(seeds)
|
frontier = set(seeds)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user