mirror of
https://github.com/cpacker/MemGPT.git
synced 2025-06-03 04:30:22 +00:00

Co-authored-by: Charles Packer <packercharles@gmail.com> Co-authored-by: Shubham Naik <shubham.naik10@gmail.com> Co-authored-by: Shubham Naik <shub@memgpt.ai>
91 lines
2.6 KiB
Python
91 lines
2.6 KiB
Python
import os
|
|
import uuid
|
|
|
|
from sqlalchemy import MetaData, Table, create_engine
|
|
|
|
from letta import create_client
|
|
from letta.config import LettaConfig
|
|
from letta.data_types import AgentState, EmbeddingConfig, LLMConfig
|
|
from letta.metadata import MetadataStore
|
|
from letta.presets.presets import add_default_tools
|
|
from letta.prompts import gpt_system
|
|
|
|
# Replace this with your actual database connection URL
|
|
config = LettaConfig.load()
|
|
if config.recall_storage_type == "sqlite":
|
|
DATABASE_URL = "sqlite:///" + os.path.join(config.recall_storage_path, "sqlite.db")
|
|
else:
|
|
DATABASE_URL = config.recall_storage_uri
|
|
print(DATABASE_URL)
|
|
engine = create_engine(DATABASE_URL)
|
|
metadata = MetaData()
|
|
|
|
# defaults
|
|
system_prompt = gpt_system.get_system_text("memgpt_chat")
|
|
|
|
# Reflect the existing table
|
|
table = Table("agents", metadata, autoload_with=engine)
|
|
|
|
|
|
# get all agent rows
|
|
agent_states = []
|
|
with engine.connect() as conn:
|
|
agents = conn.execute(table.select()).fetchall()
|
|
for agent in agents:
|
|
id = uuid.UUID(agent[0])
|
|
user_id = uuid.UUID(agent[1])
|
|
name = agent[2]
|
|
print(f"Migrating agent {name}")
|
|
persona = agent[3]
|
|
human = agent[4]
|
|
system = agent[5]
|
|
preset = agent[6]
|
|
created_at = agent[7]
|
|
llm_config = LLMConfig(**agent[8])
|
|
embedding_config = EmbeddingConfig(**agent[9])
|
|
state = agent[10]
|
|
tools = agent[11]
|
|
|
|
state["memory"] = {"human": {"value": human, "limit": 2000}, "persona": {"value": persona, "limit": 2000}}
|
|
|
|
agent_state = AgentState(
|
|
id=id,
|
|
user_id=user_id,
|
|
name=name,
|
|
system=system,
|
|
created_at=created_at,
|
|
llm_config=llm_config,
|
|
embedding_config=embedding_config,
|
|
state=state,
|
|
tools=tools,
|
|
_metadata={"human": "migrated", "persona": "migrated"},
|
|
)
|
|
|
|
agent_states.append(agent_state)
|
|
|
|
# remove agents table
|
|
agents_model = Table("agents", metadata, autoload_with=engine)
|
|
agents_model.drop(engine)
|
|
|
|
# remove tool table
|
|
tool_model = Table("toolmodel", metadata, autoload_with=engine)
|
|
tool_model.drop(engine)
|
|
|
|
# re-create tables and add default tools
|
|
ms = MetadataStore(config)
|
|
add_default_tools(None, ms)
|
|
print("Tools", [tool.name for tool in ms.list_tools()])
|
|
|
|
|
|
for agent in agent_states:
|
|
ms.create_agent(agent)
|
|
print(f"Agent {agent.name} migrated successfully!")
|
|
|
|
# add another agent to create core memory tool
|
|
client = create_client()
|
|
dummy_agent = client.create_agent(name="dummy_agent")
|
|
tools = client.list_tools()
|
|
assert "core_memory_append" in [tool.name for tool in tools]
|
|
|
|
print("Migration completed successfully!")
|