diff --git a/docs/docs/how-tos/subgraphs-manage-state.ipynb b/docs/docs/how-tos/subgraphs-manage-state.ipynb index 464066d4a..125fd53fb 100644 --- a/docs/docs/how-tos/subgraphs-manage-state.ipynb +++ b/docs/docs/how-tos/subgraphs-manage-state.ipynb @@ -75,7 +75,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -126,7 +126,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -178,12 +178,12 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 3, "metadata": {}, "outputs": [ { "data": { - "image/jpeg": "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", + "image/jpeg": "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", "text/plain": [ "" ] @@ -208,7 +208,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -216,7 +216,7 @@ "output_type": "stream", "text": [ "{'router_node': {'route': 'other'}}\n", - "{'normal_llm_node': {'messages': [AIMessage(content='Hello! How can I assist you today?', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 9, 'prompt_tokens': 9, 'total_tokens': 18}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-9730e690-8cbd-4ba0-a962-3f8a4e848ef9-0', usage_metadata={'input_tokens': 9, 'output_tokens': 9, 'total_tokens': 18})]}}\n" + "{'normal_llm_node': {'messages': [AIMessage(content='Hello! How can I assist you today?', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 9, 'prompt_tokens': 9, 'total_tokens': 18, 'completion_tokens_details': {'reasoning_tokens': 0}}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-6405070a-cf4c-4a6a-a1d6-7b444edbb64f-0', usage_metadata={'input_tokens': 9, 'output_tokens': 9, 'total_tokens': 18})]}}\n" ] } ], @@ -240,7 +240,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -267,17 +267,17 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "((), {'messages': [HumanMessage(content=\"what's the weather in sf\", id='ad42a2dc-57c5-4aae-b616-6a86ca6ee7bd')]})\n", - "((), {'messages': [HumanMessage(content=\"what's the weather in sf\", id='ad42a2dc-57c5-4aae-b616-6a86ca6ee7bd')], 'route': 'weather'})\n", - "(('weather_graph:99f49d5c-9d1a-5e00-b2fc-1f1ade30dec3',), {'messages': [HumanMessage(content=\"what's the weather in sf\", id='ad42a2dc-57c5-4aae-b616-6a86ca6ee7bd')]})\n", - "(('weather_graph:99f49d5c-9d1a-5e00-b2fc-1f1ade30dec3',), {'messages': [HumanMessage(content=\"what's the weather in sf\", id='ad42a2dc-57c5-4aae-b616-6a86ca6ee7bd')], 'city': 'San Francisco'})\n" + "((), {'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='108eb27a-2cbf-48d2-a6e7-6e07e82eafbc')]})\n", + "((), {'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='108eb27a-2cbf-48d2-a6e7-6e07e82eafbc')], 'route': 'weather'})\n", + "(('weather_graph:0c47aeb3-6f4d-5e68-ccf4-42bd48e8ef20',), {'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='108eb27a-2cbf-48d2-a6e7-6e07e82eafbc')]})\n", + "(('weather_graph:0c47aeb3-6f4d-5e68-ccf4-42bd48e8ef20',), {'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='108eb27a-2cbf-48d2-a6e7-6e07e82eafbc')], 'city': 'San Francisco'})\n" ] } ], @@ -297,7 +297,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -306,7 +306,7 @@ "('weather_graph',)" ] }, - "execution_count": 36, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -325,16 +325,16 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(PregelTask(id='99f49d5c-9d1a-5e00-b2fc-1f1ade30dec3', name='weather_graph', error=None, interrupts=(), state={'configurable': {'thread_id': '3', 'checkpoint_ns': 'weather_graph:99f49d5c-9d1a-5e00-b2fc-1f1ade30dec3'}}),)" + "(PregelTask(id='0c47aeb3-6f4d-5e68-ccf4-42bd48e8ef20', name='weather_graph', path=('__pregel_pull', 'weather_graph'), error=None, interrupts=(), state={'configurable': {'thread_id': '3', 'checkpoint_ns': 'weather_graph:0c47aeb3-6f4d-5e68-ccf4-42bd48e8ef20'}}),)" ] }, - "execution_count": 37, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -352,16 +352,16 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "PregelTask(id='99f49d5c-9d1a-5e00-b2fc-1f1ade30dec3', name='weather_graph', error=None, interrupts=(), state=StateSnapshot(values={'messages': [HumanMessage(content=\"what's the weather in sf\", id='ad42a2dc-57c5-4aae-b616-6a86ca6ee7bd')], 'city': 'San Francisco'}, next=('weather_node',), config={'configurable': {'thread_id': '3', 'checkpoint_ns': 'weather_graph:99f49d5c-9d1a-5e00-b2fc-1f1ade30dec3', 'checkpoint_id': '1ef6a48a-018f-638c-8001-a7af39dcd6ee', 'checkpoint_map': {'': '1ef6a489-fddc-6208-8001-5e02ff54dfba', 'weather_graph:99f49d5c-9d1a-5e00-b2fc-1f1ade30dec3': '1ef6a48a-018f-638c-8001-a7af39dcd6ee'}}}, metadata={'source': 'loop', 'writes': {'model_node': {'city': 'San Francisco'}}, 'step': 1, 'parents': {'': '1ef6a489-fddc-6208-8001-5e02ff54dfba'}}, created_at='2024-09-03T23:02:42.795391+00:00', parent_config={'configurable': {'thread_id': '3', 'checkpoint_ns': 'weather_graph:99f49d5c-9d1a-5e00-b2fc-1f1ade30dec3', 'checkpoint_id': '1ef6a489-fded-6936-8000-c96152586915'}}, tasks=(PregelTask(id='c153ac13-b9a5-543a-8044-3b3c852fd0bc', name='weather_node', error=None, interrupts=(), state=None),)))" + "PregelTask(id='0c47aeb3-6f4d-5e68-ccf4-42bd48e8ef20', name='weather_graph', path=('__pregel_pull', 'weather_graph'), error=None, interrupts=(), state=StateSnapshot(values={'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='108eb27a-2cbf-48d2-a6e7-6e07e82eafbc')], 'city': 'San Francisco'}, next=('weather_node',), config={'configurable': {'thread_id': '3', 'checkpoint_ns': 'weather_graph:0c47aeb3-6f4d-5e68-ccf4-42bd48e8ef20', 'checkpoint_id': '1ef75ee0-d9c3-6242-8001-440e7a3fb19f', 'checkpoint_map': {'': '1ef75ee0-d4e8-6ede-8001-2542067239ef', 'weather_graph:0c47aeb3-6f4d-5e68-ccf4-42bd48e8ef20': '1ef75ee0-d9c3-6242-8001-440e7a3fb19f'}}}, metadata={'source': 'loop', 'writes': {'model_node': {'city': 'San Francisco'}}, 'step': 1, 'parents': {'': '1ef75ee0-d4e8-6ede-8001-2542067239ef'}}, created_at='2024-09-18T18:44:36.278105+00:00', parent_config={'configurable': {'thread_id': '3', 'checkpoint_ns': 'weather_graph:0c47aeb3-6f4d-5e68-ccf4-42bd48e8ef20', 'checkpoint_id': '1ef75ee0-d4ef-6dec-8000-5d5724f3ef73'}}, tasks=(PregelTask(id='26f4384a-41d7-5ca9-cb94-4001de62e8aa', name='weather_node', path=('__pregel_pull', 'weather_node'), error=None, interrupts=(), state=None),)))" ] }, - "execution_count": 39, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -382,22 +382,120 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "{'weather_graph': {'messages': [HumanMessage(content=\"what's the weather in sf\", id='ad42a2dc-57c5-4aae-b616-6a86ca6ee7bd'), AIMessage(content=\"It's sunny in San Francisco!\", id='07b513fa-30af-4ee4-83e4-2af8f6d133bd')]}}\n" + "((), {'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='108eb27a-2cbf-48d2-a6e7-6e07e82eafbc')], 'route': 'weather'})\n", + "(('weather_graph:0c47aeb3-6f4d-5e68-ccf4-42bd48e8ef20',), {'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='108eb27a-2cbf-48d2-a6e7-6e07e82eafbc')], 'city': 'San Francisco'})\n", + "(('weather_graph:0c47aeb3-6f4d-5e68-ccf4-42bd48e8ef20',), {'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='108eb27a-2cbf-48d2-a6e7-6e07e82eafbc'), AIMessage(content=\"It's sunny in San Francisco!\", additional_kwargs={}, response_metadata={}, id='c996ce37-438c-44f4-9e60-5aed8bcdae8a')], 'city': 'San Francisco'})\n", + "((), {'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='108eb27a-2cbf-48d2-a6e7-6e07e82eafbc'), AIMessage(content=\"It's sunny in San Francisco!\", additional_kwargs={}, response_metadata={}, id='c996ce37-438c-44f4-9e60-5aed8bcdae8a')], 'route': 'weather'})\n" ] } ], "source": [ - "for update in graph.stream(None, config=config, stream_mode=\"updates\"):\n", + "for update in graph.stream(None, config=config, stream_mode=\"values\", subgraphs=True):\n", " print(update)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Resuming from specific subgraph node\n", + "\n", + "In the example above, we were replaying from the outer graph - which automatically replayed the subgraph from whatever state it was in previously (paused before the `weather_node` in our case), but it is also possible to replay from inside a subgraph. In order to do so, we need to get the configuration from the exact subgraph state that we want to replay from.\n", + "\n", + "We can do this by exploring the state history of the subgraph, and selecting the state before `model_node` - which we can do by filtering on the `.next` parameter.\n", + "\n", + "To get the state history of the subgraph, we need to first pass in " + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "parent_graph_state_before_subgraph = next(h for h in graph.get_state_history(config) if h.next == ('weather_graph',))" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "subgraph_state_before_model_node = next(h for h in graph.get_state_history(parent_graph_state_before_subgraph.tasks[0].state) if h.next == ('model_node',))\n", + "\n", + "# This pattern can be extended no matter how many levels deep - image model node was another subgraph in this case\n", + "# subsubgraph_stat_history = next(h for h in graph.get_state_history(subgraph_state_before_model_node.tasks[0].state) if h.next == ('my_subsubgraph_node',))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can confirm that we have gotten the correct state by comparing the `.next` parameter of the `subgraph_state_before_model_node`." + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "('model_node',)" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "subgraph_state_before_model_node.next" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Perfect! We have gotten the correct state snaphshot, and we can now resume from the `model_node` inside of our subgraph:" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "((), {'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='108eb27a-2cbf-48d2-a6e7-6e07e82eafbc')], 'route': 'weather'})\n", + "(('weather_graph:0c47aeb3-6f4d-5e68-ccf4-42bd48e8ef20',), {'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='108eb27a-2cbf-48d2-a6e7-6e07e82eafbc')]})\n", + "(('weather_graph:0c47aeb3-6f4d-5e68-ccf4-42bd48e8ef20',), {'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='108eb27a-2cbf-48d2-a6e7-6e07e82eafbc')], 'city': 'San Francisco'})\n" + ] + } + ], + "source": [ + "for value in graph.stream(None, config=subgraph_state_before_model_node.config, stream_mode=\"values\", subgraphs=True):\n", + " print(value)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Great, this subsection has shown how you can replay from any node, no matter how deeply nested it is inside your graph - a powerful tool for testing how deterministic your agent is." + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -411,7 +509,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -431,16 +529,16 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[HumanMessage(content=\"what's the weather in sf\", id='35e331c6-eb47-483c-a63c-585877b12f5d')]" + "[HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='05ee2159-3b25-4d6c-97d6-82beda3cabd4')]" ] }, - "execution_count": 18, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -459,20 +557,20 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'configurable': {'thread_id': '4',\n", - " 'checkpoint_ns': 'weather_graph:9e512e8e-bac5-5412-babe-fe5c12a47cc2',\n", - " 'checkpoint_id': '1ef6a424-2bb2-6ee0-8002-6a6ca5dbc91f',\n", - " 'checkpoint_map': {'': '1ef6a40d-0fca-671c-8001-3064b486db01',\n", - " 'weather_graph:9e512e8e-bac5-5412-babe-fe5c12a47cc2': '1ef6a424-2bb2-6ee0-8002-6a6ca5dbc91f'}}}" + " 'checkpoint_ns': 'weather_graph:67f32ef7-aee0-8a20-0eb0-eeea0fd6de6e',\n", + " 'checkpoint_id': '1ef75e5a-0b00-6bc0-8002-5726e210fef4',\n", + " 'checkpoint_map': {'': '1ef75e59-1b13-6ffe-8001-0844ae748fd5',\n", + " 'weather_graph:67f32ef7-aee0-8a20-0eb0-eeea0fd6de6e': '1ef75e5a-0b00-6bc0-8002-5726e210fef4'}}}" ] }, - "execution_count": 19, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -520,7 +618,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 56, "metadata": {}, "outputs": [ { @@ -528,14 +626,17 @@ "output_type": "stream", "text": [ "((), {'router_node': {'route': 'weather'}})\n", - "(('weather_graph:bdb185a9-ff74-58dd-ae72-34e8665a33d7',), {'model_node': {'city': 'San Francisco'}})\n", + "HERE\n", + "(('weather_graph:ec34ba77-edd8-bbf1-f3f1-01498cf0c575',), {'model_node': {'city': 'San Francisco'}})\n", "interrupted!\n", - "((), {'weather_graph': {'messages': [HumanMessage(content=\"what's the weather in sf\", id='5d721f30-278e-460f-a83c-fdb101731f3e'), AIMessage(content='rainy', id='43b30e0d-6ea0-4e9c-92de-3e411e6fa21d')]}})\n", - "[HumanMessage(content=\"what's the weather in sf\", id='5d721f30-278e-460f-a83c-fdb101731f3e'), AIMessage(content='rainy', id='43b30e0d-6ea0-4e9c-92de-3e411e6fa21d')]\n" + "(('weather_graph:ec34ba77-edd8-bbf1-f3f1-01498cf0c575',), {'weather_node': {'messages': [{'role': 'assistant', 'content': \"It's sunny in San Francisco!\"}]}})\n", + "((), {'weather_graph': {'messages': [HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='c94dd545-308d-4032-832a-57aab1abb6b1'), AIMessage(content=\"It's sunny in San Francisco!\", additional_kwargs={}, response_metadata={}, id='9d004035-5ffe-4b44-addc-4f0d61255f16')]}})\n", + "[HumanMessage(content=\"what's the weather in sf\", additional_kwargs={}, response_metadata={}, id='c94dd545-308d-4032-832a-57aab1abb6b1'), AIMessage(content=\"It's sunny in San Francisco!\", additional_kwargs={}, response_metadata={}, id='9d004035-5ffe-4b44-addc-4f0d61255f16')]\n" ] } ], "source": [ + "graph = \n", "config = {\"configurable\": {\"thread_id\": \"14\"}}\n", "inputs = {\"messages\": [{\"role\": \"user\", \"content\": \"what's the weather in sf\"}]}\n", "for update in graph.stream(inputs, config=config, stream_mode=\"updates\", subgraphs=True):\n", @@ -544,7 +645,7 @@ "print(\"interrupted!\")\n", "state = graph.get_state(config, subgraphs=True)\n", "# We update the state by passing in the message we want returned from the weather node, and make sure to use as_node\n", - "graph.update_state(state.tasks[0].state.config, {\"messages\": [{\"role\": \"assistant\", \"content\": \"rainy\"}]}, as_node=\"weather_node\")\n", + "#graph.update_state(state.tasks[0].state.config, {\"messages\": [{\"role\": \"assistant\", \"content\": \"rainy\"}]}, as_node=\"weather_node\")\n", "for update in graph.stream(None, config=config, stream_mode=\"updates\", subgraphs=True):\n", " print(update)\n", "print(graph.get_state(config).values['messages'])"