MCPcopy Create free account
hub / github.com/BAI-LAB/MemoryOS / insert_pages_into_session

Method insert_pages_into_session

memoryos-pypi/mid_term.py:188–277  ·  view source on GitHub ↗
(self, summary_for_new_pages, keywords_for_new_pages, pages_to_insert, 
                                  similarity_threshold=0.6, keyword_similarity_alpha=1.0)

Source from the content-addressed store, hash-verified

186 # No save here, it's an internal operation often followed by other ops that save
187
188 def insert_pages_into_session(self, summary_for_new_pages, keywords_for_new_pages, pages_to_insert,
189 similarity_threshold=0.6, keyword_similarity_alpha=1.0):
190 if not self.sessions: # If no existing sessions, just add as a new one
191 print("MidTermMemory: No existing sessions. Adding new session directly.")
192 return self.add_session(summary_for_new_pages, pages_to_insert, keywords_for_new_pages)
193
194 new_summary_vec = get_embedding(
195 summary_for_new_pages,
196 model_name=self.embedding_model_name,
197 **self.embedding_model_kwargs
198 )
199 new_summary_vec = normalize_vector(new_summary_vec)
200
201 best_sid = None
202 best_overall_score = -1
203
204 for sid, existing_session in self.sessions.items():
205 existing_summary_vec = np.array(existing_session["summary_embedding"], dtype=np.float32)
206 semantic_sim = float(np.dot(existing_summary_vec, new_summary_vec))
207
208 # Keyword similarity (Jaccard index based)
209 existing_keywords = set(existing_session.get("summary_keywords", []))
210 new_keywords_set = set(keywords_for_new_pages)
211 s_topic_keywords = 0
212 if existing_keywords and new_keywords_set:
213 intersection = len(existing_keywords.intersection(new_keywords_set))
214 union = len(existing_keywords.union(new_keywords_set))
215 if union > 0:
216 s_topic_keywords = intersection / union
217
218 overall_score = semantic_sim + keyword_similarity_alpha * s_topic_keywords
219
220 if overall_score > best_overall_score:
221 best_overall_score = overall_score
222 best_sid = sid
223
224 if best_sid and best_overall_score >= similarity_threshold:
225 print(f"MidTermMemory: Merging pages into session {best_sid}. Score: {best_overall_score:.2f} (Threshold: {similarity_threshold})")
226 target_session = self.sessions[best_sid]
227
228 processed_new_pages = []
229 for page_data in pages_to_insert:
230 page_id = page_data.get("page_id", generate_id("page")) # Use existing or generate new ID
231
232 # 检查是否已有embedding,避免重复计算
233 if "page_embedding" in page_data and page_data["page_embedding"]:
234 print(f"MidTermMemory: Reusing existing embedding for page {page_id}")
235 inp_vec = page_data["page_embedding"]
236 # 确保embedding是normalized的
237 if isinstance(inp_vec, list):
238 inp_vec_np = np.array(inp_vec, dtype=np.float32)
239 if np.linalg.norm(inp_vec_np) > 1.1 or np.linalg.norm(inp_vec_np) < 0.9: # 检查是否需要重新normalize
240 inp_vec = normalize_vector(inp_vec_np).tolist()
241 else:
242 print(f"MidTermMemory: Computing new embedding for page {page_id}")
243 full_text = f"User: {page_data.get('user_input','')} Assistant: {page_data.get('agent_response','')}"
244 inp_vec = get_embedding(
245 full_text,

Callers 1

Calls 8

add_sessionMethod · 0.95
rebuild_heapMethod · 0.95
saveMethod · 0.95
get_embeddingFunction · 0.90
normalize_vectorFunction · 0.90
generate_idFunction · 0.90
get_timestampFunction · 0.90
compute_segment_heatFunction · 0.70

Tested by

no test coverage detected