{ "cells": [ { "cell_type": "markdown", "id": "7f3ada9f", "metadata": { "papermill": { "duration": 0.0, "end_time": "2026-05-28T03:42:57.531445+00:00", "exception": false, "start_time": "2026-05-28T03:42:57.531445+00:00", "status": "completed" }, "tags": [] }, "source": [ "# 35 · Agent Workflow Memory (AWM) — mine reusable recipes from past traces\n", "\n", "> **TL;DR.** After every solved task, extract a high-level **workflow recipe** (3-6 generalisable steps). Store recipes in a vector-indexed library. Future tasks retrieve the most-similar recipe and follow it.\n", "\n", "| Property | Value |\n", "|---|---|\n", "| Origin | Wang et al., *Agent Workflow Memory* (2024). [arXiv:2409.07429](https://arxiv.org/abs/2409.07429) |\n", "| Storage | Vector-indexed `arch.workflows` list |\n", "| Cost | 1 retrieve + 1 answer + 1 extract per task = ~3 calls |\n", "| Sister to | [Voyager (nb 29)](./29_voyager.ipynb) — skills (code) vs workflows (recipes) |" ] }, { "cell_type": "markdown", "id": "8812cd0c", "metadata": { "papermill": { "duration": 0.015846, "end_time": "2026-05-28T03:42:57.547291+00:00", "exception": false, "start_time": "2026-05-28T03:42:57.531445+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 2 · Architecture\n", "\n", "```mermaid\n", "flowchart LR\n", " A([task]) --> R[RETRIEVE most-similar workflow]\n", " R --> AN[ANSWER
prompt prepends recipe if found]\n", " AN --> EX[EXTRACT new workflow
generalised steps]\n", " EX --> Z([answer])\n", "\n", " L[(workflow library
vector-indexed)]\n", " R <-.search.-> L\n", " EX -.add.-> L\n", "\n", " style R fill:#fff3e0,stroke:#f57c00\n", " style EX fill:#fce4ec,stroke:#c2185b\n", " style L fill:#f3e5f5,stroke:#7b1fa2\n", "```" ] }, { "cell_type": "markdown", "id": "7c538004", "metadata": { "papermill": { "duration": 0.0, "end_time": "2026-05-28T03:42:57.547291+00:00", "exception": false, "start_time": "2026-05-28T03:42:57.547291+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 3 · Theory\n", "\n", "Voyager (nb 29) stores reusable **code** (skills). AWM stores reusable **strategy** (workflows). Skills are concrete; workflows are abstract. For tasks where a small Python function suffices, use Voyager. For tasks that share *structure* but differ in entities (e.g., \"summarise then categorise\" applies to news articles AND emails), use AWM.\n", "\n", "Demo: 3 sequential tasks of similar structure (\"summarise X then categorise it\"). Task 1 extracts a workflow; tasks 2 and 3 retrieve and follow it." ] }, { "cell_type": "markdown", "id": "1a0a7e9c", "metadata": { "papermill": { "duration": 0.0, "end_time": "2026-05-28T03:42:57.562936+00:00", "exception": false, "start_time": "2026-05-28T03:42:57.562936+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 4 · Setup" ] }, { "cell_type": "code", "execution_count": 1, "id": "a9580a4a", "metadata": { "execution": { "iopub.execute_input": "2026-05-28T03:42:57.578577Z", "iopub.status.busy": "2026-05-28T03:42:57.578577Z", "iopub.status.idle": "2026-05-28T03:43:00.562325Z", "shell.execute_reply": "2026-05-28T03:43:00.562325Z" }, "papermill": { "duration": 2.989123, "end_time": "2026-05-28T03:43:00.562325+00:00", "exception": false, "start_time": "2026-05-28T03:42:57.573202+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 AgentWorkflowMemory\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": "b7805dba", "metadata": { "papermill": { "duration": 0.0, "end_time": "2026-05-28T03:43:00.562325+00:00", "exception": false, "start_time": "2026-05-28T03:43:00.562325+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 7 · Build the graph" ] }, { "cell_type": "code", "execution_count": 2, "id": "ef60039e", "metadata": { "execution": { "iopub.execute_input": "2026-05-28T03:43:00.572882Z", "iopub.status.busy": "2026-05-28T03:43:00.572882Z", "iopub.status.idle": "2026-05-28T03:43:03.350394Z", "shell.execute_reply": "2026-05-28T03:43:03.350394Z" }, "papermill": { "duration": 2.788069, "end_time": "2026-05-28T03:43:03.350394+00:00", "exception": false, "start_time": "2026-05-28T03:43:00.562325+00:00", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGoAAAGwCAIAAADOkWc9AAAQAElEQVR4nOydB2AT5d/Hn7tLuiddlA6gUEZZBcoSpEBbQBHZslUURGQqQxAcbEVRhvgHXLgqr1IVEESQXfaGsmlllU66Z8bd+7tcCWlJcpc+CZzN86HGy7OS++ZZ96yfguM4RKguCkTAgMiHBZEPCyIfFkQ+LIh8WODKd/Ni2bVT+Xn31RoVpy5n0SO9IIpGLIcorpILx+pe4R9LVQpNIwRpUPw/fUhdHN0fWyVp+A/SMAhJ8Q4Vr4ZfgIVADz+IcaAcnWhXb2Xdxi7NOrkjDKjq9ftO7clPOpRXlK8BXRgFpXSiHJwYSIrTVk2Novm74dhKLhzcD7zy8lUNzPFiV9x/JflAWW2VpHUBDUJSlO524BNZziDNqr8fo6S1WqTVsOUlWlbLObkq6jd36z7EF1mOxfKd3p1/avd9LYv8g5yiYn1Cmzqi/zJFOdyBzRmpN0pBzXrN3Hq/GGBRdMvk+27RrdJCbbOOXk8PqIVqFpePFR3elgVZeOzC+oiSGssC+dbMuBEQ4jx4ahCquezflJ10NL9zX//IaEl1olT5Pn/rRvfBAc2ewqpo/yt8MSN59Jx67j6MaEhJ8q2ZfuO1RQ2Vzsh+WDc7pW2sb1Ssh/lgNBJj7azkmGG17Uo7YPyHYcf/zirI0poPJiLf94tu+Yc4N2nnhuyPDr1845ffMh/GnHyn/skvLtQOnFwH2SVtYz2d3ZiEz1PNhDEr356c5p28kB3zwtS6GbfKzAQwKd+ZfQVaFft0/5rWv7MIZ3fk5s78/kWaqQAm5Tu7N9c3xAk9XuLi4lJTUy2NlZyc/NxzzyHb0KyzV9q/xaZ8TcpXUqSBuhM9RtLS0nJzc5HlXLp0CdmMtjFeMCpx56rxImx8xOX62WJ4eg9tYpPnWehp/vzzz3/++eetW7fq16/fsWPHCRMmnDlz5vXXXwfffv36RUdHL1++HPLUpk2bTpw4ce/evbCwsP79+w8ePFhIISYmZuzYsXv27IFYo0eP/uGHH8AxKirqzTffHDlyJLI2zu7MhUP5IY2NlEXj8v2bVKy02VDAxo0bv/nmm2nTpnXu3Hnfvn1r1qxxdXUdM2bMihUrwHHz5s1BQfxzISgIws2dOxfGUW7evPnRRx8FBgZCFPBSKpW///57+/btQcS2bdtCgJ07d8LvgWyDq7syJ0Nl1Mu4fAX31U4u4o8s1eP06dMRERFCbTVgwIB27dqVlJQ8Gmzp0qXFxcV16vDdJshZW7ZsOXz4sCAf6OXp6Tljxgz0WPDwUaQmlxr1Mi6fqpxVOthKvlatWq1evXrBggWtW7fu2rVrcHCw0WBQxiGfHjp0CMq44CLkSgH4AdDjAgqvRm388cO4fKxWS9Piz3PVY8SIEVBa9+/fP3/+fIVCAa3tlClT/Pz8Kn0Blp06dapKpZo0aRJkPXd391dffdUwgIODA3pcUBSf3416GZfP0VFZXqZBtgF+mAE6UlJSjh8/vn79+qKios8++8wwzJUrVy5evPjFF19ABSe4FBYW+vv7oydBWTHLMMblM57F3H0UqnJbLd6AOh5aVbiA9nTYsGHDhw+/evVqlTB5eXnwqtcrRQd6QuRnqRWOxqsy4/KFNnYtKxEZbKg2O3bsmDlz5oEDB/Lz8xMTE6H/AbUhuNerVw9ed+3alZSUBMpCuYYeSUFBATS7H3/8MfRvoGNoNMHQ0NDs7GxoxPW1pHUpLtTU8jNeVxiXL6KjG4z956Qbb60xmTdvHqjz1ltvQfdt4cKF0MuD3gm4QxvSt2/ftWvXQsNSu3btRYsWXbhwoUePHtCbmzhxInT6QFZ918+QLl26REZGQkP8999/IxtQlKcOb218zMnkcOm6OSn+wU4DJtrpcIuey8cLd2/MmPRpQ6O+JpvXJu09zA822AlHt9/39FWa8jU5TR49wPfCwbwze/Jb9/A0GiA9PR0qfqNebm5u0Jga9YJiC48cyDZs0GHUq2IK2BjQNzJaJwgU5avHL2loytfcXMfujVnJ5wtfWxJm1Fej0WRmZhr1Kisrc3IyPloDDYLt+h+FOox6QRPk4WF84gLc4fc26vXT0tswdTlqbigygchU0ZdzU6AV7mXh5HHN4PbVsq3r705c3tBMGJFHi3GLw26cKywrYJH9sf2be0/3Eyko4k9mcSNqf7voX2RnfPPBzeBw15ZdRSYqJc3z5qarf1p2y1TjXfP436zk6EEBER3E5xelrjL492LJtq/vtXzaq+uAxzoE/Zi5fbl0+4a00MYuz75SW0p4y5YIwdy70pHuNTogqGENnDaPX3YnP0v19AD/5pLXoli8QG3b12m3LpfABGh4K/cuA3zQf5+zBwqSEvPy76t8Ap2GzQi2KG41l0f+9W3GneslqjItDEq7eigcnRknN5o1WB7Jj4/Bf9zD5BkFv/SRZR94cxytW7iIOIP1pqxuOSXHgT/7YLUoTVMs4vh1p4IL0i2e5Ns8fhkkJKsFd369JZ8arQsA6dBMxcpJfoElwyEtVbH2kv8mDIwHl+RrSou15aVaGIzyCXQYPCEYWT6EWE35BIpytCf+yclOLYeHavhiGjWMsz5IjV/6CWk/HCajGY5jqQefxukeBB6sDdVdVLylKhbSCl4wbsowtOBdEbgism5tL0cxDNKy/IXgUrHiFMQU1uQKsSghQMX3Ab0UDpSTM+MdoGzR2Tu4UfWndbDkewz06tUrPj7ex0emtYTcV9bDoyE85yG5QuTDgsiHhdzlU6vVMCmO5Iqs5WN13RzbTZniI2v5ZF5yEZEPE1l/OZlXfIjkPkyIfFgQ+bAg8mEhd/lI01F9SO7DgsiHBZEPC+g2E/mqD8l9WBD5sCDyYUHkw4KMuGBBch8WDMO4u8v66BO5TxXl5+cjGSPvoqFQQPlFMobIhwWRDwsiHxZEPizk3nEh8lUfkvuwIPJhQeTDgsiHBZEPCyIfFkQ+LIh8WBD5sJC/fHLcVTR//vwtW7YIX4zfR6WDpukTJ04gmSHHResTJkyoV68erQMee+EV5DN10NqTRY7y+fv7x8XFGbqAfP369UPyQ6ZbJkaOHFm3bl3926CgoP79+yP5IVP5YILt+eef12+I6dmzp5eXHE+Qlu+GneHDhwv1XZ06dQYOHIhkiWUt76HNOYX5anU5fzYdw1Ba3eZnwbYNvxGZQ7QCsVphpzjFshVbnIWd5RzL0QzNatkHxnYq9o7z7rrA/MZm3aF3eq+7d+5ev3EtqE5weHg4v2tcw+l3hD/cSk3rrBg9OGhG7y7AKJBWU9V6EbylGcQ+0iNSKmlnD2X7nj7Oko/olyrf9q8zbl0rUTD811XrTkakGMQJR/wZ2Gfiv5ZWt9m7wniQsEG8Yme5EKVi77hgh0gXt8JFnyD1YLs9y/+jdDvsKYbjtJReCL05KD5xCj20hVRZKd33qeoI8Rha514ZRsl/f1UZ6+XnOGKWpIZeknyJW+5fOlrQ97V6bt6SzdD8l/nj87uOzuiFt8QVFJdv7/9lJ18sHjq9LrIntq67S9PcsBkh5oOJNx3XzxU16+CN7Iy+44NzM8QPzxSRT1WENCpt8y4iRznVSBglffjPHPNhRIYMigq1rL3aP4Y2sKxI5PxbsREXSsvZ4+FzPKwO82GIiU+TQE+LY0V6GkQ+k+jOWhcJQ+QzCX+alpjZAyKfSaDp4MSGukXls4vHDKNQ/LFhIr0OUfnstNeCdAfjGZ4AZxSS+0zCDzYyJPdVF77PpyUdl+qi67jg5j77BR5WrVD32W3lxx/nSYvkPtEBqyc2YJDw28aYuPboScKJ1vxPeKpo/oLZ2//abNQromnz0aPGoicKheTddFy9eqldu05GvZo2bQ5/6Mmhq/tEwlg/90GhGzSkV+KhfVD0Vq/5BFxycu4vWjx32Ijn+g+MXbz03Tt3KgwydY+JSku/9/EnC/v26wZv+w2ISUj4eeqb48C9oLDAsPBqNJp161eNefWFPn27vj1nytGjiYL75Kmvznp7kuGnz5k77Y1JL5uJIh3o99EMbt1nMQ4ODiUlxVu2bJoze8GAfi9otdo3p48/e+7Um9Pe+ear//P2qvXGxJdS792FkDu2H4LXmTPe3bp5H9JZnvxz++8NGzb+eNkaF2cXwzRXrV62KSF+QP+h8T9tje4a8/78WfsP7Ab37tFxp04fLy6uMABbVlZ28uTR2B69zUSRDsydsmL9PuvLBw0W3MawYS/FxvQODg69cOHs7ds335mzsEP7p2rV8pnw+jQPT6+EhHijET08PCdPnBHVtoPhLujy8vK/d/45YvjLz/cd5Onh+ewz/WJ69P7+hy/BKzo6FkY0DybuEUJCloe33brFmYli0a2IhrBV09GkcTPh4kLSWchWbVq3E96CRpGt2p47f9porMaNjFievHbtskqlahf1sIqEFFJSbuQX5Pv4+ML1wcS9gvuhQ/vatmkPP5KpKCArkoxuyEAkjK2aDr0NyaKiQrVaDdWZoa+Xl7f5WIZACkhXzVVxz825DzkL8trnaz6B/M4wzJGjB6dMnmUmSll5maOj1CPWdUMGImFs3vJCBnF2dl68qJIJSoa2wPyqjy9v/XP6W3ODgirNuvr78yY1QD6o5g4fOQDS8yU3Os5MFFcXVyQZml+TKRJGVD4ac8ylQYNGpaWlcKtBdSom7e+lpXp5WjBxHBwUKmSZ1pEVWTg3Nwdm911c+OYFMiAU2OPHD5eXl3V+KlpwNBXFooMloN8iOssoWvexmGMucG/t2z/1yScLMzLS8/Pz/tj86+sTRu/YsQXxdlgd/fz8oa08c/akmTXMoMjLL42Hih9aIajRoAGdMeuNFSs/1AeABuT8+dOnTh2DnCgxihR46TgZdJuXLl6xZWvCgkVzLl26EBJSNzb2mYEDK+zjjRzxyrcb1h4/cfjneHOmsYcNfRFycfzGDadPH3d1dWsW0XL69Hl6Xyiwn362BH4MyH0So0hByjOvyBqXnHTVTx/dfvmDhsj++H5hcqNI97hR5myNkQErk+iWJYqEkdB02C2c+JALGaw3SYXhH7MQ+bAgdR8WEuSz1wVqfNG1wjOvvc526LYKiECmikxjjY6L3RZd3WYHsaWhpO4zCSU+U0TqPtNI6DWTjgseRD4sROVzoO1VYQdHBv7MhxEZEahVG8as6cJs8f01NQ+tlq0jZgRbfEDF1VNx5K/7yM64ciwfJjrCW7uYDyYu34tzQ7Nul6Zek/WBIFbn5O6cp/oEiAaTup933ewUdw9lSFM391oKjdZYFMrk6IwpH8rseI5uz7Dx5yZ9RM7guUB/bZjsI/ugTXoh3aoMVQm6c7UwO6181My67n7i04EW7CbftCI1N1Ot0Wg1aiNRqmzjNvyKhl6PBjPi8kALTjCK/cg9P9xKbkwOnVntqonrfc1cMDRSKBk3L8XzY0LcxHOeLq7MjWv37t37p59+Isa1qwkxb4wFkQ8LmVt7IrkPC1nLB80ay7IMY8F6oscMxHa2NgAAEABJREFUsRaDBZEPC2LqCQuS+7Ag8mFB5MOC1H1YkNyHBZEPCyIfFkQ+LIh8WBD5sCDyYUHkw4J0m7EguQ8LIh8WcrcW4+fnh2SMrOXTarWZmZlIxhBbRVgQ+bAg8mFB5MOCyIcFkQ8Lucun1WqRjCG5DwsiHxZylw8GXZCMIbkPCyIfFkQ+LIh8WBD5sCDyYSHHXUWTJ09OTEykHhwCQNM0y7Lw9tSpU0hmyPGEr6lTpwYHB9MPQDoFQ0NDkfyQo3wNGzbs0qWLYbGArBcdHY3kh0zPlxs1alRIyMNTW+F68ODBSH7IVL6goKCYmBjhGiq+qKgowVK03JDv6YbDhg0TrLvD69ChQ5Essbjjci9FlZdRZuRwIil7xh8No9vwbNSPQ449O43bW7a3eaNmpZl+SZkF+jBmtqEb3ZVdKX0TkSkGOTkrG7QQOfuhaizpHZd9v2RfO13Asvz302hYI99Ot3eee9Sd/7+wCVx8m/zDiwohOP2OfIMwvC1uZFyKik35j6av9zN6wzRNMQpIGNWu69R/Yh0kDanyJR0pPrQ5s22Mb+P27qjmknlLdSAh3buOQ//xtaWElyTfvl9yki8UvDCjHrIPNv/vDsNQw2eKN1aSmo6rp/Na95DpaQK2oN+EkLxMVXGOeEhx+e5eV3EsCm9Tk8vsozg504e3Z4kGE295c9NL7fAEP2gCiwvE5wnE5eN0pzkhO0Ot5tRq8bsmB9BhQeTDQsrhmxxlf+dvUrSkXomUo1/lflCTLZBybC4ihRcTIp8JpFVXUuo+ZI9Iq66k1H3IHoFxHlr8ziV1m+0RStxMFpIiHyXB7kINRJqBNYkdF2SPSLhr0vKahLOSfHb40MEj5a6lyGeHDx1SsUnhLSoq+nXTj8dPHLl5M9mnlu9TT0W/MmaCk5MT0tlyh8wcG/PMh8s+KC0tiYho8fprUwUb5IVFhd9uWHvsaGJuXk7jRhGxsc/0ebb/wkXv5ObmfLp8rZDyS2MG5+Xlbv69ws4z+BaXFH+4ZGVOzv0v/vdp0sVzZWVl7dp1enHU2JAQfpIz4beN8T9/++a0Oe9/MKt//xcmT5wh9R5oSR1e8cdiisey7Pfb7/ClNwx9YfSSxSvGj5+6b/+u775fL3gpFIqLl87v+mf72v/98Ne2REcHx6UfvS94LVs2/9LF89OmzdnwzSYQ9LMVSy9ePN+mTfvLV5KE7QmgY0ZGGlzcvXtbiHIh6WxU2w5m7HdXsfSNpMNKajrE5eN4LKv8Xhgy6qv1P3eLjm0dGfV0l+7du/U8fuKw3re0pGTmjPfqBAaBlDE9et+5c6ukpATcz50/3bVrTLuojv7+Aa+Nm7zm8w0+Pn5RbTtChkr59wYEAIHCwsIbN2oqGJdOT0/Lysps26aDGfvdVSx9S78FJK27ZpPCq1QqT5w88uFH799IviYs0PP2rqX3DQmtJ1jRBdzc+CmUwsICcGnRIvKXX3/Mz89r1bINFECQSQhTp04wCBTesDHktebNWjk7O0OuhHJ9/vxpHx/f+vUb/PDj1+btd+stfVuAtO6alGdelrZwKcf6L1dv3/4HFNt2UZ0CAmp/9fWa7X9t1vvSJpJ7e9YHUMr27P0bRHRzdRswYOiLo8dBDgVdLl48N3DA0HPnTo15+XVHR6eVqz6C8OcvnGmtk0zUfrdRm90iWG3IgKNZS6Y6oKhv/TNh8KARz/UZILgIlsJF8XD3GDXylZEjxiQlnTuYuBfyFORNqAfatu2wbt1KyJUpKTfatG7PMMy9e3fhLWTGEcNeRtaw320c6xReaDcs6fhBRV5aWurrW2HWVqVSHT5yQDRWfkH+7t07nn2mHzTQUIrh78aNq9euX0E6A9npGWm79/zdoEG4UOobN47455+/oL6LiuqIrGG/2wiclZoO/snZko4fFLfQ0Hp/7diSqssjyz5Z0KJ5JNRuxcXF5mIxCmidP1jwNmQ96IXs3Lnt+o0rEBG8PD29GoU3gaYAKj4hMFxA4x4W1hDyHTJrv7v60LrxevFQ4ljcaX537hInR6eXxwwe9WJ/uLexYyfB2wGDYtPS75mK4urquuCDj7OzMydPfXXQkF4bf/n+9fHT+j43UPCFOg4yVIsWrYW3zZq1hLetI9vpoy9dvCI6OnbBojn9B8aCsob2u6sJqxuvF0N8HuN8Yv6B37Jeer8hsifiP0ypVdthyFSRZS5kuNQENKKtM9NG2+l4H2udmTbWHsf7IMdQ1uu4IHsDcox1njo4zh6rP4qmrFP3VVissjM4lrNS3cfxk0XIzoA+s7XqPmSHcFZreaHrYpeTHVYb72PJZIcJJMlnp1NtEpAkH5lqMwWZJsdCQr+PoWhZn51sExwcGKWD+Hi1uHy1g53ssN/HsqyHt3iuEX8w8QuFH4I5v68A2Q8qpCrnegzxFQ0oaQ6tfYxP0lE7Mk/+f6tvBYW5IAlzTVJXzWfd0WxafadehFv7OD8HN1Qj0WrR+b35V07lNO/o+dTztaREsWDTwZWTJUe2ZpaVwFRaNXsynOk5O66aD4eWxzP1JSiY26SUTkx4pEe3wZK0Q6hax+BoVUhr5NMf7tU2tWu8iq/Rjd1VwgwcOPDL9et9fH2NxjL1cZSJjeOGduCrACWVsXwyvTr9PviYx2bytby80NlFUY1VAo8HYt4YCyIfFkQ+LIh8WBBrMVgQ+bAg8mFB5MNC7nbaiHzVh+Q+LIh8WBD5sCA2KrEguQ8LIh8WpPBiQXIfFkQ+LIh8WJC6DwuS+7Ag8mEB2gUEBCAZI/fcl5GRgWQMsVWEBZEPC1nLB70WYqOy+pDchwWRDwsiHxbEuDYWJPdhQeTDgsiHBZEPCyIfFkQ+LIh8WBD5sCDGtavDuHHjTpw4IZzRyR87q9tDBRdnzpxBMkOOBmYnTJgQFBQkWNZmGEa4IPZ5pdKmTZvIyEjDYgFPvq1atULyQ6bmjUePHl2nzkMrr3A9cuRIJD9kKl+TJk06deokZECWZSMiIpo2bYrkh6yNawvW3f39/UeMGIFkiXzlCwsLgwwIWa9Ro0atW7dGssTijsvhrTmXjxeoyrQaLWfyXD8ze7w51tSJvpxl50OLYuxLmPhijIJSKunA+s7PjZNkFFqPZfKd3JV3ek9ueCuvZl28HRz5PeUPbX7rbLRTj3xbpMvhwmFklO6PreyovxY2f1dy5xBLVUQ0TBBVtjWOjG1SpwzCG3pVSUfPtRN5V44VuHszg6cFIclYIN/WLzMy75S9ML0uqrlsXZeqUWlenCf1HiXXfVp092px/zdqsnZA3/FBpcXs2d2SDtlH0uXbm5CjdKIcnFGNx9PH4cqZfImBpcpXlFvOKOXbTFsRBxdUWiJ1aYPUEZfyMi20tsgOUJdy8CcxMDmADgsiHxZS5eOPvrEPqSkG0YzU7rtUSfiDl2Q97ms1OC1itaTueyxIlo/i7OX8XMqCQ+Yly8fJcVbEFkAmkX7Mt1T5KLs5fJ2TZqVIQKp8dmR1wpKcIlU+Gppz2l4E5JC16z4WmnPWLoovqfuwsEndRzGUfRruMI/UMShW+zj6Lb//8Yve2rFVmL9gtqFxVqsjryG8q1cvIatSzQQlN5JS5aOkmbw0RKPRrFu/asyrL/Tp2/XtOVOOHk0U3Hft2h4T1/7GjWvC20uXk7rHRB04uGfaW6/9vfPPnTu3wdtr168k/LZx0JBeiYf2QeDVaz6BkEeOHFy8ZN7Q4X2e6dPlremvnzl7Uv9ZBYUFH3+yECL2Hxi7aPHcjIx0cIS3aen3wL1vv25IOhSSfka/ZEks7/itWr1sU0L8gP5D43/aGt015v35s/Yf4E2yx8U927ZN++WfLkK6dVNwERvTu+vTPVZ8ur5p0+Y9e/bZu/tko/AmVcyKl5WVLV46r7y8fPbb85csXhEaWm/uvDdzcvij4OF3mj1nSvb9rE+Xr508aWZmVsbsd6aA447th8B35ox3t27eZ8H35iwwCGtJt9mSpkOlUkFWGjH85ef7DoK3zz7TLynp3Pc/fAk6wtvpb817acwgqJVADpBg5WdfPZqC3qy43mr2V+s3Ojs7e3p6wXXTJs03b9l0IeksJHj0WOLly0nffbsJNAWvkJC6v/z6IyQrhLQp0p95DeZfJZCcch0UbBfVSe8S2artXzu25Bfke3p4BgTUfmXMhPVfrtZqNHPnLnZzM3kKvqFZcciMX339+dlzp+7fzxZc8vJy+c9Kvu7i4iJoB0DOnfcOn7Xht0E2xlYDVsXFRfA6eeqrVdxzIVN4eMLFwAHDNny3TsEoWrYwtwBDb1YcqrOpb45t07r9u3OXRES0gLwZ16uj/rMcHZ2QtaAtqNIseGizqOmo5e2D+EI6NygoxNDd379iFcTG//s+MDBIrVav/3LVtKmzRRPct38XZGeo+KD8ogf5TsDFxbW0tIRlWZq2RkeCtaCcSa77tJYVXpDG0dER6SyLCy65uTnQUAjGxW/eTPnu+/WrVn6tUaunTBvbM64PZCjzCRYU5Lu7ewjaAUIrJNCkcQTUklevXW7ahC/pt2/f/HTFkskTZwYHhyIbY0HHBVkyZAD3+fJL46GtuHDhLOQauNsZs95YsfJDpFuvt2jJ3NiYZ+BuW7SIjOnRa8mH7wlLwCGrQiNw+swJ0LpKgmFh4VDlbdmaACGPHT98+vRxaBkyM/kOSlRUR4i4fv2qg4l7T5w8Cp+SlZlRt259+P38/PxPnjwKXRwbdfolP3XwT4KWPbUNG/rizBnvxW/cAN2ulas+qhMYPH36PHD/Kf7bjPS0CRPeFIJNmjgjN/f+Dz/yjW/fPgOhUps5ayK0PFVSA5VHj3oVfg+o8hIS4qdMnhUX+2z8zxs+/WyJQqH4ZNkXLMe+9/7MWW9PcnJ2XrpkpXAAzMgRr8CP8e57020kn9Qx5E2rU3PTVMPero9qOn99czc/WzVucZiUwJJbXvhx7cTYnSV3acFUEbKPqSLeLrT1B6x4K732MtosHckdF7uxUM4bdbd6t1k3UYnsAZsUXlqaqfOagC2myVlpps5rBrTk7rD0FVaUwk7spHIW2COWvsKK08j6MK4ng61GXOwEC6bJObup+6RjyWgz4RGkyqdwpBi5Goq0LnCnCgdrz7S5uDpSj8+w55NEq6EcnSU3CRLDtX/GV1ViF4ubC7LLQ8JdJQaWKp+XH/L0d9z6xV1Uozm+LQcq+a6DbGPeOGFVWmGepueoAHefGlgR7vw2PSerdNxiC4aELV6xnLAyNSu1HPqAGrUuqsFeWX4r7iNbavmDWJDBptwqAYxuxBU2Rht6CW8MvdCDkPrEH17rtxZz+rl9friNq+L7sDuhUFLwVOrh7TDqnRBkCdVc8H3leHFJoZp9uIsZPbgr4Zr/P8xa8N+Uf/7WB3jwWbp1JJyR3cqc7k4RR3PC5e+//dGrV0/d/Bw/Ykax8E+/3KHSD8Jroku/4nMqm9amaIpjBV+Ke8Tb0dmhRZQbsrxEyZ+CJrYAAAgfSURBVH29fFxc3C+//OLt7Y1kidy3xcjcZAcxb4wFkQ8Lucun1WqJfNUEtGMYWT8pEvu8WBBbRVgQ+bAg8mFBzNxhQXIfFkQ+LIh8WBD5sCBNBxYk92FB5MOCyIeF3OUjdV/1IbkPCyIfFkQ+LGia9vPzQzJG7rkvOzsbyRhiqwgLIh8WRD4siHxYEPmwIPJhQeTDgsiHBZEPCyIfFkQ+LIh8WBD5sCDyYUHkw4LIh4Uct8WMHz8+JSUF6dY25+XlOTs7syyrVqtPnjyJZIYczycYNmwYZLrc3NyCggIYry8vLwftAgMDkfyQo3zdu3dv1KiRYbGA6/DwcCQ/ZHo6xpgxY3x8fPRvYcJo+PDhSH7IVL6OHTtGRETojWs3aNCgXbt2SH7I92wWfQb09vYeMmQIkiXyla9Vq1aRkZHQhtStW7dbt25Illih43LrYsnpfbn59zVlxVr+hE6KYjWV06SqHgND0Y8cqvNIGGGDOJRciqapSnadqarBkMFWclOpVezX5pQONKOkvf2U4S3dW0Z7IDyw5Pv983tpt0pZlmMUtJOrg9LF0dGF4Q/6qywNZfwQnUo3bLjVXB8LPepoJBj/g1Vsazf7iQxDcVqkUXGq4vLyUrVGpYVQ3n4Oz46t41mrmjvnqinflrVpt68VKx0UtYI9/Rrg/oZPisKM0oyUnPJilXeA44hZlp1iIFAd+f43M5liqPpt6zi61ZAz6VKO3SstLI8ZVrtJOzeLIlomX066Kn7ZbZ9gj8CmPqhmUZhZdutcWmRX7y79Lbg1C+TLz9L88OHNpt3ry3uLLRYX/7nZ+XnfyGhPieGlypeTpv3545vN4uqhms6VA3ci2rl3HSgpD0rt9/28/N+Q5v7IDmjSNeRcYm7GTZWUwJLk+27hLWd3J49AF2QfBDTwTlhzR0pIcfkuHiksytOEtZfjeJGN8A/zYmj6j7VpoiHF5Tu0NcvDT+qBbDWGkJYBqdeLRYOJyJd6vVxVxoa0kukC46Li3Bnvdjh74R9kbVxqOdIMs/P7TPPBROY6EjdnOTjJ/awXG+Hu43LrskgGFMl9OZkqz9qWdcRrDEHNfMv552JziOQsjVrrG2ar08sKCu9v/WvFzTvnVaqyxuEdY6Nf8ferC+5pGcnLPx8xZfw3ew58l3R5v6eHf2SLuGfjJgpH4pw5v3PH7nWlpQURTZ6O7jwS2QyK4QceTu7KjYozqYC53HftZDHN0DZ6xoBZtLXfvJF88/SgvrOnT4p3c621av0r2ffvgpeC4R+lf928tHXLXh++nzhi8Pz9h346d5Gv4NIybsRvei+q9bOzpyVERfbZvG05siUwtHUvpdRMAHPypd8us52BmH9vn83Mvjl88PwmjTp5uPv07T3F1cXr4JGN+gCtmvVo1TxGoVA2qN/GxzvobuoVcDx8LMHLs3Zct1ddXDwahrXtENUf2RJGwRQXmiu/5gqvqlxju5PWb946xzDK8LAKK24URYFMKTfP6AME12mqv3Zyci8tK4SL7Jw7tQMeGmEKCYpAtgTuXqsyd1i6Ofnoh8eEWp/SsiKtVg3dDkNHN9eHtQxl7JcrKSnw9Xk4MOfg4IxsCZQ9WmGuAJqTz7WW0nYrENzdfODmXxlZqfIStZIIZVatLtO/LS8X79niAMMpDo7mvpI5+UIbuZ7clYNsQ1BgI5Wq1MsrwLdWsOByPyfVMPcZxdsr8NKVg3pzlJeuJiJbApM2Xr6OZgKYkzawPn92e3GOpLEHSwlv0K5JeKdf/1icm5deVJx36NimlWtfPn56q/lYrZrFwpPGH9uWwzjbjZRTh49tQrZEo9GGtzXX7RXp9zm5Mtm38l1r2eSh7ZVRnx458duPv8y7deeCn2/dNq16P91pqPkojcM7PNdr8pHjv818ryM0wSOHzF/z1XgbmXMoSC+Bur9uE3PVq8hw6a4fM29cKG7azeamRmXIjaP3HB250e+Yu3eRqjpulD+nZUsL7eKw/yrADFyHXiKH14sPB9QKdLx7Pj28c7BRX6jF31saZ9RLo1FBz44y1vOu7Rc26bUvkfX4+oe3/r19zqiXWl2uVBqp/h2UTu/N2oZMcOdCttKBatRW5Hlf0lzHmunJYVFBzl7GpyVzcu8ZdS8rK3JyMv7xNK3w8rTm0H9BQbZGa7yJKy4pcHUxOhNN1fI2OQZ8affN3i/WCWsp0q+UJN/+hOxLxwvtpwZMPprq4kYNnyk+cS7pmSx6kK+7J5N87B6yA9Kv52lVGinaIekzbaPeCWU1muuHUlGNJv16wf3bua8tlWTbGFm6ymDjJ3eLi1CDDjVz2ij1Yk5BRsGEjxtIj2LxGpfvF90uKdTWi6rt5FajDMZcO3iX49jxS+tbFKs6S4T2bcq+cCjPyUVZv12gwvE/v2Lj35MZxXmlgXWdBk0JQhZS/fV98R/duZ9erlAyrt5Ofg28nN3/U5lRizJu5ORnlajKNC7uin7jg3wCqzMjhru6dNtX6bevF2tULEVTCgUtmJCunKbhWkW+D81yOns6D7x4Czr8CkdDkzs6C0cUqmyHR3CsbJmHE5J85OMovZUiA3tIHG9lWKthkW4BJ/zwfkGOscMDPP2qX4Cstqso+XzJ3WulxQVqVTnLf8WK5Pk1ndoHa3V5u9WUzhyUgfEiWlio+2DZaMVDis6SkX4NLz9yqjM0hB4sXYVYgr1gRvEgfZ1Egjv/oVpOH6wiHYpydKJhEKR2qEvzztaZPpS7rSKZY6dT4NaCyIcFkQ8LIh8WRD4siHxY/D8AAAD//xmSnncAAAAGSURBVAMAvS/KmkukuWoAAAAASUVORK5CYII=", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.display import Image, display\n", "arch = AgentWorkflowMemory(llm=llm)\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": "a319d0a9", "metadata": { "papermill": { "duration": 0.004016, "end_time": "2026-05-28T03:43:03.365711+00:00", "exception": false, "start_time": "2026-05-28T03:43:03.361695+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 8 · Live run — 3 structurally-similar tasks" ] }, { "cell_type": "code", "execution_count": 3, "id": "41e6c79f", "metadata": { "execution": { "iopub.execute_input": "2026-05-28T03:43:03.376593Z", "iopub.status.busy": "2026-05-28T03:43:03.373129Z", "iopub.status.idle": "2026-05-28T03:43:19.113710Z", "shell.execute_reply": "2026-05-28T03:43:19.113710Z" }, "papermill": { "duration": 15.74259, "end_time": "2026-05-28T03:43:19.113710+00:00", "exception": false, "start_time": "2026-05-28T03:43:03.371120+00:00", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "TASK_1: Summarise this in one sentence and then categorise it (news/opinion/research): '...\n", " USED_RETRIEVED: False\n", " RETRIEVED_TYPE: ''\n", " EXTRACTED_TYPE: 'text_summarization_and_categorization'\n", " LIBRARY: 0 -> 1\n", " ANSWER: A new study suggests that octopuses may have evolved REM-like sleep states, indicating that complex dreaming is older than previously thought, and this is categorised as research.\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "TASK_2: Summarise this in one sentence and then categorise it (news/opinion/research): '...\n", " USED_RETRIEVED: True\n", " RETRIEVED_TYPE: 'text_summarization_and_categorization'\n", " EXTRACTED_TYPE: 'text_classification'\n", " LIBRARY: 1 -> 2\n", " ANSWER: The writer argues that new urban-planning rules will harm small businesses and should be reconsidered, which is an opinion.\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "TASK_3: Summarise this in one sentence and then categorise it (news/opinion/research): '...\n", " USED_RETRIEVED: True\n", " RETRIEVED_TYPE: 'text_summarization_and_categorization'\n", " EXTRACTED_TYPE: 'text_summarization_and_categorization'\n", " LIBRARY: 2 -> 3\n", " ANSWER: Congress passed the infrastructure bill 218-211, sending it to the President's desk, which is a news article.\n", "\n", "FINAL_LIBRARY_SIZE: 3\n", " - workflow `text_summarization_and_categorization`:\n", " • Read and understand the given text\n", " • Identify the main topic and key points\n", " • Summarize the text in one sentence\n", " • Determine the category of the text (news, opinion, or research)\n", " • Combine the summary and category into a single answer\n", " • Refine the answer to ensure clarity and coherence\n", " - workflow `text_classification`:\n", " • Read the text carefully\n", " • Identify the main claim or argument\n", " • Determine the tone and language used\n", " • Categorise the text as news, opinion, or research\n", " • Consider the context and potential implications\n", " • Make a final classification\n", " - workflow `text_summarization_and_categorization`:\n", " • Read the given text carefully\n", " • Identify the main event or topic\n", " • Determine the category of the text\n", " • Summarize the text in one sentence\n", " • Combine the summary and category into a single statement\n", " • Output the final statement\n" ] } ], "source": [ "TASKS = [\n", " \"Summarise this in one sentence and then categorise it (news/opinion/research): 'A new study shows that octopuses may have evolved REM-like sleep states, suggesting that complex dreaming is older than previously thought.'\",\n", " \"Summarise this in one sentence and then categorise it (news/opinion/research): 'In my view, the new urban-planning rules will choke small businesses; the city council needs to reconsider before the December deadline.'\",\n", " \"Summarise this in one sentence and then categorise it (news/opinion/research): 'After fierce debate, Congress passed the infrastructure bill 218-211 on Tuesday, sending it to the President's desk.'\",\n", "]\n", "\n", "for tag_idx, q in enumerate(TASKS, 1):\n", " r = arch.run(q)\n", " print(f\"TASK_{tag_idx}: {q[:80]}...\")\n", " print(f\" USED_RETRIEVED: {r.metadata['used_retrieved_workflow']}\")\n", " print(f\" RETRIEVED_TYPE: {r.metadata['retrieved_workflow_type']!r}\")\n", " print(f\" EXTRACTED_TYPE: {r.metadata['extracted_workflow_type']!r}\")\n", " print(f\" LIBRARY: {r.metadata['library_size_before']} -> {r.metadata['library_size_after']}\")\n", " print(f\" ANSWER: {r.output[:200]}\")\n", " print()\n", "print(f\"FINAL_LIBRARY_SIZE: {len(arch.workflows)}\")\n", "for w in arch.workflows:\n", " print(f\" - workflow `{w['task_type']}`:\")\n", " for s in w['steps']: print(f\" • {s}\")" ] }, { "cell_type": "markdown", "id": "04cda1f6", "metadata": { "papermill": { "duration": 0.007046, "end_time": "2026-05-28T03:43:19.132130+00:00", "exception": false, "start_time": "2026-05-28T03:43:19.125084+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 9 · What we just observed\n", "\n", "3 sequential summarise-and-categorise tasks. Task 1 extracts a workflow; tasks 2 and 3 should retrieve and follow it.\n", "\n", "### 9.1 · Per-task workflow usage\n", "\n", "| # | Used retrieved? | Retrieved type | Extracted type | Library | Answer |\n", "|---|---|---|---|---|---|\n", "| 1 | ❌ | `—` | `text_summarization_and_categorization` | 0→1 | A new study suggests that octopuses may have evolved REM-like sleep states, indi |\n", "| 2 | ✅ | `text_summarization_and_categorization` | `text_classification` | 1→2 | The writer argues that new urban-planning rules will harm small businesses and s |\n", "| 3 | ✅ | `text_summarization_and_categorization` | `text_summarization_and_categorization` | 2→3 | Congress passed the infrastructure bill 218-211, sending it to the President's d |\n", "\n", "### 9.2 · The workflow library that built up\n", "\n", "**`text_summarization_and_categorization`**\n", " - Read and understand the given text\n", " - Identify the main topic and key points\n", " - Summarize the text in one sentence\n", " - Determine the category of the text (news, opinion, or research)\n", " - Combine the summary and category into a single answer\n", " - Refine the answer to ensure clarity and coherence\n", "\n", "**`text_classification`**\n", " - Read the text carefully\n", " - Identify the main claim or argument\n", " - Determine the tone and language used\n", " - Categorise the text as news, opinion, or research\n", " - Consider the context and potential implications\n", " - Make a final classification\n", "\n", "**`text_summarization_and_categorization`**\n", " - Read the given text carefully\n", " - Identify the main event or topic\n", " - Determine the category of the text\n", " - Summarize the text in one sentence\n", " - Combine the summary and category into a single statement\n", " - Output the final statement\n", "\n", "### 9.3 · Patterns surfaced\n", "\n", "- **✅ Task 2 reused task 1's workflow** (`text_summarization_and_categorization`). Memory pipeline alive.\n", "\n", "- **✅ Task 3 reused a workflow** (`text_summarization_and_categorization`).\n", "\n", "- **Final library size**: 3 workflow(s) extracted across 3 task(s).\n", "\n", "### 9.4 · The takeaway\n", "\n", "AWM's value is in the **`Used retrieved?`** column of § 9.1. The first task always extracts (no library yet); subsequent structurally-similar tasks should *retrieve and use* the prior workflow. If the column reads `✅, ❌, ❌` across 3 similar tasks, vector retrieval is broken; if `✅, ✅, ✅` it's working — the library is amortising strategy cost across calls." ] }, { "cell_type": "markdown", "id": "d3f8b01a", "metadata": { "papermill": { "duration": 0.006685, "end_time": "2026-05-28T03:43:19.144842+00:00", "exception": false, "start_time": "2026-05-28T03:43:19.138157+00:00", "status": "completed" }, "tags": [] }, "source": [ "## 11 · Failure modes & extensions\n", "\n", "| Failure | Mitigation |\n", "|---|---|\n", "| **Workflow too specific** | Steps reference task-1 entities; tasks 2-3 don't fit | Strict prompt rule in extraction: \"no specific entity names\" |\n", "| **Workflow library bloat** | N tasks → N near-duplicate workflows | Cosine-dedup on workflow descriptions |\n", "| **Retrieved workflow misfires** | Wrong workflow retrieved; answer follows bad recipe | Add post-answer verification step |\n", "\n", "Extensions: (1) Combine with Voyager skills (workflow specifies which skills to call), (2) hierarchical workflows (workflow contains sub-workflows), (3) workflow scoring by usefulness across tasks.\n", "\n", "Reference: Wang et al., *AWM*. 2024. [arXiv:2409.07429](https://arxiv.org/abs/2409.07429)" ] } ], "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": 24.66297, "end_time": "2026-05-28T03:43:20.248675+00:00", "environment_variables": {}, "exception": null, "input_path": "all-agentic-architectures/notebooks/35_agent_workflow_memory.ipynb", "output_path": "all-agentic-architectures/notebooks/35_agent_workflow_memory.ipynb", "parameters": {}, "start_time": "2026-05-28T03:42:55.585705+00:00", "version": "2.7.0" } }, "nbformat": 4, "nbformat_minor": 5 }