From 4cade428d863dd6c83b3e36f15111029c5fdbb56 Mon Sep 17 00:00:00 2001 From: Sydney Runkle <54324534+sydney-runkle@users.noreply.github.com> Date: Thu, 22 May 2025 12:23:43 -0400 Subject: [PATCH] docs: adding interactive graph widget (#4785) --- .../agents/assets/react_agent_graphs/0000.svg | 1 + .../agents/assets/react_agent_graphs/0001.svg | 1 + .../agents/assets/react_agent_graphs/0010.svg | 1 + .../agents/assets/react_agent_graphs/0011.svg | 1 + .../agents/assets/react_agent_graphs/0100.svg | 1 + .../agents/assets/react_agent_graphs/0101.svg | 1 + .../agents/assets/react_agent_graphs/0110.svg | 1 + .../agents/assets/react_agent_graphs/0111.svg | 1 + .../agents/assets/react_agent_graphs/1000.svg | 1 + .../agents/assets/react_agent_graphs/1001.svg | 1 + .../agents/assets/react_agent_graphs/1010.svg | 1 + .../agents/assets/react_agent_graphs/1011.svg | 1 + .../agents/assets/react_agent_graphs/1100.svg | 1 + .../agents/assets/react_agent_graphs/1101.svg | 1 + .../agents/assets/react_agent_graphs/1110.svg | 1 + .../agents/assets/react_agent_graphs/1111.svg | 1 + docs/docs/agents/overview.md | 136 ++++++++++++++++++ docs/docs/assets/react-agent-graphs.json | 19 +++ docs/docs/stylesheets/agent_graph_widget.css | 57 ++++++++ docs/mkdocs.yml | 2 + docs/uv.lock | 3 +- 21 files changed, 232 insertions(+), 1 deletion(-) create mode 100644 docs/docs/agents/assets/react_agent_graphs/0000.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/0001.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/0010.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/0011.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/0100.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/0101.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/0110.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/0111.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/1000.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/1001.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/1010.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/1011.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/1100.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/1101.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/1110.svg create mode 100644 docs/docs/agents/assets/react_agent_graphs/1111.svg create mode 100644 docs/docs/assets/react-agent-graphs.json create mode 100644 docs/docs/stylesheets/agent_graph_widget.css diff --git a/docs/docs/agents/assets/react_agent_graphs/0000.svg b/docs/docs/agents/assets/react_agent_graphs/0000.svg new file mode 100644 index 000000000..864b0d461 --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/0000.svg @@ -0,0 +1 @@ +

__start__

agent

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/0001.svg b/docs/docs/agents/assets/react_agent_graphs/0001.svg new file mode 100644 index 000000000..2643171df --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/0001.svg @@ -0,0 +1 @@ +

__start__

agent

tools

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/0010.svg b/docs/docs/agents/assets/react_agent_graphs/0010.svg new file mode 100644 index 000000000..c63d3a28e --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/0010.svg @@ -0,0 +1 @@ +

__start__

agent

pre_model_hook

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/0011.svg b/docs/docs/agents/assets/react_agent_graphs/0011.svg new file mode 100644 index 000000000..00618e1bb --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/0011.svg @@ -0,0 +1 @@ +

__start__

agent

tools

pre_model_hook

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/0100.svg b/docs/docs/agents/assets/react_agent_graphs/0100.svg new file mode 100644 index 000000000..2d99f88a5 --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/0100.svg @@ -0,0 +1 @@ +

__start__

agent

post_model_hook

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/0101.svg b/docs/docs/agents/assets/react_agent_graphs/0101.svg new file mode 100644 index 000000000..605b5eaee --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/0101.svg @@ -0,0 +1 @@ +

__start__

agent

tools

post_model_hook

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/0110.svg b/docs/docs/agents/assets/react_agent_graphs/0110.svg new file mode 100644 index 000000000..bf6e988e7 --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/0110.svg @@ -0,0 +1 @@ +

__start__

agent

pre_model_hook

post_model_hook

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/0111.svg b/docs/docs/agents/assets/react_agent_graphs/0111.svg new file mode 100644 index 000000000..eb4af67ec --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/0111.svg @@ -0,0 +1 @@ +

__start__

agent

tools

pre_model_hook

post_model_hook

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/1000.svg b/docs/docs/agents/assets/react_agent_graphs/1000.svg new file mode 100644 index 000000000..2d72d4bc7 --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/1000.svg @@ -0,0 +1 @@ +

__start__

agent

generate_structured_response

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/1001.svg b/docs/docs/agents/assets/react_agent_graphs/1001.svg new file mode 100644 index 000000000..f416f3466 --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/1001.svg @@ -0,0 +1 @@ +

__start__

agent

tools

generate_structured_response

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/1010.svg b/docs/docs/agents/assets/react_agent_graphs/1010.svg new file mode 100644 index 000000000..9308976c6 --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/1010.svg @@ -0,0 +1 @@ +

__start__

agent

pre_model_hook

generate_structured_response

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/1011.svg b/docs/docs/agents/assets/react_agent_graphs/1011.svg new file mode 100644 index 000000000..21fe20c19 --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/1011.svg @@ -0,0 +1 @@ +

__start__

agent

tools

pre_model_hook

generate_structured_response

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/1100.svg b/docs/docs/agents/assets/react_agent_graphs/1100.svg new file mode 100644 index 000000000..f36fd09aa --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/1100.svg @@ -0,0 +1 @@ +

__start__

agent

post_model_hook

generate_structured_response

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/1101.svg b/docs/docs/agents/assets/react_agent_graphs/1101.svg new file mode 100644 index 000000000..7af4855ed --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/1101.svg @@ -0,0 +1 @@ +

__start__

agent

tools

post_model_hook

generate_structured_response

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/1110.svg b/docs/docs/agents/assets/react_agent_graphs/1110.svg new file mode 100644 index 000000000..fea6c4e77 --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/1110.svg @@ -0,0 +1 @@ +

__start__

agent

pre_model_hook

post_model_hook

generate_structured_response

__end__

\ No newline at end of file diff --git a/docs/docs/agents/assets/react_agent_graphs/1111.svg b/docs/docs/agents/assets/react_agent_graphs/1111.svg new file mode 100644 index 000000000..ec9a02cd9 --- /dev/null +++ b/docs/docs/agents/assets/react_agent_graphs/1111.svg @@ -0,0 +1 @@ +

__start__

agent

tools

pre_model_hook

post_model_hook

generate_structured_response

__end__

\ No newline at end of file diff --git a/docs/docs/agents/overview.md b/docs/docs/agents/overview.md index 22f39ccb9..b8ffb6cf2 100644 --- a/docs/docs/agents/overview.md +++ b/docs/docs/agents/overview.md @@ -53,3 +53,139 @@ The high-level components are organized into several packages, each with a speci | `langmem` | Agent memory management: [**short-term and long-term**](./memory.md) | `pip install -U langmem` | | `agentevals` | Utilities to [**evaluate agent performance**](./evals.md) | `pip install -U agentevals` | +## Visualize an agent graph + +Use the following tool to visualize the graph generated by +[`create_react_agent`][langgraph.prebuilt.chat_agent_executor.create_react_agent] +and to view an outline of the corresponding code. +It allows you to explore the infrastructure of the agent as defined by the presence of: + +* [`tools`](../agents/tools.md): A list of tools (functions, APIs, or other callable objects) that the agent can use to perform tasks. +* [`pre_model_hook`](../how-tos/create-react-agent-manage-message-history.ipynb): A function that is called before the model is invoked. It can be used to condense messages or perform other preprocessing tasks. +* `post_model_hook`: A function that is called after the model is invoked. It can be used to implement guardrails, human-in-the-loop flows, or other postprocessing tasks. +* [`response_format`](../agents/agents.md#6-configure-structured-output): A data structure used to constrain the type of the final output, e.g., a `pydantic` `BaseModel`. + +
+
+
+

Features

+ + + + +
+
+ +
+

Graph

+ graph image +
+
+ + +The following code snippet shows how to create the above agent (and underlying graph) with +[`create_react_agent`][langgraph.prebuilt.chat_agent_executor.create_react_agent]: + +
+
+
+ + + diff --git a/docs/docs/assets/react-agent-graphs.json b/docs/docs/assets/react-agent-graphs.json new file mode 100644 index 000000000..7a599af97 --- /dev/null +++ b/docs/docs/assets/react-agent-graphs.json @@ -0,0 +1,19 @@ +{ + "0000": "graph TD;\n\t__start__ --> agent;\n\tagent --> __end__;", + "0001": "graph TD;\n\t__start__ --> agent;\n\tagent -.-> __end__;\n\tagent -.-> tools;\n\ttools --> agent;", + "0010": "graph TD;\n\t__start__ --> pre_model_hook;\n\tpre_model_hook --> agent;\n\tagent --> __end__;", + "0011": "graph TD;\n\t__start__ --> pre_model_hook;\n\tagent -.-> __end__;\n\tagent -.-> tools;\n\tpre_model_hook --> agent;\n\ttools --> pre_model_hook;", + "0100": "graph TD;\n\t__start__ --> agent;\n\tagent --> post_model_hook;\n\tpost_model_hook --> __end__;", + "0101": "graph TD;\n\t__start__ --> agent;\n\tagent --> post_model_hook;\n\tpost_model_hook -.-> __end__;\n\tpost_model_hook -.-> agent;\n\tpost_model_hook -.-> tools;\n\ttools --> agent;", + "0110": "graph TD;\n\t__start__ --> pre_model_hook;\n\tagent --> post_model_hook;\n\tpre_model_hook --> agent;\n\tpost_model_hook --> __end__;", + "0111": "graph TD;\n\t__start__ --> pre_model_hook;\n\tagent --> post_model_hook;\n\tpost_model_hook -.-> __end__;\n\tpost_model_hook -.-> pre_model_hook;\n\tpost_model_hook -.-> tools;\n\tpre_model_hook --> agent;\n\ttools --> pre_model_hook;", + "1000": "graph TD;\n\t__start__ --> agent;\n\tagent --> generate_structured_response;\n\tgenerate_structured_response --> __end__;", + "1001": "graph TD;\n\t__start__ --> agent;\n\tagent -.-> generate_structured_response;\n\tagent -.-> tools;\n\ttools --> agent;\n\tgenerate_structured_response --> __end__;", + "1010": "graph TD;\n\t__start__ --> pre_model_hook;\n\tagent --> generate_structured_response;\n\tpre_model_hook --> agent;\n\tgenerate_structured_response --> __end__;", + "1011": "graph TD;\n\t__start__ --> pre_model_hook;\n\tagent -.-> generate_structured_response;\n\tagent -.-> tools;\n\tpre_model_hook --> agent;\n\ttools --> pre_model_hook;\n\tgenerate_structured_response --> __end__;", + "1100": "graph TD;\n\t__start__ --> agent;\n\tagent --> post_model_hook;\n\tpost_model_hook --> generate_structured_response;\n\tgenerate_structured_response --> __end__;", + "1101": "graph TD;\n\t__start__ --> agent;\n\tagent --> post_model_hook;\n\tpost_model_hook -.-> agent;\n\tpost_model_hook -.-> generate_structured_response;\n\tpost_model_hook -.-> tools;\n\ttools --> agent;\n\tgenerate_structured_response --> __end__;", + "1110": "graph TD;\n\t__start__ --> pre_model_hook;\n\tagent --> post_model_hook;\n\tpost_model_hook --> generate_structured_response;\n\tpre_model_hook --> agent;\n\tgenerate_structured_response --> __end__;", + "1111": "graph TD;\n\t__start__ --> pre_model_hook;\n\tagent --> post_model_hook;\n\tpost_model_hook -.-> generate_structured_response;\n\tpost_model_hook -.-> pre_model_hook;\n\tpost_model_hook -.-> tools;\n\tpre_model_hook --> agent;\n\ttools --> pre_model_hook;\n\tgenerate_structured_response --> __end__;" +} + \ No newline at end of file diff --git a/docs/docs/stylesheets/agent_graph_widget.css b/docs/docs/stylesheets/agent_graph_widget.css new file mode 100644 index 000000000..6db767498 --- /dev/null +++ b/docs/docs/stylesheets/agent_graph_widget.css @@ -0,0 +1,57 @@ +.agent-layout { + display: flex; + flex-wrap: nowrap; + gap: 1rem; + align-items: flex-start; + margin-top: 1rem; +} + +.agent-layout h3 { + margin: 0; +} + +.agent-graph-features { + display: flex; + flex-direction: column; + gap: 0.5rem; + padding: 1rem; + max-width: 300px; + flex-shrink: 0; + + border: 1px solid var(--md-default-fg-color--lightest); + border-radius: 0.5rem; + background-color: var(--md-default-bg-color); +} + +.agent-graph-features label { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 0.9rem; + color: var(--md-typeset-color); + cursor: pointer; +} + +.agent-graph-features input[type="checkbox"] { + accent-color: var(--md-accent-fg-color); + transform: scale(1.2); +} + +.agent-graph-container { + flex: 1 1 50%; + max-width: 70%; + padding: 1rem; + + overflow: auto; + height: auto; + box-sizing: border-box; + + border: 1px solid var(--md-default-fg-color--lightest); + border-radius: 0.5rem; + background-color: var(--md-default-bg-color); +} + +.agent-graph-container img { + display: block; + margin: 0 auto; +} \ No newline at end of file diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 25200a3f6..6c2e03f0d 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -416,3 +416,5 @@ extra_css: - stylesheets/version_admonitions.css - stylesheets/logos.css - stylesheets/sticky_navigation.css + - stylesheets/agent_graph_widget.css + diff --git a/docs/uv.lock b/docs/uv.lock index 3bdc91742..abecc5c5c 100644 --- a/docs/uv.lock +++ b/docs/uv.lock @@ -2917,11 +2917,12 @@ dev = [ { name = "pytest-mock" }, { name = "pytest-watcher" }, { name = "ruff" }, + { name = "syrupy" }, ] [[package]] name = "langgraph-sdk" -version = "0.1.69" +version = "0.1.70" source = { editable = "../libs/sdk-py" } dependencies = [ { name = "httpx" },