anhkhoiphan commited on
Commit
55834a6
·
1 Parent(s): b9b60b0

Tạo hàm thêm các tin nhắn đã có vào buffer trên Qdrant

Browse files
Files changed (1) hide show
  1. conversation_memory.py +45 -0
conversation_memory.py CHANGED
@@ -153,6 +153,51 @@ def add_turn(conversation_id: str, user_msg: str, ai_msg: str) -> None:
153
  save(conversation_id, summary, buffer)
154
 
155
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  def get_context(conversation_id: str) -> str:
157
  """Trả về chuỗi context (summary + buffer) để đưa vào prompt."""
158
  summary, buffer = load(conversation_id)
 
153
  save(conversation_id, summary, buffer)
154
 
155
 
156
+ def seed_room(conversation_id: str, messages: list[dict]) -> None:
157
+ """
158
+ Seed Qdrant buffer từ danh sách tin nhắn Redis thô.
159
+ Mỗi message được chuyển thành role='user', content='[ts] name (id): content'.
160
+ Nếu vượt MAX_BUFFER thì tự động summarize trước khi lưu.
161
+ """
162
+ _NAME_FIELDS = ["sender_username", "username", "u_username", "name", "u_name",
163
+ "senderName", "displayName", "display_name", "fullName", "sender_id"]
164
+ _ID_FIELDS = ["sender_id", "u_id", "userId", "user_id", "sender_username", "username"]
165
+
166
+ def _get_field(m: dict, fields: list[str]) -> str:
167
+ for f in fields:
168
+ v = m.get(f)
169
+ if v and str(v).strip():
170
+ return str(v).strip()
171
+ return ""
172
+
173
+ buffer: list[dict] = []
174
+ for msg in messages:
175
+ name = _get_field(msg, _NAME_FIELDS) or "unknown"
176
+ sid = _get_field(msg, _ID_FIELDS) or name
177
+ content = msg.get("content") or msg.get("text") or msg.get("msg", "")
178
+ ts = msg.get("created_at") or msg.get("timestamp", "")
179
+ label = f"{name} ({sid})" if sid != name else name
180
+ buffer.append({"role": "user", "content": f"[{ts}] {label}: {content}"})
181
+
182
+ summary = ""
183
+ while len(buffer) > MAX_BUFFER:
184
+ to_summarize = buffer[:SUMMARIZE_COUNT]
185
+ buffer = buffer[SUMMARIZE_COUNT:]
186
+ if len(buffer) > KEEP_RECENT:
187
+ buffer = buffer[-KEEP_RECENT:]
188
+ logger.info(
189
+ "[Memory] seed_room: tóm tắt %d tin → giữ %d tin còn lại",
190
+ len(to_summarize), len(buffer),
191
+ )
192
+ summary = _summarize(summary, to_summarize)
193
+
194
+ save(conversation_id, summary, buffer)
195
+ logger.info(
196
+ "[Memory] seed_room '%s': lưu buffer=%d tin, summary=%s",
197
+ conversation_id, len(buffer), "có" if summary else "không",
198
+ )
199
+
200
+
201
  def get_context(conversation_id: str) -> str:
202
  """Trả về chuỗi context (summary + buffer) để đưa vào prompt."""
203
  summary, buffer = load(conversation_id)