Skip to content

Commit 0b02d3c

Browse files
committed
feat: develop advanced searcher with deep search
1 parent afaf8df commit 0b02d3c

File tree

17 files changed

+573
-69
lines changed

17 files changed

+573
-69
lines changed

src/memos/api/handlers/base_handler.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
from memos.log import get_logger
1111
from memos.mem_scheduler.base_scheduler import BaseScheduler
12-
from memos.memories.textual.tree_text_memory.retrieve.searcher import Searcher
12+
from memos.memories.textual.tree_text_memory.retrieve.advanced_searcher import AdvancedSearcher
1313

1414

1515
logger = get_logger(__name__)
@@ -132,7 +132,7 @@ def mem_scheduler(self) -> BaseScheduler:
132132
return self.deps.mem_scheduler
133133

134134
@property
135-
def searcher(self) -> Searcher:
135+
def searcher(self) -> AdvancedSearcher:
136136
"""Get scheduler instance."""
137137
return self.deps.searcher
138138

src/memos/api/handlers/search_handler.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818
from memos.api.product_models import APISearchRequest, SearchResponse
1919
from memos.context.context import ContextThreadPoolExecutor
2020
from memos.log import get_logger
21-
from memos.mem_scheduler.schemas.general_schemas import FINE_STRATEGY, FineStrategy, SearchMode
22-
from memos.types import MOSSearchResult, UserContext
21+
from memos.types import FINE_STRATEGY, FineStrategy, MOSSearchResult, SearchMode, UserContext
2322

2423

