From 545bc5348eb0664bb6b209518ccd012218b25c09 Mon Sep 17 00:00:00 2001 From: Sarah Wooders Date: Sun, 30 Jun 2024 12:25:16 -0700 Subject: [PATCH] feat: migration script for 0.3.17 (#1489) --- scripts/migrate_0.3.17.py | 67 +++++++++++++++++++++++++++++ tests/data/memgpt-0.3.17/sqlite.db | Bin 0 -> 217088 bytes 2 files changed, 67 insertions(+) create mode 100644 scripts/migrate_0.3.17.py create mode 100644 tests/data/memgpt-0.3.17/sqlite.db diff --git a/scripts/migrate_0.3.17.py b/scripts/migrate_0.3.17.py new file mode 100644 index 00000000..e3626fc4 --- /dev/null +++ b/scripts/migrate_0.3.17.py @@ -0,0 +1,67 @@ +import os + +from sqlalchemy import DDL, MetaData, Table, create_engine, update + +from memgpt.config import MemGPTConfig +from memgpt.constants import BASE_TOOLS +from memgpt.metadata import MetadataStore +from memgpt.presets.presets import add_default_tools +from memgpt.prompts import gpt_system + +# Replace this with your actual database connection URL +config = MemGPTConfig.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) + +# Using a connection to manage adding columns and committing updates +with engine.connect() as conn: + trans = conn.begin() + try: + # Check and add 'system' column if it does not exist + if "system" not in table.c: + ddl_system = DDL("ALTER TABLE agents ADD COLUMN system VARCHAR") + conn.execute(ddl_system) + # Reflect the table again to update metadata + metadata.clear() + table = Table("agents", metadata, autoload_with=conn) + + # Check and add 'tools' column if it does not exist + if "tools" not in table.c: + ddl_tools = DDL("ALTER TABLE agents ADD COLUMN tools JSON") + conn.execute(ddl_tools) + # Reflect the table again to update metadata + metadata.clear() + table = Table("agents", metadata, autoload_with=conn) + + # Update all existing rows with default values for the new columns + conn.execute(update(table).values(system=system_prompt, tools=BASE_TOOLS)) + + # Commit transaction + trans.commit() + print("Columns added and data updated successfully!") + + except Exception as e: + print("An error occurred:", e) + trans.rollback() # Rollback if there are errors + +# 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()]) + +print("Migration completed successfully!") diff --git a/tests/data/memgpt-0.3.17/sqlite.db b/tests/data/memgpt-0.3.17/sqlite.db new file mode 100644 index 0000000000000000000000000000000000000000..1367a88e9afa7a11eaaa5704d550dca913321635 GIT binary patch literal 217088 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