From 510cfdf82fe8dec038cfb699a0d0a2c8ad4b740c Mon Sep 17 00:00:00 2001 From: Daniel O'Connell Date: Sat, 28 Jun 2025 21:25:50 +0200 Subject: [PATCH] order sources from search --- src/memory/api/search/search.py | 5 ++++- src/memory/api/search/types.py | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/memory/api/search/search.py b/src/memory/api/search/search.py index 0c07484..be94bfd 100644 --- a/src/memory/api/search/search.py +++ b/src/memory/api/search/search.py @@ -101,4 +101,7 @@ async def search( ) if settings.ENABLE_SEARCH_SCORING: chunks = await scorer.rank_chunks(data[0].data[0], chunks, min_score=0.3) - return await search_sources(chunks, previews) + + sources = await search_sources(chunks, previews) + sources.sort(key=lambda x: x.search_score or 0, reverse=True) + return sources diff --git a/src/memory/api/search/types.py b/src/memory/api/search/types.py index def4a26..b6ddd74 100644 --- a/src/memory/api/search/types.py +++ b/src/memory/api/search/types.py @@ -32,6 +32,7 @@ class SearchResult(BaseModel): tags: list[str] | None = None metadata: dict | None = None created_at: datetime | None = None + search_score: float | None = None @classmethod def from_source_item( @@ -41,6 +42,8 @@ class SearchResult(BaseModel): metadata.pop("content", None) chunk_size = settings.DEFAULT_CHUNK_TOKENS * 4 + search_score = sum(chunk.relevance_score for chunk in chunks) + return cls( id=cast(int, source.id), size=cast(int, source.size), @@ -56,6 +59,7 @@ class SearchResult(BaseModel): tags=cast(list[str], source.tags), metadata=metadata, created_at=cast(datetime | None, source.inserted_at), + search_score=search_score, )