(self, summary, details, summary_keywords=None)
| 99 | print(f"MidTermMemory: Evicted session {lfu_sid}.") |
| 100 | |
| 101 | def add_session(self, summary, details, summary_keywords=None): |
| 102 | session_id = generate_id("session") |
| 103 | summary_vec = get_embedding( |
| 104 | summary, |
| 105 | model_name=self.embedding_model_name, |
| 106 | **self.embedding_model_kwargs |
| 107 | ) |
| 108 | summary_vec = normalize_vector(summary_vec).tolist() |
| 109 | summary_keywords = summary_keywords if summary_keywords is not None else [] |
| 110 | |
| 111 | processed_details = [] |
| 112 | for page_data in details: |
| 113 | page_id = page_data.get("page_id", generate_id("page")) |
| 114 | |
| 115 | # 检查是否已有embedding,避免重复计算 |
| 116 | if "page_embedding" in page_data and page_data["page_embedding"]: |
| 117 | print(f"MidTermMemory: Reusing existing embedding for page {page_id}") |
| 118 | inp_vec = page_data["page_embedding"] |
| 119 | # 确保embedding是normalized的 |
| 120 | if isinstance(inp_vec, list): |
| 121 | inp_vec_np = np.array(inp_vec, dtype=np.float32) |
| 122 | if np.linalg.norm(inp_vec_np) > 1.1 or np.linalg.norm(inp_vec_np) < 0.9: # 检查是否需要重新normalize |
| 123 | inp_vec = normalize_vector(inp_vec_np).tolist() |
| 124 | else: |
| 125 | print(f"MidTermMemory: Computing new embedding for page {page_id}") |
| 126 | full_text = f"User: {page_data.get('user_input','')} Assistant: {page_data.get('agent_response','')}" |
| 127 | inp_vec = get_embedding( |
| 128 | full_text, |
| 129 | model_name=self.embedding_model_name, |
| 130 | **self.embedding_model_kwargs |
| 131 | ) |
| 132 | inp_vec = normalize_vector(inp_vec).tolist() |
| 133 | |
| 134 | # 使用已有keywords或设置为空(由multi-summary提供) |
| 135 | if "page_keywords" in page_data and page_data["page_keywords"]: |
| 136 | print(f"MidTermMemory: Using existing keywords for page {page_id}") |
| 137 | page_keywords = page_data["page_keywords"] |
| 138 | else: |
| 139 | print(f"MidTermMemory: Setting empty keywords for page {page_id} (will be filled by multi-summary)") |
| 140 | page_keywords = [] |
| 141 | |
| 142 | processed_page = { |
| 143 | **page_data, # Carry over existing fields like user_input, agent_response, timestamp |
| 144 | "page_id": page_id, |
| 145 | "page_embedding": inp_vec, |
| 146 | "page_keywords": page_keywords, |
| 147 | "preloaded": page_data.get("preloaded", False), # Preserve if passed |
| 148 | "analyzed": page_data.get("analyzed", False), # Preserve if passed |
| 149 | # pre_page, next_page, meta_info are handled by DynamicUpdater |
| 150 | } |
| 151 | processed_details.append(processed_page) |
| 152 | |
| 153 | current_ts = get_timestamp() |
| 154 | session_obj = { |
| 155 | "id": session_id, |
| 156 | "summary": summary, |
| 157 | "summary_keywords": summary_keywords, |
| 158 | "summary_embedding": summary_vec, |
no test coverage detected