app/core/graph_adapter.py aktualisiert
All checks were successful
Deploy mindnet to llm-node / deploy (push) Successful in 3s
All checks were successful
Deploy mindnet to llm-node / deploy (push) Successful in 3s
This commit is contained in:
parent
611b0aa54e
commit
5baac082f9
|
|
@ -14,8 +14,10 @@ Kompatibilität:
|
||||||
(tests/test_retriever_edges.py patcht expand()).
|
(tests/test_retriever_edges.py patcht expand()).
|
||||||
|
|
||||||
Version:
|
Version:
|
||||||
0.3.0 (2025-12-04 – note_id-bewusste Expansion, zusätzliche Edge-Typ-Gewichte,
|
0.3.1 (2025-12-04 – note_id-bewusste Expansion:
|
||||||
Subgraph.edge_bonus() für Kompatibilität zum Retriever)
|
* Seeds = Note-IDs
|
||||||
|
* Subgraph pflegt zusätzlich Adjazenz auf note_id-Basis,
|
||||||
|
damit der Retriever mit note_id arbeiten kann)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
@ -161,14 +163,31 @@ class Subgraph:
|
||||||
self.out_degree: DefaultDict[str, int] = defaultdict(int)
|
self.out_degree: DefaultDict[str, int] = defaultdict(int)
|
||||||
|
|
||||||
def add_edge(self, e: Dict) -> None:
|
def add_edge(self, e: Dict) -> None:
|
||||||
src = e["source"]
|
"""
|
||||||
tgt = e["target"]
|
Fügt eine Kante zum Subgraph hinzu.
|
||||||
kind = e["kind"]
|
|
||||||
|
e enthält:
|
||||||
|
- source: Knoten-ID (z. B. source_id)
|
||||||
|
- target: Knoten-ID (z. B. target_id)
|
||||||
|
- kind: Kantentyp
|
||||||
|
- weight: bereits berechnetes Gewicht
|
||||||
|
- note_id: (optional) Kontext-Note dieser Kante
|
||||||
|
|
||||||
|
Wichtig für den Retriever:
|
||||||
|
- Wir pflegen Adjazenz primär unter `source`.
|
||||||
|
- Zusätzlich pflegen wir, falls vorhanden, eine Adjazenz
|
||||||
|
unter `note_id`, damit der Retriever mit note_id arbeiten kann.
|
||||||
|
"""
|
||||||
|
src = e.get("source")
|
||||||
|
tgt = e.get("target")
|
||||||
|
kind = e.get("kind")
|
||||||
weight = e.get("weight", EDGE_BASE_WEIGHTS.get(kind, 0.0))
|
weight = e.get("weight", EDGE_BASE_WEIGHTS.get(kind, 0.0))
|
||||||
|
owner = e.get("note_id")
|
||||||
|
|
||||||
if not src or not tgt:
|
if not src or not tgt:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# Primäre Adjazenz (z. B. source_id → target_id)
|
||||||
self.adj[src].append(
|
self.adj[src].append(
|
||||||
{
|
{
|
||||||
"target": tgt,
|
"target": tgt,
|
||||||
|
|
@ -179,6 +198,27 @@ class Subgraph:
|
||||||
self.out_degree[src] += 1
|
self.out_degree[src] += 1
|
||||||
self.in_degree[tgt] += 1
|
self.in_degree[tgt] += 1
|
||||||
|
|
||||||
|
# Sekundäre Adjazenz auf Note-Ebene:
|
||||||
|
# Falls eine Kontext-Note existiert, bekommt diese ebenfalls
|
||||||
|
# "Ausgangskanten" angerechnet. So kann der Retriever über note_id
|
||||||
|
# edge_bonus(...) und centrality_bonus(...) abfragen.
|
||||||
|
if owner:
|
||||||
|
# same edge unter owner registrieren (falls nicht identisch mit src),
|
||||||
|
# damit edge_bonus(owner) > 0 werden kann.
|
||||||
|
if owner != src:
|
||||||
|
self.adj[owner].append(
|
||||||
|
{
|
||||||
|
"target": tgt,
|
||||||
|
"kind": kind,
|
||||||
|
"weight": weight,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.out_degree[owner] += 1
|
||||||
|
|
||||||
|
# Zentralität der Kontext-Note leicht erhöhen
|
||||||
|
if owner != tgt:
|
||||||
|
self.in_degree[owner] += 1
|
||||||
|
|
||||||
def aggregate_edge_bonus(self, node_id: str) -> float:
|
def aggregate_edge_bonus(self, node_id: str) -> float:
|
||||||
"""
|
"""
|
||||||
Summe der ausgehenden Kantengewichte für einen Knoten.
|
Summe der ausgehenden Kantengewichte für einen Knoten.
|
||||||
|
|
@ -245,12 +285,14 @@ def expand(
|
||||||
src = pl.get("source_id")
|
src = pl.get("source_id")
|
||||||
tgt = pl.get("target_id")
|
tgt = pl.get("target_id")
|
||||||
kind = pl.get("kind", "edge")
|
kind = pl.get("kind", "edge")
|
||||||
|
owner = pl.get("note_id")
|
||||||
|
|
||||||
e = {
|
e = {
|
||||||
"source": src,
|
"source": src,
|
||||||
"target": tgt,
|
"target": tgt,
|
||||||
"kind": kind,
|
"kind": kind,
|
||||||
"weight": _edge_weight(pl),
|
"weight": _edge_weight(pl),
|
||||||
|
"note_id": owner,
|
||||||
}
|
}
|
||||||
sg.add_edge(e)
|
sg.add_edge(e)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user