diff --git a/app/core/graph/graph_derive_edges.py b/app/core/graph/graph_derive_edges.py index 195926f..6c2f6f8 100644 --- a/app/core/graph/graph_derive_edges.py +++ b/app/core/graph/graph_derive_edges.py @@ -910,9 +910,20 @@ def build_edges_for_note( # Schritt 3: ID-Zuweisung nach Scope-Entscheidung final_edges: List[dict] = [] - # WP-24c v4.5.9: Deterministische Sortierung der semantic_groups für konsistente Edge-Extraktion + # WP-24c v4.5.10: Deterministische Sortierung der semantic_groups für konsistente Edge-Extraktion # Verhindert Varianz zwischen Batches (33 vs 34 Kanten) - sorted_semantic_keys = sorted(semantic_groups.keys()) + # WICHTIG: target_section kann None sein, daher benötigen wir eine benutzerdefinierte Sortierfunktion + def sort_key_func(key_tuple): + """ + Sortierfunktion für semantic_keys, die None-Werte korrekt behandelt. + None wird als leere Zeichenkette behandelt, um Vergleichbarkeit zu gewährleisten. + """ + kind, semantic_source, target_id, target_section = key_tuple + # Konvertiere None zu leerem String für konsistente Sortierung + target_section_safe = target_section if target_section is not None else "" + return (kind, semantic_source, target_id, target_section_safe) + + sorted_semantic_keys = sorted(semantic_groups.keys(), key=sort_key_func) for semantic_key in sorted_semantic_keys: group = semantic_groups[semantic_key]