(self,
messages: List[Message],
user_id: Optional[int] = None,
agent_id: Optional[int] = None,
run_id: Optional[int] = None,
memory_type: Optional[str] = None,
msg_id: Optional[int] = None)
| 207 | idx += 1 |
| 208 | |
| 209 | async def add_single(self, |
| 210 | messages: List[Message], |
| 211 | user_id: Optional[int] = None, |
| 212 | agent_id: Optional[int] = None, |
| 213 | run_id: Optional[int] = None, |
| 214 | memory_type: Optional[str] = None, |
| 215 | msg_id: Optional[int] = None) -> None: |
| 216 | messages_dict = [] |
| 217 | for message in messages: |
| 218 | if isinstance(message, Message): |
| 219 | messages_dict.append(message.to_dict_clean()) |
| 220 | else: |
| 221 | messages_dict.append(message) |
| 222 | async with self._lock: |
| 223 | if msg_id is None: |
| 224 | self.max_msg_id += 1 |
| 225 | msg_id = self.max_msg_id |
| 226 | else: |
| 227 | self.max_msg_id = max(msg_id, self.max_msg_id) |
| 228 | self.cache_messages[msg_id] = messages, self._hash_block(messages) |
| 229 | |
| 230 | try: |
| 231 | self.memory.add( |
| 232 | messages_dict, |
| 233 | user_id=user_id or self.user_id, |
| 234 | agent_id=agent_id or self.agent_id, |
| 235 | run_id=run_id or self.run_id, |
| 236 | memory_type=memory_type) |
| 237 | logger.info('Add memory success.') |
| 238 | except Exception as e: |
| 239 | logger.warning(f'Failed to add memory: {e}') |
| 240 | |
| 241 | if self.history_mode == 'overwrite': |
| 242 | res = self.memory.get_all( |
| 243 | user_id=user_id or self.user_id, |
| 244 | agent_id=agent_id or self.agent_id, |
| 245 | run_id=run_id or self.run_id) # sorted |
| 246 | res = [(item['id'], item['memory']) for item in res['results']] |
| 247 | if len(res): |
| 248 | logger.info('All memory info:') |
| 249 | for item in res: |
| 250 | logger.info(item[1]) |
| 251 | valids = [] |
| 252 | unmatched = [] |
| 253 | for id, memory in res: |
| 254 | matched = False |
| 255 | for item in self.memory_snapshot: |
| 256 | if id == item.memory_id: |
| 257 | if item.value == memory and item.valid: |
| 258 | matched = True |
| 259 | valids.append(id) |
| 260 | break |
| 261 | else: |
| 262 | if item.valid: |
| 263 | item.disable(msg_id) |
| 264 | if not matched: |
| 265 | unmatched.append((id, memory)) |
| 266 | for item in self.memory_snapshot: |
no test coverage detected