Spaces:
Sleeping
Sleeping
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- 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=
|
| 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 |
-
|
| 77 |
-
|
| 78 |
-
f"{
|
| 79 |
-
|
| 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]"
|