2524
logger = get_logger(__name__)
@@ -212,10 +211,29 @@ def _fast_search(
212211
return formatted_memories
213212

214213
def _deep_search(
215-
self, search_req: APISearchRequest, user_context: UserContext, max_thinking_depth: int
214+
self,
215+
search_req: APISearchRequest,
216+
user_context: UserContext,
216217
) -> list:
217-
logger.error("waiting to be implemented")
218-
return []
218+
target_session_id = search_req.session_id or "default_session"
219+
search_filter = {"session_id": search_req.session_id} if search_req.session_id else None
220+
221+
info = {
222+
"user_id": search_req.user_id,
223+
"session_id": target_session_id,
224+
"chat_history": search_req.chat_history,
225+
}
226+
227+
return self.searcher.deep_search(
228+
query=search_req.query,
229+
user_name=user_context.mem_cube_id,
230+
top_k=search_req.top_k,
231+
mode=SearchMode.FINE,
232+
manual_close_internet=not search_req.internet_search,
233+
moscube=search_req.moscube,
234+
search_filter=search_filter,
235+
info=info,
236+
)
219237

220238
def _fine_search(
221239
self,

src/memos/api/product_models.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
from pydantic import BaseModel, Field
77

88
# Import message types from core types module
9-
from memos.mem_scheduler.schemas.general_schemas import SearchMode
10-
from memos.types import MessageDict, PermissionDict
9+
from memos.types import MessageDict, PermissionDict, SearchMode
1110

1211

1312
T = TypeVar("T")

src/memos/mem_scheduler/analyzer/eval_analyzer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,4 +216,4 @@ def main(version_name="ct-1111"):
216216

217217

218218
if __name__ == "__main__":
219-
main(version_name="ct-1111")
219+
main(version_name="ct-1118")

src/memos/mem_scheduler/analyzer/scheduler_for_eval.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
from memos.mem_scheduler.general_scheduler import GeneralScheduler
1010
from memos.mem_scheduler.schemas.general_schemas import (
1111
DEFAULT_MAX_QUERY_KEY_WORDS,
12-
UserID,
1312
)
1413
from memos.mem_scheduler.schemas.monitor_schemas import QueryMonitorItem
1514

1615

1716
if TYPE_CHECKING:
1817
from memos.memories.textual.tree import TextualMemoryItem
18+
from memos.types import UserID
1919

2020

2121
logger = get_logger(__name__)

src/memos/mem_scheduler/base_scheduler.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,7 @@
3333
DEFAULT_TOP_K,
3434
DEFAULT_USE_REDIS_QUEUE,
3535
STARTUP_BY_PROCESS,
36-
MemCubeID,
3736
TreeTextMemory_SEARCH_METHOD,
38-
UserID,
3937
)
4038
from memos.mem_scheduler.schemas.message_schemas import (
4139
ScheduleLogForWebItem,
@@ -56,6 +54,10 @@
5654
from memos.memories.textual.tree import TextualMemoryItem, TreeTextMemory
5755
from memos.memories.textual.tree_text_memory.retrieve.searcher import Searcher
5856
from memos.templates.mem_scheduler_prompts import MEMORY_ASSEMBLY_TEMPLATE
57+
from memos.types import (
58+
MemCubeID,
59+
UserID,
60+
)
5961

6062

6163
if TYPE_CHECKING:

src/memos/mem_scheduler/general_scheduler.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
PREF_ADD_LABEL,
1818
QUERY_LABEL,
1919
WORKING_MEMORY_TYPE,
20-
MemCubeID,
21-
UserID,
2220
)
2321
from memos.mem_scheduler.schemas.message_schemas import ScheduleMessageItem
2422
from memos.mem_scheduler.schemas.monitor_schemas import QueryMonitorItem
@@ -27,6 +25,10 @@
2725
from memos.memories.textual.item import TextualMemoryItem
2826
from memos.memories.textual.preference import PreferenceTextMemory
2927
from memos.memories.textual.tree import TreeTextMemory
28+
from memos.types import (
29+
MemCubeID,
30+
UserID,
31+
)
3032

3133

3234
logger = get_logger(__name__)

src/memos/mem_scheduler/memory_manage_modules/retriever.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
from memos.mem_scheduler.schemas.general_schemas import (
1212
DEFAULT_SCHEDULER_RETRIEVER_BATCH_SIZE,
1313
DEFAULT_SCHEDULER_RETRIEVER_RETRIES,
14-
FINE_STRATEGY,
15-
FineStrategy,
1614
TreeTextMemory_FINE_SEARCH_METHOD,
1715
TreeTextMemory_SEARCH_METHOD,
1816
)
@@ -24,6 +22,7 @@
2422
from memos.mem_scheduler.utils.misc_utils import extract_json_obj, extract_list_items_in_answer
2523
from memos.memories.textual.item import TextualMemoryMetadata
2624
from memos.memories.textual.tree import TextualMemoryItem, TreeTextMemory
25+
from memos.types import FINE_STRATEGY, FineStrategy
2726

2827
# Extract JSON response
2928
from .memory_filter import MemoryFilter

src/memos/mem_scheduler/monitors/general_monitor.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
DEFAULT_WORKING_MEM_MONITOR_SIZE_LIMIT,
2121
MONITOR_ACTIVATION_MEMORY_TYPE,
2222
MONITOR_WORKING_MEMORY_TYPE,
23-
MemCubeID,
24-
UserID,
2523
)
2624
from memos.mem_scheduler.schemas.monitor_schemas import (
2725
MemoryMonitorItem,
@@ -31,6 +29,7 @@
3129
from memos.mem_scheduler.utils.db_utils import get_utc_now
3230
from memos.mem_scheduler.utils.misc_utils import extract_json_obj
3331
from memos.memories.textual.tree import TreeTextMemory
32+
from memos.types import MemCubeID, UserID
3433

3534

3635
logger = get_logger(__name__)

src/memos/mem_scheduler/optimized_scheduler.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,18 @@
1313
from memos.mem_scheduler.general_scheduler import GeneralScheduler
1414
from memos.mem_scheduler.schemas.general_schemas import (
1515
API_MIX_SEARCH_LABEL,
16-
MemCubeID,
17-
SearchMode,
18-
UserID,
1916
)
2017
from memos.mem_scheduler.schemas.message_schemas import ScheduleMessageItem
2118
from memos.mem_scheduler.utils.api_utils import format_textual_memory_item
2219
from memos.mem_scheduler.utils.db_utils import get_utc_now
2320
from memos.mem_scheduler.utils.misc_utils import group_messages_by_user_and_mem_cube
2421
from memos.memories.textual.tree import TextualMemoryItem, TreeTextMemory
25-
from memos.types import UserContext
22+
from memos.types import (
23+
MemCubeID,
24+
SearchMode,
25+
UserContext,
26+
UserID,
27+
)
2628

2729

2830
if TYPE_CHECKING:

0 commit comments

Comments
 (0)