app/core/derive_edges.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
6e9a227ad2
commit
8998269377
|
|
@ -5,12 +5,15 @@ Modul: app/core/derive_edges.py
|
||||||
Zweck:
|
Zweck:
|
||||||
- Bewahrt bestehende Edgelogik (belongs_to, prev/next, references, backlink)
|
- Bewahrt bestehende Edgelogik (belongs_to, prev/next, references, backlink)
|
||||||
- Ergänzt typenbasierte Default-Kanten (edge_defaults aus config/types.yaml)
|
- Ergänzt typenbasierte Default-Kanten (edge_defaults aus config/types.yaml)
|
||||||
- Unterstützt "typed inline relations" ([[rel:KIND | Target]] / [[rel:KIND Target]] / rel: KIND [[Target]])
|
- Unterstützt "typed inline relations":
|
||||||
- Unterstützt Obsidian-Callouts (> [!edge] KIND: [[Target]] [[Target2]] ...)
|
* [[rel:KIND | Target]]
|
||||||
|
* [[rel:KIND Target]]
|
||||||
|
* rel: KIND [[Target]]
|
||||||
|
- Unterstützt Obsidian-Callouts:
|
||||||
|
* > [!edge] KIND: [[Target]] [[Target2]] ...
|
||||||
Kompatibilität:
|
Kompatibilität:
|
||||||
- build_edges_for_note(...) Signatur unverändert
|
- build_edges_for_note(...) Signatur unverändert
|
||||||
- rule_id Werte exakt wie zuvor erwartet (ohne Versionssuffix):
|
- rule_id Werte:
|
||||||
* structure:belongs_to
|
* structure:belongs_to
|
||||||
* structure:order
|
* structure:order
|
||||||
* explicit:wikilink
|
* explicit:wikilink
|
||||||
|
|
@ -37,7 +40,7 @@ except Exception: # pragma: no cover
|
||||||
|
|
||||||
def _get(d: dict, *keys, default=None):
|
def _get(d: dict, *keys, default=None):
|
||||||
for k in keys:
|
for k in keys:
|
||||||
if k in d and d[k] is not None:
|
if isinstance(d, dict) and k in d and d[k] is not None:
|
||||||
return d[k]
|
return d[k]
|
||||||
return default
|
return default
|
||||||
|
|
||||||
|
|
@ -135,11 +138,11 @@ def _edge_defaults_for(note_type: Optional[str], reg: dict) -> List[str]:
|
||||||
_WIKILINK_RE = re.compile(r"\[\[(?:[^\|\]]+\|)?([a-zA-Z0-9_\-#:. ]+)\]\]")
|
_WIKILINK_RE = re.compile(r"\[\[(?:[^\|\]]+\|)?([a-zA-Z0-9_\-#:. ]+)\]\]")
|
||||||
|
|
||||||
# Getypte Inline-Relationen:
|
# Getypte Inline-Relationen:
|
||||||
# [[rel:depends_on | Target]]
|
# [[rel:KIND | Target]]
|
||||||
# [[rel:related_to Target]]
|
# [[rel:KIND Target]]
|
||||||
_REL_PIPE = re.compile(r"\[\[\s*rel:(?P<kind>[a-z_]+)\s*\|\s*(?P<target>[^\]]+?)\s*\]\]", re.IGNORECASE)
|
_REL_PIPE = re.compile(r"\[\[\s*rel:(?P<kind>[a-z_]+)\s*\|\s*(?P<target>[^\]]+?)\s*\]\]", re.IGNORECASE)
|
||||||
_REL_SPACE = re.compile(r"\[\[\s*rel:(?P<kind>[a-z_]+)\s+(?P<target>[^\]]+?)\s*\]\]", re.IGNORECASE)
|
_REL_SPACE = re.compile(r"\[\[\s*rel:(?P<kind>[a-z_]+)\s+(?P<target>[^\]]+?)\s*\]\]", re.IGNORECASE)
|
||||||
# rel: depends_on [[Target]] (reines Textmuster)
|
# rel: KIND [[Target]] (reines Textmuster)
|
||||||
_REL_TEXT = re.compile(r"rel\s*:\s*(?P<kind>[a-z_]+)\s*\[\[\s*(?P<target>[^\]]+?)\s*\]\]", re.IGNORECASE)
|
_REL_TEXT = re.compile(r"rel\s*:\s*(?P<kind>[a-z_]+)\s*\[\[\s*(?P<target>[^\]]+?)\s*\]\]", re.IGNORECASE)
|
||||||
|
|
||||||
def _extract_typed_relations(text: str) -> Tuple[List[Tuple[str,str]], str]:
|
def _extract_typed_relations(text: str) -> Tuple[List[Tuple[str,str]], str]:
|
||||||
|
|
@ -246,7 +249,7 @@ def build_edges_for_note(
|
||||||
- belongs_to: für jeden Chunk (chunk -> note)
|
- belongs_to: für jeden Chunk (chunk -> note)
|
||||||
- next / prev: zwischen aufeinanderfolgenden Chunks
|
- next / prev: zwischen aufeinanderfolgenden Chunks
|
||||||
- references: pro Chunk aus window/text (via Wikilinks)
|
- references: pro Chunk aus window/text (via Wikilinks)
|
||||||
- typed inline relations: [[rel:KIND | Target]] oder [[rel:KIND Target]] oder rel: KIND [[Target]]
|
- typed inline relations: [[rel:KIND | Target]] / [[rel:KIND Target]] / rel: KIND [[Target]]
|
||||||
- Obsidian Callouts: > [!edge] KIND: [[Target]] [[Target2]]
|
- Obsidian Callouts: > [!edge] KIND: [[Target]] [[Target2]]
|
||||||
- optional note-scope references/backlinks: dedupliziert über alle Chunk-Funde + note_level_references
|
- optional note-scope references/backlinks: dedupliziert über alle Chunk-Funde + note_level_references
|
||||||
- typenbasierte Default-Kanten (edge_defaults) je gefundener Referenz
|
- typenbasierte Default-Kanten (edge_defaults) je gefundener Referenz
|
||||||
|
|
@ -284,14 +287,14 @@ def build_edges_for_note(
|
||||||
"provenance": "rule",
|
"provenance": "rule",
|
||||||
"rule_id": "structure:order",
|
"rule_id": "structure:order",
|
||||||
"confidence": 0.95,
|
"confidence": 0.95,
|
||||||
})))
|
}))
|
||||||
edges.append(_edge("prev", "chunk", b_id, a_id, note_id, {
|
edges.append(_edge("prev", "chunk", b_id, a_id, note_id, {
|
||||||
"chunk_id": b_id,
|
"chunk_id": b_id,
|
||||||
"edge_id": _mk_edge_id("prev", b_id, a_id, "chunk", "structure:order"),
|
"edge_id": _mk_edge_id("prev", b_id, a_id, "chunk", "structure:order"),
|
||||||
"provenance": "rule",
|
"provenance": "rule",
|
||||||
"rule_id": "structure:order",
|
"rule_id": "structure:order",
|
||||||
"confidence": 0.95,
|
"confidence": 0.95,
|
||||||
})))
|
}))
|
||||||
|
|
||||||
# 3) references + typed inline + callouts + defaults (chunk-scope)
|
# 3) references + typed inline + callouts + defaults (chunk-scope)
|
||||||
reg = _load_types_registry()
|
reg = _load_types_registry()
|
||||||
|
|
@ -366,7 +369,7 @@ def build_edges_for_note(
|
||||||
"chunk_id": cid,
|
"chunk_id": cid,
|
||||||
"edge_id": _mk_edge_id(rel, cid, r, "chunk", f"edge_defaults:{note_type}:{rel}"),
|
"edge_id": _mk_edge_id(rel, cid, r, "chunk", f"edge_defaults:{note_type}:{rel}"),
|
||||||
"provenance": "rule",
|
"provenance": "rule",
|
||||||
"rule_id": f"edge_defaults:{note_type}:{rel}"),
|
"rule_id": f"edge_defaults:{note_type}:{rel}",
|
||||||
"confidence": 0.7,
|
"confidence": 0.7,
|
||||||
}))
|
}))
|
||||||
if rel in {"related_to", "similar_to"}:
|
if rel in {"related_to", "similar_to"}:
|
||||||
|
|
@ -374,7 +377,7 @@ def build_edges_for_note(
|
||||||
"chunk_id": cid,
|
"chunk_id": cid,
|
||||||
"edge_id": _mk_edge_id(rel, r, cid, "chunk", f"edge_defaults:{note_type}:{rel}"),
|
"edge_id": _mk_edge_id(rel, r, cid, "chunk", f"edge_defaults:{note_type}:{rel}"),
|
||||||
"provenance": "rule",
|
"provenance": "rule",
|
||||||
"rule_id": f"edge_defaults:{note_type}:{rel}"),
|
"rule_id": f"edge_defaults:{note_type}:{rel}",
|
||||||
"confidence": 0.7,
|
"confidence": 0.7,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user