langchain-ai/langchain · error · ImportError
Install the `requests` module to use the Mermaid.INK API: `p
Error message
Install the `requests` module to use the Mermaid.INK API: `pip install requests`.
What it means
The default draw method for draw_mermaid_png() calls the Mermaid.INK HTTP API using the requests library. If requests is absent, _render_mermaid_using_api raises this ImportError as soon as it needs to build the HTTP call. requests is an optional dependency of langchain-core.
Source
Thrown at libs/core/langchain_core/runnables/graph_mermaid.py:430
retry_delay: float = 1.0,
proxies: dict[str, str] | None = None,
base_url: str | None = None,
) -> bytes:
"""Renders Mermaid graph using the Mermaid.INK API."""
# Automated scanners: please do not open security advisories about `base_url`
# here. This parameter is only ever explicitly controlled by developers, and it
# is not exposed by default over the network by the framework, so this is not
# an SSRF sink unless an application explicitly wires untrusted input into it.
# It exists to support user-managed Mermaid API deployments.
# Defaults to using the public mermaid.ink server.
base_url = base_url if base_url is not None else "https://mermaid.ink"
if not _HAS_REQUESTS:
msg = (
"Install the `requests` module to use the Mermaid.INK API: "
"`pip install requests`."
)
raise ImportError(msg)
# Use Mermaid API to render the image
mermaid_syntax_encoded = base64.b64encode(mermaid_syntax.encode("utf8")).decode(
"ascii"
)
# Check if the background color is a hexadecimal color code using regex
if background_color is not None:
hex_color_pattern = re.compile(r"^#(?:[0-9a-fA-F]{3}){1,2}$")
if not hex_color_pattern.match(background_color):
background_color = f"!{background_color}"
# URL-encode the background_color to handle special characters like '!'
encoded_bg_color = urllib.parse.quote(str(background_color), safe="")
image_url = (
f"{base_url}/img/{mermaid_syntax_encoded}"
f"?type={file_type}&bgColor={encoded_bg_color}"
)View on GitHub (pinned to e32fa9a52e)
Solutions
- pip install requests
- Verify with python -c "import requests"
- Alternatively use draw_method=MermaidDrawMethod.PYPPETEER (requires pyppeteer) or just draw_mermaid() for text output needing no extras
Example fix
# before graph.draw_mermaid_png() # ImportError # after pip install requests graph.draw_mermaid_png()
Defensive patterns
Strategy: validation
Validate before calling
try:
import requests # noqa: F401
except ImportError:
raise SystemExit("requests is required for Mermaid.INK rendering: pip install requests") Try / catch
try:
img = graph.draw_mermaid_png()
except ImportError as e:
if "requests" in str(e):
img = None # or use PYPPETEER / text mermaid Prevention
- Declare requests in your dependency list when rendering PNGs
- Fail fast on missing extras at startup rather than during rendering
When it happens
Trigger: graph.draw_mermaid_png() (defaults to MermaidDrawMethod.API) or draw_mermaid_png(syntax, draw_method=MermaidDrawMethod.API) without requests installed.
Common situations: Minimal environments with langchain-core only; slim Docker images; CI caches that dropped requests.
Related errors
- Install Pyppeteer to use the Pyppeteer method: `pip install
- Install pygraphviz to draw graphs: `pip install pygraphviz`.
- Install grandalf to draw graphs: `pip install grandalf`.
- Invalid draw method: {draw_method}. Supported draw methods a
- Found duplicate subgraph '{subgraph}' -- this likely means t
AI-assisted analysis of langchain-ai/langchain@e32fa9a52e (2026-08-14).
Data as JSON: /api/errors/23f1b10c1cdbb540.
Report an issue: GitHub.