RemanenetSpy commited on
Commit
1dce94f
·
1 Parent(s): 75ebf8d

fix(agent): loosen memory retrieval threshold to 0.70 and show raw_text for CSV data

Browse files
Files changed (1) hide show
  1. agent/nodes.py +16 -8
agent/nodes.py CHANGED
@@ -58,26 +58,34 @@ async def retrieve_memory_node(state: dict) -> dict:
58
  vector = get_vector_store()
59
  memory = get_memory_store()
60
 
61
- # Semantic search — filtered by owner for privacy
 
 
62
  search_results = await vector.semantic_search(
63
  query=last_user_msg,
64
- n_results=10,
65
  owner_id=owner_id or None, # Tenant isolation
 
66
  )
67
 
68
  # Fetch full events
69
  event_ids = [r["id"] for r in search_results]
70
  events = await memory.get_events_by_ids(event_ids) if event_ids else []
71
 
72
- # Build memory context
 
 
73
  if events:
74
  memory_lines = ["[Chronos Temporal Memory Context]"]
75
  for event in events:
76
- memory_lines.append(
77
- f" [{event.timestamp.strftime('%Y-%m-%d %H:%M')}] "
78
- f"{event.subject} {event.verb} {event.object}"
79
- + (f" | {event.raw_text[:100]}" if event.raw_text else "")
80
- )
 
 
 
81
  memory_context = "\n".join(memory_lines)
82
  else:
83
  memory_context = "[Chronos Memory: No relevant past events found]"
 
58
  vector = get_vector_store()
59
  memory = get_memory_store()
60
 
61
+ # Semantic search — filtered by owner for privacy.
62
+ # Threshold 0.70 (cosine distance) allows matching CSV-ingested raw rows
63
+ # which have low structural similarity to natural language queries.
64
  search_results = await vector.semantic_search(
65
  query=last_user_msg,
66
+ n_results=30,
67
  owner_id=owner_id or None, # Tenant isolation
68
+ similarity_threshold=0.70,
69
  )
70
 
71
  # Fetch full events
72
  event_ids = [r["id"] for r in search_results]
73
  events = await memory.get_events_by_ids(event_ids) if event_ids else []
74
 
75
+ # Build memory context.
76
+ # For CSV-ingested rows (subject="unknown"), use raw_text as the primary
77
+ # display so the LLM sees the actual data (e.g. "Node: 64 | Views: 94200").
78
  if events:
79
  memory_lines = ["[Chronos Temporal Memory Context]"]
80
  for event in events:
81
+ ts = event.timestamp.strftime("%Y-%m-%d %H:%M")
82
+ if event.raw_text and event.subject == "unknown":
83
+ memory_lines.append(f" [{ts}] {event.raw_text}")
84
+ else:
85
+ memory_lines.append(
86
+ f" [{ts}] {event.subject} {event.verb} {event.object}"
87
+ + (f" | {event.raw_text[:120]}" if event.raw_text else "")
88
+ )
89
  memory_context = "\n".join(memory_lines)
90
  else:
91
  memory_context = "[Chronos Memory: No relevant past events found]"