next try
All checks were successful
Deploy mindnet to llm-node / deploy (push) Successful in 3s

This commit is contained in:
Lars 2025-12-28 12:00:31 +01:00
parent 079d988034
commit 8d3bc1c2e2
2 changed files with 68 additions and 3 deletions

View File

@ -154,6 +154,26 @@ def render_graph_explorer_cytoscape(graph_service):
# 2. Detail Daten (Inspector) # 2. Detail Daten (Inspector)
inspected_data = graph_service.get_note_with_full_content(inspected_id) inspected_data = graph_service.get_note_with_full_content(inspected_id)
# DEBUG: Zeige Debug-Informationen
with st.expander("🔍 Debug-Informationen", expanded=False):
st.write(f"**Gefundene Knoten:** {len(nodes_data) if nodes_data else 0}")
st.write(f"**Gefundene Kanten:** {len(edges_data) if edges_data else 0}")
if nodes_data:
st.write("**Knoten-IDs:**")
for n in nodes_data[:10]:
nid = getattr(n, 'id', 'N/A')
st.write(f" - {nid}")
if len(nodes_data) > 10:
st.write(f" ... und {len(nodes_data) - 10} weitere")
if edges_data:
st.write("**Kanten:**")
for e in edges_data[:10]:
src = getattr(e, "source", "N/A")
tgt = getattr(e, "to", getattr(e, "target", "N/A"))
st.write(f" - {src} -> {tgt}")
if len(edges_data) > 10:
st.write(f" ... und {len(edges_data) - 10} weitere")
# --- ACTION BAR --- # --- ACTION BAR ---
action_container = st.container() action_container = st.container()
with action_container: with action_container:

View File

@ -61,10 +61,25 @@ class GraphExplorerService:
# Suche Kanten für Center (L1) # Suche Kanten für Center (L1)
l1_edges = self._find_connected_edges([center_note_id], center_note.get("title")) l1_edges = self._find_connected_edges([center_note_id], center_note.get("title"))
# DEBUG: Zeige gefundene Kanten
print(f"DEBUG: Gefundene L1-Kanten: {len(l1_edges)}")
processed_count = 0
failed_count = 0
for edge_data in l1_edges: for edge_data in l1_edges:
src_id, tgt_id = self._process_edge(edge_data, nodes_dict, unique_edges, current_depth=1) src_id, tgt_id = self._process_edge(edge_data, nodes_dict, unique_edges, current_depth=1)
if src_id: level_1_ids.add(src_id) if src_id and tgt_id:
if tgt_id: level_1_ids.add(tgt_id) processed_count += 1
level_1_ids.add(src_id)
level_1_ids.add(tgt_id)
else:
failed_count += 1
# DEBUG: Zeige fehlgeschlagene Kanten
if edge_data and edge_data.payload:
print(f"DEBUG: Kante konnte nicht verarbeitet werden: {edge_data.payload.get('source_id')} -> {edge_data.payload.get('target_id')}")
print(f"DEBUG: Verarbeitete Kanten: {processed_count}, Fehlgeschlagen: {failed_count}")
print(f"DEBUG: Nodes im Dict: {len(nodes_dict)}, Edges im Dict: {len(unique_edges)}")
# Level 2 Suche (begrenzt für Performance) # Level 2 Suche (begrenzt für Performance)
if depth > 1 and len(level_1_ids) > 1 and len(level_1_ids) < 80: if depth > 1 and len(level_1_ids) > 1 and len(level_1_ids) < 80:
@ -382,6 +397,12 @@ class GraphExplorerService:
src_note = self._resolve_note_from_ref(src_ref) src_note = self._resolve_note_from_ref(src_ref)
tgt_note = self._resolve_note_from_ref(tgt_ref) tgt_note = self._resolve_note_from_ref(tgt_ref)
# DEBUG: Zeige Auflösungs-Ergebnisse (nur bei Fehlern)
if not src_note:
print(f"DEBUG _process_edge: Konnte src_note nicht auflösen für: {src_ref}")
if not tgt_note:
print(f"DEBUG _process_edge: Konnte tgt_note nicht auflösen für: {tgt_ref}")
if src_note and tgt_note: if src_note and tgt_note:
src_id = src_note.get('note_id') src_id = src_note.get('note_id')
tgt_id = tgt_note.get('note_id') tgt_id = tgt_note.get('note_id')
@ -490,7 +511,7 @@ class GraphExplorerService:
res, _ = self.client.scroll( res, _ = self.client.scroll(
collection_name=self.notes_col, collection_name=self.notes_col,
scroll_filter=models.Filter(must=[models.FieldCondition(key="title", match=models.MatchText(text=possible_title))]), scroll_filter=models.Filter(must=[models.FieldCondition(key="title", match=models.MatchText(text=possible_title))]),
limit=10, with_payload=True # Mehr Ergebnisse für Fuzzy-Matching limit=50, with_payload=True # Mehr Ergebnisse für Fuzzy-Matching
) )
if res: if res:
# Prüfe alle Ergebnisse mit normalisiertem Vergleich # Prüfe alle Ergebnisse mit normalisiertem Vergleich
@ -507,6 +528,30 @@ class GraphExplorerService:
except Exception: except Exception:
pass pass
# Versuch 3c: Fallback - Lade alle Notes und filtere clientseitig (nur wenn Text-Suche fehlschlägt)
# Dies ist langsamer, aber findet auch Notes, die die Text-Suche nicht findet
if possible_title_norm and len(possible_title_norm) > 5:
try:
# Lade eine größere Anzahl von Notes (nur wenn nötig)
res_all, _ = self.client.scroll(
collection_name=self.notes_col,
limit=200, # Begrenzt, um Performance zu gewährleisten
with_payload=True
)
if res_all:
for r in res_all:
if r.payload:
note_title = r.payload.get("title", "")
note_title_norm = normalize_title(note_title)
if note_title_norm and possible_title_norm:
if (note_title_norm == possible_title_norm or
note_title_norm.startswith(possible_title_norm) or
possible_title_norm.startswith(note_title_norm)):
self._note_cache[r.payload['note_id']] = r.payload
return r.payload
except Exception:
pass
# Fall B: Note ID direkt # Fall B: Note ID direkt
note = self._fetch_note_cached(ref_str) note = self._fetch_note_cached(ref_str)
if note: return note if note: return note