feat: include created_at timestamp in search results (#846)
* feat: include created_at timestamp in search results (closes #465) Surface the existing filed_at metadata as created_at in search result objects returned by search_memories(). Enables temporal reasoning over search hits without additional queries. * Feat: add fallback for missing filed_at metadata
This commit is contained in:
@@ -411,6 +411,7 @@ def search_memories(
|
|||||||
"wing": meta.get("wing", "unknown"),
|
"wing": meta.get("wing", "unknown"),
|
||||||
"room": meta.get("room", "unknown"),
|
"room": meta.get("room", "unknown"),
|
||||||
"source_file": Path(source).name if source else "?",
|
"source_file": Path(source).name if source else "?",
|
||||||
|
"created_at": meta.get("filed_at", "unknown"),
|
||||||
"similarity": round(max(0.0, 1 - effective_dist), 3),
|
"similarity": round(max(0.0, 1 - effective_dist), 3),
|
||||||
"distance": round(dist, 4),
|
"distance": round(dist, 4),
|
||||||
"effective_distance": round(effective_dist, 4),
|
"effective_distance": round(effective_dist, 4),
|
||||||
|
|||||||
@@ -51,6 +51,28 @@ class TestSearchMemories:
|
|||||||
assert "source_file" in hit
|
assert "source_file" in hit
|
||||||
assert "similarity" in hit
|
assert "similarity" in hit
|
||||||
assert isinstance(hit["similarity"], float)
|
assert isinstance(hit["similarity"], float)
|
||||||
|
assert "created_at" in hit
|
||||||
|
|
||||||
|
def test_created_at_contains_filed_at(self, palace_path, seeded_collection):
|
||||||
|
"""created_at surfaces the filed_at metadata from the drawer."""
|
||||||
|
result = search_memories("JWT authentication", palace_path)
|
||||||
|
hit = result["results"][0]
|
||||||
|
assert hit["created_at"] == "2026-01-01T00:00:00"
|
||||||
|
|
||||||
|
def test_created_at_fallback_when_filed_at_missing(self):
|
||||||
|
"""created_at defaults to 'unknown' when filed_at is absent."""
|
||||||
|
mock_col = MagicMock()
|
||||||
|
mock_col.query.return_value = {
|
||||||
|
"ids": [["drawer_no_date"]],
|
||||||
|
"documents": [["Some text without a date"]],
|
||||||
|
"metadatas": [[{"wing": "project", "room": "backend", "source_file": "x.py"}]],
|
||||||
|
"distances": [[0.1]],
|
||||||
|
}
|
||||||
|
|
||||||
|
with patch("mempalace.searcher.get_collection", return_value=mock_col):
|
||||||
|
result = search_memories("test", "/fake/path")
|
||||||
|
hit = result["results"][0]
|
||||||
|
assert hit["created_at"] == "unknown"
|
||||||
|
|
||||||
def test_search_memories_query_error(self):
|
def test_search_memories_query_error(self):
|
||||||
"""search_memories returns error dict when query raises."""
|
"""search_memories returns error dict when query raises."""
|
||||||
|
|||||||
Reference in New Issue
Block a user