| 46 | |
| 47 | @dataclass |
| 48 | class SingleCubeView(MemCubeView): |
| 49 | cube_id: str |
| 50 | naive_mem_cube: NaiveMemCube |
| 51 | mem_reader: SimpleStructMemReader |
| 52 | mem_scheduler: OptimizedScheduler |
| 53 | logger: Any |
| 54 | searcher: Any |
| 55 | feedback_server: Any | None = None |
| 56 | deepsearch_agent: Any | None = None |
| 57 | |
| 58 | @timed |
| 59 | def add_memories(self, add_req: APIADDRequest) -> list[dict[str, Any]]: |
| 60 | """ |
| 61 | This is basically your current handle_add_memories logic, |
| 62 | but scoped to a single cube_id. |
| 63 | """ |
| 64 | sync_mode = add_req.async_mode or self._get_sync_mode() |
| 65 | self.logger.info( |
| 66 | f"[DIAGNOSTIC] single_cube.add_memories called for cube_id: {self.cube_id}. sync_mode: {sync_mode}. Request: {add_req.model_dump_json(indent=2)}" |
| 67 | ) |
| 68 | user_context = UserContext( |
| 69 | user_id=add_req.user_id, |
| 70 | mem_cube_id=self.cube_id, |
| 71 | session_id=add_req.session_id or "default_session", |
| 72 | manager_user_id=add_req.manager_user_id, |
| 73 | project_id=add_req.project_id, |
| 74 | ) |
| 75 | |
| 76 | target_session_id = add_req.session_id or "default_session" |
| 77 | self.logger.info( |
| 78 | f"[SingleCubeView] cube={self.cube_id} " |
| 79 | f"Processing add with mode={sync_mode}, session={target_session_id}" |
| 80 | ) |
| 81 | |
| 82 | all_memories = self._process_text_mem(add_req, user_context, sync_mode) |
| 83 | |
| 84 | self.logger.info(f"[SingleCubeView] cube={self.cube_id} total_results={len(all_memories)}") |
| 85 | |
| 86 | return all_memories |
| 87 | |
| 88 | @timed |
| 89 | def search_memories(self, search_req: APISearchRequest) -> dict[str, Any]: |
| 90 | """ |
| 91 | Unified memory search handling (text + preference memories). |
| 92 | Preference memories are now searched through the same _search_text flow. |
| 93 | """ |
| 94 | cube_filter = resolve_filter_for_cube(search_req.filter, self.cube_id) |
| 95 | if cube_filter is not search_req.filter: |
| 96 | import copy |
| 97 | |
| 98 | search_req = copy.copy(search_req) |
| 99 | search_req.filter = cube_filter |
| 100 | |
| 101 | # Create UserContext object |
| 102 | user_context = UserContext( |
| 103 | user_id=search_req.user_id, |
| 104 | mem_cube_id=self.cube_id, |
| 105 | session_id=search_req.session_id or "default_session", |
no outgoing calls