|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from erniebot_agent.memory import Memory |
|
from erniebot_agent.messages import Message |
|
|
|
|
|
class SlidingWindowMemory(Memory): |
|
"""This class controls max number of messages.""" |
|
|
|
def __init__(self, max_num_message: int): |
|
super().__init__() |
|
self.max_num_message = max_num_message |
|
|
|
assert (isinstance(max_num_message, int)) and ( |
|
max_num_message > 0 |
|
), "max_num_message should be positive integer, but got {max_token_limit}".format( |
|
max_token_limit=max_num_message |
|
) |
|
|
|
def add_message(self, message: Message): |
|
super().add_message(message=message) |
|
self.prune_message() |
|
|
|
def prune_message(self): |
|
while len(self.get_messages()) > self.max_num_message: |
|
self.msg_manager.pop_message() |
|
|
|
if len(self.get_messages()) % 2 == 0: |
|
self.msg_manager.pop_message() |
|
|