Home / Function/ _render_mermaid_using_pyppeteer() — langchain Function Reference

_render_mermaid_using_pyppeteer() — langchain Function Reference

Architecture documentation for the _render_mermaid_using_pyppeteer() function in graph_mermaid.py from the langchain codebase.

Entity Profile

Dependency Diagram

graph TD
  bf3680e2_9ce5_0796_dd67_2a37f682c93b["_render_mermaid_using_pyppeteer()"]
  c545ef44_a033_15ff_e016_18af37277247["graph_mermaid.py"]
  bf3680e2_9ce5_0796_dd67_2a37f682c93b -->|defined in| c545ef44_a033_15ff_e016_18af37277247
  affcc91c_bcd9_50c2_5762_c17c81886c6a["draw_mermaid_png()"]
  affcc91c_bcd9_50c2_5762_c17c81886c6a -->|calls| bf3680e2_9ce5_0796_dd67_2a37f682c93b
  style bf3680e2_9ce5_0796_dd67_2a37f682c93b fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

libs/core/langchain_core/runnables/graph_mermaid.py lines 334–402

async def _render_mermaid_using_pyppeteer(
    mermaid_syntax: str,
    output_file_path: str | None = None,
    background_color: str | None = "white",
    padding: int = 10,
    device_scale_factor: int = 3,
) -> bytes:
    """Renders Mermaid graph using Pyppeteer."""
    if not _HAS_PYPPETEER:
        msg = "Install Pyppeteer to use the Pyppeteer method: `pip install pyppeteer`."
        raise ImportError(msg)

    browser = await launch()
    page = await browser.newPage()

    # Setup Mermaid JS
    await page.goto("about:blank")
    await page.addScriptTag(
        {"url": "https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"}
    )
    await page.evaluate(
        """() => {
                mermaid.initialize({startOnLoad:true});
            }"""
    )

    # Render SVG
    svg_code = await page.evaluate(
        """(mermaidGraph) => {
                return mermaid.mermaidAPI.render('mermaid', mermaidGraph);
            }""",
        mermaid_syntax,
    )

    # Set the page background to white
    await page.evaluate(
        """(svg, background_color) => {
            document.body.innerHTML = svg;
            document.body.style.background = background_color;
        }""",
        svg_code["svg"],
        background_color,
    )

    # Take a screenshot
    dimensions = await page.evaluate(
        """() => {
            const svgElement = document.querySelector('svg');
            const rect = svgElement.getBoundingClientRect();
            return { width: rect.width, height: rect.height };
        }"""
    )
    await page.setViewport(
        {
            "width": int(dimensions["width"] + padding),
            "height": int(dimensions["height"] + padding),
            "deviceScaleFactor": device_scale_factor,
        }
    )

    img_bytes = cast("bytes", await page.screenshot({"fullPage": False}))
    await browser.close()

    if output_file_path is not None:
        await asyncio.get_event_loop().run_in_executor(
            None, Path(output_file_path).write_bytes, img_bytes
        )

    return img_bytes

Domain

Subdomains

Called By

Frequently Asked Questions

What does _render_mermaid_using_pyppeteer() do?
_render_mermaid_using_pyppeteer() is a function in the langchain codebase, defined in libs/core/langchain_core/runnables/graph_mermaid.py.
Where is _render_mermaid_using_pyppeteer() defined?
_render_mermaid_using_pyppeteer() is defined in libs/core/langchain_core/runnables/graph_mermaid.py at line 334.
What calls _render_mermaid_using_pyppeteer()?
_render_mermaid_using_pyppeteer() is called by 1 function(s): draw_mermaid_png.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free