Spaces:
Sleeping
Sleeping
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- 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)
|