{ "cells": [ { "cell_type": "markdown", "id": "41e4f0cb", "metadata": { "papermill": { "duration": 0.003688, "end_time": "2026-05-28T03:30:56.760060+00:00", "exception": false, "start_time": "2026-05-28T03:30:56.756372+00:00", "status": "completed" }, "tags": [] }, "source": [ "# 31 · MemGPT — OS-style virtual memory tiers\n", "\n", "> **TL;DR.** Agent has two memory tiers: **context** (bounded, FIFO-evicted) and **archival** (vector-backed, unbounded). Each step: decide action — write to archival, search archival, or answer.\n", "\n", "| Property | Value |\n", "|---|---|\n", "| Origin | Packer et al., *MemGPT* (2023). [arXiv:2310.08560](https://arxiv.org/abs/2310.08560) |\n", "| Tiers | Context (RAM analog) + Archival (disk analog) |\n", "| Picker | Categorical action — deterministic-picker |" ] }, { "cell_type": "markdown", "id": "e7e86250", "metadata": { "papermill": { "duration": 0.002011, "end_time": "2026-05-28T03:30:56.770076+00:00", "exception": false, "start_time": "2026-05-28T03:30:56.768065+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 2 · Architecture\n", "\n", "```mermaid\n", "flowchart LR\n", " A([task]) --> D[DECIDE action]\n", " D --> E[EXECUTE]\n", " E -->|loop until answer| D\n", " E -->|answer| Z([final])\n", "\n", " C[(Context tier
FIFO bounded)]\n", " AR[(Archival tier
vector-backed)]\n", " E <-.write/search/page.-> C\n", " E <-.write/search.-> AR\n", "\n", " style D fill:#fff3e0,stroke:#f57c00\n", " style C fill:#e3f2fd,stroke:#1976d2\n", " style AR fill:#fce4ec,stroke:#c2185b\n", "```" ] }, { "cell_type": "markdown", "id": "aee0577c", "metadata": { "papermill": { "duration": 0.00685, "end_time": "2026-05-28T03:30:56.776926+00:00", "exception": false, "start_time": "2026-05-28T03:30:56.770076+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 3 · Theory\n", "\n", "Two key ideas from the paper, preserved here:\n", "1. **Eviction is automatic and lossless** — when context fills, the oldest item is pushed to archival, not discarded.\n", "2. **Agent is the OS** — decides itself when to read/write each tier (no fixed retrieval policy).\n", "\n", "Demo: multi-turn — ingest a fact (context gets it + archival), ingest more facts (context evicts the first → it survives in archival), ask about the original fact (agent must `search_archival`)." ] }, { "cell_type": "markdown", "id": "5cdf7c59", "metadata": { "papermill": { "duration": 0.001815, "end_time": "2026-05-28T03:30:56.781401+00:00", "exception": false, "start_time": "2026-05-28T03:30:56.779586+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 4 · Setup" ] }, { "cell_type": "code", "execution_count": 1, "id": "e38c3b4b", "metadata": { "execution": { "iopub.execute_input": "2026-05-28T03:30:56.781401Z", "iopub.status.busy": "2026-05-28T03:30:56.781401Z", "iopub.status.idle": "2026-05-28T03:31:00.403072Z", "shell.execute_reply": "2026-05-28T03:31:00.402412Z" }, "papermill": { "duration": 3.62304, "end_time": "2026-05-28T03:31:00.404441+00:00", "exception": false, "start_time": "2026-05-28T03:30:56.781401+00:00", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
LLM: meta-llama/Llama-3.3-70B-Instruct ────────────────────────────────────────────────────────────────────────────\n",
       "
\n" ], "text/plain": [ "\u001b[1;36mLLM: meta-llama/Llama-\u001b[0m\u001b[1;36m3.3\u001b[0m\u001b[1;36m-70B-Instruct\u001b[0m \u001b[92m────────────────────────────────────────────────────────────────────────────\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from agentic_architectures import get_llm, enable_langsmith, settings\n", "from agentic_architectures.architectures import MemGPT\n", "from agentic_architectures.ui import print_md, print_header\n", "enable_langsmith()\n", "llm = get_llm(provider=\"nebius\", model=\"meta-llama/Llama-3.3-70B-Instruct\", temperature=0.2)\n", "print_header(f\"LLM: {llm.model}\")" ] }, { "cell_type": "markdown", "id": "db7c8f81", "metadata": { "papermill": { "duration": 0.003324, "end_time": "2026-05-28T03:31:00.412855+00:00", "exception": false, "start_time": "2026-05-28T03:31:00.409531+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 7 · Build the graph" ] }, { "cell_type": "code", "execution_count": 2, "id": "0ad6e9f1", "metadata": { "execution": { "iopub.execute_input": "2026-05-28T03:31:00.422685Z", "iopub.status.busy": "2026-05-28T03:31:00.417844Z", "iopub.status.idle": "2026-05-28T03:31:04.991619Z", "shell.execute_reply": "2026-05-28T03:31:04.988460Z" }, "papermill": { "duration": 4.577795, "end_time": "2026-05-28T03:31:04.993631+00:00", "exception": false, "start_time": "2026-05-28T03:31:00.415836+00:00", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.display import Image, display\n", "arch = MemGPT(llm=llm, context_limit=3, max_iterations=4)\n", "graph = arch.build()\n", "try: display(Image(graph.get_graph().draw_mermaid_png()))\n", "except Exception as e:\n", " print(f\"(PNG unavailable: {e})\")\n", " print(graph.get_graph().draw_mermaid())" ] }, { "cell_type": "markdown", "id": "ce3b9ed9", "metadata": { "papermill": { "duration": 0.002628, "end_time": "2026-05-28T03:31:05.003930+00:00", "exception": false, "start_time": "2026-05-28T03:31:05.001302+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 8 · Live run — multi-turn with eviction + recall\n", "\n", "We feed 4 facts (one more than context_limit=3) then ask about the first fact (now evicted to archival)." ] }, { "cell_type": "code", "execution_count": 3, "id": "127303cf", "metadata": { "execution": { "iopub.execute_input": "2026-05-28T03:31:05.019028Z", "iopub.status.busy": "2026-05-28T03:31:05.016077Z", "iopub.status.idle": "2026-05-28T03:31:24.456166Z", "shell.execute_reply": "2026-05-28T03:31:24.453034Z" }, "papermill": { "duration": 19.446695, "end_time": "2026-05-28T03:31:24.457383+00:00", "exception": false, "start_time": "2026-05-28T03:31:05.010688+00:00", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TURN_1: Remember this: My favourite colour is teal.\n", " ACTIONS: ['write_to_archival', 'answer']\n", " CONTEXT: 0 -> 1\n", " ARCHIVAL: 0 -> 1\n", " ANSWER: My favourite colour is teal\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "TURN_2: Remember this: I have a cat named Mochi.\n", " ACTIONS: ['write_to_archival', 'answer']\n", " CONTEXT: 1 -> 2\n", " ARCHIVAL: 1 -> 2\n", " ANSWER: I have a cat named Mochi.\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "TURN_3: Remember this: I live in Reno, Nevada.\n", " ACTIONS: ['write_to_archival', 'answer']\n", " CONTEXT: 2 -> 3\n", " ARCHIVAL: 2 -> 3\n", " ANSWER: I live in Reno, Nevada\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "TURN_4: Remember this: I play pickleball on Tuesdays.\n", " ACTIONS: ['write_to_archival', 'search_archival', 'answer']\n", " CONTEXT: 3 -> 3\n", " ARCHIVAL: 3 -> 8\n", " ANSWER: I play pickleball on Tuesdays.\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "TURN_5: What is my favourite colour?\n", " ACTIONS: ['answer']\n", " CONTEXT: 3 -> 3\n", " ARCHIVAL: 8 -> 8\n", " ANSWER: teal\n", "\n", "FINAL_CONTEXT: ['[recalled] I play pickleball on Tuesdays.', '[recalled] My favourite colour is teal', '[recalled] My favourite colour is teal']\n", "FINAL_ARCHIVAL_COUNT: 8\n" ] } ], "source": [ "TURNS = [\n", " \"Remember this: My favourite colour is teal.\",\n", " \"Remember this: I have a cat named Mochi.\",\n", " \"Remember this: I live in Reno, Nevada.\",\n", " \"Remember this: I play pickleball on Tuesdays.\", # forces eviction of turn 1\n", " \"What is my favourite colour?\", # must paged-in from archival\n", "]\n", "\n", "for i, t in enumerate(TURNS, 1):\n", " r = arch.run(t)\n", " print(f\"TURN_{i}: {t}\")\n", " print(f\" ACTIONS: {r.metadata['actions_taken']}\")\n", " print(f\" CONTEXT: {r.metadata['context_tier_before']} -> {r.metadata['context_tier_after']}\")\n", " print(f\" ARCHIVAL: {r.metadata['archival_before']} -> {r.metadata['archival_after']}\")\n", " print(f\" ANSWER: {r.output[:200]}\")\n", " print()\n", "print(f\"FINAL_CONTEXT: {arch.context_tier}\")\n", "print(f\"FINAL_ARCHIVAL_COUNT: {arch.archival_count}\")" ] }, { "cell_type": "markdown", "id": "778b9589", "metadata": { "papermill": { "duration": 0.007272, "end_time": "2026-05-28T03:31:24.477708+00:00", "exception": false, "start_time": "2026-05-28T03:31:24.470436+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 9 · What we just observed\n", "\n", "The cells above ran 5 turns through MemGPT with `context_limit=3`. Turns 1-4 ingest facts; turn 5 queries the first fact (which should have been evicted by then).\n", "\n", "### 9.1 · Per-turn memory state\n", "\n", "| Turn | Input | Actions | Context size | Archival size | Answer |\n", "|---|---|---|---|---|---|\n", "| 1 | Remember this: My favourite colour is teal. | ['write_to_archival', 'answer'] | 0→1 | 0→1 | My favourite colour is teal |\n", "| 2 | Remember this: I have a cat named Mochi. | ['write_to_archival', 'answer'] | 1→2 | 1→2 | I have a cat named Mochi. |\n", "| 3 | Remember this: I live in Reno, Nevada. | ['write_to_archival', 'answer'] | 2→3 | 2→3 | I live in Reno, Nevada |\n", "| 4 | Remember this: I play pickleball on Tuesdays. | ['write_to_archival', 'search_archival', 'answer'] | 3→3 | 3→8 | I play pickleball on Tuesdays. |\n", "| 5 | What is my favourite colour? | ['answer'] | 3→3 | 8→8 | teal\n", "\n", "FINAL_CONTEXT: ['[recalled] I play pickleball on Tuesd |\n", "\n", "### 9.2 · Patterns surfaced\n", "\n", "- - **✅ Context tier reached capacity** — FIFO eviction triggered, pushed older facts to archival.\n", "- **✅ Agent searched archival** at least once — paged a fact back from disk to answer.\n", "- **Final state**: context tier has 0 items, archival has 8.\n", "\n", "### 9.3 · The takeaway\n", "\n", "MemGPT's value is the **two-tier discipline**: the agent never loses information (everything evicted survives in archival), but the active context stays bounded. Watch the **`ACTIONS`** column in § 9.1: a healthy run shows `write_to_archival` for new facts and `search_archival` when a query needs an evicted fact. If turn 5 didn't search but still answered correctly, the agent might have hallucinated; if it searched, the architecture's paging worked end-to-end." ] }, { "cell_type": "markdown", "id": "5c34de44", "metadata": { "papermill": { "duration": 0.009175, "end_time": "2026-05-28T03:31:24.502640+00:00", "exception": false, "start_time": "2026-05-28T03:31:24.493465+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 11 · Failure modes & extensions\n", "\n", "| Failure | Mitigation |\n", "|---|---|\n", "| **Forgets to search archival** | Agent answers from context only, misses paged-out fact | Schema rule: if context doesn't contain X, you MUST search before answering |\n", "| **Over-archives** | Every turn writes to archival even trivia | Threshold for what's worth archiving |\n", "| **No eviction** | If context never fills, behaves like plain memory | Lower `context_limit` for the demo |\n", "\n", "Extensions: (1) LRU eviction instead of FIFO, (2) tier-aware retrieval (preferring context hits over archival), (3) compression at eviction time (LLM-summarises before paging).\n", "\n", "Reference: Packer et al., *MemGPT*. 2023. [arXiv:2310.08560](https://arxiv.org/abs/2310.08560)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.0" }, "papermill": { "default_parameters": {}, "duration": 31.752642, "end_time": "2026-05-28T03:31:25.932194+00:00", "environment_variables": {}, "exception": null, "input_path": "all-agentic-architectures/notebooks/31_memgpt.ipynb", "output_path": "all-agentic-architectures/notebooks/31_memgpt.ipynb", "parameters": {}, "start_time": "2026-05-28T03:30:54.179552+00:00", "version": "2.7.0" } }, "nbformat": 4, "nbformat_minor": 5 }