[Docs] Update stream_tokens to clarify how in older versions of python (#587)

This commit is contained in:
William FH
2024-06-04 10:02:14 -07:00
committed by GitHub
parent 5a3fbfe82d
commit 52945478ef
+26 -4
View File
@@ -16,6 +16,14 @@
" <p>\n",
" In this how-to, we will create our agent from scratch to be transparent (but verbose). You can accomplish similar functionality using the <code>create_react_agent(model, tools=tool)</code> (<a href=\"https://langchain-ai.github.io/langgraph/reference/prebuilt/#create_react_agent\">API doc</a>) constructor. This may be more appropriate if you are used to LangChains <a href=\"https://python.langchain.com/v0.1/docs/modules/agents/concepts/#agentexecutor\">AgentExecutor</a> class.\n",
" </p>\n",
"</div> \n",
"\n",
"<div class=\"admonition warning\">\n",
" <p class=\"admonition-title\">Note on Python < 3.11</p>\n",
" <p>\n",
" When using python 3.8, 3.9, or 3.10, please ensure you manually pass the RunnableConfig through to the llm when invoking it like so: <code>llm.ainvoke(..., config)</code>.\n",
" The <a href=\"https://api.python.langchain.com/en/latest/runnables/langchain_core.runnables.base.Runnable.html#langchain_core.runnables.base.Runnable.astream_events\">astream_events</a> method collects all events from your nested code using a streaming tracer passed as a callback. In 3.11 and above, this is automatically handled via <a href=\"https://docs.python.org/3/library/contextvars.html\">contextvar</a>'s; prior to 3.11, <a href=\"https://docs.python.org/3/library/asyncio-task.html#asyncio.create_task\">asyncio's tasks</a> lacked proper contextvar support, meaning that the callbacks will only propagate if you manually pass the config through. We do this in the <code>call_model</code> method below.\n",
" </p>\n",
"</div> "
]
},
@@ -264,7 +272,13 @@
"\n",
"**STREAMING**\n",
"\n",
"We define each node as an async function."
"We define each node as an async function.\n",
"\n",
"<div class=\"admonition note\">\n",
" <p class=\"admonition-title\">Manual Callback Propagation</p>\n",
" <p>\n",
" Note that in <code>call_model(state: State, config: RunnableConfig):</code> below, we a) accept the <a href=\"https://api.python.langchain.com/en/latest/runnables/langchain_core.runnables.config.RunnableConfig.html#langchain_core.runnables.config.RunnableConfig\">RunnableConfig</a> in the node and b) pass this in as the second arg for <code>llm.ainvoke(..., config)</code>. This is optional for python 3.11 and later. If you ever have a problem where the LLM tokens are not streamed when using `astream_events` and you are using an older version of python, it's worth checking to ensure that the callbacks are manually propagated.</p>\n",
"</div> "
]
},
{
@@ -274,6 +288,9 @@
"metadata": {},
"outputs": [],
"source": [
"from langchain_core.runnables import RunnableConfig\n",
"\n",
"\n",
"# Define the function that determines whether to continue or not\n",
"def should_continue(state: State):\n",
" messages = state[\"messages\"]\n",
@@ -287,9 +304,12 @@
"\n",
"\n",
"# Define the function that calls the model\n",
"async def call_model(state: State):\n",
"async def call_model(state: State, config: RunnableConfig):\n",
" messages = state[\"messages\"]\n",
" response = await model.ainvoke(messages)\n",
" # Note: Passing the config through explicitly is required for python < 3.11\n",
" # Since context var support wasn't added before then: https://docs.python.org/3/library/asyncio-task.html#creating-tasks\n",
" # (1)\n",
" response = await model.ainvoke(messages, config)\n",
" # We return a list, because this will get added to the existing list\n",
" return {\"messages\": response}"
]
@@ -299,6 +319,8 @@
"id": "ffd6e892-946c-4899-8cc0-7c9291c1f73b",
"metadata": {},
"source": [
"1. :man_raising_hand: I'm a code annotation! I can contain `code`, __formatted\n",
" text__, images, ... basically anything that can be written in Markdown.\n",
"## Define the graph\n",
"\n",
"We can now put it all together and define the graph!"
@@ -459,7 +481,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.2"
"version": "3.10.11"
}
},
"nbformat": 4,