agentVerse / agentverse /memory /vectorstore.py
AgentVerse's picture
bump version to 0.1.8
01523b5
raw
history blame
1.93 kB
from typing import List, Union
from pydantic import Field
from agentverse.message import Message
from agentverse.llms import BaseLLM
from agentverse.llms.openai import get_embedding, OpenAIChat
from . import memory_registry
from .base import BaseMemory
@memory_registry.register("vectorstore")
class VectorStoreMemory(BaseMemory):
"""
The main difference of this class with chat_history is that this class treat memory as a dict
treat message.content as memory
Attributes:
messages (List[Message]) : used to store messages, message.content is the key of embeddings.
embedding2memory (dict) : `key` is the embedding and `value` is the message
memory2embedding (dict) : `key` is the message and `value` is the embedding
llm (BaseLLM) : llm used to get embeddings
Methods:
add_message : Additionally, add the embedding to embeddings
"""
messages: List[Message] = Field(default=[])
embedding2memory: dict = {}
memory2embedding: dict = {}
llm: BaseLLM = OpenAIChat(model="gpt-4")
def add_message(self, messages: List[Message]) -> None:
for message in messages:
self.messages.append(message)
memory_embedding = get_embedding(message.content)
self.embedding2memory[memory_embedding] = message.content
self.memory2embedding[message.content] = memory_embedding
def to_string(self, add_sender_prefix: bool = False) -> str:
if add_sender_prefix:
return "\n".join(
[
f"[{message.sender}]: {message.content}"
if message.sender != ""
else message.content
for message in self.messages
]
)
else:
return "\n".join([message.content for message in self.messages])
def reset(self) -> None:
self.messages = []